Skip to content

Commit b0b8d02

Browse files
committed
...
1 parent 51a7fa7 commit b0b8d02

File tree

9 files changed

+266
-202
lines changed

9 files changed

+266
-202
lines changed

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ PLATFORM ?= $(shell dpkg --print-architecture)
1111
# remove debug info from the binary & make it smaller
1212
LDFLAGS += -s -w
1313
# inject build info
14-
LDFLAGS += -X awesome-ci/internal/app/build.Version=${VERSION} -X awesome-ci/internal/app/build.CommitHash=${COMMIT_HASH} -X awesome-ci/internal/app/build.BuildDate=${BUILD_DATE}
14+
LDFLAGS += -X ${PROJECT_PKG}/internal/app/build.Version=${VERSION} -X ${PROJECT_PKG}/internal/app/build.CommitHash=${COMMIT_HASH} -X ${PROJECT_PKG}/internal/app/build.BuildDate=${BUILD_DATE}
1515

1616
#PLATFORMS := linux/amd64 windows/amd64
1717

Lines changed: 33 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,19 @@
11
package release
22

33
import (
4+
"os"
5+
"strconv"
6+
47
"github.com/fullstack-devops/awesome-ci/internal/app/awesome-ci/service"
8+
log "github.com/sirupsen/logrus"
59

610
"github.com/spf13/cobra"
711
)
812

913
var (
10-
Version string
11-
PatchLevel string
12-
ReleaseId int64
13-
Assets string
14-
PrNumber int
15-
MergeCommitSHA string
16-
ReleaseBranch string
17-
DryRun bool
18-
Hotfix bool
19-
Body string
14+
releaseArgs service.ReleaseArgs
15+
releaseId int64
16+
assets []string
2017
)
2118

