Sha256: 7c9728f49d356dd2368ef6286a25e7d3a9e87ec3e143028fa631c8a6207e7699

Contents?: true

Size: 1.29 KB

Versions: 1

Compression:

Stored size: 1.29 KB

Contents

# frozen_string_literal: true

require 'rake_factory'
require 'octokit'
require 'git'

module RakeGithub
  module Tasks
    module PullRequests
      class Merge < RakeFactory::Task
        default_description(RakeFactory::DynamicValue.new do |t|
          "Merges pull request on the current branch in the #{t.repository} repository"
        end)

        parameter :repository, required: true
        parameter :access_token, required: true
        parameter :commit_message, default: ''

        action do |t|
          current_branch = Git.open(Pathname.new('.')).current_branch
          github_client = Octokit::Client.new(access_token: access_token)

          open_prs = github_client.pull_requests(t.repository)

          current_pr = open_prs
            .find { |pr| pr[:head][:ref] == current_branch }

          raise NoPullRequestError.new current_branch if current_pr.nil?

          github_client.merge_pull_request(
            t.repository,
            current_pr[:number],
            format(t.commit_message % current_pr[:title])
          )
        end
      end
    end
  end
end

class NoPullRequestError < StandardError
  attr_reader :branch_name
  def initialize(branch_name)
    @branch_name = branch_name
  end

  def message
    "No pull request associated with branch %s" % branch_name
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
rake_github-0.8.0.pre.6 lib/rake_github/tasks/pull_requests/merge.rb