@@ -17,6 +17,62 @@ import (
17
17
"golang.org/x/build/internal/workflow"
18
18
)
19
19
20
+ func TestInterpretNextRelease (t * testing.T ) {
21
+ tests := []struct {
22
+ name string
23
+ tags []string
24
+ bump string
25
+ want semversion
26
+ }{
27
+ {
28
+ name : "next minor version of v0.0.0 is v0.1.0" ,
29
+ tags : []string {"gopls/v0.0.0" },
30
+ bump : "next minor" ,
31
+ want : semversion {Major : 0 , Minor : 1 , Patch : 0 },
32
+ },
33
+ {
34
+ name : "pre-release versions should be ignored" ,
35
+ tags : []string {"gopls/v0.0.0" , "gopls/v0.1.0-pre.1" , "gopls/v0.1.0-pre.2" },
36
+ bump : "next minor" ,
37
+ want : semversion {Major : 0 , Minor : 1 , Patch : 0 },
38
+ },
39
+ {
40
+ name : "next patch version of v0.2.2 is v0.2.3" ,
41
+ tags : []string {"gopls/0.1.1" , "gopls/0.2.0" , "gopls/0.2.1" , "gopls/v0.2.2" },
42
+ bump : "next patch" ,
43
+ want : semversion {Major : 0 , Minor : 2 , Patch : 3 },
44
+ },
45
+ }
46
+
47
+ for _ , tc := range tests {
48
+ t .Run (tc .name , func (t * testing.T ) {
49
+ tools := NewFakeRepo (t , "tools" )
50
+ commit := tools .Commit (map [string ]string {
51
+ "go.mod" : "module golang.org/x/tools\n " ,
52
+ "go.sum" : "\n " ,
53
+ })
54
+
55
+ for _ , tag := range tc .tags {
56
+ tools .Tag (tag , commit )
57
+ }
58
+
59
+ gerrit := NewFakeGerrit (t , tools )
60
+
61
+ tasks := & ReleaseGoplsTasks {
62
+ Gerrit : gerrit ,
63
+ }
64
+
65
+ got , err := tasks .interpretNextRelease (& workflow.TaskContext {Context : context .Background (), Logger : & testLogger {t , "" }}, tc .bump )
66
+ if err != nil {
67
+ t .Fatalf ("interpretNextRelease(%q) should not return error, but return %v" , tc .bump , err )
68
+ }
69
+ if tc .want != got {
70
+ t .Errorf ("interpretNextRelease(%q) = %v, want %v" , tc .bump , tc .want , got )
71
+ }
72
+ })
73
+ }
74
+ }
75
+
20
76
func TestPossibleGoplsVersions (t * testing.T ) {
21
77
tests := []struct {
22
78
name string
@@ -367,7 +423,7 @@ func TestNextPrerelease(t *testing.T) {
367
423
if ! ok {
368
424
t .Fatalf ("parseSemver(%q) should success" , tc .version )
369
425
}
370
- got , err := tasks .nextPrerelease (& workflow.TaskContext {Context : ctx , Logger : & testLogger {t , "" }}, semv )
426
+ got , err := tasks .nextPrereleaseVersion (& workflow.TaskContext {Context : ctx , Logger : & testLogger {t , "" }}, semv )
371
427
if err != nil {
372
428
t .Fatalf ("nextPrerelease(%q) should not return error: %v" , tc .version , err )
373
429
}
@@ -501,30 +557,32 @@ func TestGoplsPrereleaseFlow(t *testing.T) {
501
557
// For each entry, a new commit is created, and if the entry is
502
558
// non empty that commit is tagged with the entry value.
503
559
commitTags []string
504
- config string
505
- semv semversion
560
+ // If set, create the release branch before starting the workflow.
561
+ createBranch bool
562
+ config string
563
+ semv semversion
506
564
// fields below are the desired states.
507
565
wantVersion string
508
566
wantConfig string
509
567
wantCommits int
510
568
}{
511
569
{
512
- name : "update all three file through two commits" ,
513
- // create release branch with one commit without any tag.
514
- commitTags : [] string { "" } ,
515
- config : " " ,
516
- semv : semversion {Major : 0 , Minor : 1 , Patch : 0 },
517
- wantVersion : "v0.1.0-pre.1" ,
570
+ name : "update all three file through two commits" ,
571
+ commitTags : [] string { "gopls/v0.0.0" },
572
+ createBranch : true ,
573
+ config : " " ,
574
+ semv : semversion {Major : 0 , Minor : 1 , Patch : 0 },
575
+ wantVersion : "v0.1.0-pre.1" ,
518
576
wantConfig : `issuerepo: golang/go
519
577
branch: gopls-release-branch.0.1
520
578
parent-branch: master
521
579
` ,
522
580
wantCommits : 2 ,
523
581
},
524
582
{
525
- name : "codereview.cfg already have expected content, update go.mod and go.sum with one commit" ,
526
- // create release branch with one commit without any tag.
527
- commitTags : [] string { "" } ,
583
+ name : "codereview.cfg already have expected content, update go.mod and go.sum with one commit" ,
584
+ commitTags : [] string { "gopls/v0.0.0" },
585
+ createBranch : true ,
528
586
config : `issuerepo: golang/go
529
587
branch: gopls-release-branch.0.1
530
588
parent-branch: master
@@ -538,24 +596,25 @@ parent-branch: master
538
596
wantCommits : 1 ,
539
597
},
540
598
{
541
- name : "create the branch for minor version" ,
542
- commitTags : nil , // no release branch
543
- config : ` ` ,
544
- semv : semversion {Major : 0 , Minor : 12 , Patch : 0 },
545
- wantVersion : "v0.12.0-pre.1" ,
599
+ name : "create the branch for minor version" ,
600
+ commitTags : []string {"gopls/v0.11.0" },
601
+ createBranch : false ,
602
+ config : ` ` ,
603
+ semv : semversion {Major : 0 , Minor : 12 , Patch : 0 },
604
+ wantVersion : "v0.12.0-pre.1" ,
546
605
wantConfig : `issuerepo: golang/go
547
606
branch: gopls-release-branch.0.12
548
607
parent-branch: master
549
608
` ,
550
609
wantCommits : 2 ,
551
610
},
552
611
{
553
- name : "workflow should increment the pre-release number to 4" ,
554
- // create release branch with three commits with tags.
555
- commitTags : [] string { "gopls/v0.8.3-pre.1" , "gopls/v0.8.3-pre.2" , "gopls/v0.8.3-pre.3" } ,
556
- config : " " ,
557
- semv : semversion {Major : 0 , Minor : 8 , Patch : 3 },
558
- wantVersion : "v0.8.3-pre.4" ,
612
+ name : "workflow should increment the pre-release number to 4" ,
613
+ commitTags : [] string { "gopls/v0.8.2" , "gopls/v0.8.3-pre.1" , "gopls/v0.8.3-pre.2" , "gopls/v0.8.3-pre.3" },
614
+ createBranch : true ,
615
+ config : " " ,
616
+ semv : semversion {Major : 0 , Minor : 8 , Patch : 3 },
617
+ wantVersion : "v0.8.3-pre.4" ,
559
618
wantConfig : `issuerepo: golang/go
560
619
branch: gopls-release-branch.0.8
561
620
parent-branch: master
@@ -565,7 +624,7 @@ parent-branch: master
565
624
}
566
625
567
626
for _ , tc := range testcases {
568
- t . Run ( tc . name , func (t * testing. T ) {
627
+ runTestWithInput := func (input map [ string ] any ) {
569
628
ctx , cancel := context .WithCancel (context .Background ())
570
629
defer cancel ()
571
630
@@ -575,21 +634,14 @@ parent-branch: master
575
634
"gopls/go.sum" : "\n " ,
576
635
"codereview.cfg" : tc .config ,
577
636
})
578
- // These tags make sure the input version is the next version of some
579
- // released version, in order to pass the version validation step.
580
- tools .Tag (fmt .Sprintf ("gopls/v%v.%v.%v" , tc .semv .Major , tc .semv .Minor , tc .semv .Patch - 1 ), beforeHead )
581
- tools .Tag (fmt .Sprintf ("gopls/v%v.%v.%v" , tc .semv .Major , tc .semv .Minor - 1 , tc .semv .Patch ), beforeHead )
582
- tools .Tag (fmt .Sprintf ("gopls/v%v.%v.%v" , tc .semv .Major - 1 , tc .semv .Minor , tc .semv .Patch ), beforeHead )
583
-
584
- // Create the release branch and make a few commits to the release branch.
637
+ // Create the release branch and make a few commits to the master branch.
585
638
// Var beforeHead is used to track the commit of release branch's head
586
639
// before trigger the gopls pre-release run. If we do not need to create a
587
640
// release branch, beforeHead will point to the initial commit in the
588
641
// master branch.
589
642
if len (tc .commitTags ) != 0 {
590
- tools .Branch (goplsReleaseBranchName (tc .semv ), beforeHead )
591
643
for i , tag := range tc .commitTags {
592
- commit := tools .CommitOnBranch (goplsReleaseBranchName ( tc . semv ) , map [string ]string {
644
+ commit := tools .CommitOnBranch ("master" , map [string ]string {
593
645
"README.md" : fmt .Sprintf ("THIS IS READ ME FOR %v." , i ),
594
646
})
595
647
beforeHead = commit
@@ -599,6 +651,10 @@ parent-branch: master
599
651
}
600
652
}
601
653
654
+ if tc .createBranch {
655
+ tools .Branch (goplsReleaseBranchName (tc .semv ), beforeHead )
656
+ }
657
+
602
658
gerrit := NewFakeGerrit (t , tools )
603
659
604
660
// fakeGo handles multiple arguments in gopls pre-release flow.
@@ -664,10 +720,7 @@ esac`, tc.wantVersion)
664
720
}
665
721
666
722
wd := tasks .NewPrereleaseDefinition ()
667
- w , err := workflow .Start (wd , map [string ]interface {}{
668
- reviewersParam .Name : []string (nil ),
669
- "version" : fmt .Sprintf ("v%v.%v.%v" , tc .semv .Major , tc .semv .Minor , tc .semv .Patch ),
670
- })
723
+ w , err := workflow .Start (wd , input )
671
724
if err != nil {
672
725
t .Fatal (err )
673
726
}
@@ -741,6 +794,24 @@ esac`, tc.wantVersion)
741
794
if info .Revision != afterHead {
742
795
t .Errorf ("the pre-release tag points to commit %s, should point to the head commit of release branch %s" , info .Revision , afterHead )
743
796
}
797
+ }
798
+ t .Run ("manual input version: " + tc .name , func (t * testing.T ) {
799
+ runTestWithInput (map [string ]any {
800
+ reviewersParam .Name : []string (nil ),
801
+ "explicit version (optional)" : fmt .Sprintf ("v%v.%v.%v" , tc .semv .Major , tc .semv .Minor , tc .semv .Patch ),
802
+ "next version" : "use explicit version" ,
803
+ })
804
+ })
805
+ versionBump := "next patch"
806
+ if tc .semv .Patch == 0 {
807
+ versionBump = "next minor"
808
+ }
809
+ t .Run ("interpret version " + versionBump + " : " + tc .name , func (t * testing.T ) {
810
+ runTestWithInput (map [string ]any {
811
+ reviewersParam .Name : []string (nil ),
812
+ "explicit version (optional)" : "" ,
813
+ "next version" : versionBump ,
814
+ })
744
815
})
745
816
}
746
817
}
0 commit comments