Skip to content

Commit 46dec96

Browse files
committed
internal/task: add step to publish announcement in gopls release flow
For golang/go#57643 Change-Id: I2f95f961648c9aa9a8c126982cace1a7814ae9a1 Reviewed-on: https://go-review.googlesource.com/c/build/+/611475 LUCI-TryBot-Result: Go LUCI <[email protected]> Reviewed-by: Robert Findley <[email protected]>
1 parent 3bbaa07 commit 46dec96

File tree

7 files changed

+94
-5
lines changed

7 files changed

+94
-5
lines changed

internal/task/announce.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -363,6 +363,8 @@ func announcementMail(data any) (MailContent, error) {
363363
}
364364
case releasePreAnnouncement:
365365
name = "pre-announce-minor.md"
366+
case goplsReleaseAnnouncement:
367+
name = "gopls-announce.md"
366368
case goplsPrereleaseAnnouncement:
367369
name = "gopls-pre-announce.md"
368370
default:
@@ -466,7 +468,7 @@ var announceTmpl = template.Must(template.New("").Funcs(template.FuncMap{
466468
}
467469
return "", fmt.Errorf("internal error: unhandled pre-release Go version %q", v)
468470
},
469-
}).ParseFS(tmplDir, "template/announce-*.md", "template/pre-announce-minor.md", "template/gopls-pre-announce.md"))
471+
}).ParseFS(tmplDir, "template/announce-*.md", "template/pre-announce-minor.md", "template/gopls-announce.md", "template/gopls-pre-announce.md"))
470472

471473
//go:embed template
472474
var tmplDir embed.FS

