Skip to content

Commit 9040d2c

Browse files
authored
Merge pull request #65 from fullstack-devops/bugfix/workflow-hardening-assets
workflow hardening missing assets
2 parents a31c5c7 + 44265f7 commit 9040d2c

File tree

15 files changed

+201
-132
lines changed

15 files changed

+201
-132
lines changed

.github/workflows/Release.yaml

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,10 +91,17 @@ jobs:
9191
path: out/
9292
key: awesome-ci-${{ github.sha }}
9393

94-
- name: list generated artifacts
94+
- name: get generated artifacts
9595
working-directory: out
9696
run: ls -la
9797

98+
- name: Check available assets
99+
if: hashFiles('out/awesome-ci_${{ needs.generate_infos.outputs.version }}_arm64') != '' || hashFiles('out/awesome-ci_${{ needs.generate_infos.outputs.version }}_amd64') != ''
100+
uses: actions/github-script@v3
101+
with:
102+
script: |
103+
core.setFailed('Not all files provided')
104+
98105
- name: Publish Release
99106
run: awesome-ci release publish -releaseid "$ACI_RELEASE_ID" -assets "file=out/$ARTIFACT1,file=out/$ARTIFACT2"
100107
env:
@@ -121,7 +128,7 @@ jobs:
121128
122129
OLD_VERSION=$(echo "$(git describe --tags)" | tr -d '\n')
123130
124-
sed -i "s/$OLD_VERSION/$NEW_VERSION/g" action.yml README.md
131+
sed -i "s/\([0-9]\+\.[0-9]\+\.[0-9]\+\)/$NEW_VERSION/g" action.yml README.md
125132
126133
git status
127134
git commit -a -m "update to version v$NEW_VERSION"

.github/workflows/branchPR.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,3 +76,4 @@ jobs:
7676
- name: get generated artifacts
7777
working-directory: out
7878
run: ls -la
79+

docs/commands/index.md

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,16 @@ awesome-ci <subcommand> [subcommand-option]
2929

3030
You can find out more about the subcommands by clicking on the relevant one in the navigation.
3131

