55
66permissions :
77 contents : write
8+ id-token : write
9+ attestations : write
10+ artifact-metadata : write
811
912env :
1013 WF_REGISTRY_USER : netobserv+github_ci
1114 WF_ORG : netobserv
1215 WF_MULTIARCH_TARGETS : amd64 arm64 ppc64le s390x
16+ WF_REGISTRY_NAME : quay.io
17+ WF_IMAGE_NAME : quay.io/netobserv/network-observability-console-plugin
18+ WF_STANDALONE_IMAGE_NAME : quay.io/netobserv/network-observability-standalone-frontend
1319
1420jobs :
1521 push-image :
1622 name : build and push release
1723 runs-on : ubuntu-latest
24+
1825 steps :
1926 - name : checkout
2027 uses : actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
2128 with :
2229 persist-credentials : false
30+
2331 - name : validate tag
2432 run : |
2533 tag=`git describe --exact-match --tags 2> /dev/null`
@@ -31,23 +39,108 @@ jobs:
3139 echo "$tag is NOT a valid release tag"
3240 exit 1
3341 fi
42+
3443 - name : install make
3544 run : sudo apt-get install make
45+
3646 - name : docker login to quay.io
3747 uses : docker/login-action@4907a6ddec9925e35a0a9e82d7399ccc52663121 # v4.1.0
3848 with :
3949 username : ${{ env.WF_REGISTRY_USER }}
4050 password : ${{ secrets.QUAY_SECRET }}
41- registry : quay.io
51+ registry : ${{ env.WF_REGISTRY_NAME }}
52+
4253 - name : build and push manifest with images
4354 run : MULTIARCH_TARGETS="${{ env.WF_MULTIARCH_TARGETS }}" IMAGE_ORG=${{ env.WF_ORG }} VERSION=${{ env.tag }} CLEAN_BUILD=1 make images
55+
4456 - name : build and push manifest with images for standalone build
4557 run : |
4658 MULTIARCH_TARGETS="${{ env.WF_MULTIARCH_TARGETS }}" IMAGE_ORG=${{ env.WF_ORG }} VERSION=${{ env.tag }} CLEAN_BUILD=1 STANDALONE=true make images
47- - name : create draft release
59+
60+ - name : capture image digest
61+ id : image_digest
62+ run : |
63+ mkdir -p release-assets
64+ digest=$(docker buildx imagetools inspect ${{ env.WF_IMAGE_NAME }}:${{ env.tag }} \
65+ --format '{{json .Manifest.Digest}}' | tr -d '"')
66+ echo "digest=$digest" >> "$GITHUB_ENV"
67+ echo "${{ env.WF_IMAGE_NAME }}@${{ digest }}" >> ./release-assets/images
68+
69+ digest_standalone=$(docker buildx imagetools inspect ${{ env.WF_STANDALONE_IMAGE_NAME }}:${{ env.tag }} \
70+ --format '{{json .Manifest.Digest}}' | tr -d '"')
71+ echo "digest_standalone=$digest_standalone" >> "$GITHUB_ENV"
72+ echo "${{ env.WF_STANDALONE_IMAGE_NAME }}@${{ digest_standalone }}" >> ./release-assets/images
73+
74+ - name : cosign-installer
75+ uses : sigstore/cosign-installer@cad07c2e89fa2edd6e2d7bab4c1aa38e53f76003
76+
77+ - name : Sign and verify the image with GitHub OIDC Token
78+ run : |
79+ cosign sign --yes ${{ env.WF_IMAGE_NAME }}@${{ env.digest }}
80+
81+ cosign verify ${{ env.WF_IMAGE_NAME }}@${{ env.digest }} \
82+ --certificate-identity=https://github.com/netobserv/netobserv-web-console/.github/workflows/release.yml@refs/tags/${{ env.tag }} \
83+ --certificate-oidc-issuer=https://token.actions.githubusercontent.com
84+
85+ cosign sign --yes ${{ env.WF_STANDALONE_IMAGE_NAME }}@${{ env.digest_standalone }}
86+
87+ cosign verify ${{ env.WF_STANDALONE_IMAGE_NAME }}@${{ env.digest_standalone }} \
88+ --certificate-identity=https://github.com/netobserv/netobserv-web-console/.github/workflows/release.yml@refs/tags/${{ env.tag }} \
89+ --certificate-oidc-issuer=https://token.actions.githubusercontent.com
90+
91+ - name : Attest Provenance attestations
92+ uses : actions/attest@59d89421af93a897026c735860bf21b6eb4f7b26 # v4
93+ with :
94+ subject-name : ${{ env.WF_IMAGE_NAME }}
95+ subject-digest : ${{ env.digest }}
96+ push-to-registry : true
97+
98+ - name : Attest Provenance attestations (standalone)
99+ uses : actions/attest@59d89421af93a897026c735860bf21b6eb4f7b26 # v4
100+ with :
101+ subject-name : ${{ env.WF_STANDALONE_IMAGE_NAME }}
102+ subject-digest : ${{ env.digest_standalone }}
103+ push-to-registry : true
104+
105+ - name : Generate SBOM
106+ uses : anchore/sbom-action@e22c389904149dbc22b58101806040fa8d37a610 # v0.24.0
107+ with :
108+ image : ${{ env.WF_IMAGE_NAME }}@${{ env.digest }}
109+ registry-username : ${{ env.WF_REGISTRY_USER }}
110+ registry-password : ${{ secrets.QUAY_SECRET }}
111+ format : ' spdx-json'
112+ output-file : ' ./release-assets/sbom.spdx.json'
113+
114+ - name : Generate SBOM (standalone)
115+ uses : anchore/sbom-action@e22c389904149dbc22b58101806040fa8d37a610 # v0.24.0
116+ with :
117+ image : ${{ env.WF_STANDALONE_IMAGE_NAME }}@${{ env.digest_standalone }}
118+ registry-username : ${{ env.WF_REGISTRY_USER }}
119+ registry-password : ${{ secrets.QUAY_SECRET }}
120+ format : ' spdx-json'
121+ output-file : ' ./release-assets/sbom-standalone.spdx.json'
122+
123+ - name : Attest SBOM
124+ uses : actions/attest@59d89421af93a897026c735860bf21b6eb4f7b26 # v4
125+ with :
126+ subject-name : ${{ env.WF_IMAGE_NAME }}
127+ subject-digest : ${{ env.digest }}
128+ sbom-path : ' ./release-assets/sbom.spdx.json'
129+ push-to-registry : true
130+
131+ - name : Attest SBOM (standalone)
132+ uses : actions/attest@59d89421af93a897026c735860bf21b6eb4f7b26 # v4
133+ with :
134+ subject-name : ${{ env.WF_STANDALONE_IMAGE_NAME }}
135+ subject-digest : ${{ env.digest_standalone }}
136+ sbom-path : ' ./release-assets/sbom-standalone.spdx.json'
137+ push-to-registry : true
138+
139+ - name : create draft release and upload binaries
48140 uses : softprops/action-gh-release@718ea10b132b3b2eba29c1007bb80653f286566b # v3.0.1
49141 with :
50142 tag_name : ${{ env.tag }}
51143 name : ${{ env.tag }}
52144 draft : true
53145 prerelease : false
146+ files : ./release-assets/*
0 commit comments