Skip to content

Commit 10cb27c

Browse files
Merge pull request #238 from pohanhuangtw/feat/add-releae-workflow
ci: create automation release
2 parents e0ca08d + d339094 commit 10cb27c

1 file changed

Lines changed: 95 additions & 0 deletions

File tree

.github/workflows/release.yml

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
name: Create a new release for SBOMbastic stack
2+
3+
on:
4+
push:
5+
tags:
6+
- 'v*.*.*'
7+
8+
jobs:
9+
build:
10+
uses: ./.github/workflows/container-build.yaml
11+
with:
12+
version: ${{ github.ref_name }}
13+
secrets: inherit
14+
create-release:
15+
needs: [build]
16+
runs-on: ubuntu-latest
17+
steps:
18+
- name: Retrieve tag name
19+
if: ${{ startsWith(github.ref, 'refs/tags/') }}
20+
run: |
21+
echo TAG_NAME=$(echo ${{ github.ref_name }}) >> $GITHUB_ENV
22+
- name: Get release ID from the release created by release drafter
23+
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
24+
with:
25+
script: |
26+
let releases = await github.rest.repos.listReleases({
27+
owner: context.repo.owner,
28+
repo: context.repo.repo,
29+
});
30+
for (const release of releases.data) {
31+
if (release.draft) {
32+
core.info(release)
33+
core.exportVariable('RELEASE_ID', release.id)
34+
return
35+
}
36+
}
37+
core.setFailed(`Draft release not found`)
38+
- name: Download attestation artifacts
39+
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
40+
with:
41+
pattern: attestation-SBOMbastic-*
42+
merge-multiple: true
43+
- name: Display structure of downloaded files
44+
run: ls -R
45+
46+
- name: Create tarball for the attestation files
47+
run: |
48+
for arch in "amd64" "arm64"; do
49+
for component in "controller" "worker" "storage"; do
50+
tar -czf attestation-SBOMbastic-$component-$arch.tar.gz $(ls SBOMbastic-$component-attestation-$arch-*)
51+
done
52+
done
53+
- name: Upload release assets
54+
id: upload_release_assets
55+
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
56+
with:
57+
script: |
58+
let fs = require('fs');
59+
let path = require('path');
60+
let files = [
61+
'attestation-SBOMbastic-controller-amd64.tar.gz',
62+
'attestation-SBOMbastic-worker-amd64.tar.gz',
63+
'attestation-SBOMbastic-storage-amd64.tar.gz',
64+
'attestation-SBOMbastic-controller-arm64.tar.gz',
65+
'attestation-SBOMbastic-worker-arm64.tar.gz',
66+
'attestation-SBOMbastic-storage-arm64.tar.gz',
67+
]
68+
const {RELEASE_ID} = process.env
69+
for (const file of files) {
70+
let file_data = fs.readFileSync(file);
71+
let response = await github.rest.repos.uploadReleaseAsset({
72+
owner: context.repo.owner,
73+
repo: context.repo.repo,
74+
release_id: `${RELEASE_ID}`,
75+
name: path.basename(file),
76+
data: file_data,
77+
});
78+
}
79+
- name: Publish release
80+
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
81+
with:
82+
script: |
83+
const {RELEASE_ID} = process.env
84+
const {TAG_NAME} = process.env
85+
isPreRelease = ${{ contains(github.ref_name, '-alpha') || contains(github.ref_name, '-beta') || contains(github.ref_name, '-rc') }}
86+
github.rest.repos.updateRelease({
87+
owner: context.repo.owner,
88+
repo: context.repo.repo,
89+
release_id: `${RELEASE_ID}`,
90+
draft: false,
91+
tag_name: `${TAG_NAME}`,
92+
name: `SBOMbastic ${TAG_NAME}`,
93+
prerelease: isPreRelease,
94+
make_latest: !isPreRelease
95+
});

0 commit comments

Comments
 (0)