2219
var Cmd = &cobra.Command{
@@ -33,16 +30,7 @@ var createCmd = &cobra.Command{
3330
Short: "create a GitHub release",
3431
Long: `Print all infos about a pull request in GitHub.`,
3532
Run: func(cmd *cobra.Command, args []string) {
36-
service.ReleaseCreate(&service.ReleaseCreateSet{
37-
Version: Version,
38-
PatchLevel: PatchLevel,
39-
PrNumber: PrNumber,
40-
MergeCommitSHA: MergeCommitSHA,
41-
ReleaseBranch: ReleaseBranch,
42-
DryRun: DryRun,
43-
Hotfix: Hotfix,
44-
Body: Body,
45-
})
33+
service.ReleaseCreate(&releaseArgs)
4634
},
4735
}
4836

@@ -51,18 +39,21 @@ var publishCmd = &cobra.Command{
5139
Short: "publish a GitHub release",
5240
Long: `Print all infos about a pull request in GitHub.`,
5341
Run: func(cmd *cobra.Command, args []string) {
54-
service.ReleasePublish(&service.ReleasePublishSet{
55-
Version: Version,
56-
PatchLevel: PatchLevel,
57-
PrNumber: PrNumber,
58-
MergeCommitSHA: MergeCommitSHA,
59-
ReleaseBranch: ReleaseBranch,
60-
DryRun: DryRun,
61-
Hotfix: Hotfix,
62-
Body: Body,
63-
ReleaseId: ReleaseId,
64-
Assets: Assets,
65-
})
42+
43+
if releaseId == 0 {
44+
log.Traceln("looking of env variable 'ACI_RELEASE_ID' since flag is not set")
45+
releaseIdStr, releaseIdBool := os.LookupEnv("ACI_RELEASE_ID")
46+
if releaseIdBool {
47+
releaseIdTmp, err := strconv.ParseInt(releaseIdStr, 10, 64)
48+
if err != nil {
49+
log.Fatalln(err)
50+
} else {
51+
releaseId = releaseIdTmp
52+
}
53+
}
54+
}
55+
56+
service.ReleasePublish(&releaseArgs, releaseId, assets)
6657
},
6758
}
6859

@@ -72,16 +63,16 @@ func init() {
7263
Cmd.AddCommand(publishCmd)
7364

7465
// Flags
75-
Cmd.PersistentFlags().IntVar(&PrNumber, "prnumber", 0, "overwrite the issue number")
76-
Cmd.PersistentFlags().BoolVarP(&DryRun, "dry-run", "", false, "make dry-run before writing version to Git by calling it")
77-
Cmd.PersistentFlags().BoolVarP(&Hotfix, "hotfix", "", false, "create a hotfix release")
78-
Cmd.PersistentFlags().StringVar(&MergeCommitSHA, "merge-sha", "", "set the merge sha")
79-
Cmd.PersistentFlags().StringVar(&ReleaseBranch, "release-branch", "", "set release branch (default: git default)")
80-
Cmd.PersistentFlags().StringVar(&Version, "version", "", "override version to Update")
81-
Cmd.PersistentFlags().StringVarP(&Body, "body", "b", "", "custom release message (markdow string or file)")
82-
Cmd.PersistentFlags().StringVarP(&PatchLevel, "patch-level", "L", "", "predefine patch level of version to Update")
66+
Cmd.PersistentFlags().IntVar(&releaseArgs.PrNumber, "prnumber", 0, "overwrite the issue number")
67+
Cmd.PersistentFlags().BoolVarP(&releaseArgs.DryRun, "dry-run", "", false, "make dry-run before writing version to Git by calling it")
68+
Cmd.PersistentFlags().BoolVarP(&releaseArgs.Hotfix, "hotfix", "", false, "create a hotfix release")
69+
Cmd.PersistentFlags().StringVar(&releaseArgs.MergeCommitSHA, "merge-sha", "", "set the merge sha")
70+
Cmd.PersistentFlags().StringVar(&releaseArgs.ReleaseBranch, "release-branch", "", "set release branch (default: git default)")
71+
Cmd.PersistentFlags().StringVar(&releaseArgs.Version, "version", "", "override version to Update")
72+
Cmd.PersistentFlags().StringVarP(&releaseArgs.Body, "body", "b", "", "custom release message (markdown string or file)")
73+
Cmd.PersistentFlags().StringVarP(&releaseArgs.PatchLevel, "patch-level", "l", "", "predefine patch level of version to Update")
8374

8475
// exclusive Flags
85-
publishCmd.Flags().Int64VarP(&ReleaseId, "releaseid", "", 0, "publish an early defined release")
86-
publishCmd.Flags().StringVarP(&Assets, "assets", "a", "", "define output by get")
76+
publishCmd.Flags().Int64VarP(&releaseId, "release-id", "", 0, "publish an early defined release (also looking for env ACI_RELEASE_ID)")
77+
publishCmd.Flags().StringArrayVarP(&assets, "asset", "a", []string{}, "define output by get")
8778
}

internal/app/awesome-ci/scm-portal/github/release.go

Lines changed: 16 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,6 @@ package github
33
import (
44
"errors"
55
"fmt"
6-
"os"
7-
"strconv"
86
"time"
97

108
"github.com/fullstack-devops/awesome-ci/internal/pkg/tools"
@@ -15,24 +13,16 @@ import (
1513
)
1614

1715
// CreateRelease
18-
func (ghrc *GitHubRichClient) CreateRelease(version string, releaseBranch string, body string, draft bool) (createdRelease *github.RepositoryRelease, err error) {
19-
20-
relName := "Release " + version
16+
func (ghrc *GitHubRichClient) CreateRelease(tagName string, releaseBranch string, body string) (createdRelease *github.RepositoryRelease, err error) {
17+
draft := true
18+
relName := "Release " + tagName
2119
if releaseBranch == "" {
2220
releaseBranch = tools.GetDefaultBranch()
2321
}
2422

25-
// get body for release
26-
if body != "" {
27-
bodyFile, err := tools.CheckIsFile(body)
28-
if err == nil {
29-
body = bodyFile
30-
}
31-
}
32-
3323
releaseObject := github.RepositoryRelease{
3424
TargetCommitish: &releaseBranch,
35-
TagName: &version,
25+
TagName: &tagName,
3626
Name: &relName,
3727
Draft: &draft,
3828
Body: &body,
@@ -51,29 +41,19 @@ func (ghrc *GitHubRichClient) CreateRelease(version string, releaseBranch string
5141

5242
// PublishRelease
5343
func (ghrc *GitHubRichClient) PublishRelease(
54-
version string,
44+
tagName string,
5545
releaseBranch string,
5646
body string,
5747
releaseId int64,
58-
uploadArtifacts *string) (releaseAssets []*github.ReleaseAsset, err error) {
59-
draftFalse := false
48+
uploadArtifacts []tools.UploadAsset) (releaseAssets []*github.ReleaseAsset, err error) {
6049

6150
if releaseId == 0 {
62-
releaseIdStr, releaseIdBool := os.LookupEnv("ACI_RELEASE_ID")
63-
if !releaseIdBool {
64-
log.Println("No release found, creating one...")
65-
release, err := ghrc.CreateRelease(version, releaseBranch, body, true)
66-
if err != nil {
67-
log.Fatalln(err)
68-
}
69-
releaseId = *release.ID
70-
} else {
71-
releaseId, err = strconv.ParseInt(releaseIdStr, 10, 64)
72-
if err != nil {
73-
fmt.Printf("%s of type %T", releaseIdStr, releaseIdStr)
74-
os.Exit(2)
75-
}
51+
log.Infoln("no release found, creating one...")
52+
release, err := ghrc.CreateRelease(tagName, releaseBranch, body)
53+
if err != nil {
54+
log.Fatalln(err)
7655
}
56+
releaseId = *release.ID
7757
}
7858

7959
existingRelease, _, err := ghrc.Client.Repositories.GetRelease(
@@ -82,21 +62,16 @@ func (ghrc *GitHubRichClient) PublishRelease(
8262
ghrc.Repository,
8363
releaseId)
8464
if err != nil {
85-
return releaseAssets, err
65+
return
8666
}
8767

8868
// upload any given artifacts
8969
var releaseBodyAssets string = ""
90-
if *uploadArtifacts != "" {
91-
filesAndInfos, err := tools.GetAsstes(uploadArtifacts, false)
92-
if err != nil {
93-
return releaseAssets, err
94-
}
95-
70+
if len(uploadArtifacts) > 0 {
9671
releaseBodyAssets = "### Asstes\n"
9772

98-
for _, fileAndInfo := range filesAndInfos {
99-
fmt.Printf("uploading %s as asset to release\n", fileAndInfo.Name)
73+
for _, fileAndInfo := range uploadArtifacts {
74+
log.Infof("uploading %s as asset to release\n", fileAndInfo.Name)
10075
// Upload assets to GitHub Release
10176
relAsset, _, err := ghrc.Client.Repositories.UploadReleaseAsset(
10277
ctx,
@@ -122,7 +97,7 @@ func (ghrc *GitHubRichClient) PublishRelease(
12297
existingRelease.Body = &newReleaseBody
12398

12499
// publishing release
125-
*existingRelease.Draft = draftFalse
100+
*existingRelease.Draft = false
126101
_, _, err = ghrc.Client.Repositories.EditRelease(
127102
ctx,
128103
ghrc.Owner,

internal/app/awesome-ci/scm-portal/gitlab/release.go

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,17 @@ import (
77
)
88

99
// GetLatestReleaseVersion
10-
func (ghrc *GitLabRichClient) GetLatestReleaseVersion() (latestRelease *gitlab.Release, err error) {
10+
func (glrc *GitLabRichClient) GetLatestReleaseVersion() (latestRelease *gitlab.Release, err error) {
11+
12+
return nil, fmt.Errorf("not implemented")
13+
}
14+
15+
func (glrc *GitLabRichClient) CreateRelease(tagName string, releaseBranch string, body string) (createdRelease *gitlab.Release, err error) {
16+
17+
return nil, fmt.Errorf("not implemented")
18+
}
19+
20+
func (glrc *GitLabRichClient) PublishRelease(tagName string, releaseBranch string, body string, assets []string) (publishedRelease *gitlab.Release, err error) {
1121

1222
return nil, fmt.Errorf("not implemented")
1323
}

internal/app/awesome-ci/scm-portal/models.go

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,10 @@ type PrMrRequestInfos struct {
2626
}
2727

2828
type Release struct {
29-
TagName string `json:"tag_name"` // GitHub: PublishedAt; GitLab: ReleasedAt
30-
Name string `json:"name"` // equaly
31-
Commit string `json:"commit"` // GitHub: TargetCommitish; GitLab: Commit
32-
CreatedAt *time.Time `json:"created_at"` // equaly
33-
PublishedAt *time.Time `json:"published_at,omitempty"` // GitHub: PublishedAt; GitLab: ReleasedAt
29+
ID int64 `json:"id"` // GitHub: ID, GitLab: not available!!
30+
TagName string `json:"tag_name"` // GitHub: PublishedAt; GitLab: ReleasedAt
31+
Name string `json:"name"` // equaly
32+
Commit string `json:"commit"` // GitHub: TargetCommitish; GitLab: Commit
33+
CreatedAt *time.Time `json:"created_at"` // equaly
34+
PublishedAt *time.Time `json:"published_at"` // GitHub: PublishedAt; GitLab: ReleasedAt
3435
}

internal/app/awesome-ci/scm-portal/release.go

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package scmportal
33
import (
44
"github.com/fullstack-devops/awesome-ci/internal/app/awesome-ci/scm-portal/github"
55
"github.com/fullstack-devops/awesome-ci/internal/app/awesome-ci/scm-portal/gitlab"
6+
"github.com/fullstack-devops/awesome-ci/internal/pkg/tools"
67

78
log "github.com/sirupsen/logrus"
89
)
@@ -40,3 +41,68 @@ func (lay SCMLayer) GetLatestReleaseVersion() (release *Release, err error) {
4041
}
4142
return
4243
}
44+
45+
func (lay SCMLayer) CreateRelease(tagName string, branch string, body string) (createdRelease *Release, err error) {
46+
switch grc := lay.Grc.(type) {
47+
48+
case *github.GitHubRichClient:
49+
createdRel, err := grc.CreateRelease(tagName, branch, body)
50+
if err != nil {
51+
return nil, err
52+
}
53+
return &Release{
54+
ID: *createdRel.ID,
55+
TagName: *createdRel.TagName,
56+
Name: *createdRel.Name,
57+
Commit: *createdRel.TargetCommitish,
58+
CreatedAt: &createdRel.CreatedAt.Time,
59+
PublishedAt: nil,
60+
}, nil
61+
62+
case *gitlab.GitLabRichClient:
63+
log.Fatalln("gitlab is not yet implemented")
64+
65+
createdRel, err := grc.CreateRelease(tagName, branch, body)
66+
if err != nil {
67+
return nil, err
68+
}
69+
return &Release{
70+
ID: 0, // TODO: does not exist at GitLab!
71+
TagName: createdRel.TagName,
72+
Name: createdRel.Name,
73+
Commit: createdRel.Commit.String(),
74+
CreatedAt: createdRel.CreatedAt,
75+
PublishedAt: nil,
76+
}, nil
77+
}
78+
return
79+
}
80+
81+
func (lay SCMLayer) PublishRelease(tagName string, branch string, body string, releaseId int64, assets []tools.UploadAsset) (publishedRelease *Release, err error) {
82+
switch grc := lay.Grc.(type) {
83+
84+
case *github.GitHubRichClient:
85+
_, err := grc.PublishRelease(tagName, branch, body, releaseId, assets)
86+
if err != nil {
87+
return nil, err
88+
}
89+
return nil, nil
90+
91+
case *gitlab.GitLabRichClient:
92+
log.Fatalln("gitlab is not yet implemented")
93+
94+
createdRel, err := grc.CreateRelease(tagName, branch, body)
95+
if err != nil {
96+
return nil, err
97+
}
98+
return &Release{
99+
ID: 0, // TODO: does not exist at GitLab!
100+
TagName: createdRel.TagName,
101+
Name: createdRel.Name,
102+
Commit: createdRel.Commit.String(),
103+
CreatedAt: createdRel.CreatedAt,
104+
PublishedAt: createdRel.ReleasedAt,
105+
}, nil
106+
}
107+
return
108+
}

internal/app/awesome-ci/service/pullrequest.go

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,3 +49,23 @@ func PrintPRInfos(number int, formatOut string) {
4949
fmt.Printf("Possible new release version: %s\n", prInfos.NextVersion)
5050

5151
}
52+
53+
func prInfosToEnv(scmLayer *scmportal.SCMLayer, prInfos *scmportal.PrMrRequestInfos) error {
54+
var envVars []ces.KeyValue = []ces.KeyValue{
55+
{Name: "ACI_PR", Value: strconv.Itoa(prInfos.Number)},
56+
{Name: "ACI_PR_SHA", Value: prInfos.Sha},
57+
{Name: "ACI_PR_SHA_SHORT", Value: prInfos.ShaShort},
58+
{Name: "ACI_PR_BRANCH", Value: prInfos.BranchName},
59+
{Name: "ACI_MERGE_COMMIT_SHA", Value: prInfos.MergeCommitSha},
60+
{Name: "ACI_OWNER", Value: prInfos.Owner},
61+
{Name: "ACI_REPO", Value: prInfos.Repo},
62+
{Name: "ACI_PATCH_LEVEL", Value: string(prInfos.PatchLevel)},
63+
{Name: "ACI_VERSION", Value: prInfos.NextVersion},
64+
{Name: "ACI_LATEST_VERSION", Value: prInfos.LatestVersion},
65+
}
66+
67+
if err := scmLayer.CES.ExportAsEnv(envVars); err != nil {
68+
return fmt.Errorf("could not export env variables: %v", err)
69+
}
70+
return nil
71+
}

0 commit comments

Comments
 (0)