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
15
# 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
  @api_endpoint = api_endpoint
  @project_name = project_name
end

Instance Method Details

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



51
52
53
54
55
56
57
58
59
60
# File 'lib/gitlab_mr_release/project.rb', line 51

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(@project_name, title, options)
end

#generate_description(iids, template) ⇒ Object



46
47
48
49
# File 'lib/gitlab_mr_release/project.rb', line 46

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



34
35
36
37
38
39
40
41
42
43
44
# File 'lib/gitlab_mr_release/project.rb', line 34

def merge_request(iid)
  if api_v4?
    # API v4
    Gitlab.merge_request(@project_name, iid)
  else
    # API v3
    mr = Gitlab.merge_requests(@project_name, iid: iid).first
    assert_merge_request_iid(mr, iid) if mr
    mr
  end
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



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

def merge_request_iids_between(from, to)
  commits = Gitlab.repo_compare(@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



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

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