Class: GitlabMrRelease::Project

Inherits:
Object
  • Object
show all
Defined in:
lib/gitlab_mr_release/project.rb

Instance Method Summary collapse

Constructor Details

#initialize(api_endpoint:, private_token:, project_name:) ⇒ Project

Returns a new instance of Project.

Parameters:

  • api_endpoint (String)
  • private_token (String)
  • project_name (String)


8
9
10
11
12
13
14
# File 'lib/gitlab_mr_release/project.rb', line 8

def initialize(api_endpoint:, private_token:, project_name:)
  Gitlab.configure do |config|
    config.endpoint      = api_endpoint
    config.private_token = private_token
  end
  @project_name = project_name
end

Instance Method Details

#create_merge_request(source_branch:, target_branch:, title:, template:, labels:) ⇒ Object



44
45
46
47
48
49
50
51
52
53
# File 'lib/gitlab_mr_release/project.rb', line 44

def create_merge_request(source_branch:, target_branch:, title:, template:, labels:)
  iids = merge_request_iids_between(target_branch, source_branch)
  options = {
    source_branch: source_branch,
    target_branch: target_branch,
    description:   generate_description(iids, template),
    labels:        labels,
  }
  Gitlab.create_merge_request(escaped_project_name, title, options)
end

#generate_description(iids, template) ⇒ Object



39
40
41
42
# File 'lib/gitlab_mr_release/project.rb', line 39

def generate_description(iids, template)
  merge_requests = iids.map { |iid| merge_request(iid) }
  ERB.new(template, nil, "-").result(binding).strip
end

#merge_request(iid) ⇒ Object

find MergeRequest with iid



33
34
35
36
37
# File 'lib/gitlab_mr_release/project.rb', line 33

def merge_request(iid)
  mr = Gitlab.merge_requests(escaped_project_name, iid: iid).first
  assert_merge_request_iid(mr, iid) if mr
  mr
end

#merge_request_iids_between(from, to) ⇒ Array<Integer>

find merge requests between from…to

Parameters:

  • from (String)
  • to (String)

Returns:

  • (Array<Integer>)

    MergeRequest iids



24
25
26
27
28
29
30
# File 'lib/gitlab_mr_release/project.rb', line 24

def merge_request_iids_between(from, to)
  commits = Gitlab.repo_compare(escaped_project_name, from, to).commits
  commits.map do |commit|
    commit["message"] =~ /^Merge branch .*See merge request \!(\d+)$/m
    $1
  end.compact.map(&:to_i)
end

#web_urlObject



16
17
18
# File 'lib/gitlab_mr_release/project.rb', line 16

def web_url
  @web_url ||= Gitlab.project(escaped_project_name).web_url
end