Class: TerraspaceCiGitlab::Pr

Inherits:
Object
  • Object
show all
Extended by:
Memoist
Defined in:
lib/terraspace_ci_gitlab/pr.rb

Instance Method Summary collapse

Instance Method Details

#clientObject



44
45
46
47
48
49
50
# File 'lib/terraspace_ci_gitlab/pr.rb', line 44

def client
  Gitlab.configure do |config|
    config.endpoint       = 'https://gitlab.com/api/v4'
    config.private_token  = ENV['GITLAB_TOKEN']
  end
  Gitlab.client
end

#comment(url) ⇒ Object



7
8
9
10
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
# File 'lib/terraspace_ci_gitlab/pr.rb', line 7

def comment(url)
  return unless ENV['CI_PIPELINE_SOURCE'] == 'merge_request_event'
  return unless gitlab_token?

  repo = ENV['CI_PROJECT_PATH'] # org/repo
  number = ENV['CI_MERGE_REQUEST_IID']
  marker = "<!-- terraspace marker -->"
  body = marker + "\n"
  body << "Terraspace Cloud Url #{url}"

  puts "Adding comment to repo #{repo} number #{number}"

  project = client.project(ENV['CI_PROJECT_PATH'])
  merge_request = ENV['CI_MERGE_REQUEST_IID']

  # https://www.rubydoc.info/gems/gitlab/Gitlab/Client/Notes
  # TODO: handle pagination
  notes = client.merge_request_notes(project.id, number)
  # TODO: handle not found. Examples:
  # token is not valid
  # token is not right repo
  # todo are we allow to post comment on public repo without need the permission?
  found_note = notes.find do |note|
    note.body.starts_with?(marker)
  end

  if found_note
    client.edit_merge_request_note(project.id, merge_request, found_note.id, body) unless found_note.body == body
  else
    client.create_merge_request_note(project.id, merge_request, body)
  end
rescue Gitlab::Error::Unauthorized => e
  puts "WARN: #{e.message}. Unable to create merge request comment. Please double check your gitlab token"
rescue Gitlab::Error::Forbidden => e
  puts "WARN: #{e.message}. Unable to create merge request comment. The token does not have the permission. Please double check your gitlab token"
end

#gitlab_token?Boolean

Returns:

  • (Boolean)


53
54
55
# File 'lib/terraspace_ci_gitlab/pr.rb', line 53

def gitlab_token?
  ENV['GITLAB_TOKEN']
end