Sha256: ac044d2eb1a6008a98f268c821f7c616105cc10c3c0814e46f8250b3253d9a1a

Contents?: true

Size: 1.62 KB

Versions: 1

Compression:

Stored size: 1.62 KB

Contents

module GitlabMrRelease
  require "gitlab"

  class Project
    # @param api_endpoint     [String]
    # @param private_token    [String]
    # @param project_name     [String]
    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

    def api_version
      @api_endpoint =~ %r(/api/v([0-9]+)/?)
      $1.to_i
    end

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

    # find merge requests between from...to
    # @param from [String]
    # @param to   [String]
    # @return [Array<Integer>] MergeRequest iids
    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

    def generate_description(iids, template)
      merge_requests = Gitlab.merge_requests(@project_name, iids: iids)
      ERB.new(template, nil, "-").result(binding).strip
    end

    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
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
gitlab_mr_release-1.0.1 lib/gitlab_mr_release/project.rb