@@ -19,6 +19,16 @@ import (
19
19
"golang.org/x/mod/semver"
20
20
)
21
21
22
+ var releaseCoordinatorsParam = wf.ParamDef [[]string ]{
23
+ Name : "Release Coordinator Usernames" ,
24
+ ParamType : wf .SliceShort ,
25
+ Doc : `Release Coordinator Usernames is a required list of the coordinators of the release.
26
+
27
+ The first user in the list will be assigned to the release tracking issue.
28
+ All users will be added as reviewers for automatically generated CLs.` ,
29
+ Check : CheckCoordinators ,
30
+ }
31
+
22
32
// ReleaseGoplsTasks provides workflow definitions and tasks for releasing gopls.
23
33
type ReleaseGoplsTasks struct {
24
34
Github GitHubClientInterface
@@ -41,27 +51,27 @@ func (r *ReleaseGoplsTasks) NewPrereleaseDefinition() *wf.Definition {
41
51
// bump strategy.
42
52
// Use with caution.
43
53
inputVersion := wf .Param (wd , wf.ParamDef [string ]{Name : "explicit version (optional)" })
44
- reviewers := wf .Param (wd , reviewersParam )
54
+ coordinators := wf .Param (wd , releaseCoordinatorsParam )
45
55
46
56
release := wf .Task2 (wd , "determine the release version" , r .determineReleaseVersion , inputVersion , versionBumpStrategy )
47
57
prerelease := wf .Task1 (wd , "find the next pre-release version" , r .nextPrereleaseVersion , release )
48
58
approved := wf .Action2 (wd , "wait for release coordinator approval" , r .approvePrerelease , release , prerelease )
49
59
50
- issue := wf .Task2 (wd , "create release git issue" , r .findOrCreateGitHubIssue , release , wf .Const (true ), wf .After (approved ))
60
+ issue := wf .Task3 (wd , "create release git issue" , r .findOrCreateGitHubIssue , release , coordinators , wf .Const (true ), wf .After (approved ))
51
61
branchCreated := wf .Action1 (wd , "create new branch if minor release" , r .createBranchIfMinor , release , wf .After (issue ))
52
62
53
- configChangeID := wf .Task3 (wd , "update branch's codereview.cfg" , r .updateCodeReviewConfig , release , reviewers , issue , wf .After (branchCreated ))
63
+ configChangeID := wf .Task3 (wd , "update branch's codereview.cfg" , r .updateCodeReviewConfig , release , coordinators , issue , wf .After (branchCreated ))
54
64
configCommit := wf .Task1 (wd , "await config CL submission" , clAwaiter {r .Gerrit }.awaitSubmission , configChangeID )
55
65
56
- dependencyChangeID := wf .Task4 (wd , "update gopls' x/tools dependency" , r .updateXToolsDependency , release , prerelease , reviewers , issue , wf .After (configCommit ))
66
+ dependencyChangeID := wf .Task4 (wd , "update gopls' x/tools dependency" , r .updateXToolsDependency , release , prerelease , coordinators , issue , wf .After (configCommit ))
57
67
dependencyCommit := wf .Task1 (wd , "await gopls' x/tools dependency CL submission" , clAwaiter {r .Gerrit }.awaitSubmission , dependencyChangeID )
58
68
59
69
verified := wf .Action1 (wd , "verify installing latest gopls using release branch dependency commit" , r .verifyGoplsInstallation , dependencyCommit )
60
70
prereleaseVersion := wf .Task3 (wd , "tag pre-release" , r .tagPrerelease , release , dependencyCommit , prerelease , wf .After (verified ))
61
71
prereleaseVerified := wf .Action1 (wd , "verify installing latest gopls using release branch pre-release version" , r .verifyGoplsInstallation , prereleaseVersion )
62
72
wf .Action4 (wd , "mail announcement" , r .mailPrereleaseAnnouncement , release , prereleaseVersion , dependencyCommit , issue , wf .After (prereleaseVerified ))
63
73
64
- vscodeGoChanges := wf .Task4 (wd , "update gopls version in vscode-go" , r .updateVSCodeGoGoplsVersion , reviewers , issue , release , prerelease , wf .After (prereleaseVerified ))
74
+ vscodeGoChanges := wf .Task4 (wd , "update gopls version in vscode-go" , r .updateVSCodeGoGoplsVersion , coordinators , issue , release , prerelease , wf .After (prereleaseVerified ))
65
75
_ = wf .Task1 (wd , "await gopls version update CLs submission in vscode-go" , clAwaiter {r .Gerrit }.awaitSubmissions , vscodeGoChanges )
66
76
67
77
wf .Output (wd , "version" , prereleaseVersion )
@@ -144,7 +154,7 @@ func (r *ReleaseGoplsTasks) approveRelease(ctx *wf.TaskContext, release releaseV
144
154
// If the release issue exists, return the issue ID.
145
155
// If 'create' is true and no issue exists, a new one is created.
146
156
// If 'create' is false and no issue exists, an error is returned.
147
- func (r * ReleaseGoplsTasks ) findOrCreateGitHubIssue (ctx * wf.TaskContext , release releaseVersion , create bool ) (int64 , error ) {
157
+ func (r * ReleaseGoplsTasks ) findOrCreateGitHubIssue (ctx * wf.TaskContext , release releaseVersion , coordinators [] string , create bool ) (int64 , error ) {
148
158
versionString := release .String ()
149
159
milestoneName := fmt .Sprintf ("gopls/%s" , versionString )
150
160
// All milestones and issues resides under go repo.
@@ -186,14 +196,20 @@ func (r *ReleaseGoplsTasks) findOrCreateGitHubIssue(ctx *wf.TaskContext, release
186
196
- [ ] tag gopls/%s
187
197
- [ ] (if vX.Y.0 release): update dependencies in master for the next release
188
198
` , versionString , goplsReleaseBranchName (release ), versionString , versionString )
189
- // TODO(hxjiang): accept a new parameter release coordinator.
190
- assignee := "h9jiang"
199
+
200
+ if len (coordinators ) == 0 {
201
+ return 0 , fmt .Errorf ("the input coordinators slice is empty" )
202
+ }
203
+ assignee , err := lookupCoordinator (coordinators [0 ])
204
+ if err != nil {
205
+ return 0 , fmt .Errorf ("failed to find the coordinator %q" , coordinators [0 ])
206
+ }
191
207
issue , _ , err := r .Github .CreateIssue (ctx , "golang" , "go" , & github.IssueRequest {
192
- Title : & title ,
193
- Body : & content ,
208
+ Title : github . String ( title ) ,
209
+ Body : github . String ( content ) ,
194
210
Labels : & []string {"gopls" , "Tools" },
195
- Assignee : & assignee ,
196
- Milestone : & milestoneID ,
211
+ Assignee : github . String ( assignee . GitHub ) ,
212
+ Milestone : github . Int ( milestoneID ) ,
197
213
})
198
214
if err != nil {
199
215
return 0 , fmt .Errorf ("failed to create release tracking issue for %q: %w" , versionString , err )
@@ -620,21 +636,21 @@ func (r *ReleaseGoplsTasks) NewReleaseDefinition() *wf.Definition {
620
636
// bump strategy.
621
637
// Use with caution.
622
638
inputVersion := wf .Param (wd , wf.ParamDef [string ]{Name : "explicit version (optional)" })
623
- reviewers := wf .Param (wd , reviewersParam )
639
+ coordinators := wf .Param (wd , releaseCoordinatorsParam )
624
640
625
641
release := wf .Task2 (wd , "determine the release version" , r .determineReleaseVersion , inputVersion , versionBumpStrategy )
626
642
prerelease := wf .Task1 (wd , "find the latest pre-release version" , r .latestPrerelease , release )
627
643
approved := wf .Action2 (wd , "wait for release coordinator approval" , r .approveRelease , release , prerelease )
628
644
629
645
tagged := wf .Action2 (wd , "tag the release" , r .tagRelease , release , prerelease , wf .After (approved ))
630
646
631
- issue := wf .Task2 (wd , "find release git issue" , r .findOrCreateGitHubIssue , release , wf .Const (false ))
647
+ issue := wf .Task3 (wd , "find release git issue" , r .findOrCreateGitHubIssue , release , wf . Const ([] string {}) , wf .Const (false ))
632
648
_ = wf .Action1 (wd , "mail announcement" , r .mailReleaseAnnouncement , release , wf .After (tagged ))
633
649
634
- changeID := wf .Task3 (wd , "updating x/tools dependency in master branch in gopls sub dir" , r .updateDependencyIfMinor , reviewers , release , issue , wf .After (tagged ))
650
+ changeID := wf .Task3 (wd , "updating x/tools dependency in master branch in gopls sub dir" , r .updateDependencyIfMinor , coordinators , release , issue , wf .After (tagged ))
635
651
_ = wf .Task1 (wd , "await x/tools gopls dependency CL submission in gopls sub dir" , clAwaiter {r .Gerrit }.awaitSubmission , changeID )
636
652
637
- vscodeGoChanges := wf .Task4 (wd , "update gopls version in vscode-go" , r .updateVSCodeGoGoplsVersion , reviewers , issue , release , wf .Const ("" ), wf .After (tagged ))
653
+ vscodeGoChanges := wf .Task4 (wd , "update gopls version in vscode-go" , r .updateVSCodeGoGoplsVersion , coordinators , issue , release , wf .Const ("" ), wf .After (tagged ))
638
654
_ = wf .Task1 (wd , "await gopls version update CLs submission in vscode-go" , clAwaiter {r .Gerrit }.awaitSubmissions , vscodeGoChanges )
639
655
640
656
return wd
0 commit comments