utils/shared_audits: Bump to Sorbet typed: strict

This commit is contained in:
Issy Long 2024-08-10 15:54:49 +01:00
parent 7defe755c0
commit 0355f07e0d
No known key found for this signature in database
3 changed files with 46 additions and 20 deletions

View File

@ -754,7 +754,7 @@ module Cask
def audit_github_prerelease_version def audit_github_prerelease_version
odebug "Auditing GitHub prerelease" odebug "Auditing GitHub prerelease"
user, repo = get_repo_data(%r{https?://github\.com/([^/]+)/([^/]+)/?.*}) if online? user, repo = get_repo_data(%r{https?://github\.com/([^/]+)/([^/]+)/?.*}) if online?
return if user.nil? return if user.nil? || repo.nil?
tag = SharedAudits.github_tag_from_url(cask.url) tag = SharedAudits.github_tag_from_url(cask.url)
tag ||= cask.version tag ||= cask.version
@ -765,7 +765,7 @@ module Cask
sig { void } sig { void }
def audit_gitlab_prerelease_version def audit_gitlab_prerelease_version
user, repo = get_repo_data(%r{https?://gitlab\.com/([^/]+)/([^/]+)/?.*}) if online? user, repo = get_repo_data(%r{https?://gitlab\.com/([^/]+)/([^/]+)/?.*}) if online?
return if user.nil? return if user.nil? || repo.nil?
odebug "Auditing GitLab prerelease" odebug "Auditing GitLab prerelease"
@ -781,7 +781,7 @@ module Cask
return if cask.deprecated? || cask.disabled? return if cask.deprecated? || cask.disabled?
user, repo = get_repo_data(%r{https?://github\.com/([^/]+)/([^/]+)/?.*}) if online? user, repo = get_repo_data(%r{https?://github\.com/([^/]+)/([^/]+)/?.*}) if online?
return if user.nil? return if user.nil? || repo.nil?
metadata = SharedAudits.github_repo_data(user, repo) metadata = SharedAudits.github_repo_data(user, repo)
return if metadata.nil? return if metadata.nil?
@ -795,7 +795,7 @@ module Cask
return if cask.deprecated? || cask.disabled? return if cask.deprecated? || cask.disabled?
user, repo = get_repo_data(%r{https?://gitlab\.com/([^/]+)/([^/]+)/?.*}) if online? user, repo = get_repo_data(%r{https?://gitlab\.com/([^/]+)/([^/]+)/?.*}) if online?
return if user.nil? return if user.nil? || repo.nil?
odebug "Auditing GitLab repo archived" odebug "Auditing GitLab repo archived"
@ -810,7 +810,7 @@ module Cask
return unless new_cask? return unless new_cask?
user, repo = get_repo_data(%r{https?://github\.com/([^/]+)/([^/]+)/?.*}) user, repo = get_repo_data(%r{https?://github\.com/([^/]+)/([^/]+)/?.*})
return if user.nil? return if user.nil? || repo.nil?
odebug "Auditing GitHub repo" odebug "Auditing GitHub repo"
@ -823,7 +823,7 @@ module Cask
return unless new_cask? return unless new_cask?
user, repo = get_repo_data(%r{https?://gitlab\.com/([^/]+)/([^/]+)/?.*}) user, repo = get_repo_data(%r{https?://gitlab\.com/([^/]+)/([^/]+)/?.*})
return if user.nil? return if user.nil? || repo.nil?
odebug "Auditing GitLab repo" odebug "Auditing GitLab repo"
@ -836,7 +836,7 @@ module Cask
return unless new_cask? return unless new_cask?
user, repo = get_repo_data(%r{https?://bitbucket\.org/([^/]+)/([^/]+)/?.*}) user, repo = get_repo_data(%r{https?://bitbucket\.org/([^/]+)/([^/]+)/?.*})
return if user.nil? return if user.nil? || repo.nil?
odebug "Auditing Bitbucket repo" odebug "Auditing Bitbucket repo"

View File

@ -582,15 +582,13 @@ module Homebrew
metadata = SharedAudits.eol_data(name, formula.version.major) metadata = SharedAudits.eol_data(name, formula.version.major)
metadata ||= SharedAudits.eol_data(name, formula.version.major_minor) metadata ||= SharedAudits.eol_data(name, formula.version.major_minor)
return if metadata.blank? || metadata["eol"] == false return if metadata.blank? || (eol_date = metadata["eol"]).blank?
see_url = "see #{Formatter.url("https://endoflife.date/#{name}")}" message = "Product is EOL"
if metadata["eol"] == true message += " since #{eol_date}" if Date.parse(eol_date.to_s) <= Date.today
problem "Product is EOL, #{see_url}" message += ", see #{Formatter.url("https://endoflife.date/#{name}")}"
return
end
problem "Product is EOL since #{metadata["eol"]}, #{see_url}" if Date.parse(metadata["eol"]) <= Date.today problem message
end end
def audit_wayback_url def audit_wayback_url
@ -786,6 +784,8 @@ module Homebrew
tag ||= stable.version tag ||= stable.version
if @online if @online
return if owner.nil? || repo.nil?
error = SharedAudits.gitlab_release(owner, repo, tag, formula:) error = SharedAudits.gitlab_release(owner, repo, tag, formula:)
problem error if error problem error if error
end end
@ -796,6 +796,8 @@ module Homebrew
tag ||= formula.stable.specs[:tag] tag ||= formula.stable.specs[:tag]
if @online if @online
return if owner.nil? || repo.nil?
error = SharedAudits.github_release(owner, repo, tag, formula:) error = SharedAudits.github_release(owner, repo, tag, formula:)
problem error if error problem error if error
end end

View File

@ -1,4 +1,4 @@
# typed: true # typed: strict
# frozen_string_literal: true # frozen_string_literal: true
require "utils/curl" require "utils/curl"
@ -10,8 +10,9 @@ module SharedAudits
module_function module_function
sig { params(product: String, cycle: String).returns(T.nilable(T::Hash[String, T::Hash[Symbol, T.untyped]])) }
def eol_data(product, cycle) def eol_data(product, cycle)
@eol_data ||= {} @eol_data ||= T.let({}, T.nilable(T::Hash[String, T::Hash[String, T.untyped]]))
@eol_data["#{product}/#{cycle}"] ||= begin @eol_data["#{product}/#{cycle}"] ||= begin
out, _, status = Utils::Curl.curl_output("--location", "https://endoflife.date/api/#{product}/#{cycle}.json") out, _, status = Utils::Curl.curl_output("--location", "https://endoflife.date/api/#{product}/#{cycle}.json")
json = JSON.parse(out) if status.success? json = JSON.parse(out) if status.success?
@ -20,8 +21,9 @@ module SharedAudits
end end
end end
sig { params(user: String, repo: String).returns(T.nilable(T::Hash[String, T.untyped])) }
def github_repo_data(user, repo) def github_repo_data(user, repo)
@github_repo_data ||= {} @github_repo_data ||= T.let({}, T.nilable(T::Hash[String, T.untyped]))
@github_repo_data["#{user}/#{repo}"] ||= GitHub.repository(user, repo) @github_repo_data["#{user}/#{repo}"] ||= GitHub.repository(user, repo)
@github_repo_data["#{user}/#{repo}"] @github_repo_data["#{user}/#{repo}"]
@ -31,10 +33,11 @@ module SharedAudits
raise unless e.message.match?(GitHub::API::GITHUB_IP_ALLOWLIST_ERROR) raise unless e.message.match?(GitHub::API::GITHUB_IP_ALLOWLIST_ERROR)
end end
sig { params(user: String, repo: String, tag: String).returns(T.nilable(T::Hash[String, T.untyped])) }
def github_release_data(user, repo, tag) def github_release_data(user, repo, tag)
id = "#{user}/#{repo}/#{tag}" id = "#{user}/#{repo}/#{tag}"
url = "#{GitHub::API_URL}/repos/#{user}/#{repo}/releases/tags/#{tag}" url = "#{GitHub::API_URL}/repos/#{user}/#{repo}/releases/tags/#{tag}"
@github_release_data ||= {} @github_release_data ||= T.let({}, T.nilable(T::Hash[String, T.untyped]))
@github_release_data[id] ||= GitHub::API.open_rest(url) @github_release_data[id] ||= GitHub::API.open_rest(url)
@github_release_data[id] @github_release_data[id]
@ -44,6 +47,13 @@ module SharedAudits
raise unless e.message.match?(GitHub::API::GITHUB_IP_ALLOWLIST_ERROR) raise unless e.message.match?(GitHub::API::GITHUB_IP_ALLOWLIST_ERROR)
end end
sig {
params(
user: String, repo: String, tag: String, formula: T.nilable(Formula), cask: T.nilable(Cask::Cask),
).returns(
T.nilable(String),
)
}
def github_release(user, repo, tag, formula: nil, cask: nil) def github_release(user, repo, tag, formula: nil, cask: nil)
release = github_release_data(user, repo, tag) release = github_release_data(user, repo, tag)
return unless release return unless release
@ -63,8 +73,9 @@ module SharedAudits
"#{tag} is a GitHub draft." if release["draft"] "#{tag} is a GitHub draft." if release["draft"]
end end
sig { params(user: String, repo: String).returns(T.nilable(T::Hash[String, T.untyped])) }
def gitlab_repo_data(user, repo) def gitlab_repo_data(user, repo)
@gitlab_repo_data ||= {} @gitlab_repo_data ||= T.let({}, T.nilable(T::Hash[String, T.untyped]))
@gitlab_repo_data["#{user}/#{repo}"] ||= begin @gitlab_repo_data["#{user}/#{repo}"] ||= begin
out, _, status = Utils::Curl.curl_output("https://gitlab.com/api/v4/projects/#{user}%2F#{repo}") out, _, status = Utils::Curl.curl_output("https://gitlab.com/api/v4/projects/#{user}%2F#{repo}")
json = JSON.parse(out) if status.success? json = JSON.parse(out) if status.success?
@ -73,9 +84,10 @@ module SharedAudits
end end
end end
sig { params(user: String, repo: String, tag: String).returns(T.nilable(T::Hash[String, T.untyped])) }
def gitlab_release_data(user, repo, tag) def gitlab_release_data(user, repo, tag)
id = "#{user}/#{repo}/#{tag}" id = "#{user}/#{repo}/#{tag}"
@gitlab_release_data ||= {} @gitlab_release_data ||= T.let({}, T.nilable(T::Hash[String, T.untyped]))
@gitlab_release_data[id] ||= begin @gitlab_release_data[id] ||= begin
out, _, status = Utils::Curl.curl_output( out, _, status = Utils::Curl.curl_output(
"https://gitlab.com/api/v4/projects/#{user}%2F#{repo}/releases/#{tag}", "--fail" "https://gitlab.com/api/v4/projects/#{user}%2F#{repo}/releases/#{tag}", "--fail"
@ -84,6 +96,13 @@ module SharedAudits
end end
end end
sig {
params(
user: String, repo: String, tag: String, formula: T.nilable(Formula), cask: T.nilable(Cask::Cask),
).returns(
T.nilable(String),
)
}
def gitlab_release(user, repo, tag, formula: nil, cask: nil) def gitlab_release(user, repo, tag, formula: nil, cask: nil)
release = gitlab_release_data(user, repo, tag) release = gitlab_release_data(user, repo, tag)
return unless release return unless release
@ -100,6 +119,7 @@ module SharedAudits
"#{tag} is a GitLab pre-release." "#{tag} is a GitLab pre-release."
end end
sig { params(user: String, repo: String).returns(T.nilable(String)) }
def github(user, repo) def github(user, repo)
metadata = github_repo_data(user, repo) metadata = github_repo_data(user, repo)
@ -117,6 +137,7 @@ module SharedAudits
"GitHub repository too new (<30 days old)" "GitHub repository too new (<30 days old)"
end end
sig { params(user: String, repo: String).returns(T.nilable(String)) }
def gitlab(user, repo) def gitlab(user, repo)
metadata = gitlab_repo_data(user, repo) metadata = gitlab_repo_data(user, repo)
@ -132,6 +153,7 @@ module SharedAudits
"GitLab repository too new (<30 days old)" "GitLab repository too new (<30 days old)"
end end
sig { params(user: String, repo: String).returns(T.nilable(String)) }
def bitbucket(user, repo) def bitbucket(user, repo)
api_url = "https://api.bitbucket.org/2.0/repositories/#{user}/#{repo}" api_url = "https://api.bitbucket.org/2.0/repositories/#{user}/#{repo}"
out, _, status = Utils::Curl.curl_output("--request", "GET", api_url) out, _, status = Utils::Curl.curl_output("--request", "GET", api_url)
@ -163,6 +185,7 @@ module SharedAudits
"Bitbucket repository not notable enough (<30 forks and <75 watchers)" "Bitbucket repository not notable enough (<30 forks and <75 watchers)"
end end
sig { params(url: String).returns(T.nilable(String)) }
def github_tag_from_url(url) def github_tag_from_url(url)
url = url.to_s url = url.to_s
tag = url.match(%r{^https://github\.com/[\w-]+/[\w-]+/archive/refs/tags/([^/]+)\.(tar\.gz|zip)$}) tag = url.match(%r{^https://github\.com/[\w-]+/[\w-]+/archive/refs/tags/([^/]+)\.(tar\.gz|zip)$})
@ -174,6 +197,7 @@ module SharedAudits
tag tag
end end
sig { params(url: String).returns(T.nilable(String)) }
def gitlab_tag_from_url(url) def gitlab_tag_from_url(url)
url = url.to_s url = url.to_s
url.match(%r{^https://gitlab\.com/[\w-]+/[\w-]+/-/archive/([^/]+)/}) url.match(%r{^https://gitlab\.com/[\w-]+/[\w-]+/-/archive/([^/]+)/})