Class: TerraspaceVcsGitlab::Interface

Inherits:
Object
  • Object
show all
Extended by:
Memoist
Includes:
Terraspace::Cloud::Vcs::Interface
Defined in:
lib/terraspace_vcs_gitlab/interface.rb

Instance Method Summary collapse

Instance Method Details

#clientObject



39
40
41
42
43
44
45
# File 'lib/terraspace_vcs_gitlab/interface.rb', line 39

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

#comment(body) ⇒ Object



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
# File 'lib/terraspace_vcs_gitlab/interface.rb', line 8

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

  mr_number = pr_number
  logger.debug "Adding comment to full_repo #{full_repo} mr_number #{mr_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
  # TODO are we allow to post comment on public full_repo without need the permission?
  notes = client.merge_request_notes(project.id, mr_number)
  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
# Edge cases:
#   token is not valid
#   token is not right full_repo
rescue Gitlab::Error::Unauthorized => e
  logger.info "WARN: #{e.message}. Unable to create merge request comment. Please double check your gitlab token"
rescue Gitlab::Error::Forbidden => e
  logger.info "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)


48
49
50
51
52
53
54
55
# File 'lib/terraspace_vcs_gitlab/interface.rb', line 48

def gitlab_token?
  if ENV['GITLAB_TOKEN']
    true
  else
    puts "WARN: The env var GITLAB_TOKEN is not configured. Will not post MR comment"
    false
  end
end