module MnoeCli::Commands::GenerateVersionLog

Generate a changelog of different components for an enterprise project TODO:

Constants

GEMFILE_LOCK

Constants

NO_TOKEN_PROVIDED
YARN_LOCK
YARN_PKGS

Public Class Methods

compare(repo, old, new) click to toggle source
# File lib/mnoe_cli/commands/generate_version_log.rb, line 97
def self.compare(repo, old, new)
  log = Octokit.compare(repo, old, new)

  log.commits.each do |c|
    msg = c.commit.message
    next unless msg =~ /Merge pull request/
    puts "* #{msg.lines.last}"
  end
end
configure() click to toggle source

Configure Octokit and the faraday middleware

# File lib/mnoe_cli/commands/generate_version_log.rb, line 74
def self.configure
  # Github Authentication Token
  Octokit.configure do |client|
    client.access_token = ENV.fetch('CHANGELOG_GITHUB_TOKEN', nil)
    say(NO_TOKEN_PROVIDED) unless client.access_token
  end

  # Add some cache
  middleware_opts = {
    serializer: Marshal,
    store: ActiveSupport::Cache::FileStore.new("/tmp/mno-changelog-http-cache"),
    logger: Logger.new("/tmp/mno-changelog-logger.log"),
    shared_cache: false
  }

  Octokit.middleware = Faraday::RackBuilder.new do |builder|
    builder.use Faraday::HttpCache, middleware_opts
    builder.use Octokit::Response::RaiseError
    builder.adapter Faraday.default_adapter
    # builder.response :logger
  end
end
diff_gem(log, gem) click to toggle source
# File lib/mnoe_cli/commands/generate_version_log.rb, line 123
def self.diff_gem(log, gem)
  pattern = %r{
    remote:\s+https://github.com/maestrano/mno-enterprise(?:.git)?\s+
    -\s+revision:\s+(\S*)\s+
    \+\s+revision:\s+(\S*)
  }x

  puts "\n# mno-enterprise"

  if log =~ pattern
    old_version = Regexp.last_match(1)[0..8]
    new_version = Regexp.last_match(2)[0..8]
    puts "https://github.com/maestrano/mno-enterprise/compare/#{old_version}...#{new_version}"
    compare('maestrano/mno-enterprise', old_version, new_version)
  else
    puts "No changes"
  end
end
diff_yarn_package(log, package) click to toggle source

Return compare URL for the given package

# File lib/mnoe_cli/commands/generate_version_log.rb, line 108
def self.diff_yarn_package(log, package)
  pattern = %r{\s*resolved "git\+https://git@github.com/maestrano/#{package}.git#(\S*)"}

  puts "\n# #{package}:"
  if log =~ %r{-#{pattern}}
    old_version = Regexp.last_match(1)[0..8]
    log =~ %r{\+#{pattern}}
    new_version = Regexp.last_match(1)[0..8]
    puts  "https://github.com/maestrano/#{package}/compare/#{old_version}...#{new_version}"
    compare("maestrano/#{package}", old_version, new_version)
  else
    puts "No change"
  end
end
run(args, opts) click to toggle source
# File lib/mnoe_cli/commands/generate_version_log.rb, line 44
def self.run(args, opts)
  self.configure

  @current = opts.current
  @next = opts.next

  workdir = Dir.getwd
  project = File.basename(workdir)
  current_branch = %x(git rev-parse --abbrev-ref HEAD).chomp!

  # say "Generating change for '#{project}##{current_branch}'"
  say "Generating change for #{project} #{@current} -> #{@next}"

  say "https://github.com/maestrano/#{project}/compare/#{@current}...#{@next}"
  begin
    self.compare("maestrano/#{project}", @current.gsub(%r{(origin|upstream)/}, ''), @next.gsub(%r{(origin|upstream)/}, ''))
  rescue
    say "Cannot find branches"
  end

  log = %x(git diff #{@current}...#{@next} -- #{YARN_LOCK})
  YARN_PKGS.each do |pkg|
    self.diff_yarn_package(log, pkg)
  end

  log = %x(git diff #{@current}...#{@next} -- #{GEMFILE_LOCK})
  self.diff_gem(log, 'mno-enteprise')
end