| 
									
										
										
										
											2020-10-10 14:16:11 +02:00
										 |  |  | # typed: false | 
					
						
							| 
									
										
										
										
											2020-03-22 13:12:48 +11:00
										 |  |  | # frozen_string_literal: true | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | require "cli/parser" | 
					
						
							|  |  |  | require "utils/github" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | module Homebrew | 
					
						
							| 
									
										
										
										
											2020-10-20 12:03:48 +02:00
										 |  |  |   extend T::Sig | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-22 13:12:48 +11:00
										 |  |  |   module_function | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-20 12:03:48 +02:00
										 |  |  |   sig { returns(CLI::Parser) } | 
					
						
							| 
									
										
										
										
											2020-03-22 13:12:48 +11:00
										 |  |  |   def pr_publish_args | 
					
						
							|  |  |  |     Homebrew::CLI::Parser.new do | 
					
						
							| 
									
										
										
										
											2021-01-15 15:04:02 -05:00
										 |  |  |       description <<~EOS | 
					
						
							| 
									
										
										
										
											2020-04-18 12:13:43 -04:00
										 |  |  |         Publish bottles for a pull request with GitHub Actions. | 
					
						
							| 
									
										
										
										
											2020-07-02 22:47:45 +02:00
										 |  |  |         Requires write access to the repository. | 
					
						
							| 
									
										
										
										
											2020-03-22 13:12:48 +11:00
										 |  |  |       EOS | 
					
						
							| 
									
										
										
										
											2021-07-18 05:27:07 +08:00
										 |  |  |       switch "--no-autosquash", | 
					
						
							| 
									
										
										
										
											2022-06-28 10:09:59 +01:00
										 |  |  |              description: "Skip automatically reformatting and rewording commits in the pull request " \ | 
					
						
							| 
									
										
										
										
											2021-07-18 05:27:07 +08:00
										 |  |  |                           "to the preferred format, even if supported on the target tap." | 
					
						
							| 
									
										
										
										
											2021-05-19 18:06:21 +08:00
										 |  |  |       flag   "--branch=", | 
					
						
							| 
									
										
										
										
											2021-05-19 11:36:59 +01:00
										 |  |  |              description: "Branch to publish to (default: `master`)." | 
					
						
							| 
									
										
										
										
											2020-10-03 16:35:48 +10:00
										 |  |  |       flag   "--message=", | 
					
						
							|  |  |  |              description: "Message to include when autosquashing revision bumps, deletions, and rebuilds." | 
					
						
							| 
									
										
										
										
											2020-07-02 22:47:45 +02:00
										 |  |  |       flag   "--tap=", | 
					
						
							|  |  |  |              description: "Target tap repository (default: `homebrew/core`)." | 
					
						
							| 
									
										
										
										
											2020-07-28 11:29:09 +02:00
										 |  |  |       flag   "--workflow=", | 
					
						
							|  |  |  |              description: "Target workflow filename (default: `publish-commit-bottles.yml`)." | 
					
						
							| 
									
										
										
										
											2020-07-30 18:40:10 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-02-08 20:02:21 +08:00
										 |  |  |       conflicts "--no-autosquash", "--message" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-15 15:04:02 -05:00
										 |  |  |       named_args :pull_request, min: 1
 | 
					
						
							| 
									
										
										
										
											2020-03-22 13:12:48 +11:00
										 |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def pr_publish | 
					
						
							| 
									
										
										
										
											2020-07-30 18:40:10 +02:00
										 |  |  |     args = pr_publish_args.parse | 
					
						
							| 
									
										
										
										
											2020-03-22 13:12:48 +11:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-08-02 00:56:29 +01:00
										 |  |  |     tap = Tap.fetch(args.tap || CoreTap.instance.name) | 
					
						
							|  |  |  |     workflow = args.workflow || "publish-commit-bottles.yml" | 
					
						
							| 
									
										
										
										
											2021-05-19 18:06:21 +08:00
										 |  |  |     ref = args.branch || "master" | 
					
						
							| 
									
										
										
										
											2020-03-31 10:02:29 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-03 16:35:48 +10:00
										 |  |  |     extra_args = [] | 
					
						
							| 
									
										
										
										
											2022-02-08 20:02:21 +08:00
										 |  |  |     extra_args << "--no-autosquash" if args.no_autosquash? | 
					
						
							| 
									
										
										
										
											2020-10-03 16:35:48 +10:00
										 |  |  |     extra_args << "--message='#{args.message}'" if args.message.presence | 
					
						
							|  |  |  |     dispatch_args = extra_args.join " " | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-04-12 12:05:50 +02:00
										 |  |  |     args.named.uniq.each do |arg| | 
					
						
							| 
									
										
										
										
											2020-07-02 22:47:45 +02:00
										 |  |  |       arg = "#{tap.default_remote}/pull/#{arg}" if arg.to_i.positive? | 
					
						
							| 
									
										
										
										
											2020-03-22 13:12:48 +11:00
										 |  |  |       url_match = arg.match HOMEBREW_PULL_OR_COMMIT_URL_REGEX | 
					
						
							|  |  |  |       _, user, repo, issue = *url_match | 
					
						
							|  |  |  |       odie "Not a GitHub pull request: #{arg}" unless issue | 
					
						
							| 
									
										
										
										
											2020-07-27 12:29:08 +02:00
										 |  |  |       if args.tap.present? && !"#{user}/#{repo}".casecmp(tap.full_name).zero? | 
					
						
							| 
									
										
										
										
											2021-01-24 21:40:41 -05:00
										 |  |  |         odie "Pull request URL is for #{user}/#{repo} but `--tap=#{tap.full_name}` was specified!" | 
					
						
							| 
									
										
										
										
											2020-07-27 12:29:08 +02:00
										 |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-22 13:12:48 +11:00
										 |  |  |       ohai "Dispatching #{tap} pull request ##{issue}" | 
					
						
							| 
									
										
										
										
											2020-10-03 16:35:48 +10:00
										 |  |  |       GitHub.workflow_dispatch_event(user, repo, workflow, ref, pull_request: issue, args: dispatch_args) | 
					
						
							| 
									
										
										
										
											2020-03-22 13:12:48 +11:00
										 |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | end |