class GitlabAwesomeRelease::CLI

Constants

DEFAULT_MERGE_REQUEST_COMMIT_FORMAT
DEFAULT_VERSION_FORMAT
GITLAB_API_DESCRIPTION
GITLAB_API_PRIVATE_TOKEN_DESCRIPTION
GITLAB_API_PROJECT_NAME
GITLAB_ENV_FILES
LOG_LEVEL_DESCRIPTION

Public Instance Methods

create_latest_note() click to toggle source
# File lib/gitlab_awesome_release/cli.rb, line 56
def create_latest_note
  Dotenv.load(*GITLAB_ENV_FILES)

  project = create_project

  tag_names = project.release_tag_names

  changelog =
    if tag_names.count >= 2
      project.generate_change_log(tag_names[-2], tag_names[-1])
    elsif tag_names.count == 1
      project.generate_change_log(tag_names[0], tag_names[0])
    end

  write_changelog(changelog) if changelog
  @logger.info "finish!"
end
create_note() click to toggle source
# File lib/gitlab_awesome_release/cli.rb, line 33
def create_note
  Dotenv.load(*GITLAB_ENV_FILES)

  project = create_project

  tag_names = project.release_tag_names
  oldest_tag = option_or_env(:from_tag) || tag_names.first
  newest_tag = option_or_env(:to_tag)   || tag_names.last

  changelog = project.generate_change_log(oldest_tag, newest_tag)

  write_changelog(changelog)
  @logger.info "finish!"
end
marking() click to toggle source
# File lib/gitlab_awesome_release/cli.rb, line 82
def marking
  Dotenv.load(*GITLAB_ENV_FILES)

  from_tag  = option_or_env!(:from_tag)
  to_tag    = option_or_env!(:to_tag)
  label     = option_or_env(:label) || to_tag

  project = create_project

  project.merge_request_iids_between(from_tag, to_tag).each do |iid|
    mr = project.merge_request(iid)
    project.add_merge_request_label(mr, label) if mr
  end
  @logger.info "finish!"
end
version() click to toggle source
# File lib/gitlab_awesome_release/cli.rb, line 19
def version
  puts GitlabAwesomeRelease::VERSION
end

Private Instance Methods

create_project() click to toggle source
# File lib/gitlab_awesome_release/cli.rb, line 116
def create_project
  gitlab_api_endpoint         = option_or_env!(:gitlab_api_endpoint)
  gitlab_api_private_token    = option_or_env!(:gitlab_api_private_token)
  gitlab_project_name         = option_or_env!(:gitlab_project_name)
  allow_tag_format            = option_or_env(:allow_tag_format, DEFAULT_VERSION_FORMAT)
  merge_request_commit_format = option_or_env(:merge_request_commit_format, DEFAULT_MERGE_REQUEST_COMMIT_FORMAT)

  @logger = Logger.new(STDOUT)
  @logger.level = logger_level(option_or_env(:log_level))
  @logger.formatter = proc {|severity, datetime, _progname, message|
    "[#{datetime}] #{severity} #{message}\n"
  }

  Gitlab::Request.logger = @logger
  GitlabAwesomeRelease::Project.new(
    api_endpoint:     gitlab_api_endpoint,
    private_token:    gitlab_api_private_token,
    project_name:     gitlab_project_name,
    allow_tag_format: /#{allow_tag_format}/,
    merge_request_commit_format: /#{merge_request_commit_format}/m,
    logger:           @logger,
  )
end
logger_level(log_level) click to toggle source
# File lib/gitlab_awesome_release/cli.rb, line 152
def logger_level(log_level)
  case log_level.to_sym
  when :debug
    Logger::DEBUG
  when :error
    Logger::ERROR
  when :fatal
    Logger::FATAL
  when :info
    Logger::INFO
  when :unknown
    Logger::UNKNOWN
  when :warn
    Logger::WARN
  else
    raise "Unknown log_level: #{log_level}"
  end
end
option_or_env(name, default = nil) click to toggle source
# File lib/gitlab_awesome_release/cli.rb, line 100
def option_or_env(name, default = nil)
  upper_name = name.to_s.upcase
  return options[name] if options[name] && !options[name].to_s.empty?
  return ENV[upper_name] if ENV[upper_name] && !ENV[upper_name].empty?

  default
end
option_or_env!(name) click to toggle source
# File lib/gitlab_awesome_release/cli.rb, line 108
def option_or_env!(name)
  value = option_or_env(name)
  return value if value

  puts "--#{name.to_s.tr("_", "-")} or #{name.to_s.upcase} is either required!"
  exit!
end
write_changelog(changelog) click to toggle source
# File lib/gitlab_awesome_release/cli.rb, line 140
def write_changelog(changelog)
  filename = option_or_env(:filename)
  if filename
    File.open(filename, "wb") do |f|
      f.write(changelog)
    end
    @logger.info "Write to #{filename}"
  else
    puts changelog
  end
end