Class: Jenkins

Inherits:
Object
  • Object
show all
Defined in:
lib/tutter/action/jenkins.rb

Instance Method Summary collapse

Constructor Details

#initialize(settings, client, project, data) ⇒ Jenkins

Returns a new instance of Jenkins.



2
3
4
5
6
7
8
9
# File 'lib/tutter/action/jenkins.rb', line 2

def initialize(settings, client, project, data)
  @settings = settings || {}
  @client = client
  @project = project
  @data = data
  @merge_request_comment = @settings['merge_request_comment']
  @merge_request_comment ||= 'merge, my change is covered by tests'
end

Instance Method Details

#runObject



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/tutter/action/jenkins.rb', line 11

def run
  pull_request_id = @data['issue']['number']
  puts "pull request id: #{pull_request_id}"

  if @data['issue']['state'] != 'open'
    puts "The issue state is #{@data['issue']['state']}"
    return false
  end

  comments = @client.issue_comments(@project, pull_request_id)
  last_comment = comments.last

  asked_to_merge = last_comment && last_comment.body.strip.downcase == @merge_request_comment.strip.downcase
  unless asked_to_merge
    puts "not asked to merge"
    return false
  end

  pr = @client.pull_request @project, pull_request_id

  unless pr.mergeable
    @client.add_comment(@project, pull_request_id, "Please rebase your change, pull request is not mergeable")
    return false
  end

  last_commit = @client.pull_request_commits(@project, pull_request_id).last
  last_commit_date = last_commit.commit.committer.date

  if last_comment.created_at < last_commit_date
    @client.add_comment(@project, pull_request_id, "Please reopen pull request, found a new commit")
    return false
  end

  jenkins_last_comment = @client.issue_comments(@project, pull_request_id).select{|c| c.attrs[:user].attrs[:login] == 'jenkins'}.last
  jenkins_allows_merge = jenkins_last_comment && jenkins_last_comment.body =~ /PASS/

  if jenkins_allows_merge
    puts "merging #{pull_request_id} #{@project}"
    @client.merge_pull_request(@project, pull_request_id, 'ok, shipping!')
  else
    @client.add_comment(@project, pull_request_id, "Please make sure tests pass")
  end
end