@@ -19,26 +19,25 @@ import (
19
19
"golang.org/x/mod/semver"
20
20
)
21
21
22
- // PrereleaseGoplsTasks implements a new workflow definition include all the tasks
23
- // to create a gopls pre-release candidate.
24
- type PrereleaseGoplsTasks struct {
22
+ // ReleaseGoplsTasks provides workflow definitions and tasks for releasing gopls.
23
+ type ReleaseGoplsTasks struct {
25
24
Github GitHubClientInterface
26
25
Gerrit GerritClient
27
26
CloudBuild CloudBuildClient
28
27
SendMail func (MailHeader , MailContent ) error
29
28
AnnounceMailHeader MailHeader
30
29
}
31
30
32
- // NewDefinition create a new workflow definition for gopls pre-release.
33
- func (r * PrereleaseGoplsTasks ) NewDefinition () * wf.Definition {
31
+ // NewPrereleaseDefinition create a new workflow definition for gopls pre-release.
32
+ func (r * ReleaseGoplsTasks ) NewPrereleaseDefinition () * wf.Definition {
34
33
wd := wf .New (wf.ACL {Groups : []string {groups .ToolsTeam }})
35
34
36
35
// TODO(hxjiang): provide potential release versions in the relui where the
37
36
// coordinator can choose which version to release instead of manual input.
38
37
version := wf .Param (wd , wf.ParamDef [string ]{Name : "version" })
39
38
reviewers := wf .Param (wd , reviewersParam )
40
39
41
- semv := wf .Task1 (wd , "validating input version" , r .isValidVersion , version )
40
+ semv := wf .Task1 (wd , "validating input version" , r .isValidReleaseVersion , version )
42
41
prerelease := wf .Task1 (wd , "find the pre-release version" , r .nextPrerelease , semv )
43
42
44
43
issue := wf .Task1 (wd , "create release git issue" , r .createReleaseIssue , semv )
@@ -65,7 +64,7 @@ func (r *PrereleaseGoplsTasks) NewDefinition() *wf.Definition {
65
64
//
66
65
// Returns the ID of the release issue (either newly created or pre-existing).
67
66
// Returns error if the release milestone does not exist or is closed.
68
- func (r * PrereleaseGoplsTasks ) createReleaseIssue (ctx * wf.TaskContext , semv semversion ) (int64 , error ) {
67
+ func (r * ReleaseGoplsTasks ) createReleaseIssue (ctx * wf.TaskContext , semv semversion ) (int64 , error ) {
69
68
versionString := fmt .Sprintf ("v%v.%v.%v" , semv .Major , semv .Minor , semv .Patch )
70
69
milestoneName := fmt .Sprintf ("gopls/%s" , versionString )
71
70
// All milestones and issues resides under go repo.
@@ -126,7 +125,7 @@ func goplsReleaseBranchName(semv semversion) string {
126
125
// createBranchIfMinor create the release branch if the input version is a minor
127
126
// release.
128
127
// All patch releases under the same minor version share the same release branch.
129
- func (r * PrereleaseGoplsTasks ) createBranchIfMinor (ctx * wf.TaskContext , semv semversion ) error {
128
+ func (r * ReleaseGoplsTasks ) createBranchIfMinor (ctx * wf.TaskContext , semv semversion ) error {
130
129
branch := goplsReleaseBranchName (semv )
131
130
132
131
// Require gopls release branch existence if this is a non-minor release.
@@ -176,7 +175,7 @@ func openCL(ctx *wf.TaskContext, gerrit GerritClient, branch, title string) (str
176
175
//
177
176
// It returns the change ID required to update the config if changes are needed,
178
177
// otherwise it returns an empty string indicating no update is necessary.
179
- func (r * PrereleaseGoplsTasks ) updateCodeReviewConfig (ctx * wf.TaskContext , semv semversion , reviewers []string , issue int64 ) (string , error ) {
178
+ func (r * ReleaseGoplsTasks ) updateCodeReviewConfig (ctx * wf.TaskContext , semv semversion , reviewers []string , issue int64 ) (string , error ) {
180
179
const configFile = "codereview.cfg"
181
180
182
181
branch := goplsReleaseBranchName (semv )
@@ -226,7 +225,7 @@ parent-branch: master
226
225
227
226
// nextPrerelease inspects the tags in tools repo that match with the given
228
227
// version and find the next prerelease version.
229
- func (r * PrereleaseGoplsTasks ) nextPrerelease (ctx * wf.TaskContext , semv semversion ) (string , error ) {
228
+ func (r * ReleaseGoplsTasks ) nextPrerelease (ctx * wf.TaskContext , semv semversion ) (string , error ) {
230
229
cur , err := currentGoplsPrerelease (ctx , r .Gerrit , semv )
231
230
if err != nil {
232
231
return "" , err
@@ -272,7 +271,7 @@ func currentGoplsPrerelease(ctx *wf.TaskContext, client GerritClient, semv semve
272
271
// version as dependency.
273
272
//
274
273
// It returns the change ID, or "" if the CL was not created.
275
- func (r * PrereleaseGoplsTasks ) updateXToolsDependency (ctx * wf.TaskContext , semv semversion , pre string , reviewers []string , issue int64 ) (string , error ) {
274
+ func (r * ReleaseGoplsTasks ) updateXToolsDependency (ctx * wf.TaskContext , semv semversion , pre string , reviewers []string , issue int64 ) (string , error ) {
276
275
if pre == "" {
277
276
return "" , fmt .Errorf ("the input pre-release version should not be empty" )
278
277
}
@@ -324,7 +323,7 @@ go mod tidy -compat=1.19
324
323
// smoke test.
325
324
// The input version can be a commit, a branch name, a semantic version, see
326
325
// more detail https://go.dev/ref/mod#version-queries
327
- func (r * PrereleaseGoplsTasks ) verifyGoplsInstallation (ctx * wf.TaskContext , version string ) error {
326
+ func (r * ReleaseGoplsTasks ) verifyGoplsInstallation (ctx * wf.TaskContext , version string ) error {
328
327
if version == "" {
329
328
return fmt .Errorf ("the input version should not be empty" )
330
329
}
@@ -359,7 +358,7 @@ $(go env GOPATH)/bin/gopls references -d main.go:4:8 &> smoke.log
359
358
// The input semversion provides Major, Minor, and Patch info.
360
359
// The input pre-release, generated by previous steps of the workflow, provides
361
360
// Pre-release info.
362
- func (r * PrereleaseGoplsTasks ) tagPrerelease (ctx * wf.TaskContext , semv semversion , commit , pre string ) (string , error ) {
361
+ func (r * ReleaseGoplsTasks ) tagPrerelease (ctx * wf.TaskContext , semv semversion , commit , pre string ) (string , error ) {
363
362
if commit == "" {
364
363
return "" , fmt .Errorf ("the input commit should not be empty" )
365
364
}
@@ -387,7 +386,7 @@ type goplsPrereleaseAnnouncement struct {
387
386
Issue int64
388
387
}
389
388
390
- func (r * PrereleaseGoplsTasks ) mailAnnouncement (ctx * wf.TaskContext , semv semversion , prerelease , commit string , issue int64 ) error {
389
+ func (r * ReleaseGoplsTasks ) mailAnnouncement (ctx * wf.TaskContext , semv semversion , prerelease , commit string , issue int64 ) error {
391
390
announce := goplsPrereleaseAnnouncement {
392
391
Version : prerelease ,
393
392
Branch : goplsReleaseBranchName (semv ),
@@ -404,7 +403,7 @@ func (r *PrereleaseGoplsTasks) mailAnnouncement(ctx *wf.TaskContext, semv semver
404
403
return r .SendMail (r .AnnounceMailHeader , content )
405
404
}
406
405
407
- func (r * PrereleaseGoplsTasks ) isValidVersion (ctx * wf.TaskContext , ver string ) (semversion , error ) {
406
+ func (r * ReleaseGoplsTasks ) isValidReleaseVersion (ctx * wf.TaskContext , ver string ) (semversion , error ) {
408
407
if ! semver .IsValid (ver ) {
409
408
return semversion {}, fmt .Errorf ("the input %q version does not follow semantic version schema" , ver )
410
409
}
@@ -463,7 +462,7 @@ func (s *semversion) prereleaseVersion() (int, error) {
463
462
464
463
// possibleGoplsVersions identifies suitable versions for the upcoming release
465
464
// based on the current tags in the repo.
466
- func (r * PrereleaseGoplsTasks ) possibleGoplsVersions (ctx * wf.TaskContext ) ([]string , error ) {
465
+ func (r * ReleaseGoplsTasks ) possibleGoplsVersions (ctx * wf.TaskContext ) ([]string , error ) {
467
466
tags , err := r .Gerrit .ListTags (ctx , "tools" )
468
467
if err != nil {
469
468
return nil , err
@@ -524,15 +523,8 @@ func (r *PrereleaseGoplsTasks) possibleGoplsVersions(ctx *wf.TaskContext) ([]str
524
523
return possible , nil
525
524
}
526
525
527
- // ReleaseGoplsTasks implements a new workflow definition include all the tasks
528
- // to release gopls.
529
- type ReleaseGoplsTasks struct {
530
- Gerrit GerritClient
531
- CloudBuild CloudBuildClient
532
- }
533
-
534
- // NewDefinition create a new workflow definition for gopls release.
535
- func (r * ReleaseGoplsTasks ) NewDefinition () * wf.Definition {
526
+ // NewReleaseDefinition create a new workflow definition for gopls release.
527
+ func (r * ReleaseGoplsTasks ) NewReleaseDefinition () * wf.Definition {
536
528
wd := wf .New (wf.ACL {Groups : []string {groups .ToolsTeam }})
537
529
538
530
version := wf .Param (wd , wf.ParamDef [string ]{Name : "pre-release version" })
0 commit comments