From 3e36e98db34346ceec1289313ec4df84ef9cc7f4 Mon Sep 17 00:00:00 2001 From: Anatoli Babenia Date: Mon, 23 Jun 2025 12:23:46 +0300 Subject: [PATCH] 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 --- Library/Homebrew/formula_creator.rb | 6 ++++++ Library/Homebrew/test/formula_creator_spec.rb | 4 ++++ 2 files changed, 10 insertions(+) diff --git a/Library/Homebrew/formula_creator.rb b/Library/Homebrew/formula_creator.rb index 51ad3f754e..4c10a631e8 100644 --- a/Library/Homebrew/formula_creator.rb +++ b/Library/Homebrew/formula_creator.rb @@ -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 diff --git a/Library/Homebrew/test/formula_creator_spec.rb b/Library/Homebrew/test/formula_creator_spec.rb index b7d6d20077..ab1fd26f10 100644 --- a/Library/Homebrew/test/formula_creator_spec.rb +++ b/Library/Homebrew/test/formula_creator_spec.rb @@ -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