diff --git a/Library/Homebrew/cask/audit.rb b/Library/Homebrew/cask/audit.rb index 3fde97f46c..8f44e5030f 100644 --- a/Library/Homebrew/cask/audit.rb +++ b/Library/Homebrew/cask/audit.rb @@ -481,10 +481,8 @@ module Cask odebug "Auditing GitLab prerelease" - metadata = SharedAudits.gitlab_release_data(user, repo, cask.version) - return if metadata.nil? - - add_error "#{cask.version} is a GitLab prerelease" if Date.parse(metadata["released_at"]) > Date.today + error = SharedAudits.gitlab_release(user, repo, cask.version) + add_error error if error end def check_github_repository_archived diff --git a/Library/Homebrew/dev-cmd/audit.rb b/Library/Homebrew/dev-cmd/audit.rb index a8e691fe5d..b10e97e4ca 100644 --- a/Library/Homebrew/dev-cmd/audit.rb +++ b/Library/Homebrew/dev-cmd/audit.rb @@ -701,8 +701,6 @@ module Homebrew "libepoxy" => "1.5", }.freeze - GITLAB_PRERELEASE_ALLOWLIST = {}.freeze - # version_prefix = stable_version_string.sub(/\d+$/, "") # version_prefix = stable.version.major_minor @@ -786,11 +784,15 @@ module Homebrew owner = Regexp.last_match(1) repo = Regexp.last_match(2) - return unless @online && (release = SharedAudits.gitlab_release_data(owner, repo, stable.version)) + tag = url.match(%r{^https://gitlab\.com/[\w-]+/[\w-]+/-/archive/([^/]+)/}) + .to_a + .second + tag ||= stable.specs[:tag] + tag ||= stable.version - release_date = Date.parse(release["released_at"]) - if release_date > Date.today && (GITLAB_PRERELEASE_ALLOWLIST[formula.name] != formula.version) - problem "#{stable.version} is a GitLab prerelease" + if @online + error = SharedAudits.gitlab_release(owner, repo, tag, formula: formula) + problem error if error end when %r{^https://github.com/([\w-]+)/([\w-]+)} owner = Regexp.last_match(1) diff --git a/Library/Homebrew/utils/shared_audits.rb b/Library/Homebrew/utils/shared_audits.rb index 26cf8ec3e9..bd60814e7e 100644 --- a/Library/Homebrew/utils/shared_audits.rb +++ b/Library/Homebrew/utils/shared_audits.rb @@ -84,6 +84,18 @@ module SharedAudits @gitlab_release_data[id] end + GITLAB_PRERELEASE_ALLOWLIST = {}.freeze + + def gitlab_release(user, repo, tag, formula: nil) + release = gitlab_release_data(user, repo, tag) + return unless release + + return if Date.parse(release["released_at"]) <= Date.today + return if formula && GITLAB_PRERELEASE_ALLOWLIST[formula.name] == formula.version + + "#{tag} is a GitLab pre-release." + end + def github(user, repo) metadata = github_repo_data(user, repo)