DEV: Automate aliases of release tag (#36903)

These were handled manually in the last release. `latest-release` and
`beta` should be exact synonyms of `release`, for backwards
compatibility.

https://meta.discourse.org/t/383536/47
This commit is contained in:
David Taylor
2025-12-30 11:24:45 +00:00
committed by GitHub
parent 675a5e5be3
commit e7ac8fae79
2 changed files with 34 additions and 3 deletions
+17 -3
View File
@@ -1,6 +1,9 @@
# frozen_string_literal: true
module ReleaseUtils
PRIMARY_RELEASE_TAG = "release"
RELEASE_TAGS = [PRIMARY_RELEASE_TAG, "beta", "latest-release"].freeze
def self.dry_run?
!!ENV["DRY_RUN"]
end
@@ -161,11 +164,22 @@ namespace :release do
end
if existing_releases.last && Gem::Version.new(current_version) > existing_releases.last
ReleaseUtils.git "tag", "-a", "release", "-m", "latest release"
ReleaseUtils::RELEASE_TAGS.each do |synonym_tag|
message =
if synonym_tag == ReleaseUtils::PRIMARY_RELEASE_TAG
"latest release"
else
"backwards-compatibility alias for `#{ReleaseUtils::PRIMARY_RELEASE_TAG}` tag"
end
ReleaseUtils.git "tag", "-a", synonym_tag, "-m", message, "-f"
end
if ReleaseUtils.dry_run?
puts "[DRY RUN] Skipping pushing 'release' tag to origin"
puts "[DRY RUN] Skipping pushing #{ReleaseUtils::RELEASE_TAGS.inspect} tags to origin"
else
ReleaseUtils.git "push", "origin", "-f", "refs/tags/release"
ReleaseUtils.git "push",
"origin",
"-f",
*ReleaseUtils::RELEASE_TAGS.map { |tag| "refs/tags/#{tag}" }
end
end
end
+17
View File
@@ -103,6 +103,23 @@ RSpec.describe "tasks/version_bump" do
expect(output).to include("Tag v2025.05.0 already exists, skipping")
end
end
it "creates all release alias tags when version is latest" do
Dir.chdir(local_path) do
run "git", "tag", "-a", "v2025.01.0", "-m", "version 2025.01.0"
File.write("lib/version.rb", fake_version_rb("2025.06.0"))
run "git", "add", "."
run "git", "commit", "-m", "release 2025.06.0"
commit_hash = run("git", "rev-parse", "HEAD").strip
run "git", "branch", "release/2025.06"
capture_stdout { invoke_rake_task("release:maybe_tag_release", commit_hash) }
tags = run("git", "tag").lines.map(&:strip)
ReleaseUtils::RELEASE_TAGS.each { |tag| expect(tags).to include(tag) }
end
end
end
it "can create a new release branch" do