@@ -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 \n Merging 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
232244end
0 commit comments