Skip to content

Commit 5139207

Browse files
h9jianggopherbot
authored andcommitted
internal/task: add pre-release tag to release branch's head
A local relui screenshot is at golang/go#57643 (comment) For golang/go#57643 Change-Id: I5b302086afd632839ac034a7e04a7bf7da49d0db Reviewed-on: https://go-review.googlesource.com/c/build/+/602520 LUCI-TryBot-Result: Go LUCI <[email protected]> Reviewed-by: Dmitri Shuralyov <[email protected]> Reviewed-by: Dmitri Shuralyov <[email protected]> Auto-Submit: Hongxiang Jiang <[email protected]>
1 parent f80c83a commit 5139207

File tree

2 files changed

+38
-18
lines changed

2 files changed

+38
-18
lines changed

internal/task/releasegopls.go

Lines changed: 34 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -32,16 +32,20 @@ func (r *ReleaseGoplsTasks) NewDefinition() *wf.Definition {
3232
// coordinator can choose which version to release instead of manual input.
3333
version := wf.Param(wd, wf.ParamDef[string]{Name: "version"})
3434
reviewers := wf.Param(wd, reviewersParam)
35+
3536
semversion := wf.Task1(wd, "validating input version", r.isValidVersion, version)
37+
prerelease := wf.Task1(wd, "find the pre-release version", r.nextPrerelease, semversion)
38+
3639
branchCreated := wf.Action1(wd, "creating new branch if minor release", r.createBranchIfMinor, semversion)
3740

3841
configChangeID := wf.Task2(wd, "updating branch's codereview.cfg", r.updateCodeReviewConfig, semversion, reviewers, wf.After(branchCreated))
3942
configCommit := wf.Task1(wd, "await config CL submission", r.AwaitSubmission, configChangeID)
4043

41-
dependencyChangeID := wf.Task2(wd, "updating gopls' x/tools dependency", r.updateXToolsDependency, semversion, reviewers, wf.After(configCommit))
44+
dependencyChangeID := wf.Task3(wd, "updating gopls' x/tools dependency", r.updateXToolsDependency, semversion, prerelease, reviewers, wf.After(configCommit))
4245
dependencyCommit := wf.Task1(wd, "await gopls' x/tools dependency CL submission", r.AwaitSubmission, dependencyChangeID)
4346

44-
_ = wf.Action1(wd, "verify installing latest gopls in release branch using go install", r.verifyGoplsInstallation, dependencyCommit)
47+
verified := wf.Action1(wd, "verify installing latest gopls in release branch using go install", r.verifyGoplsInstallation, dependencyCommit)
48+
_ = wf.Task3(wd, "tag pre-release", r.tagPrerelease, semversion, prerelease, dependencyCommit, wf.After(verified))
4549
return wd
4650
}
4751

@@ -152,11 +156,11 @@ parent-branch: master
152156
}
153157

154158
// nextPrerelease inspects the tags in tools repo that match with the given
155-
// version and find the next pre-release version.
156-
func (r *ReleaseGoplsTasks) nextPrerelease(ctx *wf.TaskContext, semv semversion) (int, error) {
159+
// version and find the next prerelease version.
160+
func (r *ReleaseGoplsTasks) nextPrerelease(ctx *wf.TaskContext, semv semversion) (string, error) {
157161
tags, err := r.Gerrit.ListTags(ctx, "tools")
158162
if err != nil {
159-
return -1, fmt.Errorf("failed to list tags for tools repo: %w", err)
163+
return "", fmt.Errorf("failed to list tags for tools repo: %w", err)
160164
}
161165

162166
max := 0
@@ -182,21 +186,20 @@ func (r *ReleaseGoplsTasks) nextPrerelease(ctx *wf.TaskContext, semv semversion)
182186
}
183187
}
184188

185-
return max + 1, nil
189+
return fmt.Sprintf("pre.%v", max+1), nil
186190
}
187191

