Skip to content

Commit 29ddaf7

Browse files
h9jianggopherbot
authored andcommitted
internal/task: merge gopls pre-release task and release task
Keeping one struct gopls release task which can create both gopls release workflow and pre-release workflow using different method. For golang/go#57643 Change-Id: I8880684ab1cc0068b1a02f8bc3d791f3ad98bcfe Reviewed-on: https://go-review.googlesource.com/c/build/+/607497 Auto-Submit: Hongxiang Jiang <[email protected]> Reviewed-by: Robert Findley <[email protected]> Reviewed-by: Dmitri Shuralyov <[email protected]> LUCI-TryBot-Result: Go LUCI <[email protected]>
1 parent 138c244 commit 29ddaf7

File tree

3 files changed

+28
-41
lines changed

3 files changed

+28
-41
lines changed

cmd/relui/main.go

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -313,7 +313,7 @@ func main() {
313313
}
314314
dh.RegisterDefinition("Tag a new version of x/telemetry/config (if necessary)", tagTelemetryTasks.NewDefinition())
315315

316-
prereleaseGoplsTasks := task.PrereleaseGoplsTasks{
316+
goplsTasks := task.ReleaseGoplsTasks{
317317
Github: &task.GitHubClient{
318318
V3: github.NewClient(githubHTTPClient),
319319
V4: githubv4.NewClient(githubHTTPClient),
@@ -323,13 +323,8 @@ func main() {
323323
SendMail: mailFunc,
324324
AnnounceMailHeader: goplsAnnMail,
325325
}
326-
dh.RegisterDefinition("Prepare a pre-release gopls candidate", prereleaseGoplsTasks.NewDefinition())
327-
328-
releaseGoplsTasks := task.ReleaseGoplsTasks{
329-
Gerrit: gerritClient,
330-
CloudBuild: cloudBuildClient,
331-
}
332-
dh.RegisterDefinition("Release gopls", releaseGoplsTasks.NewDefinition())
326+
dh.RegisterDefinition("Prepare a pre-release gopls candidate", goplsTasks.NewPrereleaseDefinition())
327+
dh.RegisterDefinition("Release gopls", goplsTasks.NewReleaseDefinition())
333328

334329
privateSyncTask := &task.PrivateMasterSyncTask{
335330
Git: gitClient,

internal/task/releasegopls.go

Lines changed: 17 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -19,26 +19,25 @@ import (
1919
"golang.org/x/mod/semver"
2020
)
2121

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 {
2524
Github GitHubClientInterface
2625
Gerrit GerritClient
2726
CloudBuild CloudBuildClient
2827
SendMail func(MailHeader, MailContent) error
2928
AnnounceMailHeader MailHeader
3029
}
3130

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 {
3433
wd := wf.New(wf.ACL{Groups: []string{groups.ToolsTeam}})
3534

3635
// TODO(hxjiang): provide potential release versions in the relui where the
3736
// coordinator can choose which version to release instead of manual input.
3837
version := wf.Param(wd, wf.ParamDef[string]{Name: "version"})
3938
reviewers := wf.Param(wd, reviewersParam)
4039

41-
semv := wf.Task1(wd, "validating input version", r.isValidVersion, version)
40+
semv := wf.Task1(wd, "validating input version", r.isValidReleaseVersion, version)
4241
prerelease := wf.Task1(wd, "find the pre-release version", r.nextPrerelease, semv)
4342

4443
issue := wf.Task1(wd, "create release git issue", r.createReleaseIssue, semv)
@@ -65,7 +64,7 @@ func (r *PrereleaseGoplsTasks) NewDefinition() *wf.Definition {
6564
//
6665
// Returns the ID of the release issue (either newly created or pre-existing).
6766
// 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) {
6968
versionString := fmt.Sprintf("v%v.%v.%v", semv.Major, semv.Minor, semv.Patch)
7069
milestoneName := fmt.Sprintf("gopls/%s", versionString)
7170
// All milestones and issues resides under go repo.
@@ -126,7 +125,7 @@ func goplsReleaseBranchName(semv semversion) string {
126125
// createBranchIfMinor create the release branch if the input version is a minor
127126
// release.
128127
// 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 {
130129
branch := goplsReleaseBranchName(semv)
131130

132131
// 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
176175
//
177176
// It returns the change ID required to update the config if changes are needed,
178177
// 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) {
180179
const configFile = "codereview.cfg"
181180

182181
branch := goplsReleaseBranchName(semv)
@@ -226,7 +225,7 @@ parent-branch: master
226225

227226
// nextPrerelease inspects the tags in tools repo that match with the given
228227
// 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) {
230229
cur, err := currentGoplsPrerelease(ctx, r.Gerrit, semv)
231230
if err != nil {
232231
return "", err
@@ -272,7 +271,7 @@ func currentGoplsPrerelease(ctx *wf.TaskContext, client GerritClient, semv semve
272271
// version as dependency.
273272
//
274273
// 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) {
276275
if pre == "" {
277276
return "", fmt.Errorf("the input pre-release version should not be empty")
278277
}
@@ -324,7 +323,7 @@ go mod tidy -compat=1.19
324323
// smoke test.
325324
// The input version can be a commit, a branch name, a semantic version, see
326325
// 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 {
328327
if version == "" {
329328
return fmt.Errorf("the input version should not be empty")
330329
}
@@ -359,7 +358,7 @@ $(go env GOPATH)/bin/gopls references -d main.go:4:8 &> smoke.log
359358
// The input semversion provides Major, Minor, and Patch info.
360359
// The input pre-release, generated by previous steps of the workflow, provides
361360
// 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) {
363362
if commit == "" {
364363
return "", fmt.Errorf("the input commit should not be empty")
365364
}
@@ -387,7 +386,7 @@ type goplsPrereleaseAnnouncement struct {
387386
Issue int64
388387
}
389388

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 {
391390
announce := goplsPrereleaseAnnouncement{
392391
Version: prerelease,
393392
Branch: goplsReleaseBranchName(semv),
@@ -404,7 +403,7 @@ func (r *PrereleaseGoplsTasks) mailAnnouncement(ctx *wf.TaskContext, semv semver
404403
return r.SendMail(r.AnnounceMailHeader, content)
405404
}
406405

407-
func (r *PrereleaseGoplsTasks) isValidVersion(ctx *wf.TaskContext, ver string) (semversion, error) {
406+
func (r *ReleaseGoplsTasks) isValidReleaseVersion(ctx *wf.TaskContext, ver string) (semversion, error) {
408407
if !semver.IsValid(ver) {
409408
return semversion{}, fmt.Errorf("the input %q version does not follow semantic version schema", ver)
410409
}
@@ -463,7 +462,7 @@ func (s *semversion) prereleaseVersion() (int, error) {
463462

464463
// possibleGoplsVersions identifies suitable versions for the upcoming release
465464
// 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) {
467466
tags, err := r.Gerrit.ListTags(ctx, "tools")
468467
if err != nil {
469468
return nil, err
@@ -524,15 +523,8 @@ func (r *PrereleaseGoplsTasks) possibleGoplsVersions(ctx *wf.TaskContext) ([]str
524523
return possible, nil
525524
}
526525

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 {
536528
wd := wf.New(wf.ACL{Groups: []string{groups.ToolsTeam}})
537529

538530
version := wf.Param(wd, wf.ParamDef[string]{Name: "pre-release version"})

internal/task/releasegopls_test.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ func TestPossibleGoplsVersions(t *testing.T) {
7474

7575
gerrit := NewFakeGerrit(t, tools)
7676

77-
tasks := &PrereleaseGoplsTasks{
77+
tasks := &ReleaseGoplsTasks{
7878
Gerrit: gerrit,
7979
}
8080

@@ -149,7 +149,7 @@ func TestCreateBranchIfMinor(t *testing.T) {
149149
}
150150
}
151151

152-
tasks := &PrereleaseGoplsTasks{
152+
tasks := &ReleaseGoplsTasks{
153153
Gerrit: gerritClient,
154154
}
155155

@@ -266,7 +266,7 @@ parent-branch: master
266266
t.Fatalf("ReadBranchHead should be able to get revision of release branch's head: %v", err)
267267
}
268268

269-
tasks := &PrereleaseGoplsTasks{
269+
tasks := &ReleaseGoplsTasks{
270270
Gerrit: gerritClient,
271271
CloudBuild: NewFakeCloudBuild(t, gerritClient, "", nil, fakeGo),
272272
}
@@ -359,7 +359,7 @@ func TestNextPrerelease(t *testing.T) {
359359

360360
gerrit := NewFakeGerrit(t, tools)
361361

362-
tasks := &PrereleaseGoplsTasks{
362+
tasks := &ReleaseGoplsTasks{
363363
Gerrit: gerrit,
364364
}
365365

@@ -426,7 +426,7 @@ func TestCreateReleaseIssue(t *testing.T) {
426426

427427
for _, tc := range testcases {
428428
t.Run(tc.name, func(t *testing.T) {
429-
tasks := &PrereleaseGoplsTasks{
429+
tasks := &ReleaseGoplsTasks{
430430
Github: &tc.fakeGithub,
431431
}
432432

@@ -475,7 +475,7 @@ This Gopls release is being tracked at golang/go#0.
475475
476476
Cheers.
477477
`
478-
tasks := PrereleaseGoplsTasks{
478+
tasks := ReleaseGoplsTasks{
479479
SendMail: func(h MailHeader, c MailContent) error { return nil },
480480
}
481481
var buf bytes.Buffer
@@ -651,7 +651,7 @@ EOF
651651
exit 1
652652
;;
653653
esac`, tc.wantVersion)
654-
tasks := &PrereleaseGoplsTasks{
654+
tasks := &ReleaseGoplsTasks{
655655
Gerrit: gerrit,
656656
CloudBuild: NewFakeCloudBuild(t, gerrit, "", nil, fakeGo),
657657
Github: &FakeGitHub{
@@ -662,7 +662,7 @@ esac`, tc.wantVersion)
662662
SendMail: func(h MailHeader, c MailContent) error { return nil },
663663
}
664664

665-
wd := tasks.NewDefinition()
665+
wd := tasks.NewPrereleaseDefinition()
666666
w, err := workflow.Start(wd, map[string]interface{}{
667667
reviewersParam.Name: []string(nil),
668668
"version": fmt.Sprintf("v%v.%v.%v", tc.semv.Major, tc.semv.Minor, tc.semv.Patch),

0 commit comments

Comments
 (0)