Skip to content

Commit aaed04e

Browse files
authored
Merge pull request #79 from fullstack-devops/bugfix/78_pr_info
fixed pr info without an existing release
2 parents a0ae8f7 + 8a08b47 commit aaed04e

File tree

10 files changed

+75
-29
lines changed

10 files changed

+75
-29
lines changed

go.mod

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ go 1.17
55
require (
66
github.com/google/go-github/v39 v39.2.0
77
github.com/xanzy/go-gitlab v0.55.1
8-
golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8
8+
golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b
99
gopkg.in/yaml.v2 v2.4.0
1010
)
1111

@@ -21,9 +21,9 @@ require (
2121
github.com/mattn/go-isatty v0.0.14 // indirect
2222
github.com/stretchr/testify v1.7.0 // indirect
2323
golang.org/x/crypto v0.0.0-20220214200702-86341886e292 // indirect
24-
golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd // indirect
24+
golang.org/x/net v0.0.0-20220225172249-27dd8689420f // indirect
2525
golang.org/x/sys v0.0.0-20220209214540-3681064d5158 // indirect
26-
golang.org/x/time v0.0.0-20220210224613-90d013bbcef8 // indirect
26+
golang.org/x/time v0.0.0-20220224211638-0e9765cccd65 // indirect
2727
google.golang.org/appengine v1.6.7 // indirect
2828
google.golang.org/protobuf v1.27.1 // indirect
2929
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b // indirect

go.sum

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,7 @@ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZb
142142
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
143143
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
144144
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
145+
github.com/stretchr/objx v0.1.0 h1:4G4v2dO3VZwixGIRoQ5Lfboy6nUhCyYzaqnIAPPhYs4=
145146
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
146147
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
147148
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
@@ -224,16 +225,17 @@ golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81R
224225
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
225226
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
226227
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
227-
golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd h1:O7DYs+zxREGLKzKoMQrtrEacpb0ZVXA5rIwylE2Xchk=
228228
golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
229+
golang.org/x/net v0.0.0-20220225172249-27dd8689420f h1:oA4XRj0qtSt8Yo1Zms0CUlsT3KG69V2UGQWPBxujDmc=
230+
golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
229231
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
230232
golang.org/x/oauth2 v0.0.0-20181106182150-f42d05182288/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
231233
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
232234
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
233235
golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
234236
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
235-
golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 h1:RerP+noqYHUQ8CMRcPlC2nvTa4dcBIjegkuWdcUDuqg=
236-
golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
237+
golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b h1:clP8eMhB30EHdc0bd2Twtq6kgU7yl5ub2cQLSdrv1Dg=
238+
golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc=
237239
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
238240
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
239241
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -280,6 +282,8 @@ golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBc
280282
golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
281283
golang.org/x/sys v0.0.0-20220209214540-3681064d5158 h1:rm+CHSpPEEW2IsXUib1ThaHIjuBVZjxNgSKmBLFfD4c=
282284
golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
285+
golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9 h1:nhht2DYV/Sn3qOayu8lM+cU1ii9sTLUeBQwQQfUHtrs=
286+
golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
283287
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
284288
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
285289
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
@@ -292,8 +296,8 @@ golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
292296
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
293297
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
294298
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
295-
golang.org/x/time v0.0.0-20220210224613-90d013bbcef8 h1:vVKdlvoWBphwdxWKrFZEuM0kGgGLxUOYcY4U/2Vjg44=
296-
golang.org/x/time v0.0.0-20220210224613-90d013bbcef8/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
299+
golang.org/x/time v0.0.0-20220224211638-0e9765cccd65 h1:M73Iuj3xbbb9Uk1DYhzydthsj6oOd6l9bpuFcNoUvTs=
300+
golang.org/x/time v0.0.0-20220224211638-0e9765cccd65/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
297301
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
298302
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
299303
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=

src/acigithub/envs.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,11 @@ type EnvVariable struct {
2626
func OpenEnvFile() (envVariables *EnvVariables, err error) {
2727
if isgithubEnv {
2828
envFile, err := os.Open(githubEnv)
29+
30+
if errors.Is(err, os.ErrNotExist) {
31+
envFile, err = os.Create(githubEnv)
32+
}
33+
2934
if err != nil {
3035
return nil, errors.New(fmt.Sprintln("Error at opening ENV file:", err))
3136
}

src/acigithub/pullrequest.go

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -67,9 +67,10 @@ func GetPrInfos(prNumber int, mergeCommitSha string) (standardPrInfos *models.St
6767

6868
prSHA := *prInfos.Head.SHA
6969
branchName := *prInfos.Head.Ref
70-
patchLevel := branchName[:strings.Index(branchName, "/")]
70+
patchLevel := semver.ParsePatchLevel(branchName)
7171

7272
var version = ""
73+
var latestVersion = ""
7374
// if an comment exists with aci_patch_level=major, make a major version!
7475
issueComments, err := GetIssueComments(prNumber, owner, repo)
7576
if err != nil {
@@ -83,7 +84,7 @@ func GetPrInfos(prNumber int, mergeCommitSha string) (standardPrInfos *models.St
8384
aciPatchLevel := regexp.MustCompile(`aci_patch_level: ([a-zA-Z]+)`)
8485

8586
if aciPatchLevel.MatchString(*comment.Body) {
86-
patchLevel = aciVersionOverride.FindStringSubmatch(*comment.Body)[1]
87+
patchLevel = semver.ParsePatchLevel(aciPatchLevel.FindStringSubmatch(*comment.Body)[1])
8788
break
8889
}
8990
if aciVersionOverride.MatchString(*comment.Body) {
@@ -93,13 +94,15 @@ func GetPrInfos(prNumber int, mergeCommitSha string) (standardPrInfos *models.St
9394
}
9495
}
9596

96-
repositoryRelease, err := GetLatestReleaseVersion(owner, repo)
97-
if err != nil {
98-
return nil, nil, err
99-
}
100-
10197
if version == "" {
102-
version, err = semver.IncreaseVersion(patchLevel, *repositoryRelease.TagName)
98+
repositoryRelease, err := GetLatestReleaseVersion(owner, repo)
99+
if err == nil {
100+
latestVersion = *repositoryRelease.TagName
101+
version, err = semver.IncreaseVersion(patchLevel, latestVersion)
102+
} else {
103+
version, err = semver.IncreaseVersion(patchLevel, "0.0.0")
104+
}
105+
103106
if err != nil {
104107
return nil, nil, err
105108
}
@@ -113,7 +116,7 @@ func GetPrInfos(prNumber int, mergeCommitSha string) (standardPrInfos *models.St
113116
Sha: prSHA,
114117
ShaShort: prSHA[:8],
115118
PatchLevel: patchLevel,
116-
LatestVersion: *repositoryRelease.TagName,
119+
LatestVersion: latestVersion,
117120
CurrentVersion: "",
118121
NextVersion: version,
119122
MergeCommitSha: *prInfos.MergeCommitSHA,

src/acigitlab/mergerequest.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package acigitlab
22

33
import (
44
"awesome-ci/src/models"
5+
"awesome-ci/src/semver"
56
"context"
67
"errors"
78
"fmt"
@@ -31,7 +32,7 @@ func GetMrInfos(mrNumber int) (standardPrInfos *models.StandardPrInfos, prInfos
3132

3233
prSHA := prInfos.SHA
3334
branchName := prInfos.Reference
34-
patchLevel := branchName[:strings.Index(branchName, "/")]
35+
patchLevel := semver.ParsePatchLevel(branchName)
3536

3637
standardPrInfos = &models.StandardPrInfos{
3738
PrNumber: mrNumber,

src/models/models.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
package models
22

3+
import "awesome-ci/src/semver"
4+
35
type StandardPrInfos struct {
46
PrNumber int
57
Owner string
68
Repo string
7-
PatchLevel string
9+
PatchLevel semver.PatchLevel
810
CurrentVersion string
911
LatestVersion string
1012
NextVersion string

src/semver/semver.go

Lines changed: 34 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,24 @@ import (
77
"strings"
88
)
99

10+
type PatchLevel string
11+
12+
const (
13+
Bugfix PatchLevel = "bugfix"
14+
Feature PatchLevel = "feature"
15+
Major PatchLevel = "major"
16+
)
17+
1018
// IncreaseSemVer increases a given version by naming, see docs
11-
func IncreaseVersion(patchLevel string, version string) (incresedVersion string, err error) {
19+
func IncreaseVersion(patchLevel PatchLevel, version string) (incresedVersion string, err error) {
1220
incresedVersion = version
1321

1422
switch patchLevel {
15-
case "fix", "bugfix", "dependabot":
23+
case Bugfix:
1624
incresedVersion, err = patch(version)
17-
case "feature", "feat":
25+
case Feature:
1826
incresedVersion, err = minor(version)
19-
case "major":
27+
case Major:
2028
incresedVersion, err = major(version)
2129
default:
2230
incresedVersion, err = patch(version)
@@ -62,3 +70,25 @@ func patch(version string) (newVersion string, err error) {
6270
newVersion = fmt.Sprintf("%s.%s.%d", splitedVersion[0], splitedVersion[1], newPatch)
6371
return
6472
}
73+
74+
func ParsePatchLevel(branchName string) PatchLevel {
75+
patchLevel := "bugfix"
76+
77+
if strings.Index(branchName, "/") > 0 {
78+
patchLevel = branchName[:strings.Index(branchName, "/")]
79+
}
80+
81+
switch patchLevel {
82+
case "bugfix", "fix", "dependabot":
83+
return Bugfix
84+
case "feature", "feat":
85+
return Feature
86+
case "major":
87+
return Major
88+
default:
89+
log.Println("could not determan witch version to set. given first string does'n start with major, feature or bugfix")
90+
log.Println("using minimal patch version!")
91+
return Bugfix
92+
}
93+
94+
}

src/service/pullrequest.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ func PrintPRInfos(args *PullRequestInfoSet) {
4242
"pr", fmt.Sprint(prInfos.PrNumber),
4343
"version", prInfos.NextVersion,
4444
"latest_version", prInfos.LatestVersion,
45-
"patchLevel", prInfos.PatchLevel)
45+
"patchLevel", string(prInfos.PatchLevel))
4646
output := replacer.Replace(args.Format)
4747
fmt.Print(output)
4848
} else {

src/service/release.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,8 @@ func ReleaseCreate(args *ReleaseCreateSet) {
5050
}
5151

5252
if args.Version != "" && args.PatchLevel != "" {
53-
version, err = semver.IncreaseVersion(args.PatchLevel, args.Version)
53+
parsedPatchLevel := semver.ParsePatchLevel(args.PatchLevel)
54+
version, err = semver.IncreaseVersion(parsedPatchLevel, args.Version)
5455
if err != nil {
5556
log.Fatalln(err)
5657
}
@@ -94,7 +95,8 @@ func ReleasePublish(args *ReleasePublishSet) {
9495
}
9596

9697
if args.Version != "" && args.PatchLevel != "" {
97-
version, err = semver.IncreaseVersion(args.PatchLevel, args.Version)
98+
parsedPatchLevel := semver.ParsePatchLevel(args.PatchLevel)
99+
version, err = semver.IncreaseVersion(parsedPatchLevel, args.Version)
98100
if err != nil {
99101
log.Fatalln(err)
100102
}
@@ -158,7 +160,6 @@ func getPrFromMergeMessage() (pr int, err error) {
158160
} else {
159161
return 0, errors.New("No PR found in merge message pls make shure this regex matches: " + regex +
160162
"\nExample: Merge pull request #3 from some-orga/feature/awesome-feature" +
161-
"\nIf you like to set your patch level manually by flag: -level (feautre|bugfix)" +
162-
"\nOr use the -merge-sha option!")
163+
"\nAlternativly provide the PR-Number by adding the argument -number <int>")
163164
}
164165
}

src/service/service.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ func standardPrInfosToEnv(prInfos *models.StandardPrInfos) (err error) {
4444
envVars.Set("ACI_PR_BRANCH", prInfos.BranchName)
4545
envVars.Set("ACI_OWNER", prInfos.Owner)
4646
envVars.Set("ACI_REPO", prInfos.Repo)
47-
envVars.Set("ACI_PATCH_LEVEL", prInfos.PatchLevel)
47+
envVars.Set("ACI_PATCH_LEVEL", string(prInfos.PatchLevel))
4848
envVars.Set("ACI_VERSION", prInfos.NextVersion)
4949
envVars.Set("ACI_LATEST_VERSION", prInfos.LatestVersion)
5050
envVars.Set("ACI_MERGE_COMMIT_SHA", prInfos.MergeCommitSha)

0 commit comments

Comments
 (0)