188192
// updateXToolsDependency ensures gopls sub module have the correct x/tools
189193
// version as dependency.
190194
//
191195
// It returns the change ID, or "" if the CL was not created.
192-
func (r *ReleaseGoplsTasks) updateXToolsDependency(ctx *wf.TaskContext, semv semversion, reviewers []string) (string, error) {
193-
pre, err := r.nextPrerelease(ctx, semv)
194-
if err != nil {
195-
return "", fmt.Errorf("failed to find the next prerelease version: %w", err)
196+
func (r *ReleaseGoplsTasks) updateXToolsDependency(ctx *wf.TaskContext, semv semversion, pre string, reviewers []string) (string, error) {
197+
if pre == "" {
198+
return "", fmt.Errorf("the input pre-release version should not be empty")
196199
}
197200

198201
branch := goplsReleaseBranchName(semv)
199-
clTitle := fmt.Sprintf("gopls: update go.mod for v%v.%v.%v-pre.%v", semv.Major, semv.Minor, semv.Patch, pre)
202+
clTitle := fmt.Sprintf("gopls: update go.mod for v%v.%v.%v-%s", semv.Major, semv.Minor, semv.Patch, pre)
200203
openCL, err := r.openCL(ctx, branch, clTitle)
201204
if err != nil {
202205
return "", fmt.Errorf("failed to find the open CL of title %q in branch %q: %w", clTitle, branch, err)
@@ -281,6 +284,23 @@ $(go env GOPATH)/bin/gopls references -d main.go:4:8 &> smoke.log
281284
return nil
282285
}
283286

287+
func (r *ReleaseGoplsTasks) tagPrerelease(ctx *wf.TaskContext, semv semversion, commit, pre string) (string, error) {
288+
if commit == "" {
289+
return "", fmt.Errorf("the input commit should not be empty")
290+
}
291+
if pre == "" {
292+
return "", fmt.Errorf("the input pre-release version should not be empty")
293+
}
294+
295+
tag := fmt.Sprintf("gopls/v%v.%v.%v-%s", semv.Major, semv.Minor, semv.Patch, pre)
296+
ctx.Printf("tag commit %s with tag %s", commit, tag)
297+
if err := r.Gerrit.Tag(ctx, "tools", tag, commit); err != nil {
298+
return "", err
299+
}
300+
301+
return tag, nil
302+
}
303+
284304
// AwaitSubmission waits for the CL with the given change ID to be submitted.
285305
//
286306
// The return value is the submitted commit hash, or "" if changeID is "".
@@ -334,16 +354,16 @@ func parseSemver(v string) (_ semversion, ok bool) {
334354
func (s *semversion) prereleaseVersion() (int, error) {
335355
parts := strings.Split(s.Pre, ".")
336356
if len(parts) == 1 {
337-
return -1, fmt.Errorf(`prerelease version does not contain any "."`)
357+
return -1, fmt.Errorf(`pre-release version does not contain any "."`)
338358
}
339359

340360
if len(parts) > 2 {
341-
return -1, fmt.Errorf(`prerelease version contains %v "."`, len(parts)-1)
361+
return -1, fmt.Errorf(`pre-release version contains %v "."`, len(parts)-1)
342362
}
343363

344364
pre, err := strconv.Atoi(parts[1])
345365
if err != nil {
346-
return -1, fmt.Errorf("failed to convert prerelease version to int %q: %w", pre, err)
366+
return -1, fmt.Errorf("failed to convert pre-release version to int %q: %w", pre, err)
347367
}
348368

349369
return pre, nil

internal/task/releasegopls_test.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -319,25 +319,25 @@ func TestNextPrerelease(t *testing.T) {
319319
name string
320320
tags []string
321321
version string
322-
want int
322+
want string
323323
}{
324324
{
325325
name: "next pre-release is 2",
326326
tags: []string{"gopls/v0.16.0-pre.0", "gopls/v0.16.0-pre.1"},
327327
version: "v0.16.0",
328-
want: 2,
328+
want: "pre.2",
329329
},
330330
{
331331
name: "next pre-release is 2 regardless of other minor or patch version",
332332
tags: []string{"gopls/v0.16.0-pre.0", "gopls/v0.16.0-pre.1", "gopls/v0.16.1-pre.1", "gopls/v0.2.0-pre.3"},
333333
version: "v0.16.0",
334-
want: 2,
334+
want: "pre.2",
335335
},
336336
{
337337
name: "next pre-release is 2 regardless of non-int prerelease version",
338338
tags: []string{"gopls/v0.16.0-pre.0", "gopls/v0.16.0-pre.1", "gopls/v0.16.0-pre.foo", "gopls/v0.16.0-pre.bar"},
339339
version: "v0.16.0",
340-
want: 2,
340+
want: "pre.2",
341341
},
342342
}
343343

0 commit comments

Comments
 (0)