Class: ReleaseRobot::Main

Inherits:
Object
  • Object
show all
Defined in:
lib/release_robot/main.rb

Constant Summary collapse

RELEASE_BASE_BRANCH =
'weekly-release'.freeze
THURSDAY_LABEL =
'Ready for Thursday Release'.freeze
IMMEDIATE_LABEL =
'Ready for Immediate Release'.freeze

Instance Method Summary collapse

Instance Method Details

#change_base(repo_name, pull_request) ⇒ Object



65
66
67
68
69
70
71
72
73
74
75
76
# File 'lib/release_robot/main.rb', line 65

def change_base(repo_name, pull_request)
  client.update_pull_request(
    repo_name,
    pull_request.number,
    nil,
    nil,
    base: RELEASE_BASE_BRANCH
  )
rescue Octokit::UnprocessableEntity => ex
  puts "Error occurred when attempting to change base branch to #{RELEASE_BASE_BRANCH}:"
  puts ex.message
end

#clientObject



30
31
32
33
34
35
36
37
38
39
# File 'lib/release_robot/main.rb', line 30

def client
  @client ||= Octokit::Client.new(
    login: ENV['GITHUB_USERNAME'],
    password: ENV['GITHUB_PASSWORD']
  )
rescue => ex
  puts "Failed: #{ex}"
  puts '(Do you have the right Github username and password stored in'
  puts 'GITHUB_USERNAME and GITHUB_PASSWORD?)'
end

#collect_pull_requests(repo_name, issue) ⇒ Object



53
54
55
56
57
58
59
60
61
62
63
# File 'lib/release_robot/main.rb', line 53

def collect_pull_requests(repo_name, issue)
  print "- Determining build status for #{issue.number}"
  pull_request = client.pull_request(repo_name, issue.number)

  # Build status
  status = client.combined_status(repo_name, pull_request.head.sha)

  change_base(repo_name, pull_request)

  sort_issue_by_status(issue, status.state, repo_name)
end

#labelsObject



26
27
28
# File 'lib/release_robot/main.rb', line 26

def labels
  [THURSDAY_LABEL, IMMEDIATE_LABEL]
end

#pull_requestsObject



45
46
47
48
49
50
51
# File 'lib/release_robot/main.rb', line 45

def pull_requests
  @pull_requests ||= {
    'success' => [],
    'pending' => [],
    'failure' => []
  }
end

#reposObject



41
42
43
# File 'lib/release_robot/main.rb', line 41

def repos
  @repos ||= client.repos(owner: 'MammothHR')
end

#sort_issue_by_status(issue, status, repo_name) ⇒ Object



78
79
80
81
82
83
84
85
86
# File 'lib/release_robot/main.rb', line 78

def sort_issue_by_status(issue, status, repo_name)
  case status
  when 'success' then pull_requests['success'] << [repo_name, issue]
  when 'pending' then pull_requests['pending'] << [repo_name, issue]
  when 'failure' then pull_requests['failure'] << [repo_name, issue]
  end

  print " -- #{status}\n"
end

#startObject



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# File 'lib/release_robot/main.rb', line 7

def start
  repos.each do |repo|
    next unless repo.owner. == 'MammothHR'

    repo_name = repo.full_name
    puts "Fetching issues for #{repo_name}"

    all_issues = labels.map do |label|
      client.list_issues(repo_name, labels: label)
    end.flatten

    all_issues.each do |issue|
      collect_pull_requests(repo_name, issue)
    end
  end

  return pull_requests
end