@@ -146,7 +146,7 @@ func (r *ReleaseVSCodeGoTasks) NewPrereleaseDefinition() *wf.Definition {
146
146
release := wf .Task1 (wd , "determine the release version" , r .determineReleaseVersion , versionBumpStrategy )
147
147
prerelease := wf .Task1 (wd , "find the next pre-release version" , r .nextPrereleaseVersion , release )
148
148
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 )
150
150
151
151
verified := wf .Action1 (wd , "verify the release candidate" , r .verifyTestResults , revision , wf .After (approved ))
152
152
@@ -755,7 +755,7 @@ func (r *ReleaseVSCodeGoTasks) NewInsiderDefinition() *wf.Definition {
755
755
756
756
release := wf .Task0 (wd , "determine the insider version" , r .determineInsiderVersion )
757
757
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 )
759
759
760
760
verified := wf .Action1 (wd , "verify the determined commit" , r .verifyTestResults , revision , wf .After (approved ))
761
761
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
877
877
return latestRelease , latestPre
878
878
}
879
879
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 {
881
881
ctx .Printf ("The next release candidate will be %s" , versionString (release , prerelease ))
882
882
return r .ApproveAction (ctx )
883
883
}
884
884
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 {
886
886
// The insider version is picked from the actively developed master branch.
887
887
// 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 )
889
889
ctx .Printf ("See commit detail: https://go.googlesource.com/vscode-go/+/%s" , commit )
890
890
return r .ApproveAction (ctx )
891
891
}
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