Skip to content

Commit 13ddde7

Browse files
author
evombau
committed
zwischenstand rewrite service
1 parent 840bb8b commit 13ddde7

File tree

8 files changed

+282
-92
lines changed

8 files changed

+282
-92
lines changed

.gitignore

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,18 @@
1+
# Binaries for programs and plugins
2+
*.exe
3+
*.exe~
4+
*.dll
5+
*.so
6+
*.dylib
17

2-
.env
8+
# Test binary, built with `go test -c`
9+
*.test
10+
11+
# Output of the go coverage tool, specifically when used with LiteIDE
12+
*.out
13+
14+
# Dependency directories (remove the comment below to include it)
15+
# vendor/
16+
out
17+
*.env
18+
go.sum

gitcontroller/github.go

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,7 @@ import (
1010
)
1111

1212
type GitConfiguration struct {
13-
Hostname string
14-
ApiVersion string
15-
Actor string
13+
ApiUrl string
1614
Repository string
1715
AccessToken string
1816
}
@@ -82,7 +80,7 @@ func newPostRequest(endpoint string, token string, requestBody []byte) map[strin
8280
}
8381

8482
func github_getLatestReleaseVersion(conf GitConfiguration) string {
85-
url := fmt.Sprintf("%s/api/%s/repos/%s/releases/latest", conf.Hostname, conf.ApiVersion, conf.Repository)
83+
url := fmt.Sprintf("%s/repos/%s/releases/latest", conf.ApiUrl, conf.Repository)
8684
result := newGetRequest(url, conf.AccessToken)
8785

8886
var version string
@@ -110,11 +108,11 @@ func github_createNextGitHubRelease(conf GitConfiguration, newReleaseVersion str
110108
fmt.Println("(github_createNextGitHubRelease) Error building requestBody", err)
111109
}
112110

113-
url := fmt.Sprintf("%s/api/%s/repos/%s/releases", conf.Hostname, conf.ApiVersion, conf.Repository)
111+
url := fmt.Sprintf("%s/repos/%s/releases", conf.ApiUrl, conf.Repository)
114112
result := newPostRequest(url, conf.AccessToken, requestBody)
115113

116114
if result["name"] == "Release "+newReleaseVersion {
117-
fmt.Println("Release" + newReleaseVersion + " sucsessfully created")
115+
fmt.Println("Release " + newReleaseVersion + " sucsessfully created")
118116
} else {
119117
fmt.Println("Somethin went worng at creating release!")
120118
}

gitcontroller/initsenv.go

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,9 @@ func determanEnvironment(environment string) GitConfiguration {
2121
switch environment {
2222
case "Github":
2323
return GitConfiguration{
24-
Hostname: os.Getenv("GITHUB_SERVER_URL"),
25-
ApiVersion: getEnv("GIT_API_VERSION", "v3", false),
26-
Actor: os.Getenv("GITHUB_ACTOR"),
24+
ApiUrl: os.Getenv("GITHUB_API_URL"),
2725
Repository: os.Getenv("GITHUB_REPOSITORY"),
28-
AccessToken: os.Getenv("GIT_ACCESS_TOKEN"),
26+
AccessToken: os.Getenv("GITHUB_TOKEN"),
2927
}
3028

3129
case "Custom":

go.mod

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
11
module awesome-ci-semver
22

33
go 1.15
4+
5+
require (
6+
golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5 // indirect
7+
golang.org/x/tools v0.1.0 // indirect
8+
)

main.go

Lines changed: 41 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -1,103 +1,63 @@
11
package main
22

33
import (
4-
"awesome-ci-semver/gitcontroller"
5-
"awesome-ci-semver/semver"
4+
"awesome-ci-semver/service"
65
"flag"
7-
"fmt"
86
"os"
9-
"os/exec"
10-
"regexp"
117
)
128

13-
func runcmd(cmd string, shell bool) string {
14-
if shell {
15-
out, err := exec.Command("bash", "-c", cmd).Output()
16-
if err != nil {
17-
fmt.Println(err)
18-
panic("some error found")
19-
}
20-
return string(out)
21-
}
22-
out, err := exec.Command(cmd).Output()
23-
if err != nil {
24-
fmt.Println(err)
25-
}
26-
return string(out)
27-
}
9+
var (
10+
cienv *string
11+
createRelease CreateReleaseSet
12+
getBuildInfos getBuildInfosSet
13+
)
2814

29-
func isFlagPassed(name string) bool {
30-
found := false
31-
flag.Visit(func(f *flag.Flag) {
32-
if f.Name == name {
33-
found = true
34-
}
35-
})
36-
return found
15+
type CreateReleaseSet struct {
16+
fs *flag.FlagSet
17+
version string
18+
patchLevel string
19+
publishNpm string
20+
dryRun bool
3721
}
3822

39-
func funcCreateRelease(cienv *string, overrideVersion *string, getVersionIncrease *string, isDryRun *bool) {
40-
var gitVersion string
41-
if *overrideVersion != "" {
42-
gitVersion = *overrideVersion
43-
} else {
44-
gitVersion = gitcontroller.GetLatestReleaseVersion(*cienv)
45-
}
46-
47-
var patchLevel string
48-
if *getVersionIncrease != "" {
49-
patchLevel = *getVersionIncrease
50-
} else {
51-
if *cienv == "Github" {
52-
// Output: []string {FullString, PR, FullBranch, Orga, branch, branchBegin, restOfBranch}
53-
regex := `[a-zA-z ]+#([0-9]+) from (([0-9a-zA-Z-]+)/((feature|bugfix|fix)/(.+)))`
54-
r := regexp.MustCompile(regex)
55-
56-
// mergeMessage := r.FindStringSubmatch(`Merge pull request #3 from ITC-TO-MT/feature/test-1`)
57-
mergeMessage := r.FindStringSubmatch(runcmd(`git log -1 --pretty=format:"%s"`, true))
58-
if len(mergeMessage) > 0 {
59-
fmt.Printf("PR-Number: %s\n", mergeMessage[1])
60-
fmt.Printf("Merged branch is a %s\n", mergeMessage[5])
61-
patchLevel = mergeMessage[5]
62-
} else {
63-
fmt.Println("No merge message found pls make shure this regex matches: ", regex)
64-
fmt.Print("Example: Merge pull request #3 from some-orga/feature/awesome-feature\n\n")
65-
fmt.Print("If you like to set your patch level manually by flag: -level (feautre|bugfix)\n\n")
66-
os.Exit(1)
67-
}
68-
}
69-
}
23+
type getBuildInfosSet struct {
24+
fs *flag.FlagSet
25+
version string
26+
patchLevel string
27+
output string
28+
}
7029

71-
newVersion := semver.IncreaseSemVer(patchLevel, gitVersion)
72-
if *isDryRun {
73-
fmt.Printf("Old version: %s\n", gitVersion)
74-
fmt.Printf("Would writing new release: %s\n", newVersion)
75-
} else {
76-
fmt.Printf("Old version: %s\n", gitVersion)
77-
fmt.Printf("Writing new release: %s\n", newVersion)
78-
gitcontroller.CreateNextGitHubRelease(*cienv, newVersion)
79-
}
30+
func init() {
31+
cienv = flag.String("cienv", "Github", "set your CI Environment for Special Featueres!\nAvalible: Jenkins, Github, Gitlab, Custom\nDefault: Github")
32+
33+
// createReleaseSet
34+
createRelease.fs = flag.NewFlagSet("createRelease", flag.ExitOnError)
35+
createRelease.fs.StringVar(&createRelease.version, "version", "", "override version to Update")
36+
createRelease.fs.StringVar(&createRelease.patchLevel, "patchLevel", "bugfix", "predefine version to Update")
37+
createRelease.fs.StringVar(&createRelease.publishNpm, "publishNpm", "", "runs npm publish --tag <createdTag> with custom directory")
38+
createRelease.fs.BoolVar(&createRelease.dryRun, "dry-run", false, "make dry-run before writing version to Git")
39+
40+
// getNewReleaseVersion
41+
getBuildInfos.fs = flag.NewFlagSet("getBuildInfos", flag.ExitOnError)
42+
getBuildInfos.fs.StringVar(&getBuildInfos.version, "version", "", "override version to Update")
43+
getBuildInfos.fs.StringVar(&getBuildInfos.patchLevel, "patchLevel", "bugfix", "predefine version to Update")
44+
getBuildInfos.fs.StringVar(&getBuildInfos.output, "output", "pr,version", "define output by get")
8045
}
8146

8247
func main() {
8348

84-
cienv := flag.String("cienv", "Github", "set your CI Environment for Special Featueres!\nAvalible: Jenkins, Github, Gitlab, Custom\nDefault: Github")
85-
86-
createRelease := flag.NewFlagSet("createRelease", flag.ExitOnError)
87-
overrideVersion := createRelease.String("version", "", "override version to Update")
88-
getVersionIncrease := createRelease.String("level", "", "predefine version to Update")
89-
isDryRun := createRelease.Bool("dry-run", false, "Make dry-run before writing version to Git")
49+
// disable logging
50+
//log.SetOutput(ioutil.Discard)
9051

9152
flag.Parse()
9253

93-
if os.Args[1] != "createRelease" {
94-
fmt.Println("expected 'createRelease', '...' or 'bar' subcommands")
95-
os.Exit(1)
96-
}
97-
9854
switch os.Args[1] {
9955
case "createRelease":
100-
createRelease.Parse(os.Args[2:])
101-
funcCreateRelease(cienv, overrideVersion, getVersionIncrease, isDryRun)
56+
createRelease.fs.Parse(os.Args[2:])
57+
service.CreateRelease(cienv, &createRelease.version, &createRelease.patchLevel, &createRelease.dryRun, &createRelease.publishNpm)
58+
case "getBuildInfos":
59+
getBuildInfos.fs.Parse(os.Args[2:])
60+
service.GetBuildInfos(cienv, &getBuildInfos.version, &getBuildInfos.patchLevel, &getBuildInfos.output)
10261
}
62+
10363
}

package.json

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
{
2+
"dependencies": {
3+
"@angular/animations": "~11.2.7",
4+
"@angular/cdk": "^11.2.6",
5+
"@angular/common": "~11.2.7",
6+
"@angular/compiler": "~11.2.7",
7+
"@angular/core": "~11.2.7",
8+
"@angular/flex-layout": "^11.0.0-beta.33",
9+
"@angular/forms": "~11.2.7",
10+
"@angular/localize": "^11.2.7",
11+
"@angular/material": "^11.2.6",
12+
"@angular/platform-browser": "~11.2.7",
13+
"@angular/platform-browser-dynamic": "~11.2.7",
14+
"@angular/router": "~11.2.7",
15+
"keycloak-angular": "^8.1.0",
16+
"keycloak-js": "^12.0.4",
17+
"rxjs": "~6.6.7",
18+
"tslib": "^2.0.0",
19+
"zone.js": "~0.10.2"
20+
},
21+
"devDependencies": {
22+
"@angular-devkit/build-angular": "^0.1102.6",
23+
"@angular/cli": "~11.2.6",
24+
"@angular/compiler-cli": "~11.2.7",
25+
"@types/jasmine": "~3.6.0",
26+
"@types/jasminewd2": "~2.0.3",
27+
"@types/node": "^12.11.1",
28+
"codelyzer": "^6.0.1",
29+
"jasmine-core": "~3.6.0",
30+
"jasmine-spec-reporter": "~5.0.0",
31+
"karma": "~5.0.0",
32+
"karma-chrome-launcher": "~3.1.0",
33+
"karma-coverage-istanbul-reporter": "~3.0.2",
34+
"karma-jasmine": "~4.0.0",
35+
"karma-jasmine-html-reporter": "^1.5.0",
36+
"ng-packagr": "^11.0.0",
37+
"protractor": "~7.0.0",
38+
"ts-node": "~8.3.0",
39+
"tslint": "~6.1.0",
40+
"typescript": "~4.1.5"
41+
},
42+
"name": "my-workspace",
43+
"private": true,
44+
"scripts": {
45+
"build": "ng build lib-emst-ui-frame --prod",
46+
"e2e": "ng e2e",
47+
"lint": "ng lint",
48+
"ng": "ng",
49+
"postinstall": "ngcc",
50+
"start": "ng serve",
51+
"test": "ng test"
52+
},
53+
"version": "0.3.0"
54+
}

service/createRelease.go

Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
package service
2+
3+
import (
4+
"awesome-ci-semver/gitcontroller"
5+
"awesome-ci-semver/semver"
6+
"encoding/json"
7+
"fmt"
8+
"io/ioutil"
9+
"os"
10+
"os/exec"
11+
"regexp"
12+
"strings"
13+
)
14+
15+
func runcmd(cmd string, shell bool) string {
16+
if shell {
17+
out, err := exec.Command("bash", "-c", cmd).Output()
18+
if err != nil {
19+
fmt.Println(err)
20+
panic("some error found")
21+
}
22+
return string(out)
23+
}
24+
out, err := exec.Command(cmd).Output()
25+
if err != nil {
26+
fmt.Println(err)
27+
}
28+
return string(out)
29+
}
30+
31+
func CreateRelease(cienv *string, overrideVersion *string, getVersionIncrease *string, isDryRun *bool, publishNpm *string) {
32+
var gitVersion string
33+
if *overrideVersion != "" {
34+
gitVersion = *overrideVersion
35+
} else {
36+
gitVersion = gitcontroller.GetLatestReleaseVersion(*cienv)
37+
}
38+
39+
var patchLevel string
40+
if *getVersionIncrease != "" {
41+
patchLevel = *getVersionIncrease
42+
} else {
43+
if *cienv == "Github" {
44+
// Output: []string {FullString, PR, FullBranch, Orga, branch, branchBegin, restOfBranch}
45+
regex := `[a-zA-z ]+#([0-9]+) from (([0-9a-zA-Z-]+)/((feature|bugfix|fix)/(.+)))`
46+
r := regexp.MustCompile(regex)
47+
48+
// mergeMessage := r.FindStringSubmatch(`Merge pull request #3 from ITC-TO-MT/feature/test-1`)
49+
mergeMessage := r.FindStringSubmatch(runcmd(`git log -1 --pretty=format:"%s"`, true))
50+
if len(mergeMessage) > 0 {
51+
fmt.Printf("PR-Number: %s\n", mergeMessage[1])
52+
fmt.Printf("Merged branch is a %s\n", mergeMessage[5])
53+
patchLevel = mergeMessage[5]
54+
} else {
55+
fmt.Println("No merge message found pls make shure this regex matches: ", regex)
56+
fmt.Print("Example: Merge pull request #3 from some-orga/feature/awesome-feature\n\n")
57+
fmt.Print("If you like to set your patch level manually by flag: -level (feautre|bugfix)\n\n")
58+
os.Exit(1)
59+
}
60+
}
61+
}
62+
63+
newVersion := semver.IncreaseSemVer(patchLevel, gitVersion)
64+
if *isDryRun {
65+
fmt.Printf("Old version: %s\n", gitVersion)
66+
fmt.Printf("Would writing new release: %s\n", newVersion)
67+
} else {
68+
fmt.Printf("Old version: %s\n", gitVersion)
69+
fmt.Printf("Writing new release: %s\n", newVersion)
70+
gitcontroller.CreateNextGitHubRelease(*cienv, newVersion)
71+
}
72+
73+
if *publishNpm != "" {
74+
// check if subfolder has slash
75+
pathToSource := *publishNpm
76+
if !strings.HasSuffix(*publishNpm, "/") {
77+
pathToSource = *publishNpm + "/"
78+
}
79+
fmt.Printf("Puplishing npm packages under path: %s\n", pathToSource)
80+
npmPublish(pathToSource, newVersion)
81+
}
82+
}
83+
84+
func npmPublish(pathToSource string, newVersion string) {
85+
86+
// opening package.json
87+
jsonFile, err := os.Open(pathToSource + "package.json")
88+
if err != nil {
89+
fmt.Println(err)
90+
os.Exit(2)
91+
}
92+
defer jsonFile.Close()
93+
94+
var result map[string]interface{}
95+
json.NewDecoder(jsonFile).Decode(&result)
96+
97+
result["version"] = newVersion
98+
99+
b, err := json.MarshalIndent(result, "", " ")
100+
if err != nil {
101+
fmt.Println(err)
102+
os.Exit(2)
103+
}
104+
105+
// writing result to package.json
106+
err = ioutil.WriteFile(pathToSource+"package.json", b, 0644)
107+
if err != nil {
108+
fmt.Println(err)
109+
os.Exit(2)
110+
}
111+
112+
command := exec.Command("npm", "publish", pathToSource, "--tag", fmt.Sprintf("%s@%s", result["name"], newVersion))
113+
command.Stdout = os.Stdout
114+
command.Stderr = os.Stderr
115+
// Run the command
116+
command.Run()
117+
}

0 commit comments

Comments
 (0)