Merge pull request #7202 from jonchang/pr-publish
Add new `pr-publish` command
This commit is contained in:
		
						commit
						5f53180b7c
					
				
							
								
								
									
										36
									
								
								Library/Homebrew/dev-cmd/pr-publish.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								Library/Homebrew/dev-cmd/pr-publish.rb
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,36 @@
 | 
			
		||||
# frozen_string_literal: true
 | 
			
		||||
 | 
			
		||||
require "cli/parser"
 | 
			
		||||
require "utils/github"
 | 
			
		||||
 | 
			
		||||
module Homebrew
 | 
			
		||||
  module_function
 | 
			
		||||
 | 
			
		||||
  def pr_publish_args
 | 
			
		||||
    Homebrew::CLI::Parser.new do
 | 
			
		||||
      usage_banner <<~EOS
 | 
			
		||||
        `pr-publish` <pull_request>
 | 
			
		||||
 | 
			
		||||
        Publishes bottles for a pull request with GitHub Actions.
 | 
			
		||||
        Requires write access to the repository.
 | 
			
		||||
      EOS
 | 
			
		||||
      switch :verbose
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def pr_publish
 | 
			
		||||
    pr_publish_args.parse
 | 
			
		||||
 | 
			
		||||
    odie "You need to specify a pull request number!" if Homebrew.args.named.empty?
 | 
			
		||||
 | 
			
		||||
    args.named.each do |arg|
 | 
			
		||||
      arg = "#{CoreTap.instance.default_remote}/pull/#{arg}" if arg.to_i.positive?
 | 
			
		||||
      url_match = arg.match HOMEBREW_PULL_OR_COMMIT_URL_REGEX
 | 
			
		||||
      _, user, repo, issue = *url_match
 | 
			
		||||
      tap = Tap.fetch(user, repo) if repo.match?(HOMEBREW_OFFICIAL_REPO_PREFIXES_REGEX)
 | 
			
		||||
      odie "Not a GitHub pull request: #{arg}" unless issue
 | 
			
		||||
      ohai "Dispatching #{tap} pull request ##{issue}"
 | 
			
		||||
      GitHub.dispatch(user, repo, "Publish ##{issue}", pull_request: issue)
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
							
								
								
									
										7
									
								
								Library/Homebrew/test/dev-cmd/pr-publish_spec.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								Library/Homebrew/test/dev-cmd/pr-publish_spec.rb
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,7 @@
 | 
			
		||||
# frozen_string_literal: true
 | 
			
		||||
 | 
			
		||||
require "cmd/shared_examples/args_parse"
 | 
			
		||||
 | 
			
		||||
describe "Homebrew.pr_publish_args" do
 | 
			
		||||
  it_behaves_like "parseable arguments"
 | 
			
		||||
end
 | 
			
		||||
@ -431,6 +431,13 @@ module GitHub
 | 
			
		||||
    comments.any? { |comment| comment["body"].eql?(body) }
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def dispatch(user, repo, event, **payload)
 | 
			
		||||
    url = "#{API_URL}/repos/#{user}/#{repo}/dispatches"
 | 
			
		||||
    open_api(url, data:           { event_type: event, client_payload: payload },
 | 
			
		||||
                  request_method: :POST,
 | 
			
		||||
                  scopes:         CREATE_ISSUE_FORK_OR_PR_SCOPES)
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def api_errors
 | 
			
		||||
    [GitHub::AuthenticationFailedError, GitHub::HTTPNotFoundError,
 | 
			
		||||
     GitHub::RateLimitExceededError, GitHub::Error, JSON::ParserError].freeze
 | 
			
		||||
 | 
			
		||||
@ -880,6 +880,11 @@ Generate Homebrew's manpages.
 | 
			
		||||
* `--link`:
 | 
			
		||||
  This is now done automatically by `brew update`.
 | 
			
		||||
 | 
			
		||||
### `pr-publish` *`pull_request`*
 | 
			
		||||
 | 
			
		||||
Publishes bottles for a pull request with GitHub Actions. Requires write access
 | 
			
		||||
to the repository.
 | 
			
		||||
 | 
			
		||||
### `prof` *`command`*
 | 
			
		||||
 | 
			
		||||
Run Homebrew with the Ruby profiler, e.g. `brew prof readall`.
 | 
			
		||||
 | 
			
		||||
@ -1120,6 +1120,9 @@ Return a failing status code if changes are detected in the manpage outputs\. Th
 | 
			
		||||
\fB\-\-link\fR
 | 
			
		||||
This is now done automatically by \fBbrew update\fR\.
 | 
			
		||||
.
 | 
			
		||||
.SS "\fBpr\-publish\fR \fIpull_request\fR"
 | 
			
		||||
Publishes bottles for a pull request with GitHub Actions\. Requires write access to the repository\.
 | 
			
		||||
.
 | 
			
		||||
.SS "\fBprof\fR \fIcommand\fR"
 | 
			
		||||
Run Homebrew with the Ruby profiler, e\.g\. \fBbrew prof readall\fR\.
 | 
			
		||||
.
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user