@@ -32,16 +32,20 @@ func (r *ReleaseGoplsTasks) NewDefinition() *wf.Definition {
32
32
// coordinator can choose which version to release instead of manual input.
33
33
version := wf .Param (wd , wf.ParamDef [string ]{Name : "version" })
34
34
reviewers := wf .Param (wd , reviewersParam )
35
+
35
36
semversion := wf .Task1 (wd , "validating input version" , r .isValidVersion , version )
37
+ prerelease := wf .Task1 (wd , "find the pre-release version" , r .nextPrerelease , semversion )
38
+
36
39
branchCreated := wf .Action1 (wd , "creating new branch if minor release" , r .createBranchIfMinor , semversion )
37
40
38
41
configChangeID := wf .Task2 (wd , "updating branch's codereview.cfg" , r .updateCodeReviewConfig , semversion , reviewers , wf .After (branchCreated ))
39
42
configCommit := wf .Task1 (wd , "await config CL submission" , r .AwaitSubmission , configChangeID )
40
43
41
- dependencyChangeID := wf .Task2 (wd , "updating gopls' x/tools dependency" , r .updateXToolsDependency , semversion , reviewers , wf .After (configCommit ))
44
+ dependencyChangeID := wf .Task3 (wd , "updating gopls' x/tools dependency" , r .updateXToolsDependency , semversion , prerelease , reviewers , wf .After (configCommit ))
42
45
dependencyCommit := wf .Task1 (wd , "await gopls' x/tools dependency CL submission" , r .AwaitSubmission , dependencyChangeID )
43
46
44
- _ = wf .Action1 (wd , "verify installing latest gopls in release branch using go install" , r .verifyGoplsInstallation , dependencyCommit )
47
+ verified := wf .Action1 (wd , "verify installing latest gopls in release branch using go install" , r .verifyGoplsInstallation , dependencyCommit )
48
+ _ = wf .Task3 (wd , "tag pre-release" , r .tagPrerelease , semversion , prerelease , dependencyCommit , wf .After (verified ))
45
49
return wd
46
50
}
47
51
@@ -152,11 +156,11 @@ parent-branch: master
152
156
}
153
157
154
158
// nextPrerelease inspects the tags in tools repo that match with the given
155
- // version and find the next pre-release version.
156
- func (r * ReleaseGoplsTasks ) nextPrerelease (ctx * wf.TaskContext , semv semversion ) (int , error ) {
159
+ // version and find the next prerelease version.
160
+ func (r * ReleaseGoplsTasks ) nextPrerelease (ctx * wf.TaskContext , semv semversion ) (string , error ) {
157
161
tags , err := r .Gerrit .ListTags (ctx , "tools" )
158
162
if err != nil {
159
- return - 1 , fmt .Errorf ("failed to list tags for tools repo: %w" , err )
163
+ return "" , fmt .Errorf ("failed to list tags for tools repo: %w" , err )
160
164
}
161
165
162
166
max := 0
@@ -182,21 +186,20 @@ func (r *ReleaseGoplsTasks) nextPrerelease(ctx *wf.TaskContext, semv semversion)
182
186
}
183
187
}
184
188
185
- return max + 1 , nil
189
+ return fmt . Sprintf ( "pre.%v" , max + 1 ) , nil
186
190
}
187
191
188
192
// updateXToolsDependency ensures gopls sub module have the correct x/tools
189
193
// version as dependency.
190
194
//
191
195
// It returns the change ID, or "" if the CL was not created.
192
- func (r * ReleaseGoplsTasks ) updateXToolsDependency (ctx * wf.TaskContext , semv semversion , reviewers []string ) (string , error ) {
193
- pre , err := r .nextPrerelease (ctx , semv )
194
- if err != nil {
195
- return "" , fmt .Errorf ("failed to find the next prerelease version: %w" , err )
196
+ func (r * ReleaseGoplsTasks ) updateXToolsDependency (ctx * wf.TaskContext , semv semversion , pre string , reviewers []string ) (string , error ) {
197
+ if pre == "" {
198
+ return "" , fmt .Errorf ("the input pre-release version should not be empty" )
196
199
}
197
200
198
201
branch := goplsReleaseBranchName (semv )
199
- clTitle := fmt .Sprintf ("gopls: update go.mod for v%v.%v.%v-pre.%v " , semv .Major , semv .Minor , semv .Patch , pre )
202
+ clTitle := fmt .Sprintf ("gopls: update go.mod for v%v.%v.%v-%s " , semv .Major , semv .Minor , semv .Patch , pre )
200
203
openCL , err := r .openCL (ctx , branch , clTitle )
201
204
if err != nil {
202
205
return "" , fmt .Errorf ("failed to find the open CL of title %q in branch %q: %w" , clTitle , branch , err )
@@ -281,6 +284,23 @@ $(go env GOPATH)/bin/gopls references -d main.go:4:8 &> smoke.log
281
284
return nil
282
285
}
283
286
287
+ func (r * ReleaseGoplsTasks ) tagPrerelease (ctx * wf.TaskContext , semv semversion , commit , pre string ) (string , error ) {
288
+ if commit == "" {
289
+ return "" , fmt .Errorf ("the input commit should not be empty" )
290
+ }
291
+ if pre == "" {
292
+ return "" , fmt .Errorf ("the input pre-release version should not be empty" )
293
+ }
294
+
295
+ tag := fmt .Sprintf ("gopls/v%v.%v.%v-%s" , semv .Major , semv .Minor , semv .Patch , pre )
296
+ ctx .Printf ("tag commit %s with tag %s" , commit , tag )
297
+ if err := r .Gerrit .Tag (ctx , "tools" , tag , commit ); err != nil {
298
+ return "" , err
299
+ }
300
+
301
+ return tag , nil
302
+ }
303
+
284
304
// AwaitSubmission waits for the CL with the given change ID to be submitted.
285
305
//
286
306
// The return value is the submitted commit hash, or "" if changeID is "".
@@ -334,16 +354,16 @@ func parseSemver(v string) (_ semversion, ok bool) {
334
354
func (s * semversion ) prereleaseVersion () (int , error ) {
335
355
parts := strings .Split (s .Pre , "." )
336
356
if len (parts ) == 1 {
337
- return - 1 , fmt .Errorf (`prerelease version does not contain any "."` )
357
+ return - 1 , fmt .Errorf (`pre-release version does not contain any "."` )
338
358
}
339
359
340
360
if len (parts ) > 2 {
341
- return - 1 , fmt .Errorf (`prerelease version contains %v "."` , len (parts )- 1 )
361
+ return - 1 , fmt .Errorf (`pre-release version contains %v "."` , len (parts )- 1 )
342
362
}
343
363
344
364
pre , err := strconv .Atoi (parts [1 ])
345
365
if err != nil {
346
- return - 1 , fmt .Errorf ("failed to convert prerelease version to int %q: %w" , pre , err )
366
+ return - 1 , fmt .Errorf ("failed to convert pre-release version to int %q: %w" , pre , err )
347
367
}
348
368
349
369
return pre , nil
0 commit comments