5353 with :
5454 platforms : linux/amd64
5555 context : " {{ defaultContext }}:mainline/alpine-slim"
56+ tags : nginx-unprivileged:alpine-slim
5657 push : false
5758 outputs : type=docker,dest=/tmp/alpine-slim.tar
58- # cache-from: type=gha,scope=alpine-slim
59- # cache-to: type=gha,mode=min,scope=alpine-slim
6059
6160 - name : Upload Alpine slim image artifact
6261 uses : actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4.4.3
8685 docker load --input /tmp/alpine-slim.tar
8786 docker image ls -a
8887
89- - name : Generate slim image tag for builds
90- id : slim-tag
91- run : |
92- # Get the tag that was loaded from the artifact
93- SLIM_TAG=$(docker image ls --format "table {{.Repository}}:{{.Tag}}" | grep -v REPOSITORY | grep slim | head -1)
94- echo "tag=${SLIM_TAG}" >> "$GITHUB_OUTPUT"
95- echo "Using slim image: ${SLIM_TAG}"
96-
9788 - name : Set up QEMU
9889 uses : docker/setup-qemu-action@29109295f81e9208d7d86ff1c6c12d2833863392 # v3.6.0
9990
@@ -106,11 +97,10 @@ jobs:
10697 with :
10798 platforms : linux/amd64
10899 context : " {{ defaultContext }}:mainline/alpine"
109- build-args : IMAGE=${{ steps.slim-tag.outputs.tag }}
100+ tags : nginx-unprivileged:alpine
101+ build-args : IMAGE=nginx-unprivileged:alpine-slim
110102 push : false
111103 outputs : type=docker,dest=/tmp/alpine.tar
112- # cache-from: type=gha,scope=debian-perl
113- # cache-to: type=gha,mode=min,scope=debian-perl
114104
115105 - name : Upload Alpine image artifact
116106 uses : actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4.4.3
@@ -140,14 +130,6 @@ jobs:
140130 docker load --input /tmp/alpine.tar
141131 docker image ls -a
142132
143- - name : Generate alpine image tag for builds
144- id : alpine-tag
145- run : |
146- # Get the tag that was loaded from the artifact (should be alpine, not alpine-slim)
147- ALPINE_TAG=$(docker image ls --format "table {{.Repository}}:{{.Tag}}" | grep -v REPOSITORY | grep -E "alpine$|alpine3" | head -1)
148- echo "tag=${ALPINE_TAG}" >> "$GITHUB_OUTPUT"
149- echo "Using alpine image: ${ALPINE_TAG}"
150-
151133 - name : Set up QEMU
152134 uses : docker/setup-qemu-action@29109295f81e9208d7d86ff1c6c12d2833863392 # v3.6.0
153135
@@ -160,10 +142,9 @@ jobs:
160142 with :
161143 platforms : linux/amd64
162144 context : " {{ defaultContext }}:mainline/alpine-perl"
163- build-args : IMAGE=${{ steps.alpine-tag.outputs.tag }}
145+ tags : nginx-unprivileged:alpine-perl
146+ build-args : IMAGE=nginx-unprivileged:alpine
164147 push : false
165- # cache-from: type=gha,scope=alpine-perl
166- # cache-to: type=gha,mode=min,scope=alpine-perl
167148
168149 otel :
169150 name : Build Alpine NGINX mainline otel Docker image
@@ -186,14 +167,6 @@ jobs:
186167 docker load --input /tmp/alpine.tar
187168 docker image ls -a
188169
189- - name : Generate alpine image tag for builds
190- id : alpine-tag
191- run : |
192- # Get the tag that was loaded from the artifact (should be alpine, not alpine-slim)
193- ALPINE_TAG=$(docker image ls --format "table {{.Repository}}:{{.Tag}}" | grep -v REPOSITORY | grep -E "alpine$|alpine3" | head -1)
194- echo "tag=${ALPINE_TAG}" >> "$GITHUB_OUTPUT"
195- echo "Using alpine image: ${ALPINE_TAG}"
196-
197170 - name : Set up QEMU
198171 uses : docker/setup-qemu-action@29109295f81e9208d7d86ff1c6c12d2833863392 # v3.6.0
199172
@@ -206,10 +179,9 @@ jobs:
206179 with :
207180 platforms : linux/amd64
208181 context : " {{ defaultContext }}:mainline/alpine-otel"
209- build-args : IMAGE=${{ steps.alpine-tag.outputs.tag }}
182+ tags : nginx-unprivileged:alpine-otel
183+ build-args : IMAGE=nginx-unprivileged:alpine
210184 push : false
211- # cache-from: type=gha,scope=alpine-otel
212- # cache-to: type=gha,mode=min,scope=alpine-otel
213185
214186 publish :
215187 name : Publish Alpine NGINX mainline images to external registries
@@ -295,7 +267,7 @@ jobs:
295267 tags : ${{ steps.meta-slim.outputs.tags }}
296268 push : true
297269
298- # Build and push core image
270+ # Build and push core image (needs slim image reference)
299271 - name : Extract metadata for core image
300272 id : meta-core
301273 uses : docker/metadata-action@c1e51972afc2121e065aed6d45c65596fe445f3f # v5.8.0
@@ -325,6 +297,7 @@ jobs:
325297 with :
326298 platforms : linux/amd64, linux/arm/v6, linux/arm/v7, linux/arm64, linux/386, linux/ppc64le, linux/riscv64, linux/s390x
327299 context : " {{ defaultContext }}:mainline/alpine"
300+ build-args : IMAGE=docker.io/nginxinc/nginx-unprivileged:${{ needs.version.outputs.major }}.${{ needs.version.outputs.minor }}.${{ needs.version.outputs.patch }}-alpine-slim
328301 labels : ${{ steps.meta-core.outputs.labels }}
329302 annotations : ${{ steps.meta-core.outputs.annotations }}
330303 tags : ${{ steps.meta-core.outputs.tags }}
@@ -360,6 +333,7 @@ jobs:
360333 with :
361334 platforms : linux/amd64, linux/arm/v6, linux/arm/v7, linux/arm64, linux/386, linux/ppc64le, linux/riscv64, linux/s390x
362335 context : " {{ defaultContext }}:mainline/alpine-perl"
336+ build-args : IMAGE=docker.io/nginxinc/nginx-unprivileged:${{ needs.version.outputs.major }}.${{ needs.version.outputs.minor }}.${{ needs.version.outputs.patch }}-alpine
363337 labels : ${{ steps.meta-perl.outputs.labels }}
364338 annotations : ${{ steps.meta-perl.outputs.annotations }}
365339 tags : ${{ steps.meta-perl.outputs.tags }}
@@ -395,102 +369,9 @@ jobs:
395369 with :
396370 platforms : linux/amd64, linux/arm64
397371 context : " {{ defaultContext }}:mainline/alpine-otel"
372+ build-args : IMAGE=docker.io/nginxinc/nginx-unprivileged:${{ needs.version.outputs.major }}.${{ needs.version.outputs.minor }}.${{ needs.version.outputs.patch }}-alpine
398373 labels : ${{ steps.meta-otel.outputs.labels }}
399374 annotations : ${{ steps.meta-otel.outputs.annotations }}
400375 tags : ${{ steps.meta-otel.outputs.tags }}
401376 push : true
402377
403- # Docker Hub signing for all images
404- - name : Sign Docker Hub Manifest for slim image
405- run : |
406- set -ex
407- sudo apt update
408- sudo apt install -y notary
409- mkdir -p ~/.docker/trust/private
410- echo "$DOCKER_CONTENT_TRUST_REPOSITORY_KEY" > ~/.docker/trust/private/$DOCKER_CONTENT_TRUST_REPOSITORY_KEY_ID.key
411- chmod 0400 ~/.docker/trust/private/$DOCKER_CONTENT_TRUST_REPOSITORY_KEY_ID.key
412- docker trust key load ~/.docker/trust/private/$DOCKER_CONTENT_TRUST_REPOSITORY_KEY_ID.key --name nginx
413- DIGEST=$(printf '${{ steps.build-slim.outputs.metadata }}' | jq -r '."containerimage.descriptor".digest' | cut -d ':' -f2)
414- SIZE=$(printf '${{ steps.build-slim.outputs.metadata }}' | jq -r '."containerimage.descriptor".size')
415- export NOTARY_AUTH=$(printf "${{ secrets.DOCKERHUB_USERNAME }}:${{ secrets.DOCKERHUB_TOKEN }}" | base64 -w0)
416- notary -d ~/.docker/trust/ -s https://notary.docker.io addhash docker.io/nginxinc/nginx-unprivileged ${{ needs.version.outputs.major }}.${{ needs.version.outputs.minor }}.${{ needs.version.outputs.patch }}-alpine-slim $SIZE --sha256 $DIGEST --publish --verbose
417- notary -d ~/.docker/trust/ -s https://notary.docker.io addhash docker.io/nginxinc/nginx-unprivileged ${{ needs.version.outputs.major }}.${{ needs.version.outputs.minor }}.${{ needs.version.outputs.patch }}-alpine${{ needs.version.outputs.distro }}-slim $SIZE --sha256 $DIGEST --publish --verbose
418- notary -d ~/.docker/trust/ -s https://notary.docker.io addhash docker.io/nginxinc/nginx-unprivileged ${{ needs.version.outputs.major }}.${{ needs.version.outputs.minor }}-alpine-slim $SIZE --sha256 $DIGEST --publish --verbose
419- notary -d ~/.docker/trust/ -s https://notary.docker.io addhash docker.io/nginxinc/nginx-unprivileged ${{ needs.version.outputs.major }}.${{ needs.version.outputs.minor }}-alpine${{ needs.version.outputs.distro }}-slim $SIZE --sha256 $DIGEST --publish --verbose
420- notary -d ~/.docker/trust/ -s https://notary.docker.io addhash docker.io/nginxinc/nginx-unprivileged ${{ needs.version.outputs.major }}-alpine-slim $SIZE --sha256 $DIGEST --publish --verbose
421- notary -d ~/.docker/trust/ -s https://notary.docker.io addhash docker.io/nginxinc/nginx-unprivileged ${{ needs.version.outputs.major }}-alpine${{ needs.version.outputs.distro }}-slim $SIZE --sha256 $DIGEST --publish --verbose
422- notary -d ~/.docker/trust/ -s https://notary.docker.io addhash docker.io/nginxinc/nginx-unprivileged mainline-alpine-slim $SIZE --sha256 $DIGEST --publish --verbose
423- notary -d ~/.docker/trust/ -s https://notary.docker.io addhash docker.io/nginxinc/nginx-unprivileged mainline-alpine${{ needs.version.outputs.distro }}-slim $SIZE --sha256 $DIGEST --publish --verbose
424- notary -d ~/.docker/trust/ -s https://notary.docker.io addhash docker.io/nginxinc/nginx-unprivileged alpine-slim $SIZE --sha256 $DIGEST --publish --verbose
425- notary -d ~/.docker/trust/ -s https://notary.docker.io addhash docker.io/nginxinc/nginx-unprivileged alpine${{ needs.version.outputs.distro }}-slim $SIZE --sha256 $DIGEST --publish --verbose
426- env :
427- DOCKER_CONTENT_TRUST_REPOSITORY_KEY : ${{ secrets.DOCKER_CONTENT_TRUST_REPOSITORY_KEY }}
428- DOCKER_CONTENT_TRUST_REPOSITORY_KEY_ID : ${{ secrets.DOCKER_CONTENT_TRUST_REPOSITORY_KEY_ID }}
429- DOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASE : ${{ secrets.DOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASE }}
430- NOTARY_TARGETS_PASSPHRASE : ${{ secrets.DOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASE }}
431-
432- - name : Sign Docker Hub Manifest for core image
433- run : |
434- set -ex
435- DIGEST=$(printf '${{ steps.build-core.outputs.metadata }}' | jq -r '."containerimage.descriptor".digest' | cut -d ':' -f2)
436- SIZE=$(printf '${{ steps.build-core.outputs.metadata }}' | jq -r '."containerimage.descriptor".size')
437- export NOTARY_AUTH=$(printf "${{ secrets.DOCKERHUB_USERNAME }}:${{ secrets.DOCKERHUB_TOKEN }}" | base64 -w0)
438- notary -d ~/.docker/trust/ -s https://notary.docker.io addhash docker.io/nginxinc/nginx-unprivileged ${{ needs.version.outputs.major }}.${{ needs.version.outputs.minor }}.${{ needs.version.outputs.patch }}-alpine $SIZE --sha256 $DIGEST --publish --verbose
439- notary -d ~/.docker/trust/ -s https://notary.docker.io addhash docker.io/nginxinc/nginx-unprivileged ${{ needs.version.outputs.major }}.${{ needs.version.outputs.minor }}.${{ needs.version.outputs.patch }}-alpine${{ needs.version.outputs.distro }} $SIZE --sha256 $DIGEST --publish --verbose
440- notary -d ~/.docker/trust/ -s https://notary.docker.io addhash docker.io/nginxinc/nginx-unprivileged ${{ needs.version.outputs.major }}.${{ needs.version.outputs.minor }}-alpine $SIZE --sha256 $DIGEST --publish --verbose
441- notary -d ~/.docker/trust/ -s https://notary.docker.io addhash docker.io/nginxinc/nginx-unprivileged ${{ needs.version.outputs.major }}.${{ needs.version.outputs.minor }}-alpine${{ needs.version.outputs.distro }} $SIZE --sha256 $DIGEST --publish --verbose
442- notary -d ~/.docker/trust/ -s https://notary.docker.io addhash docker.io/nginxinc/nginx-unprivileged ${{ needs.version.outputs.major }}-alpine $SIZE --sha256 $DIGEST --publish --verbose
443- notary -d ~/.docker/trust/ -s https://notary.docker.io addhash docker.io/nginxinc/nginx-unprivileged ${{ needs.version.outputs.major }}-alpine${{ needs.version.outputs.distro }} $SIZE --sha256 $DIGEST --publish --verbose
444- notary -d ~/.docker/trust/ -s https://notary.docker.io addhash docker.io/nginxinc/nginx-unprivileged mainline-alpine $SIZE --sha256 $DIGEST --publish --verbose
445- notary -d ~/.docker/trust/ -s https://notary.docker.io addhash docker.io/nginxinc/nginx-unprivileged mainline-alpine${{ needs.version.outputs.distro }} $SIZE --sha256 $DIGEST --publish --verbose
446- notary -d ~/.docker/trust/ -s https://notary.docker.io addhash docker.io/nginxinc/nginx-unprivileged alpine $SIZE --sha256 $DIGEST --publish --verbose
447- notary -d ~/.docker/trust/ -s https://notary.docker.io addhash docker.io/nginxinc/nginx-unprivileged alpine${{ needs.version.outputs.distro }} $SIZE --sha256 $DIGEST --publish --verbose
448- env :
449- DOCKER_CONTENT_TRUST_REPOSITORY_KEY : ${{ secrets.DOCKER_CONTENT_TRUST_REPOSITORY_KEY }}
450- DOCKER_CONTENT_TRUST_REPOSITORY_KEY_ID : ${{ secrets.DOCKER_CONTENT_TRUST_REPOSITORY_KEY_ID }}
451- DOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASE : ${{ secrets.DOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASE }}
452- NOTARY_TARGETS_PASSPHRASE : ${{ secrets.DOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASE }}
453-
454- - name : Sign Docker Hub Manifest for perl image
455- run : |
456- set -ex
457- DIGEST=$(printf '${{ steps.build-perl.outputs.metadata }}' | jq -r '."containerimage.descriptor".digest' | cut -d ':' -f2)
458- SIZE=$(printf '${{ steps.build-perl.outputs.metadata }}' | jq -r '."containerimage.descriptor".size')
459- export NOTARY_AUTH=$(printf "${{ secrets.DOCKERHUB_USERNAME }}:${{ secrets.DOCKERHUB_TOKEN }}" | base64 -w0)
460- notary -d ~/.docker/trust/ -s https://notary.docker.io addhash docker.io/nginxinc/nginx-unprivileged ${{ needs.version.outputs.major }}.${{ needs.version.outputs.minor }}.${{ needs.version.outputs.patch }}-alpine-perl $SIZE --sha256 $DIGEST --publish --verbose
461- notary -d ~/.docker/trust/ -s https://notary.docker.io addhash docker.io/nginxinc/nginx-unprivileged ${{ needs.version.outputs.major }}.${{ needs.version.outputs.minor }}.${{ needs.version.outputs.patch }}-alpine${{ needs.version.outputs.distro }}-perl $SIZE --sha256 $DIGEST --publish --verbose
462- notary -d ~/.docker/trust/ -s https://notary.docker.io addhash docker.io/nginxinc/nginx-unprivileged ${{ needs.version.outputs.major }}.${{ needs.version.outputs.minor }}-alpine-perl $SIZE --sha256 $DIGEST --publish --verbose
463- notary -d ~/.docker/trust/ -s https://notary.docker.io addhash docker.io/nginxinc/nginx-unprivileged ${{ needs.version.outputs.major }}.${{ needs.version.outputs.minor }}-alpine${{ needs.version.outputs.distro }}-perl $SIZE --sha256 $DIGEST --publish --verbose
464- notary -d ~/.docker/trust/ -s https://notary.docker.io addhash docker.io/nginxinc/nginx-unprivileged ${{ needs.version.outputs.major }}-alpine-perl $SIZE --sha256 $DIGEST --publish --verbose
465- notary -d ~/.docker/trust/ -s https://notary.docker.io addhash docker.io/nginxinc/nginx-unprivileged ${{ needs.version.outputs.major }}-alpine${{ needs.version.outputs.distro }}-perl $SIZE --sha256 $DIGEST --publish --verbose
466- notary -d ~/.docker/trust/ -s https://notary.docker.io addhash docker.io/nginxinc/nginx-unprivileged mainline-alpine-perl $SIZE --sha256 $DIGEST --publish --verbose
467- notary -d ~/.docker/trust/ -s https://notary.docker.io addhash docker.io/nginxinc/nginx-unprivileged mainline-alpine${{ needs.version.outputs.distro }}-perl $SIZE --sha256 $DIGEST --publish --verbose
468- notary -d ~/.docker/trust/ -s https://notary.docker.io addhash docker.io/nginxinc/nginx-unprivileged alpine-perl $SIZE --sha256 $DIGEST --publish --verbose
469- notary -d ~/.docker/trust/ -s https://notary.docker.io addhash docker.io/nginxinc/nginx-unprivileged alpine${{ needs.version.outputs.distro }}-perl $SIZE --sha256 $DIGEST --publish --verbose
470- env :
471- DOCKER_CONTENT_TRUST_REPOSITORY_KEY : ${{ secrets.DOCKER_CONTENT_TRUST_REPOSITORY_KEY }}
472- DOCKER_CONTENT_TRUST_REPOSITORY_KEY_ID : ${{ secrets.DOCKER_CONTENT_TRUST_REPOSITORY_KEY_ID }}
473- DOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASE : ${{ secrets.DOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASE }}
474- NOTARY_TARGETS_PASSPHRASE : ${{ secrets.DOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASE }}
475-
476- - name : Sign Docker Hub Manifest for otel image
477- run : |
478- set -ex
479- DIGEST=$(printf '${{ steps.build-otel.outputs.metadata }}' | jq -r '."containerimage.descriptor".digest' | cut -d ':' -f2)
480- SIZE=$(printf '${{ steps.build-otel.outputs.metadata }}' | jq -r '."containerimage.descriptor".size')
481- export NOTARY_AUTH=$(printf "${{ secrets.DOCKERHUB_USERNAME }}:${{ secrets.DOCKERHUB_TOKEN }}" | base64 -w0)
482- notary -d ~/.docker/trust/ -s https://notary.docker.io addhash docker.io/nginxinc/nginx-unprivileged ${{ needs.version.outputs.major }}.${{ needs.version.outputs.minor }}.${{ needs.version.outputs.patch }}-alpine-otel $SIZE --sha256 $DIGEST --publish --verbose
483- notary -d ~/.docker/trust/ -s https://notary.docker.io addhash docker.io/nginxinc/nginx-unprivileged ${{ needs.version.outputs.major }}.${{ needs.version.outputs.minor }}.${{ needs.version.outputs.patch }}-alpine${{ needs.version.outputs.distro }}-otel $SIZE --sha256 $DIGEST --publish --verbose
484- notary -d ~/.docker/trust/ -s https://notary.docker.io addhash docker.io/nginxinc/nginx-unprivileged ${{ needs.version.outputs.major }}.${{ needs.version.outputs.minor }}-alpine-otel $SIZE --sha256 $DIGEST --publish --verbose
485- notary -d ~/.docker/trust/ -s https://notary.docker.io addhash docker.io/nginxinc/nginx-unprivileged ${{ needs.version.outputs.major }}.${{ needs.version.outputs.minor }}-alpine${{ needs.version.outputs.distro }}-otel $SIZE --sha256 $DIGEST --publish --verbose
486- notary -d ~/.docker/trust/ -s https://notary.docker.io addhash docker.io/nginxinc/nginx-unprivileged ${{ needs.version.outputs.major }}-alpine-otel $SIZE --sha256 $DIGEST --publish --verbose
487- notary -d ~/.docker/trust/ -s https://notary.docker.io addhash docker.io/nginxinc/nginx-unprivileged ${{ needs.version.outputs.major }}-alpine${{ needs.version.outputs.distro }}-otel $SIZE --sha256 $DIGEST --publish --verbose
488- notary -d ~/.docker/trust/ -s https://notary.docker.io addhash docker.io/nginxinc/nginx-unprivileged mainline-alpine-otel $SIZE --sha256 $DIGEST --publish --verbose
489- notary -d ~/.docker/trust/ -s https://notary.docker.io addhash docker.io/nginxinc/nginx-unprivileged mainline-alpine${{ needs.version.outputs.distro }}-otel $SIZE --sha256 $DIGEST --publish --verbose
490- notary -d ~/.docker/trust/ -s https://notary.docker.io addhash docker.io/nginxinc/nginx-unprivileged alpine-otel $SIZE --sha256 $DIGEST --publish --verbose
491- notary -d ~/.docker/trust/ -s https://notary.docker.io addhash docker.io/nginxinc/nginx-unprivileged alpine${{ needs.version.outputs.distro }}-otel $SIZE --sha256 $DIGEST --publish --verbose
492- env :
493- DOCKER_CONTENT_TRUST_REPOSITORY_KEY : ${{ secrets.DOCKER_CONTENT_TRUST_REPOSITORY_KEY }}
494- DOCKER_CONTENT_TRUST_REPOSITORY_KEY_ID : ${{ secrets.DOCKER_CONTENT_TRUST_REPOSITORY_KEY_ID }}
495- DOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASE : ${{ secrets.DOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASE }}
496- NOTARY_TARGETS_PASSPHRASE : ${{ secrets.DOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASE }}
0 commit comments