@@ -123,6 +123,13 @@ on: # yamllint disable-line rule:truthy
123123 type : boolean
124124 default : true
125125 required : false
126+ attest :
127+ description : |
128+ Generate build provenance attestations for built images.
129+ See [attest-images](../../actions/docker/attest-images/README.md).
130+ type : boolean
131+ default : false
132+ required : false
126133 secrets :
127134 oci-registry-password :
128135 description : |
@@ -461,7 +468,8 @@ jobs:
461468 permissions :
462469 contents : read
463470 packages : write
464- id-token : write # Needed for signing images
471+ id-token : write # Needed for signing and attesting images
472+ attestations : write # Needed for attesting images
465473 needs : [prepare-variables, build-images]
466474 runs-on : ${{ fromJson(inputs.runs-on) }}
467475 outputs :
@@ -542,3 +550,28 @@ jobs:
542550 with :
543551 images : ${{ steps.get-images-to-sign.outputs.images-to-sign }}
544552 github-token : ${{ secrets.GITHUB_TOKEN }}
553+
554+ - id : get-images-to-attest
555+ if : inputs.attest
556+ uses : actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
557+ env :
558+ BUILT_IMAGES_INPUT : ${{ steps.create-images-manifests.outputs.built-images }}
559+ with :
560+ script : |
561+ const builtImagesInput = process.env.BUILT_IMAGES_INPUT;
562+ let builtImages = null;
563+ try {
564+ builtImages = JSON.parse(builtImagesInput);
565+ } catch (error) {
566+ throw new Error(`"built-images" input is not a valid JSON: ${error}`);
567+ }
568+
569+ // Get images to attest
570+ const imagesToAttest = Object.values(builtImages).map(image => image.images).flat();
571+ core.setOutput('images-to-attest', JSON.stringify(imagesToAttest));
572+
573+ - uses : ./../self-workflow/actions/docker/attest-images
574+ if : steps.get-images-to-attest.outputs.images-to-attest
575+ with :
576+ images : ${{ steps.get-images-to-attest.outputs.images-to-attest }}
577+ github-token : ${{ secrets.GITHUB_TOKEN }}
0 commit comments