Skip to content

Commit 8353211

Browse files
h9jianggopherbot
authored andcommitted
internal/task: add release definition for vscode-go stable release
- The flow accepts one parameter "verison bump strategy". - The flow uses that version bump strategy to interpret the version coordinator want to release. (from "next patch" -> vX.Y.Z) - The flow finds the latest prerelease of the interpreted release version. (from vX.Y.Z -> vX.Y.Z-rc.V) - The flow waits for coorindator's approval before moving forward to next step. A local relui screenshot is at golang/vscode-go#3500 (comment) For golang/vscode-go#3500 Change-Id: Ia8573451db5d84b126d95c5c9c2821e5221fa6be Reviewed-on: https://go-review.googlesource.com/c/build/+/614299 Reviewed-by: Dmitri Shuralyov <[email protected]> Reviewed-by: Hyang-Ah Hana Kim <[email protected]> LUCI-TryBot-Result: Go LUCI <[email protected]> Auto-Submit: Hongxiang Jiang <[email protected]>
1 parent ccd3923 commit 8353211

File tree

2 files changed

+42
-5
lines changed

2 files changed

+42
-5
lines changed

cmd/relui/main.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -322,6 +322,7 @@ func main() {
322322
AnnounceMailHeader: vscodeGoAnnMail,
323323
}
324324
dh.RegisterDefinition("Create a vscode-go release candidate", releaseVSCodeGoTasks.NewPrereleaseDefinition())
325+
dh.RegisterDefinition("Release a vscode-go stable version", releaseVSCodeGoTasks.NewReleaseDefinition())
325326
dh.RegisterDefinition("Release a vscode-go insider version", releaseVSCodeGoTasks.NewInsiderDefinition())
326327

327328
tagTelemetryTasks := &task.TagTelemetryTasks{

internal/task/releasevscodego.go

Lines changed: 41 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ func (r *ReleaseVSCodeGoTasks) NewPrereleaseDefinition() *wf.Definition {
146146
release := wf.Task1(wd, "determine the release version", r.determineReleaseVersion, versionBumpStrategy)
147147
prerelease := wf.Task1(wd, "find the next pre-release version", r.nextPrereleaseVersion, release)
148148
revision := wf.Task2(wd, "find the revision for the pre-release version", r.findRevision, release, prerelease)
149-
approved := wf.Action2(wd, "await release coordinator's approval", r.approvePrereleaseVersion, release, prerelease)
149+
approved := wf.Action2(wd, "await release coordinator's approval", r.approveStablePrerelease, release, prerelease)
150150

151151
verified := wf.Action1(wd, "verify the release candidate", r.verifyTestResults, revision, wf.After(approved))
152152

@@ -755,7 +755,7 @@ func (r *ReleaseVSCodeGoTasks) NewInsiderDefinition() *wf.Definition {
755755

756756
release := wf.Task0(wd, "determine the insider version", r.determineInsiderVersion)
757757
revision := wf.Task2(wd, "read the head of master branch", r.Gerrit.ReadBranchHead, wf.Const("vscode-go"), wf.Const("master"))
758-
approved := wf.Action2(wd, "await release coordinator's approval", r.approveInsiderVersion, release, revision)
758+
approved := wf.Action2(wd, "await release coordinator's approval", r.approveInsiderRelease, release, revision)
759759

760760
verified := wf.Action1(wd, "verify the determined commit", r.verifyTestResults, revision, wf.After(approved))
761761
build := wf.Task3(wd, "generate package extension (.vsix) from the commit", r.generatePackageExtension, release, wf.Const(""), revision, wf.After(verified))
@@ -877,15 +877,51 @@ func latestVersion(versions []string, filters ...func(releaseVersion, string) bo
877877
return latestRelease, latestPre
878878
}
879879

880-
func (r *ReleaseVSCodeGoTasks) approvePrereleaseVersion(ctx *wf.TaskContext, release releaseVersion, prerelease string) error {
880+
func (r *ReleaseVSCodeGoTasks) approveStablePrerelease(ctx *wf.TaskContext, release releaseVersion, prerelease string) error {
881881
ctx.Printf("The next release candidate will be %s", versionString(release, prerelease))
882882
return r.ApproveAction(ctx)
883883
}
884884

885-
func (r *ReleaseVSCodeGoTasks) approveInsiderVersion(ctx *wf.TaskContext, release releaseVersion, commit string) error {
885+
func (r *ReleaseVSCodeGoTasks) approveInsiderRelease(ctx *wf.TaskContext, release releaseVersion, commit string) error {
886886
// The insider version is picked from the actively developed master branch.
887887
// The commit information is essential for the release coordinator.
888-
ctx.Printf("The insider version v%v.%v.%v will released based on commit %s", release.Major, release.Minor, release.Patch, commit)
888+
ctx.Printf("The insider version %s will released based on commit %s", release, commit)
889889
ctx.Printf("See commit detail: https://go.googlesource.com/vscode-go/+/%s", commit)
890890
return r.ApproveAction(ctx)
891891
}
892+
893+
func (r *ReleaseVSCodeGoTasks) approveStableRelease(ctx *wf.TaskContext, release releaseVersion, prerelease string) error {
894+
ctx.Printf("The release candidate %s will be released as %s", versionString(release, prerelease), release)
895+
ctx.Printf("See release candidate detail: https://go.googlesource.com/vscode-go/+/refs/tags/%s", versionString(release, prerelease))
896+
return r.ApproveAction(ctx)
897+
}
898+
899+
// NewReleaseDefinition creates a new workflow definition for vscode-go stable
900+
// version release.
901+
func (r *ReleaseVSCodeGoTasks) NewReleaseDefinition() *wf.Definition {
902+
wd := wf.New(wf.ACL{Groups: []string{groups.ToolsTeam}})
903+
904+
versionBumpStrategy := wf.Param(wd, nextVersionParam)
905+
release := wf.Task1(wd, "determine the release version", r.determineReleaseVersion, versionBumpStrategy)
906+
prerelease := wf.Task1(wd, "find the latest pre-release version", r.latestPrereleaseVersion, release)
907+
908+
_ = wf.Action2(wd, "await release coordinator's approval", r.approveStableRelease, release, prerelease)
909+
910+
return wd
911+
}
912+
913+
// latestPrereleaseVersion inspects the tags in vscode-go repo that match with
914+
// the given version and finds the latest pre-release version.
915+
func (r *ReleaseVSCodeGoTasks) latestPrereleaseVersion(ctx *wf.TaskContext, release releaseVersion) (string, error) {
916+
tags, err := r.Gerrit.ListTags(ctx, "vscode-go")
917+
if err != nil {
918+
return "", err
919+
}
920+
921+
_, prerelease := latestVersion(tags, isSameReleaseVersion(release), isPrereleaseMatchRegex(`^rc\.\d+$`))
922+
if prerelease == "" {
923+
return "", fmt.Errorf("could not find any release candidate for version %s", release)
924+
}
925+
926+
return prerelease, nil
927+
}

0 commit comments

Comments
 (0)