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