dev-cmd/bump: add switch to open pull requests.

This enables the simplification of
https://github.com/Homebrew/actions/blob/master/bump-formulae/main.rb
and exposing this workflow to more Homebrew users.
This commit is contained in:
Mike McQuaid 2022-01-12 17:31:55 +00:00
parent 3ba6afb1d3
commit af6d995de8
No known key found for this signature in database
GPG Key ID: 3338A31AFDB1D829
7 changed files with 52 additions and 19 deletions

View File

@ -25,12 +25,15 @@ module Homebrew
description: "Check only formulae." description: "Check only formulae."
switch "--cask", "--casks", switch "--cask", "--casks",
description: "Check only casks." description: "Check only casks."
switch "--open-pr",
description: "Open a pull request for the new version if there are none already open."
flag "--limit=", flag "--limit=",
description: "Limit number of package results returned." description: "Limit number of package results returned."
flag "--start-with=", flag "--start-with=",
description: "Letter or word that the list of package results should alphabetically follow." description: "Letter or word that the list of package results should alphabetically follow."
conflicts "--cask", "--formula" conflicts "--cask", "--formula"
conflicts "--no-pull-requests", "--open-pr"
named_args [:formula, :cask] named_args [:formula, :cask]
end end
@ -103,7 +106,7 @@ module Homebrew
end end
package_data = Repology.single_package_query(name, repository: repository) package_data = Repology.single_package_query(name, repository: repository)
retrieve_and_display_info( retrieve_and_display_info_and_open_pr(
formula_or_cask, formula_or_cask,
name, name,
package_data&.values&.first, package_data&.values&.first,
@ -157,7 +160,13 @@ module Homebrew
end end
puts if i.positive? puts if i.positive?
retrieve_and_display_info(formula_or_cask, name, repositories, args: args, ambiguous_cask: ambiguous_cask) retrieve_and_display_info_and_open_pr(
formula_or_cask,
name,
repositories,
args: args,
ambiguous_cask: ambiguous_cask,
)
end end
end end
end end
@ -205,44 +214,59 @@ module Homebrew
pull_requests = pull_requests.map { |pr| "#{pr["title"]} (#{Formatter.url(pr["html_url"])})" }.join(", ") pull_requests = pull_requests.map { |pr| "#{pr["title"]} (#{Formatter.url(pr["html_url"])})" }.join(", ")
end end
return "none" if pull_requests.blank?
pull_requests pull_requests
end end
def retrieve_and_display_info(formula_or_cask, name, repositories, args:, ambiguous_cask: false) def retrieve_and_display_info_and_open_pr(formula_or_cask, name, repositories, args:, ambiguous_cask: false)
current_version = if formula_or_cask.is_a?(Formula) if formula_or_cask.is_a?(Formula)
formula_or_cask.stable.version current_version = formula_or_cask.stable.version
type = :formula
version_name = "formula version"
else else
Version.new(formula_or_cask.version) current_version = Version.new(formula_or_cask.version)
type = :cask
version_name = "cask version "
end end
livecheck_latest = livecheck_result(formula_or_cask)
repology_latest = if repositories.present? repology_latest = if repositories.present?
Repology.latest_version(repositories) Repology.latest_version(repositories)
else else
"not found" "not found"
end end
livecheck_latest = livecheck_result(formula_or_cask) new_version = if livecheck_latest.is_a?(Version) && livecheck_latest > current_version
pull_requests = if !args.no_pull_requests? && (args.named.present? || livecheck_latest
(livecheck_latest.is_a?(Version) && livecheck_latest != current_version)) elsif repology_latest.is_a?(Version) && repology_latest > current_version
retrieve_pull_requests(formula_or_cask, name) repology_latest
end end.presence
name += " (cask)" if ambiguous_cask pull_requests = if !args.no_pull_requests? && (args.named.present? || new_version)
retrieve_pull_requests(formula_or_cask, name)
end.presence
title_name = ambiguous_cask ? "#{name} (cask)" : name
title = if current_version == repology_latest && title = if current_version == repology_latest &&
current_version == livecheck_latest current_version == livecheck_latest
"#{name} #{Tty.green}is up to date!#{Tty.reset}" "#{title_name} #{Tty.green}is up to date!#{Tty.reset}"
else else
name title_name
end end
ohai title ohai title
puts <<~EOS puts <<~EOS
Current #{formula_or_cask.is_a?(Formula) ? "formula version:" : "cask version: "} #{current_version} Current #{version_name}: #{current_version}
Latest livecheck version: #{livecheck_latest} Latest livecheck version: #{livecheck_latest}
Latest Repology version: #{repology_latest} Latest Repology version: #{repology_latest}
Open pull requests: #{pull_requests || "none"}
EOS EOS
puts "Open pull requests: #{pull_requests}" unless pull_requests.nil?
return unless args.open_pr?
return unless new_version
return if pull_requests
system HOMEBREW_BREW_FILE, "bump-#{type}-pr", "--no-browse",
"--message=Created by `brew bump`", "--version=#{new_version}", name
end end
end end

View File

@ -99,6 +99,6 @@ module Repology
# scheme # scheme
return "no latest version" if latest_version.blank? return "no latest version" if latest_version.blank?
latest_version["version"] Version.new(latest_version["version"])
end end
end end

View File

@ -436,6 +436,7 @@ _brew_bump() {
--help --help
--limit --limit
--no-pull-requests --no-pull-requests
--open-pr
--quiet --quiet
--start-with --start-with
--verbose --verbose

View File

@ -388,6 +388,7 @@ __fish_brew_complete_arg 'bump' -l full-name -d 'Print formulae/casks with fully
__fish_brew_complete_arg 'bump' -l help -d 'Show this message' __fish_brew_complete_arg 'bump' -l help -d 'Show this message'
__fish_brew_complete_arg 'bump' -l limit -d 'Limit number of package results returned' __fish_brew_complete_arg 'bump' -l limit -d 'Limit number of package results returned'
__fish_brew_complete_arg 'bump' -l no-pull-requests -d 'Do not retrieve pull requests from GitHub' __fish_brew_complete_arg 'bump' -l no-pull-requests -d 'Do not retrieve pull requests from GitHub'
__fish_brew_complete_arg 'bump' -l open-pr -d 'Open a pull request for the new version if there are none already open'
__fish_brew_complete_arg 'bump' -l quiet -d 'Make some output more quiet' __fish_brew_complete_arg 'bump' -l quiet -d 'Make some output more quiet'
__fish_brew_complete_arg 'bump' -l start-with -d 'Letter or word that the list of package results should alphabetically follow' __fish_brew_complete_arg 'bump' -l start-with -d 'Letter or word that the list of package results should alphabetically follow'
__fish_brew_complete_arg 'bump' -l verbose -d 'Make some output more verbose' __fish_brew_complete_arg 'bump' -l verbose -d 'Make some output more verbose'

View File

@ -478,6 +478,7 @@ _brew_bump() {
'--help[Show this message]' \ '--help[Show this message]' \
'--limit[Limit number of package results returned]' \ '--limit[Limit number of package results returned]' \
'--no-pull-requests[Do not retrieve pull requests from GitHub]' \ '--no-pull-requests[Do not retrieve pull requests from GitHub]' \
'--open-pr[Open a pull request for the new version if there are none already open]' \
'--quiet[Make some output more quiet]' \ '--quiet[Make some output more quiet]' \
'--start-with[Letter or word that the list of package results should alphabetically follow]' \ '--start-with[Letter or word that the list of package results should alphabetically follow]' \
'--verbose[Make some output more verbose]' \ '--verbose[Make some output more verbose]' \

View File

@ -926,6 +926,8 @@ formulae, also displays whether a pull request has been opened with the URL.
Check only formulae. Check only formulae.
* `--cask`: * `--cask`:
Check only casks. Check only casks.
* `--open-pr`:
Open a pull request for the new version if there are none already open.
* `--limit`: * `--limit`:
Limit number of package results returned. Limit number of package results returned.
* `--start-with`: * `--start-with`:

View File

@ -1295,6 +1295,10 @@ Check only formulae\.
Check only casks\. Check only casks\.
. .
.TP .TP
\fB\-\-open\-pr\fR
Open a pull request for the new version if there are none already open\.
.
.TP
\fB\-\-limit\fR \fB\-\-limit\fR
Limit number of package results returned\. Limit number of package results returned\.
. .