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."
switch "--cask", "--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=",
description: "Limit number of package results returned."
flag "--start-with=",
description: "Letter or word that the list of package results should alphabetically follow."
conflicts "--cask", "--formula"
conflicts "--no-pull-requests", "--open-pr"
named_args [:formula, :cask]
end
@ -103,7 +106,7 @@ module Homebrew
end
package_data = Repology.single_package_query(name, repository: repository)
retrieve_and_display_info(
retrieve_and_display_info_and_open_pr(
formula_or_cask,
name,
package_data&.values&.first,
@ -157,7 +160,13 @@ module Homebrew
end
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
@ -205,44 +214,59 @@ module Homebrew
pull_requests = pull_requests.map { |pr| "#{pr["title"]} (#{Formatter.url(pr["html_url"])})" }.join(", ")
end
return "none" if pull_requests.blank?
pull_requests
end
def retrieve_and_display_info(formula_or_cask, name, repositories, args:, ambiguous_cask: false)
current_version = if formula_or_cask.is_a?(Formula)
formula_or_cask.stable.version
def retrieve_and_display_info_and_open_pr(formula_or_cask, name, repositories, args:, ambiguous_cask: false)
if formula_or_cask.is_a?(Formula)
current_version = formula_or_cask.stable.version
type = :formula
version_name = "formula version"
else
Version.new(formula_or_cask.version)
current_version = Version.new(formula_or_cask.version)
type = :cask
version_name = "cask version "
end
livecheck_latest = livecheck_result(formula_or_cask)
repology_latest = if repositories.present?
Repology.latest_version(repositories)
else
"not found"
end
livecheck_latest = livecheck_result(formula_or_cask)
pull_requests = if !args.no_pull_requests? && (args.named.present? ||
(livecheck_latest.is_a?(Version) && livecheck_latest != current_version))
retrieve_pull_requests(formula_or_cask, name)
end
new_version = if livecheck_latest.is_a?(Version) && livecheck_latest > current_version
livecheck_latest
elsif repology_latest.is_a?(Version) && repology_latest > current_version
repology_latest
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 &&
current_version == livecheck_latest
"#{name} #{Tty.green}is up to date!#{Tty.reset}"
"#{title_name} #{Tty.green}is up to date!#{Tty.reset}"
else
name
title_name
end
ohai title
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 Repology version: #{repology_latest}
Open pull requests: #{pull_requests || "none"}
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

View File

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

View File

@ -436,6 +436,7 @@ _brew_bump() {
--help
--limit
--no-pull-requests
--open-pr
--quiet
--start-with
--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 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 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 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'

View File

@ -478,6 +478,7 @@ _brew_bump() {
'--help[Show this message]' \
'--limit[Limit number of package results returned]' \
'--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]' \
'--start-with[Letter or word that the list of package results should alphabetically follow]' \
'--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.
* `--cask`:
Check only casks.
* `--open-pr`:
Open a pull request for the new version if there are none already open.
* `--limit`:
Limit number of package results returned.
* `--start-with`:

View File

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