Skip to content

Commit dec600c

Browse files
author
Tom Hieß
committed
implemented draft hotfix release
1 parent 1ecb391 commit dec600c

4 files changed

Lines changed: 309 additions & 9 deletions

File tree

src/service/helper_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,9 +128,10 @@ func prepareReleases(tagNames *[]string, testEnv *TestEnvironment, t *testing.T)
128128
func waitingForRelease(tagName string, testEnv *TestEnvironment, t *testing.T) {
129129

130130
for i := 1; i <= 10; i++ { //waiting for release becoming available
131+
131132
_, _, err := acigithub.GithubClient.Repositories.GetReleaseByTag(testEnv.ctx, testEnv.testOwner, testEnv.testRepo, tagName)
132133
if err != nil {
133-
fmt.Printf("Waiting %sms for Release to become available", time.Duration(i*100)*time.Millisecond)
134+
fmt.Printf("Waiting %sms for Release to become available\n", time.Duration(i*100)*time.Millisecond)
134135

135136
time.Sleep(time.Duration(i*100) * time.Millisecond)
136137
}

src/service/release.go

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ import (
1010
"log"
1111
"regexp"
1212
"strconv"
13+
14+
"github.com/google/go-github/v39/github"
1315
)
1416

1517
type ReleaseSet struct {
@@ -44,7 +46,7 @@ type ReleasePublishSet struct {
4446
Body string
4547
}
4648

47-
func ReleaseCreate(args *ReleaseCreateSet) {
49+
func ReleaseCreate(args *ReleaseCreateSet) *github.RepositoryRelease {
4850
var version string = ""
4951
_, err := acigithub.NewGitHubClient()
5052
if err != nil {
@@ -59,6 +61,19 @@ func ReleaseCreate(args *ReleaseCreateSet) {
5961
}
6062
} else if args.Version != "" && args.PatchLevel == "" {
6163
version = args.Version
64+
} else if args.Hotfix {
65+
66+
release, err := acigithub.GetLatestReleaseVersion()
67+
68+
if err != nil {
69+
log.Fatalln(err)
70+
}
71+
version, err = semver.IncreaseVersion(semver.Bugfix, *release.TagName)
72+
73+
if err != nil {
74+
log.Fatalln(err)
75+
}
76+
6277
} else {
6378
// if no merge commit sha is provided, the pull request number should either be specified or evaluated from the merge message (fallback)
6479
if args.MergeCommitSHA == "" {
@@ -88,7 +103,11 @@ func ReleaseCreate(args *ReleaseCreateSet) {
88103
log.Fatalln(err)
89104
}
90105
fmt.Println("Create release successful. ID:", *createdRelease.ID)
106+
107+
return createdRelease
91108
}
109+
110+
return nil
92111
}
93112

94113
func ReleasePublish(args *ReleasePublishSet) {

src/service/release_create_test.go

Lines changed: 280 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,280 @@
1+
package service
2+
3+
import (
4+
"awesome-ci/src/acigithub"
5+
"strings"
6+
"testing"
7+
)
8+
9+
func TestCreateFirstRelease(t *testing.T) {
10+
preparedReleases := &[]string{}
11+
testEnv, cleanup := getTestEnvironment(preparedReleases, t)
12+
13+
defer cleanup()
14+
15+
if !resetHeadToTag("1.0.1", testEnv, t) {
16+
t.FailNow()
17+
}
18+
19+
draftedRelease := ReleaseCreate(&ReleaseCreateSet{
20+
Version: "1.0.1",
21+
})
22+
23+
if draftedRelease == nil {
24+
t.Fatalf("Release Draft was not created")
25+
}
26+
27+
defer acigithub.GithubClient.Repositories.DeleteRelease(testEnv.ctx, testEnv.testOwner, testEnv.testRepo, *draftedRelease.ID)
28+
29+
if !*draftedRelease.Draft {
30+
t.Error("Release is not a Draft")
31+
}
32+
33+
if !strings.Contains(*draftedRelease.Name, "1.0.1") {
34+
t.Errorf("Expected Relase 1.0.1 but found %s", *draftedRelease.Name)
35+
}
36+
}
37+
38+
func TestCreateRelease_1_1_0(t *testing.T) {
39+
40+
preparedReleases := &[]string{"1.0.1"}
41+
42+
testEnv, cleanup := getTestEnvironment(preparedReleases, t)
43+
44+
defer cleanup()
45+
46+
if !resetHeadToTag("1.1.0", testEnv, t) {
47+
t.FailNow()
48+
}
49+
50+
latestRelease, err := acigithub.GetLatestReleaseVersion()
51+
52+
if checkError(err, t) {
53+
t.FailNow()
54+
}
55+
56+
if *latestRelease.TagName != "1.0.1" {
57+
t.Errorf("Latest release should be 1.0.1 ... found %s", *latestRelease.TagName)
58+
t.FailNow()
59+
}
60+
61+
draftedRelease := ReleaseCreate(&ReleaseCreateSet{})
62+
63+
if draftedRelease == nil {
64+
t.Fatalf("Release Draft was not created")
65+
}
66+
67+
defer acigithub.GithubClient.Repositories.DeleteRelease(testEnv.ctx, testEnv.testOwner, testEnv.testRepo, *draftedRelease.ID)
68+
69+
if !*draftedRelease.Draft {
70+
t.Error("Release is not a Draft")
71+
}
72+
73+
if !strings.Contains(*draftedRelease.Name, "1.1.0") {
74+
t.Errorf("Expected Relase 1.1.0 but found %s", *draftedRelease.Name)
75+
}
76+
}
77+
78+
func TestCreateRelease_1_2_0(t *testing.T) {
79+
80+
preparedReleases := &[]string{"1.0.1", "1.1.0"}
81+
82+
testEnv, cleanup := getTestEnvironment(preparedReleases, t)
83+
84+
defer cleanup()
85+
86+
if !resetHeadToTag("1.1.0", testEnv, t) {
87+
t.FailNow()
88+
}
89+
90+
latestRelease, err := acigithub.GetLatestReleaseVersion()
91+
92+
if checkError(err, t) {
93+
t.FailNow()
94+
}
95+
96+
if *latestRelease.TagName != "1.1.0" {
97+
t.Errorf("Latest release should be 1.1.0 ... found %s", *latestRelease.TagName)
98+
t.FailNow()
99+
}
100+
101+
draftedRelease := ReleaseCreate(&ReleaseCreateSet{})
102+
103+
if draftedRelease == nil {
104+
t.Fatalf("Release Draft was not created")
105+
}
106+
107+
defer acigithub.GithubClient.Repositories.DeleteRelease(testEnv.ctx, testEnv.testOwner, testEnv.testRepo, *draftedRelease.ID)
108+
109+
if !*draftedRelease.Draft {
110+
t.Error("Release is not a Draft")
111+
}
112+
113+
if !strings.Contains(*draftedRelease.Name, "1.2.0") {
114+
t.Errorf("Expected Relase 1.2.0 but found %s", *draftedRelease.Name)
115+
}
116+
}
117+
118+
func TestCreateRelease_1_2_1(t *testing.T) {
119+
120+
preparedReleases := &[]string{"1.0.1", "1.1.0", "1.2.0"}
121+
122+
testEnv, cleanup := getTestEnvironment(preparedReleases, t)
123+
124+
defer cleanup()
125+
126+
if !resetHeadToTag("1.2.1", testEnv, t) {
127+
t.FailNow()
128+
}
129+
130+
latestRelease, err := acigithub.GetLatestReleaseVersion()
131+
132+
if checkError(err, t) {
133+
t.FailNow()
134+
}
135+
136+
if *latestRelease.TagName != "1.2.0" {
137+
t.Errorf("Latest release should be 1.2.0 ... found %s", *latestRelease.TagName)
138+
t.FailNow()
139+
}
140+
141+
draftedRelease := ReleaseCreate(&ReleaseCreateSet{})
142+
143+
if draftedRelease == nil {
144+
t.Fatalf("Release Draft was not created")
145+
}
146+
147+
defer acigithub.GithubClient.Repositories.DeleteRelease(testEnv.ctx, testEnv.testOwner, testEnv.testRepo, *draftedRelease.ID)
148+
149+
if !*draftedRelease.Draft {
150+
t.Error("Release is not a Draft")
151+
}
152+
153+
if !strings.Contains(*draftedRelease.Name, "1.2.1") {
154+
t.Errorf("Expected Relase 1.2.1 but found %s", *draftedRelease.Name)
155+
}
156+
}
157+
158+
func TestCreateRelease_1_2_2(t *testing.T) {
159+
160+
preparedReleases := &[]string{"1.0.1", "1.1.0", "1.1.1", "1.1.2", "1.2.0", "1.2.1"}
161+
162+
testEnv, cleanup := getTestEnvironment(preparedReleases, t)
163+
164+
defer cleanup()
165+
166+
if !resetHeadToTag("1.2.2", testEnv, t) {
167+
t.FailNow()
168+
}
169+
170+
latestRelease, err := acigithub.GetLatestReleaseVersion()
171+
172+
if checkError(err, t) {
173+
t.FailNow()
174+
}
175+
176+
if *latestRelease.TagName != "1.2.1" {
177+
t.Errorf("Latest release should be 1.2.1 ... found %s", *latestRelease.TagName)
178+
t.FailNow()
179+
}
180+
181+
draftedRelease := ReleaseCreate(&ReleaseCreateSet{})
182+
183+
if draftedRelease == nil {
184+
t.Fatalf("Release Draft was not created")
185+
}
186+
187+
defer acigithub.GithubClient.Repositories.DeleteRelease(testEnv.ctx, testEnv.testOwner, testEnv.testRepo, *draftedRelease.ID)
188+
189+
if !*draftedRelease.Draft {
190+
t.Error("Release is not a Draft")
191+
}
192+
193+
if !strings.Contains(*draftedRelease.Name, "1.2.2") {
194+
t.Errorf("Expected Relase 1.2.2 but found %s", *draftedRelease.Name)
195+
}
196+
}
197+
198+
func TestCreateHotfixRelease_1_1_1(t *testing.T) {
199+
200+
preparedReleases := &[]string{"1.0.1", "1.1.0", "1.2.0", "1.2.1"}
201+
202+
testEnv, cleanup := getTestEnvironment(preparedReleases, t)
203+
204+
defer cleanup()
205+
206+
if !resetHeadToTag("1.1.1", testEnv, t) {
207+
t.FailNow()
208+
}
209+
210+
latestRelease, err := acigithub.GetLatestReleaseVersion()
211+
212+
if checkError(err, t) {
213+
t.FailNow()
214+
}
215+
216+
if *latestRelease.TagName != "1.1.0" {
217+
t.Errorf("Latest release should be 1.1.0 ... found %s", *latestRelease.TagName)
218+
t.FailNow()
219+
}
220+
221+
draftedRelease := ReleaseCreate(&ReleaseCreateSet{
222+
Hotfix: true,
223+
})
224+
225+
if draftedRelease == nil {
226+
t.Fatalf("Release Draft was not created")
227+
}
228+
229+
defer acigithub.GithubClient.Repositories.DeleteRelease(testEnv.ctx, testEnv.testOwner, testEnv.testRepo, *draftedRelease.ID)
230+
231+
if !*draftedRelease.Draft {
232+
t.Error("Release is not a Draft")
233+
}
234+
235+
if !strings.Contains(*draftedRelease.Name, "1.1.1") {
236+
t.Errorf("Expected Relase 1.1.1 but found %s", *draftedRelease.Name)
237+
}
238+
}
239+
240+
func TestCreateHotfixRelease_1_1_2(t *testing.T) {
241+
242+
preparedReleases := &[]string{"1.0.1", "1.1.0", "1.2.0", "1.2.1", "1.1.1"}
243+
244+
testEnv, cleanup := getTestEnvironment(preparedReleases, t)
245+
246+
defer cleanup()
247+
248+
if !resetHeadToTag("1.1.2", testEnv, t) {
249+
t.FailNow()
250+
}
251+
252+
latestRelease, err := acigithub.GetLatestReleaseVersion()
253+
254+
if checkError(err, t) {
255+
t.FailNow()
256+
}
257+
258+
if *latestRelease.TagName != "1.1.1" {
259+
t.Errorf("Latest release should be 1.1.1 ... found %s", *latestRelease.TagName)
260+
t.FailNow()
261+
}
262+
263+
draftedRelease := ReleaseCreate(&ReleaseCreateSet{
264+
Hotfix: true,
265+
})
266+
267+
if draftedRelease == nil {
268+
t.Fatalf("Release Draft was not created")
269+
}
270+
271+
defer acigithub.GithubClient.Repositories.DeleteRelease(testEnv.ctx, testEnv.testOwner, testEnv.testRepo, *draftedRelease.ID)
272+
273+
if !*draftedRelease.Draft {
274+
t.Error("Release is not a Draft")
275+
}
276+
277+
if !strings.Contains(*draftedRelease.Name, "1.1.2") {
278+
t.Errorf("Expected Relase 1.1.2 but found %s", *draftedRelease.Name)
279+
}
280+
}

0 commit comments

Comments
 (0)