diff --git a/Library/Homebrew/cask/audit.rb b/Library/Homebrew/cask/audit.rb index db3ffb71e3..156fbdb708 100644 --- a/Library/Homebrew/cask/audit.rb +++ b/Library/Homebrew/cask/audit.rb @@ -466,14 +466,9 @@ module Cask user, repo = get_repo_data(%r{https?://github\.com/([^/]+)/([^/]+)/?.*}) if @online return if user.nil? - metadata = SharedAudits.github_release_data(user, repo, cask.version) - return if metadata.nil? - - if metadata["prerelease"] - add_error "#{cask.version} is a GitHub prerelease" - elsif metadata["draft"] - add_error "#{cask.version} is a GitHub draft" - end + # TODO: Detect tag from URL instead of using `cask.version`. + error = SharedAudits.github_release(user, repo, cask.version, cask: cask) + add_error error if error end def check_gitlab_prerelease_version diff --git a/Library/Homebrew/dev-cmd/audit.rb b/Library/Homebrew/dev-cmd/audit.rb index 7e5129a9fd..a8e691fe5d 100644 --- a/Library/Homebrew/dev-cmd/audit.rb +++ b/Library/Homebrew/dev-cmd/audit.rb @@ -703,16 +703,6 @@ module Homebrew GITLAB_PRERELEASE_ALLOWLIST = {}.freeze - GITHUB_PRERELEASE_ALLOWLIST = { - "cbmc" => "5.12.6", - "elm-format" => "0.8.3", - "gitless" => "0.8.8", - "infrakit" => "0.5", - "riff" => "0.5.0", - "telegram-cli" => "1.3.1", - "volta" => "0.8.6", - }.freeze - # version_prefix = stable_version_string.sub(/\d+$/, "") # version_prefix = stable.version.major_minor @@ -813,12 +803,9 @@ module Homebrew .second tag ||= formula.stable.specs[:tag] - if @online && (release = SharedAudits.github_release_data(owner, repo, tag)) - if release["prerelease"] && (GITHUB_PRERELEASE_ALLOWLIST[formula.name] != formula.version) - problem "#{tag} is a GitHub prerelease" - elsif release["draft"] - problem "#{tag} is a GitHub draft" - end + if @online + error = SharedAudits.github_release(owner, repo, tag, formula: formula) + problem error if error end end end diff --git a/Library/Homebrew/utils/shared_audits.rb b/Library/Homebrew/utils/shared_audits.rb index 09a48074f9..b4db793913 100644 --- a/Library/Homebrew/utils/shared_audits.rb +++ b/Library/Homebrew/utils/shared_audits.rb @@ -27,6 +27,35 @@ module SharedAudits nil end + GITHUB_PRERELEASE_ALLOWLIST = { + "cbmc" => "5.12.6", + "elm-format" => "0.8.3", + "gitless" => "0.8.8", + "infrakit" => "0.5", + "riff" => "0.5.0", + "telegram-cli" => "1.3.1", + "volta" => "0.8.6", + }.freeze + + def github_release(user, repo, tag, formula: nil, cask: nil) + release = github_release_data(user, repo, tag) + return unless release + + if cask && GITHUB_PRERELEASE_ALLOWLIST[cask.token] == :all + return if release["prerelease"] + + return "#{tag} is not a GitHub pre-release but cask '#{cask.token}' is in GITHUB_PRERELEASE_ALLOWLIST." + end + + if release["prerelease"] + return if formula && GITHUB_PRERELEASE_ALLOWLIST[formula.name] == formula.version + + return "#{tag} is a GitHub pre-release." + end + + return "#{tag} is a GitHub draft." if release["draft"] + end + def gitlab_repo_data(user, repo) @gitlab_repo_data ||= {} @gitlab_repo_data["#{user}/#{repo}"] ||= begin