32-
| Subcommand | Description |
33-
| ---------------------------------------------------------------------------------- | ------------------------------------------------------- |
34-
| [release](https://fullstack-devops.github.io/awesome-ci/commands/createRelease.html) | creates a release at GitHub or GitLab |
35-
| [pr](https://fullstack-devops.github.io/awesome-ci/commands/getBuildInfos.html) | prints out any git information and can manipulate these |
36-
| [parseJSON](https://fullstack-devops.github.io/awesome-ci/commands/parseJSON.html) | can parse simple JSON files |
37-
| [parseYAML](https://fullstack-devops.github.io/awesome-ci/commands/parseYAML.html) | can parse simple YAML files |
32+
| Subcommand | Description |
33+
| --------------------------------------- | ------------------------------------------|
34+
| [release](/commands/createRelease.html) | creates a release at GitHub or |
35+
| [pr](/commands/getBuildInfos.html) | prints out any git information and can manipulate |
36+
| [parseJSON](/commands/parseJSON.html) | can parse simple JSON |
37+
| [parseYAML](/commands/parseYAML.html) | can parse simple YAML files |
38+
39+
40+
## Release Body updates
41+
42+
Now available: Any string or any markdown file can now be attached in the release section. In addition, the release assets are attached as text to each release body with the associated sha256. More about that in the picture below and in the release section.
43+
44+
![Release Body with Asstes](/pictures/release-assets-readme.png "Release Body with Asstes")

docs/commands/release.md

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ awesome-ci release <subcommand> [subcommand-option]
2929
| `-version` | overrides any version from git and, or patches the given string |
3030
| `-patchLevel` | overrides the patchLevel. make shure your following the alias definition. |
3131
| `-dry-run` | doesn't create a release. Prints out what it would do and check permissions |
32+
| `-body` | add a text (markdown) to the release body |
3233
| `-assets` | (only available in publish) uploads the given Artifacts to a release. Eg.: `file=out/awesome-ci` |
3334
| `-releaseid` | (only available in publish) publishes an early defined release |
3435

@@ -42,15 +43,6 @@ This can be useful in connection with `-patchLevel` when creating a manual relea
4243
awesome-ci createRelease -version 0.1.0
4344
```
4445

45-
#### -patchLevel
46-
47-
The `-patchLevel` option can overwrite the evaluated patchLevel.
48-
This can be useful in connection with `-version` when creating a manual release.
49-
50-
```bash
51-
awesome-ci createRelease -patchLevel feature
52-
```
53-
5446
#### -assets
5547

5648
The `-assets` option can updload a single or multiple artifacts.
@@ -59,5 +51,10 @@ However, you must choose the format of the artefacts.
5951

6052
eg.: `-assets "file=path/to/file,file=path/to/second/file"`
6153

54+
#### -body
55+
56+
Send a custom release description. the input can be either a string or a path to a file.
57+
58+
![Release Body with Asstes](/pictures/release-assets-readme.png "Release Body with Asstes")
6259

6360
... more documentation to be done ;)
47.4 KB
Loading

main.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ func init() {
5757
releaseSet.Create.Fs = flag.NewFlagSet("release create", flag.ExitOnError)
5858
releaseSet.Create.Fs.IntVar(&releaseSet.Create.PrNumber, "prnumber", 0, "overwrite the issue number")
5959
releaseSet.Create.Fs.StringVar(&releaseSet.Create.Version, "version", "", "override version to Update")
60+
releaseSet.Create.Fs.StringVar(&releaseSet.Create.Body, "body", "", "custom release message (markdow string or file)")
6061
releaseSet.Create.Fs.StringVar(&releaseSet.Create.PatchLevel, "patchLevel", "", "predefine version to Update")
6162
releaseSet.Create.Fs.BoolVar(&releaseSet.Create.DryRun, "dry-run", false, "make dry-run before writing version to Git by calling it")
6263
releaseSet.Create.Fs.Usage = func() {
@@ -66,6 +67,7 @@ func init() {
6667
releaseSet.Publish.Fs = flag.NewFlagSet("release publish", flag.ExitOnError)
6768
releaseSet.Publish.Fs.IntVar(&releaseSet.Publish.PrNumber, "prnumber", 0, "overwrite the issue number")
6869
releaseSet.Publish.Fs.StringVar(&releaseSet.Publish.Version, "version", "", "override version to Update")
70+
releaseSet.Publish.Fs.StringVar(&releaseSet.Publish.Body, "body", "", "custom release message (markdow string or file)")
6971
releaseSet.Publish.Fs.StringVar(&releaseSet.Publish.PatchLevel, "patchLevel", "", "predefine version to Update")
7072
releaseSet.Publish.Fs.StringVar(&releaseSet.Publish.Assets, "assets", "", "upload assets to release. eg.: \"file=awesome-ci\"")
7173
releaseSet.Publish.Fs.Int64Var(&releaseSet.Publish.ReleaseId, "releaseid", 0, "publish an early defined release")

release-template.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
## Awesome-CI
2+
3+
this project is still in the beta phase. But don't be shy and use this tool in advance. If you find bugs or have improvements, please feel free to open an [issue](https://github.com/fullstack-devops/awesome-ci/issues/new/choose) :rocket:

src/acigithub/release.go

Lines changed: 37 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,13 @@ import (
66
"log"
77
"os"
88
"strconv"
9+
"time"
910

1011
"github.com/google/go-github/v39/github"
1112
)
1213

1314
// CreateRelease
14-
func CreateRelease(version string, draft bool) (createdRelease *github.RepositoryRelease, err error) {
15+
func CreateRelease(version string, body string, draft bool) (createdRelease *github.RepositoryRelease, err error) {
1516
if !isgithubRepository {
1617
log.Fatalln("make shure the GITHUB_REPOSITORY is available!")
1718
}
@@ -20,11 +21,20 @@ func CreateRelease(version string, draft bool) (createdRelease *github.Repositor
2021
relName := "Release " + version
2122
defaultBranch := tools.GetDefaultBranch()
2223

24+
// get body for release
25+
if body != "" {
26+
bodyFile, err := tools.CheckIsFile(body)
27+
if err == nil {
28+
body = bodyFile
29+
}
30+
}
31+
2332
releaseObject := github.RepositoryRelease{
2433
TargetCommitish: &defaultBranch,
2534
TagName: &version,
2635
Name: &relName,
2736
Draft: &draft,
37+
Body: &body,
2838
}
2939
createdRelease, _, err = GithubClient.Repositories.CreateRelease(
3040
ctx,
@@ -46,7 +56,7 @@ func CreateRelease(version string, draft bool) (createdRelease *github.Repositor
4656
}
4757

4858
// PublishRelease
49-
func PublishRelease(version string, releaseId int64, uploadArtifacts *string) (err error) {
59+
func PublishRelease(version string, body string, releaseId int64, uploadArtifacts *string) (err error) {
5060
draftFalse := false
5161
if !isgithubRepository {
5262
log.Fatalln("make shure the GITHUB_REPOSITORY is available!")
@@ -57,7 +67,7 @@ func PublishRelease(version string, releaseId int64, uploadArtifacts *string) (e
5767
releaseIdStr, releaseIdBool := os.LookupEnv("ACI_RELEASE_ID")
5868
if !releaseIdBool {
5969
log.Println("No release found, creating one...")
60-
release, err := CreateRelease(version, false)
70+
release, err := CreateRelease(version, body, false)
6171
if err != nil {
6272
log.Fatalln(err)
6373
}
@@ -80,23 +90,16 @@ func PublishRelease(version string, releaseId int64, uploadArtifacts *string) (e
8090
return err
8191
}
8292

83-
*existingRelease.Draft = draftFalse
84-
_, _, err = GithubClient.Repositories.EditRelease(
85-
ctx,
86-
owner,
87-
repo,
88-
releaseId,
89-
existingRelease)
90-
if err != nil {
91-
return err
92-
}
93-
93+
// upload any given artifacts
94+
var releaseBodyAssets string = ""
9495
if uploadArtifacts != nil {
95-
filesAndInfos, err := tools.GetFilesAndInfos(uploadArtifacts)
96+
filesAndInfos, err := tools.GetAsstes(uploadArtifacts, false)
9697
if err != nil {
9798
return err
9899
}
99100

101+
releaseBodyAssets = "### Asstes\n"
102+
100103
for i, fileAndInfo := range filesAndInfos {
101104
fmt.Printf("uploading %s as asset to release\n", fileAndInfo.Name)
102105
// Upload assets to GitHub Release
@@ -112,6 +115,9 @@ func PublishRelease(version string, releaseId int64, uploadArtifacts *string) (e
112115
if err != nil {
113116
log.Println("error at uploading asset to release: ", err)
114117
} else {
118+
// add asset to release body
119+
releaseBodyAssets = fmt.Sprintf("%s\n- [%s](%s) `%s`\n Sha256: `%x`", releaseBodyAssets, fileAndInfo.Name, *relAsset.BrowserDownloadURL, fileAndInfo.Infos.ModTime().Format(time.RFC3339), fileAndInfo.Hash)
120+
115121
// export Download URL to env. See: #53
116122
envVars, err := OpenEnvFile()
117123
if err != nil {
@@ -125,6 +131,22 @@ func PublishRelease(version string, releaseId int64, uploadArtifacts *string) (e
125131
}
126132
}
127133
}
134+
135+
newReleaseBody := fmt.Sprintf("%s\n\n%s", *existingRelease.Body, releaseBodyAssets)
136+
existingRelease.Body = &newReleaseBody
137+
138+
// publishing release
139+
*existingRelease.Draft = draftFalse
140+
_, _, err = GithubClient.Repositories.EditRelease(
141+
ctx,
142+
owner,
143+
repo,
144+
releaseId,
145+
existingRelease)
146+
if err != nil {
147+
return err
148+
}
149+
128150
return
129151
}
130152

src/service/getBuildInfos.go

Lines changed: 0 additions & 63 deletions
This file was deleted.

src/service/release.go

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package service
33
import (
44
"awesome-ci/src/acigithub"
55
"awesome-ci/src/semver"
6+
"awesome-ci/src/tools"
67
"errors"
78
"flag"
89
"fmt"
@@ -23,6 +24,7 @@ type ReleaseCreateSet struct {
2324
PatchLevel string
2425
PrNumber int
2526
DryRun bool
27+
Body string
2628
}
2729

2830
type ReleasePublishSet struct {
@@ -33,6 +35,7 @@ type ReleasePublishSet struct {
3335
Assets string
3436
PrNumber int
3537
DryRun bool
38+
Body string
3639
}
3740

3841
func ReleaseCreate(args *ReleaseCreateSet) {
@@ -65,17 +68,11 @@ func ReleaseCreate(args *ReleaseCreateSet) {
6568
fmt.Printf("Would create new release with version: %s\n", version)
6669
} else {
6770
fmt.Printf("Writing new release: %s\n", version)
68-
createdRelease, err := acigithub.CreateRelease(version, true)
71+
createdRelease, err := acigithub.CreateRelease(version, args.Body, true)
6972
if err != nil {
7073
log.Fatalln(err)
7174
}
7275
fmt.Println("Create release successful. ID:", *createdRelease.ID)
73-
envVars, err := acigithub.OpenEnvFile()
74-
if err != nil {
75-
log.Fatalln(err)
76-
}
77-
envVars.Set("ACI_RELEASE_ID", fmt.Sprint(*createdRelease.ID))
78-
envVars.SaveEnvFile()
7976
}
8077
}
8178

@@ -105,11 +102,21 @@ func ReleasePublish(args *ReleasePublishSet) {
105102
version = prInfos.NextVersion
106103
}
107104

105+
if args.Assets != "" {
106+
_, err = tools.GetAsstes(&args.Assets, true)
107+
if err != nil {
108+
log.Fatalln("not all specified asstes available, please check")
109+
}
110+
}
111+
108112
if args.DryRun {
109113
fmt.Printf("Would publishing release: %s\n", version)
110114
} else {
111115
fmt.Printf("Publishing release: %s - %d\n", version, args.ReleaseId)
112-
acigithub.PublishRelease(version, args.ReleaseId, &args.Assets)
116+
err = acigithub.PublishRelease(version, args.Body, args.ReleaseId, &args.Assets)
117+
if err != nil {
118+
log.Fatalln(err)
119+
}
113120
}
114121
}
115122

0 commit comments

Comments
 (0)