class GitlabMrRelease::CLI

Constants

DEFAULT_TITLE_TEMPLATE
GITLAB_ENV_FILES

Public Class Methods

source_root() click to toggle source
# File lib/gitlab_mr_release/cli.rb, line 13
def self.source_root
  "#{__dir__}/../templates"
end

Public Instance Methods

create() click to toggle source
# File lib/gitlab_mr_release/cli.rb, line 33
    def create
      Dotenv.load(*GITLAB_ENV_FILES)

      assert_env("GITLAB_API_ENDPOINT")
      assert_env("GITLAB_API_PRIVATE_TOKEN")
      assert_env("GITLAB_PROJECT_NAME")

      assert_option_or_env(:source, "DEFAULT_SOURCE_BRANCH")
      assert_option_or_env(:target, "DEFAULT_TARGET_BRANCH")

      template = File.read(template_file)

      project = GitlabMrRelease::Project.new(
        api_endpoint:  ENV["GITLAB_API_ENDPOINT"],
        private_token: ENV["GITLAB_API_PRIVATE_TOKEN"],
        project_name:  ENV["GITLAB_PROJECT_NAME"],
      )

      unless project.api_version >= 4
        raise InvalidApiVersionError, "'#{ENV["GITLAB_API_ENDPOINT"]}' seems not to be GitLab API v4+. gitlab_mr_release requires GitLab API v4+"
      end

      mr = project.create_merge_request(
        source_branch: source_branch,
        target_branch: target_branch,
        labels:        labels,
        title:         generate_title,
        template:      template,
      )

      mr_url = "#{project.web_url}/merge_requests/#{mr.iid}"

      message = <<-EOS
MergeRequest is created

[Title] #{mr.title}

[Description]
#{mr.description}

[Url] #{mr_url}
      EOS

      puts message
    end
init() click to toggle source
# File lib/gitlab_mr_release/cli.rb, line 23
def init
  copy_file ".env.gitlab", ".env.gitlab"
  copy_file "gitlab_mr_release.md.erb", "gitlab_mr_release.md.erb"
end
version() click to toggle source
# File lib/gitlab_mr_release/cli.rb, line 18
def version
  puts GitlabMrRelease::VERSION
end

Private Instance Methods

assert_env(name) click to toggle source
# File lib/gitlab_mr_release/cli.rb, line 82
def assert_env(name)
  if !ENV[name] || ENV[name].empty?
    puts "Error: Environment variable #{name} is required"
    exit!
  end
end
assert_option_or_env(option_name, env_name) click to toggle source
# File lib/gitlab_mr_release/cli.rb, line 89
def assert_option_or_env(option_name, env_name)
  option_or_env!(option_name, env_name)
end
generate_default_title(title_template:, source_branch:, target_branch:) click to toggle source
# File lib/gitlab_mr_release/cli.rb, line 103
def generate_default_title(title_template:, source_branch:, target_branch:)
  title_template ||= DEFAULT_TITLE_TEMPLATE
  ERB.new(title_template).result(binding).strip
end
generate_title() click to toggle source
# File lib/gitlab_mr_release/cli.rb, line 93
def generate_title
  return options[:title] if options[:title]

  generate_default_title(
    title_template: ENV["DEFAULT_TITLE"],
    source_branch:  source_branch,
    target_branch:  target_branch,
    )
end
labels() click to toggle source
# File lib/gitlab_mr_release/cli.rb, line 120
def labels
  option_or_env(:labels, "DEFAULT_LABELS")
end
option_or_env(option_name, env_name, default = nil) click to toggle source
# File lib/gitlab_mr_release/cli.rb, line 124
def option_or_env(option_name, env_name, default = nil)
  return options[option_name] if options[option_name] && !options[option_name].empty?
  return ENV[env_name] if ENV[env_name] && !ENV[env_name].empty?
  default
end
option_or_env!(option_name, env_name) click to toggle source
# File lib/gitlab_mr_release/cli.rb, line 130
def option_or_env!(option_name, env_name)
  value = option_or_env(option_name, env_name)
  return value if value

  puts "Error: --#{option_name} or #{env_name} is either required!"
  exit!
end
source_branch() click to toggle source
# File lib/gitlab_mr_release/cli.rb, line 112
def source_branch
  option_or_env(:source, "DEFAULT_SOURCE_BRANCH")
end
target_branch() click to toggle source
# File lib/gitlab_mr_release/cli.rb, line 116
def target_branch
  option_or_env(:target, "DEFAULT_TARGET_BRANCH")
end
template_file() click to toggle source
# File lib/gitlab_mr_release/cli.rb, line 108
def template_file
  ENV["TEMPLATE_FILE"] || "#{__dir__}/../templates/gitlab_mr_release.md.erb"
end