class Relsr::ReleaseManager

Public Class Methods

new(repo_name:, label:, extra_branches: [], dry_run: false) click to toggle source
# File lib/relsr/release_manager.rb, line 7
def initialize(repo_name:, label:, extra_branches: [], dry_run: false)
  @repo_name = repo_name
  @label = label
  @release_branch_name = Time.now.strftime('release/%Y%m%d-%H%M%S')
  @dry_run = dry_run
  @extra_branches = extra_branches
  Octokit.auto_paginate = true
end

Public Instance Methods

create_pull_request() click to toggle source
# File lib/relsr/release_manager.rb, line 21
def create_pull_request
  print_and_flush "Creating Pull Request..."
  unless @dry_run
    client.create_pull_request(
      @repo_name,
      'master',
      @release_branch_name,
      @release_branch_name,
      pr_body
    )
  end
  puts 'done'.green
end
create_release_branch() click to toggle source
# File lib/relsr/release_manager.rb, line 16
def create_release_branch
  initialize_release_branch
  merge_work_branches
end

Private Instance Methods

branch_names() click to toggle source
# File lib/relsr/release_manager.rb, line 68
def branch_names
  @branch_names ||= client.branches(@repo_name).collect { |b| b.name }
end
branches_to_merge() click to toggle source
# File lib/relsr/release_manager.rb, line 72
def branches_to_merge
  branches_to_merge = []

  issues.each do |issue|
    branch_names.each do |branch|
      if branch.include? "##{issue.number}"
        branches_to_merge << branch
      end
    end
  end
  branches_to_merge + @extra_branches
end
client() click to toggle source
# File lib/relsr/release_manager.rb, line 60
def client
  @client ||= Octokit::Client.new(netrc: true)
end
initialize_release_branch() click to toggle source
# File lib/relsr/release_manager.rb, line 37
def initialize_release_branch
  print_and_flush "Creating release branch '#{@release_branch_name}' on '#{@repo_name}'..."  
  unless @dry_run
    client.create_ref(@repo_name, "heads/#{@release_branch_name}", master.object.sha)
  end
  puts 'done'.green
end
issues() click to toggle source
# File lib/relsr/release_manager.rb, line 89
def issues
  @issues ||= client.list_issues(@repo_name, labels: @label)
end
master() click to toggle source
# File lib/relsr/release_manager.rb, line 85
def master
  @master ||= client.refs(@repo_name, 'heads/master')
end
merge_work_branches() click to toggle source
# File lib/relsr/release_manager.rb, line 45
def merge_work_branches
  branches_to_merge.each do |work_branch|
    print_and_flush "Merging '#{work_branch}' into release..."
    unless @dry_run
      client.merge(
        @repo_name, 
        @release_branch_name, 
        work_branch, 
        commit_message: "Merging #{work_branch} into release"
      )
    end
    puts 'done'.green
  end
end
pr_body() click to toggle source
# File lib/relsr/release_manager.rb, line 93
def pr_body
  messages = issues.collect do |issue|
    "Connects ##{issue.number} - #{issue.title}"
  end 
  messages += @extra_branches.collect do |branch|
    "Merging in additional branch '#{branch}'"
  end

  messages.join("\n")
end
print_and_flush(msg) click to toggle source
repo() click to toggle source
# File lib/relsr/release_manager.rb, line 64
def repo
  @repo ||= client.repo(@repo_name)
end