internal/task/announce_test.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,15 @@ This is CVE-2022-27536 and https://go.dev/issue/51759.`,
150150
},
151151
wantSubject: "Gopls v0.16.2-pre.1 is released",
152152
},
153+
{
154+
name: "gopls-announce",
155+
in: goplsReleaseAnnouncement{
156+
Version: "v0.16.2",
157+
Branch: "gopls-release-branch.0.16",
158+
Commit: "abc123def456ghi789",
159+
},
160+
wantSubject: "Gopls v0.16.2 is released",
161+
},
153162
}
154163
for _, tc := range tests {
155164
t.Run(tc.name, func(t *testing.T) {

internal/task/releasegopls.go

Lines changed: 35 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ func (r *ReleaseGoplsTasks) NewPrereleaseDefinition() *wf.Definition {
5959
verified := wf.Action1(wd, "verify installing latest gopls using release branch dependency commit", r.verifyGoplsInstallation, dependencyCommit)
6060
prereleaseVersion := wf.Task3(wd, "tag pre-release", r.tagPrerelease, release, dependencyCommit, prerelease, wf.After(verified))
6161
prereleaseVerified := wf.Action1(wd, "verify installing latest gopls using release branch pre-release version", r.verifyGoplsInstallation, prereleaseVersion)
62-
wf.Action4(wd, "mail announcement", r.mailAnnouncement, release, prereleaseVersion, dependencyCommit, issue, wf.After(prereleaseVerified))
62+
wf.Action4(wd, "mail announcement", r.mailPrereleaseAnnouncement, release, prereleaseVersion, dependencyCommit, issue, wf.After(prereleaseVerified))
6363

6464
vscodeGoChanges := wf.Task4(wd, "update gopls version in vscode-go", r.updateVSCodeGoGoplsVersion, reviewers, issue, release, prerelease, wf.After(prereleaseVerified))
6565
_ = wf.Task1(wd, "await gopls version update CLs submission in vscode-go", clAwaiter{r.Gerrit}.awaitSubmissions, vscodeGoChanges)
@@ -484,10 +484,10 @@ type goplsPrereleaseAnnouncement struct {
484484
Issue int64
485485
}
486486

487-
func (r *ReleaseGoplsTasks) mailAnnouncement(ctx *wf.TaskContext, semv semversion, prerelease, commit string, issue int64) error {
487+
func (r *ReleaseGoplsTasks) mailPrereleaseAnnouncement(ctx *wf.TaskContext, release semversion, rc, commit string, issue int64) error {
488488
announce := goplsPrereleaseAnnouncement{
489-
Version: prerelease,
490-
Branch: goplsReleaseBranchName(semv),
489+
Version: rc,
490+
Branch: goplsReleaseBranchName(release),
491491
Commit: commit,
492492
Issue: issue,
493493
}
@@ -501,6 +501,35 @@ func (r *ReleaseGoplsTasks) mailAnnouncement(ctx *wf.TaskContext, semv semversio
501501
return r.SendMail(r.AnnounceMailHeader, content)
502502
}
503503

504+
type goplsReleaseAnnouncement struct {
505+
Version string
506+
Branch string
507+
Commit string
508+
}
509+
510+
func (r *ReleaseGoplsTasks) mailReleaseAnnouncement(ctx *wf.TaskContext, release semversion) error {
511+
version := fmt.Sprintf("v%v.%v.%v", release.Major, release.Minor, release.Patch)
512+
513+
info, err := r.Gerrit.GetTag(ctx, "tools", fmt.Sprintf("gopls/%s", version))
514+
if err != nil {
515+
return err
516+
}
517+
518+
announce := goplsReleaseAnnouncement{
519+
Version: version,
520+
Branch: goplsReleaseBranchName(release),
521+
Commit: info.Revision,
522+
}
523+
content, err := announcementMail(announce)
524+
if err != nil {
525+
return err
526+
}
527+
ctx.Printf("announcement subject: %s\n\n", content.Subject)
528+
ctx.Printf("announcement body HTML:\n%s\n", content.BodyHTML)
529+
ctx.Printf("announcement body text:\n%s", content.BodyText)
530+
return r.SendMail(r.AnnounceMailHeader, content)
531+
}
532+
504533
func (r *ReleaseGoplsTasks) isValidReleaseVersion(ctx *wf.TaskContext, ver string) error {
505534
if !semver.IsValid(ver) {
506535
return fmt.Errorf("the input %q version does not follow semantic version schema", ver)
@@ -643,6 +672,8 @@ func (r *ReleaseGoplsTasks) NewReleaseDefinition() *wf.Definition {
643672
tagged := wf.Action2(wd, "tag the release", r.tagRelease, release, prerelease, wf.After(approved))
644673

645674
issue := wf.Task2(wd, "find release git issue", r.findOrCreateGitHubIssue, release, wf.Const(false))
675+
_ = wf.Action1(wd, "mail announcement", r.mailReleaseAnnouncement, release, wf.After(tagged))
676+
646677
changeID := wf.Task3(wd, "updating x/tools dependency in master branch in gopls sub dir", r.updateDependencyIfMinor, reviewers, release, issue, wf.After(tagged))
647678
_ = wf.Task1(wd, "await x/tools gopls dependency CL submission in gopls sub dir", clAwaiter{r.Gerrit}.awaitSubmission, changeID)
648679

internal/task/releasegopls_test.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1180,6 +1180,8 @@ case "$1" in
11801180
esac
11811181
`)
11821182

1183+
var gotSubject string // subject of the announcement email that was sent
1184+
11831185
tasks := &ReleaseGoplsTasks{
11841186
Gerrit: gerrit,
11851187
CloudBuild: NewFakeCloudBuild(t, gerrit, "", nil, fakeGo),
@@ -1195,6 +1197,10 @@ esac
11951197
},
11961198
},
11971199
},
1200+
SendMail: func(h MailHeader, c MailContent) error {
1201+
gotSubject = c.Subject
1202+
return nil
1203+
},
11981204
ApproveAction: func(tc *workflow.TaskContext) error { return nil },
11991205
}
12001206

@@ -1305,6 +1311,11 @@ esac
13051311
t.Errorf("Content of %q = %q, want %q", check.path, got, check.want)
13061312
}
13071313
}
1314+
1315+
if wantSubject := fmt.Sprintf("Gopls v%v.%v.%v is released", tc.semv.Major, tc.semv.Minor, tc.semv.Patch); gotSubject != wantSubject {
1316+
// The full email content is checked by TestAnnouncementMail.
1317+
t.Errorf("NewReleaseDefinition().Run(): got email subject %q, want %q", gotSubject, wantSubject)
1318+
}
13081319
}
13091320
t.Run("manual input version: "+tc.name, func(t *testing.T) {
13101321
runTestWithInput(map[string]any{
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
Subject: Gopls {{.Version}} is released
2+
3+
Hello gophers,
4+
5+
We have just released Gopls {{.Version}}. It is picked from release branch {{.Branch}} at commit {{.Commit | shortcommit}}.
6+
7+
If you have Go installed already, an easy way to try {{.Version}} is by using the go command:
8+
9+
```
10+
$ go install golang.org/x/tools/gopls@{{.Version}}
11+
```
12+
13+
Thanks to everyone who contributed to the release.
14+
15+
Cheers,
16+
The Go Tools Team
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<p>Hello gophers,</p>
2+
<p>We have just released Gopls v0.16.2. It is picked from release branch gopls-release-branch.0.16 at commit abc123d.</p>
3+
<p>If you have Go installed already, an easy way to try v0.16.2 is by using the go command:</p>
4+
<pre><code>$ go install golang.org/x/tools/[email protected]
5+
</code></pre>
6+
<p>Thanks to everyone who contributed to the release.</p>
7+
<p>Cheers,<br>
8+
The Go Tools Team</p>
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
Hello gophers,
2+
3+
We have just released Gopls v0.16.2. It is picked from release branch gopls-release-branch.0.16 at commit abc123d.
4+
5+
If you have Go installed already, an easy way to try v0.16.2 is by using the go command:
6+
7+
$ go install golang.org/x/tools/[email protected]
8+
9+
Thanks to everyone who contributed to the release.
10+
11+
Cheers,
12+
The Go Tools Team

0 commit comments

Comments
 (0)