mirror of
https://github.com/Homebrew/brew.git
synced 2025-07-14 16:09:03 +08:00

This will be made the default by Homebrew/homebrew-core#127021. Additionally, branch protection rules will make it so that attempting to push to master will fail, so we may as well not have to carry this flag around.
88 lines
3.1 KiB
Ruby
88 lines
3.1 KiB
Ruby
# typed: true
|
|
# frozen_string_literal: true
|
|
|
|
require "cli/parser"
|
|
require "utils/github"
|
|
|
|
module Homebrew
|
|
extend T::Sig
|
|
|
|
module_function
|
|
|
|
sig { returns(CLI::Parser) }
|
|
def pr_automerge_args
|
|
Homebrew::CLI::Parser.new do
|
|
description <<~EOS
|
|
Find pull requests that can be automatically merged using `brew pr-publish`.
|
|
EOS
|
|
flag "--tap=",
|
|
description: "Target tap repository (default: `homebrew/core`)."
|
|
flag "--workflow=",
|
|
description: "Workflow file to use with `brew pr-publish`."
|
|
flag "--with-label=",
|
|
description: "Pull requests must have this label."
|
|
comma_array "--without-labels",
|
|
description: "Pull requests must not have these labels (default: " \
|
|
"`do not merge`, `new formula`, `automerge-skip`, `CI-published-bottle-commits`)."
|
|
switch "--without-approval",
|
|
description: "Pull requests do not require approval to be merged."
|
|
switch "--publish",
|
|
description: "Run `brew pr-publish` on matching pull requests."
|
|
switch "--autosquash",
|
|
description: "Instruct `brew pr-publish` to automatically reformat and reword commits " \
|
|
"in the pull request to the preferred format."
|
|
switch "--no-autosquash",
|
|
description: "Instruct `brew pr-publish` to skip automatically reformatting and rewording commits " \
|
|
"in the pull request to the preferred format."
|
|
switch "--ignore-failures",
|
|
description: "Include pull requests that have failing status checks."
|
|
|
|
named_args :none
|
|
end
|
|
end
|
|
|
|
def pr_automerge
|
|
args = pr_automerge_args.parse
|
|
|
|
odeprecated "`brew pr-publish --no-autosquash`" if args.no_autosquash?
|
|
|
|
without_labels = args.without_labels || [
|
|
"do not merge",
|
|
"new formula",
|
|
"automerge-skip",
|
|
"CI-published-bottle-commits",
|
|
]
|
|
tap = Tap.fetch(args.tap || CoreTap.instance.name)
|
|
|
|
query = "is:pr is:open repo:#{tap.full_name} draft:false"
|
|
query += args.ignore_failures? ? " -status:pending" : " status:success"
|
|
query += " review:approved" unless args.without_approval?
|
|
query += " label:\"#{args.with_label}\"" if args.with_label
|
|
without_labels&.each { |label| query += " -label:\"#{label}\"" }
|
|
odebug "Searching: #{query}"
|
|
|
|
prs = GitHub.search_issues query
|
|
if prs.blank?
|
|
ohai "No matching pull requests!"
|
|
return
|
|
end
|
|
|
|
ohai "#{prs.count} matching pull #{Utils.pluralize("request", prs.count)}:"
|
|
pr_urls = []
|
|
prs.each do |pr|
|
|
puts "#{tap.full_name unless tap.core_tap?}##{pr["number"]}: #{pr["title"]}"
|
|
pr_urls << pr["html_url"]
|
|
end
|
|
|
|
publish_args = ["pr-publish"]
|
|
publish_args << "--tap=#{tap}" if tap
|
|
publish_args << "--workflow=#{args.workflow}" if args.workflow
|
|
publish_args << "--autosquash" if args.autosquash?
|
|
if args.publish?
|
|
safe_system HOMEBREW_BREW_FILE, *publish_args, *pr_urls
|
|
else
|
|
ohai "Now run:", " brew #{publish_args.join " "} \\\n #{pr_urls.join " \\\n "}"
|
|
end
|
|
end
|
|
end
|