create: detect URL from latest release if it isn't archive

Detects source archive for GitHub URL without version. Both releases
and tags share the same URL pattern for source archive

  https://github.com/Homebrew/brew/releases
  https://github.com/Homebrew/brew/tags
This commit is contained in:
Anatoli Babenia 2025-06-23 12:23:46 +03:00
parent b87d2887fe
commit 3e36e98db3
2 changed files with 10 additions and 0 deletions

View File

@ -14,6 +14,9 @@ module Homebrew
sig { returns(Version) }
attr_reader :version
sig { returns(String) }
attr_reader :url
sig { returns(T::Boolean) }
attr_reader :head
@ -79,6 +82,9 @@ module Homebrew
latest_release = GitHub.get_latest_release(user, repository)
version = Version.new(latest_release.fetch("tag_name"))
odebug "github: version from latest_release: #{version}"
@url = "https://github.com/#{user}/#{repository}/archive/refs/tags/#{version}.tar.gz"
odebug "github: url changed to source archive #{@url}"
rescue GitHub::API::HTTPNotFoundError
odebug "github: latest_release lookup failed: #{url}"
end

View File

@ -41,6 +41,7 @@ RSpec.describe Homebrew::FormulaCreator do
github_user_repository: ["buildpacks", "pack"],
latest_release: { "tag_name" => "v0.37.0" },
expected_name: "pack",
expected_url: "https://github.com/buildpacks/pack/archive/refs/tags/v0.37.0.tar.gz",
expected_version: "v0.37.0",
},
"GitHub URL with name override": {
@ -69,6 +70,9 @@ RSpec.describe Homebrew::FormulaCreator do
else
expect(formula_creator.version).to be_null
end
if (expected_url = test[:expected_url])
expect(formula_creator.url).to eq(expected_url)
end
expect(formula_creator.head).to eq(test.fetch(:expected_head, false))
end
end