class GemReleaseHelper::Tasks::Generator::Changelog

Constants

DEFAULT_CHANGELOG_TEMPLATE

Public Instance Methods

bump_version() click to toggle source
# File lib/gem_release_helper/tasks/generator/changelog.rb, line 37
def bump_version
  logger.info "Bump version from '#{current_version}' to '#{next_version}'"
  case where_written_version
  when :gemspec
    write_new_version_to_gemspec
  when :version_file
    write_new_version_to_version_file
  end
end
changelog() click to toggle source
# File lib/gem_release_helper/tasks/generator/changelog.rb, line 30
def changelog
  content = new_changelog
  File.open(changelog_path, "w") do |f|
    f.write content
  end
end
install_tasks() click to toggle source
# File lib/gem_release_helper/tasks/generator/changelog.rb, line 12
def install_tasks
  namespace :generate do
    desc "Generate chengelog then bump version"
    task :prepare_release => [:changelog, :bump_version]

    desc "Generate CHANGELOG.md from previous release"
    task :changelog do
      changelog
    end

    desc "Bump version. UP=major to do major version up, UP=minor, UP=patch(default) so on."
    task :bump_version do
      bump_version
      update_gemfile_lock
    end
  end
end

Private Instance Methods

changelog_path() click to toggle source
# File lib/gem_release_helper/tasks/generator/changelog.rb, line 170
def changelog_path
  root_dir.join("CHANGELOG.md")
end
changes() click to toggle source
# File lib/gem_release_helper/tasks/generator/changelog.rb, line 150
def changes
  pull_request_numbers.map do |number|
    payload = pull_request_info(number)
    "* [] #{payload["title"]} [##{number}](https://github.com/#{github_name}/pull/#{number})"
  end
end
current_version() click to toggle source
# File lib/gem_release_helper/tasks/generator/changelog.rb, line 83
def current_version
  return ENV["CURRENT_VER"] if ENV["CURRENT_VER"]
  ver = gemspec_path.read[/spec\.version += *"([0-9]+\.[0-9]+\.[0-9]+)"/, 1] ||
    begin
      # from rake
      # https://github.com/ruby/rake/blob/1b27eb2f8234190bba0e973194d38bcf09443ec0/lib/rake/file_utils.rb
      ruby = File.join(
        RbConfig::CONFIG['bindir'],
        RbConfig::CONFIG['ruby_install_name'] + RbConfig::CONFIG['EXEEXT']
      ).sub(/.*\s.*/m, '"\&"')
      script = %Q!print eval(File.read('#{gemspec_path}')).version.to_s!
      o, _, _ = Open3.capture3(ruby, "-e", script)
      o.strip
    end
  Gem::Version.new(ver)
end
github_name() click to toggle source
# File lib/gem_release_helper/tasks/generator/changelog.rb, line 123
def github_name
  options[:github_name]
end
github_oauth_token() click to toggle source
# File lib/gem_release_helper/tasks/generator/changelog.rb, line 182
def github_oauth_token
  ENV["GITHUB_OAUTH_TOKEN"]
end
github_personal_token() click to toggle source
# File lib/gem_release_helper/tasks/generator/changelog.rb, line 178
def github_personal_token
  ENV["GITHUB_TOKEN"] || `git config github.token`.strip
end
github_user_name() click to toggle source
# File lib/gem_release_helper/tasks/generator/changelog.rb, line 174
def github_user_name
  ENV["GITHUB_USER_NAME"] || `git config github.user`.strip
end
new_changelog() click to toggle source
# File lib/gem_release_helper/tasks/generator/changelog.rb, line 157
        def new_changelog
          <<-HEADER
## #{next_version} - #{Time.now.strftime("%Y-%m-%d")}
#{changes.join("\n")}

#{changelog_path.read.chomp}
          HEADER
        end
next_version() click to toggle source
# File lib/gem_release_helper/tasks/generator/changelog.rb, line 100
def next_version
  return ENV["NEXT_VER"] if ENV["NEXT_VER"]
  major, minor, patch = current_version.segments
  ver = case version_target
  when "patch"
    [major, minor, patch + 1].join(".")
  when "minor"
    [major, minor + 1, 0].join(".")
  when "major"
    [major + 1, 0, 0].join(".")
  end

  Gem::Version.new(ver)
end
pull_request_info(number) click to toggle source
# File lib/gem_release_helper/tasks/generator/changelog.rb, line 134
def pull_request_info(number)
  header =
    if github_oauth_token
      {
        "Authentication" => "token #{ENV["GITHUB_OAUTH_TOKEN"]}"
      }
    else
      {
        http_basic_authentication: [github_user_name, github_personal_token]
      }
    end

  body = open("https://api.github.com/repos/#{github_name}/issues/#{number}", header).read
  JSON.parse(body)
end
pull_request_numbers() click to toggle source
# File lib/gem_release_helper/tasks/generator/changelog.rb, line 127
def pull_request_numbers
  sync_git_repo
  `git log v#{current_version}..origin/master --oneline`.scan(/#[0-9]+/).map do |num_with_hash|
    num_with_hash[/[0-9]+/]
  end
end
required_options() click to toggle source
# File lib/gem_release_helper/tasks/generator/changelog.rb, line 79
def required_options
  %w(github_name)
end
sync_git_repo() click to toggle source
# File lib/gem_release_helper/tasks/generator/changelog.rb, line 166
def sync_git_repo
  system('git fetch --all')
end
update_gemfile_lock() click to toggle source
# File lib/gem_release_helper/tasks/generator/changelog.rb, line 119
def update_gemfile_lock
  system("bundle install")
end
version_files() click to toggle source
# File lib/gem_release_helper/tasks/generator/changelog.rb, line 75
def version_files
  Dir["#{gemspec_path.dirname}/**/version**"]
end
version_target() click to toggle source
# File lib/gem_release_helper/tasks/generator/changelog.rb, line 115
def version_target
  ENV["UP"] || options[:version_target] || "patch"
end
where_written_version() click to toggle source
# File lib/gem_release_helper/tasks/generator/changelog.rb, line 63
def where_written_version
  if gemspec_path.read.include?(current_version.to_s)
    :gemspec
  else
    version_file = version_files.first
    if version_file && File.read(version_file).include?(current_version.to_s)
      return :version_file
    end
    raise "Couldn't find where is version written"
  end
end
write_new_version_to_gemspec() click to toggle source
# File lib/gem_release_helper/tasks/generator/changelog.rb, line 49
def write_new_version_to_gemspec
  old_content = gemspec_path.read
  new_content = old_content.gsub(/(spec\.version += *)".*?"/, %Q!\\1"#{next_version}"!)
  File.open(gemspec_path, "w") do |f|
    f.write new_content
  end
end
write_new_version_to_version_file() click to toggle source
# File lib/gem_release_helper/tasks/generator/changelog.rb, line 57
def write_new_version_to_version_file
  version_file = version_files.first
  new_content = File.read(version_file).gsub(current_version.to_s, next_version.to_s)
  File.open(version_file, "w") {|f| f.write new_content }
end