Skip to content

Commit d17142a

Browse files
authored
Provenance docker (#452)
* goreleaser: support multi-arch container image see https://goreleaser.com/customization/docker_manifest/\#docker-manifests * ci: store dist folder * provenance for docker images * add latest * fix multi-line images * use script * use script
1 parent ebb07c4 commit d17142a

File tree

3 files changed

+54
-0
lines changed

3 files changed

+54
-0
lines changed

.ci/get-docker-provenance.sh

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
#!/usr/bin/env bash
2+
set -euo pipefail
3+
4+
if [ ! -e dist/artifacts.json ] ; then
5+
exit 1
6+
fi
7+
8+
echo "Gather the container images generated and published with goreleaser"
9+
images=$(jq -r '[.[] | select (.type=="Published Docker Image") | select(.name|endswith("latest")|not)]' dist/artifacts.json)
10+
image_1=$(echo "$images" | jq -r '.[0].name')
11+
image_2=$(echo "$images" | jq -r '.[1].name')
12+
digest_1=$(echo "$images" | jq -r '.[0].extra.Digest')
13+
digest_2=$(echo "$images" | jq -r '.[1].extra.Digest')
14+
15+
echo "Export github actions outputs"
16+
echo "name_1=$image_1" >> "$GITHUB_OUTPUT"
17+
echo "name_2=$image_2" >> "$GITHUB_OUTPUT"
18+
echo "digest_1=$digest_1" >> "$GITHUB_OUTPUT"
19+
echo "digest_2=$digest_2" >> "$GITHUB_OUTPUT"

.github/workflows/release.yml

+25
Original file line numberDiff line numberDiff line change
@@ -47,11 +47,36 @@ jobs:
4747
- name: Release
4848
run: make release
4949

50+
# Store artifacts to help with troubleshooting
51+
- uses: actions/upload-artifact@v4
52+
if: always()
53+
with:
54+
name: release
55+
path: "dist/*.*"
56+
retention-days: 5
57+
5058
- name: generate build provenance (binaries)
5159
uses: github-early-access/generate-build-provenance@main
5260
with:
5361
subject-path: "${{ github.workspace }}/dist/*.*"
5462

63+
# See https://github.com/github-early-access/generate-build-provenance/issues/162
64+
- name: container image digest
65+
id: image
66+
run: .ci/get-docker-provenance.sh
67+
68+
- name: generate build provenance (containers x86_64)
69+
uses: github-early-access/generate-build-provenance@main
70+
with:
71+
subject-name: ${{ steps.image.outputs.name_1 }}
72+
subject-digest: ${{ steps.image.outputs.digest_1 }}
73+
74+
- name: generate build provenance (containers arm64)
75+
uses: github-early-access/generate-build-provenance@main
76+
with:
77+
subject-name: ${{ steps.image.outputs.name_2 }}
78+
subject-digest: ${{ steps.image.outputs.digest_2 }}
79+
5580
- name: GitHub Release
5681
run: make release-notes
5782
env:

.goreleaser.yaml

+10
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,16 @@ dockers:
7272
- "--label=org.opencontainers.image.revision={{ .FullCommit }}"
7373
- "--label=org.opencontainers.image.version={{ .Version }}"
7474

75+
docker_manifests:
76+
- name_template: '{{ .Env.DOCKER_REGISTRY }}/{{ .Env.DOCKER_IMAGE_NAME }}:{{ trimprefix .Tag "v" }}'
77+
image_templates:
78+
- '{{ .Env.DOCKER_REGISTRY }}/{{ .Env.DOCKER_IMAGE_NAME }}-x86_64:{{ trimprefix .Tag "v" }}'
79+
- '{{ .Env.DOCKER_REGISTRY }}/{{ .Env.DOCKER_IMAGE_NAME }}-arm64:{{ trimprefix .Tag "v" }}'
80+
- name_template: '{{ .Env.DOCKER_REGISTRY }}/{{ .Env.DOCKER_IMAGE_NAME }}:latest'
81+
image_templates:
82+
- "{{ .Env.DOCKER_REGISTRY }}/{{ .Env.DOCKER_IMAGE_NAME }}-x86_64:latest"
83+
- "{{ .Env.DOCKER_REGISTRY }}/{{ .Env.DOCKER_IMAGE_NAME }}-arm64:latest"
84+
7585
publishers:
7686
- name: publish-aws
7787
cmd: ./.ci/publish-aws.sh

0 commit comments

Comments
 (0)