Skip to content

Commit 1172744

Browse files
DEV: Fixup release rake tasks for checkout@v6 (#36224)
Need to do any `push` operations in the main git directory, not the worktree
1 parent f74a438 commit 1172744

File tree

1 file changed

+73
-61
lines changed

1 file changed

+73
-61
lines changed

lib/tasks/release.rake

Lines changed: 73 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,12 @@ module ReleaseUtils
4343
def self.make_pr(base:, branch:)
4444
return if test_mode?
4545

46-
args = ["--title", `git log -1 --pretty=%s`.strip, "--body", `git log -1 --pretty=%b`.strip]
46+
args = [
47+
"--title",
48+
git("log", "-1", branch, "--pretty=%s").strip,
49+
"--body",
50+
git("log", "-1", branch, "--pretty=%b").strip,
51+
]
4752

4853
success =
4954
system("gh", "pr", "create", "--base", base, "--head", branch, *args) ||
@@ -72,39 +77,43 @@ namespace :release do
7277
task "maybe_cut_branch", [:check_ref] do |t, args|
7378
check_ref = args[:check_ref]
7479

80+
new_branch_name = nil
81+
new_version = nil
82+
previous_version = nil
83+
7584
ReleaseUtils.with_clean_worktree("main") do
7685
ReleaseUtils.git("checkout", check_ref.to_s)
7786
new_version = ReleaseUtils.parse_current_version
7887

7988
ReleaseUtils.git("checkout", "#{check_ref}^1")
8089
previous_version = ReleaseUtils.parse_current_version
90+
end
8191

82-
next "version has not changed" if new_version == previous_version
92+
next "version has not changed" if new_version == previous_version
8393

84-
raise "Unexpected previous version" if !previous_version.ends_with? "-latest"
85-
raise "Unexpected new version" if !new_version.ends_with? "-latest"
86-
if Gem::Version.new(new_version) < Gem::Version.new(previous_version)
87-
raise "New version is smaller than old version"
88-
end
94+
raise "Unexpected previous version" if !previous_version.ends_with? "-latest"
95+
raise "Unexpected new version" if !new_version.ends_with? "-latest"
96+
if Gem::Version.new(new_version) < Gem::Version.new(previous_version)
97+
raise "New version is smaller than old version"
98+
end
8999

90-
parts = previous_version.split(".")
91-
new_branch_name = "release/#{parts[0]}.#{parts[1]}"
100+
parts = previous_version.split(".")
101+
new_branch_name = "release/#{parts[0]}.#{parts[1]}"
92102

93-
ReleaseUtils.git("branch", new_branch_name)
94-
puts "Created new branch #{new_branch_name}"
103+
ReleaseUtils.git("branch", new_branch_name, "#{check_ref}^1")
104+
puts "Created new branch #{new_branch_name}"
95105

96-
File.write(
97-
ENV["GITHUB_OUTPUT"] || "/dev/null",
98-
"new_branch_name=#{new_branch_name}\n",
99-
mode: "a",
100-
)
106+
File.write(
107+
ENV["GITHUB_OUTPUT"] || "/dev/null",
108+
"new_branch_name=#{new_branch_name}\n",
109+
mode: "a",
110+
)
101111

102-
if ReleaseUtils.dry_run?
103-
puts "[DRY RUN] Skipping pushing branch #{new_branch_name} to origin"
104-
else
105-
ReleaseUtils.git("push", "--set-upstream", "origin", new_branch_name)
106-
puts "Pushed branch #{new_branch_name} to origin"
107-
end
112+
if ReleaseUtils.dry_run?
113+
puts "[DRY RUN] Skipping pushing branch #{new_branch_name} to origin"
114+
else
115+
ReleaseUtils.git("push", "--set-upstream", "origin", new_branch_name)
116+
puts "Pushed branch #{new_branch_name} to origin"
108117
end
109118

110119
puts "Done!"
@@ -114,48 +123,49 @@ namespace :release do
114123
task "maybe_tag_release", [:check_ref] do |t, args|
115124
check_ref = args[:check_ref]
116125

117-
ReleaseUtils.with_clean_worktree("main") do
118-
ReleaseUtils.git "checkout", check_ref.to_s
119-
release_branches =
120-
ReleaseUtils
121-
.git("branch", "-a", "--contains", check_ref, "release/*", "main")
122-
.lines
123-
.map(&:strip)
124-
if release_branches.empty?
125-
puts "Commit #{check_ref} is not on a release branch. Skipping"
126-
next
126+
current_version =
127+
ReleaseUtils.with_clean_worktree("main") do
128+
ReleaseUtils.git "checkout", check_ref.to_s
129+
release_branches =
130+
ReleaseUtils
131+
.git("branch", "-a", "--contains", check_ref, "release/*", "main")
132+
.lines
133+
.map(&:strip)
134+
if release_branches.empty?
135+
puts "Commit #{check_ref} is not on a release branch. Skipping"
136+
next
137+
end
138+
139+
ReleaseUtils.parse_current_version
127140
end
128141

129-
current_version = ReleaseUtils.parse_current_version
142+
tag_name = "v#{current_version}"
130143

131-
tag_name = "v#{current_version}"
144+
existing_releases =
145+
ReleaseUtils
146+
.git("tag", "-l", "v*")
147+
.lines
148+
.map { |tag| Gem::Version.new(tag.strip.delete_prefix("v")) }
149+
.sort
132150

133-
existing_releases =
134-
ReleaseUtils
135-
.git("tag", "-l", "v*")
136-
.lines
137-
.map { |tag| Gem::Version.new(tag.strip.delete_prefix("v")) }
138-
.sort
151+
if ReleaseUtils.ref_exists?(tag_name)
152+
puts "Tag #{tag_name} already exists, skipping"
153+
else
154+
puts "Tagging release #{tag_name}"
155+
ReleaseUtils.git "tag", "-a", tag_name, "-m", "version #{current_version}"
139156

140-
if ReleaseUtils.ref_exists?(tag_name)
141-
puts "Tag #{tag_name} already exists, skipping"
157+
if ReleaseUtils.dry_run?
158+
puts "[DRY RUN] Skipping pushing tag to origin"
142159
else
143-
puts "Tagging release #{tag_name}"
144-
ReleaseUtils.git "tag", "-a", tag_name, "-m", "version #{current_version}"
160+
ReleaseUtils.git "push", "origin", "refs/tags/#{tag_name}"
161+
end
145162

163+
if existing_releases.last && Gem::Version.new(current_version) > existing_releases.last
164+
ReleaseUtils.git "tag", "-a", "release", "-m", "latest release"
146165
if ReleaseUtils.dry_run?
147-
puts "[DRY RUN] Skipping pushing tag to origin"
166+
puts "[DRY RUN] Skipping pushing 'release' tag to origin"
148167
else
149-
ReleaseUtils.git "push", "origin", "refs/tags/#{tag_name}"
150-
end
151-
152-
if existing_releases.last && Gem::Version.new(current_version) > existing_releases.last
153-
ReleaseUtils.git "tag", "-a", "release", "-m", "latest release"
154-
if ReleaseUtils.dry_run?
155-
puts "[DRY RUN] Skipping pushing 'release' tag to origin"
156-
else
157-
ReleaseUtils.git "push", "origin", "-f", "refs/tags/release"
158-
end
168+
ReleaseUtils.git "push", "origin", "-f", "refs/tags/release"
159169
end
160170
end
161171
end
@@ -188,11 +198,12 @@ namespace :release do
188198
ReleaseUtils.git "commit",
189199
"-m",
190200
"DEV: Begin development of v#{target_version_number}\n\nMerging this will trigger the creation of a `release/#{current_version.sub(".0-latest", "")}` branch on the preceding commit."
191-
ReleaseUtils.git "push", "-f", "--set-upstream", "origin", pr_branch_name
192-
193-
ReleaseUtils.make_pr(base: branch, branch: pr_branch_name)
194201
end
195202

203+
ReleaseUtils.git "push", "-f", "--set-upstream", "origin", pr_branch_name
204+
205+
ReleaseUtils.make_pr(base: branch, branch: pr_branch_name)
206+
196207
puts "Done! Branch #{pr_branch_name} has been pushed to origin and a pull request has been created."
197208
end
198209

@@ -222,11 +233,12 @@ namespace :release do
222233
ReleaseUtils.git "commit",
223234
"-m",
224235
"DEV: Bump version on `#{branch}` to `v#{target_version_number}`"
225-
ReleaseUtils.git "push", "-f", "--set-upstream", "origin", pr_branch_name
226-
227-
ReleaseUtils.make_pr(base: branch, branch: pr_branch_name)
228236
end
229237

238+
ReleaseUtils.git "push", "-f", "--set-upstream", "origin", pr_branch_name
239+
240+
ReleaseUtils.make_pr(base: branch, branch: pr_branch_name)
241+
230242
puts "Done! Branch #{pr_branch_name} has been pushed to origin and a pull request has been created."
231243
end
232244
end

0 commit comments

Comments
 (0)