@@ -15,6 +15,7 @@ import (
15
15
"strconv"
16
16
"strings"
17
17
"text/template"
18
+ "time"
18
19
19
20
"cloud.google.com/go/cloudbuild/apiv1/v2/cloudbuildpb"
20
21
"github.com/google/go-github/v48/github"
@@ -1063,6 +1064,8 @@ func (r *ReleaseVSCodeGoTasks) NewReleaseDefinition() *wf.Definition {
1063
1064
wd := wf .New (wf.ACL {Groups : []string {groups .ToolsTeam }})
1064
1065
1065
1066
versionBumpStrategy := wf .Param (wd , nextVersionParam )
1067
+ reviewers := wf .Param (wd , reviewersParam )
1068
+
1066
1069
release := wf .Task1 (wd , "determine the release version" , r .determineReleaseVersion , versionBumpStrategy )
1067
1070
prerelease := wf .Task1 (wd , "find the latest pre-release version" , r .latestPrereleaseVersion , release )
1068
1071
@@ -1074,9 +1077,13 @@ func (r *ReleaseVSCodeGoTasks) NewReleaseDefinition() *wf.Definition {
1074
1077
build := wf .Task3 (wd , "generate package extension (.vsix) from release candidate tag" , r .generatePackageExtension , release , wf .Const ("" ), commit )
1075
1078
1076
1079
tagged := wf .Action3 (wd , "tag the stable release" , r .tag , commit , release , wf .Const ("" ), wf .After (build ))
1077
-
1078
1080
released := wf .Action3 (wd , "create release note" , r .createGitHubReleaseDraft , release , wf .Const ("" ), build , wf .After (tagged ))
1079
- published := wf .Action2 (wd , "publish to vscode marketplace" , r .publishPackageExtension , release , build )
1081
+
1082
+ changeID := wf .Task2 (wd , "update CHANGELOG.md in the master branch" , r .addChangeLogHeading , release , reviewers , wf .After (build ))
1083
+ submitted := wf .Task1 (wd , "await config CL submission" , clAwaiter {r .Gerrit }.awaitSubmission , changeID )
1084
+ // Publish only after the CHANGELOG.md update is merged to ensure the change
1085
+ // log reflects the latest released version.
1086
+ published := wf .Action2 (wd , "publish to vscode marketplace" , r .publishPackageExtension , release , build , wf .After (submitted ))
1080
1087
1081
1088
wf .Action4 (wd , "mail announcement" , r .mailAnnouncement , release , wf .Const ("" ), wf .Const ("" ), wf .Const (0 ), wf .After (released ), wf .After (published ))
1082
1089
return wd
@@ -1107,3 +1114,65 @@ func (r *ReleaseVSCodeGoTasks) findVSCodeReleaseCommit(ctx *wf.TaskContext, rele
1107
1114
1108
1115
return info .Revision , nil
1109
1116
}
1117
+
1118
+ // addChangeLogHeading updates the CHANGELOG.md file in the master branch of the
1119
+ // vscode-go repository with a new heading for the released version.
1120
+ // It moves all content from the "Unreleased" section to the new version's
1121
+ // section, but only for minor releases.
1122
+ // For more details on changelog format, see: https://keepachangelog.com/en/1.1.0/
1123
+ func (r * ReleaseVSCodeGoTasks ) addChangeLogHeading (ctx * wf.TaskContext , release releaseVersion , reviewers []string ) (string , error ) {
1124
+ if release .Patch != 0 {
1125
+ ctx .Printf ("not creating CL: %s is not a minor release" , release )
1126
+ return "" , nil
1127
+ }
1128
+
1129
+ clTitle := "CHANGELOG.md: add release heading for " + release .String ()
1130
+
1131
+ openCL , err := openCL (ctx , r .Gerrit , "vscode-go" , "master" , clTitle )
1132
+ if err != nil {
1133
+ return "" , err
1134
+ }
1135
+ if openCL != "" {
1136
+ ctx .Printf ("not creating CL: found existing CL %s" , openCL )
1137
+ return openCL , nil
1138
+ }
1139
+
1140
+ head , err := r .Gerrit .ReadBranchHead (ctx , "vscode-go" , "master" )
1141
+ if err != nil {
1142
+ return "" , err
1143
+ }
1144
+
1145
+ content , err := r .Gerrit .ReadFile (ctx , "vscode-go" , head , "CHANGELOG.md" )
1146
+ if err != nil {
1147
+ return "" , err
1148
+ }
1149
+
1150
+ lines := bytes .Split (content , []byte ("\n " ))
1151
+ var output bytes.Buffer
1152
+
1153
+ for i , line := range lines {
1154
+ output .Write (line )
1155
+ // Only add a newline if it's not the last line
1156
+ if i < len (lines )- 1 {
1157
+ output .WriteString ("\n " )
1158
+ }
1159
+ if string (line ) == "## Unreleased" {
1160
+ output .WriteString ("\n " )
1161
+ output .WriteString ("## " + release .String () + "\n " )
1162
+ output .WriteString ("\n " )
1163
+ output .WriteString ("Date: " + time .Now ().Format (time .DateOnly ) + "\n " )
1164
+ }
1165
+ }
1166
+
1167
+ cl , err := r .Gerrit .CreateAutoSubmitChange (ctx , gerrit.ChangeInput {
1168
+ Project : "vscode-go" ,
1169
+ Branch : "master" ,
1170
+ Subject : fmt .Sprintf ("%s\n \n This is an automated CL which updates the CHANGELOG.md.\n " , clTitle ),
1171
+ }, reviewers , map [string ]string {"CHANGELOG.md" : output .String ()})
1172
+ if err != nil {
1173
+ return "" , err
1174
+ }
1175
+
1176
+ ctx .Printf ("created auto-submit change %s under branch master in vscode-go repo." , cl )
1177
+ return cl , nil
1178
+ }
0 commit comments