4040 google-chrome-stable firefox postgresql* temurin-* *llvm* mysql*
4141 dotnet-sdk-*
4242 remove_packages_one_command : true
43+ - name : Login to github container registry
44+ uses : docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9
45+ with :
46+ registry : ghcr.io
47+ username : ${{github.actor}}
48+ password : ${{secrets.GITHUB_TOKEN}}
4349 - name : Checkout code
4450 uses : actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8
4551 with :
@@ -54,10 +60,11 @@ jobs:
5460 make install-node
5561 - name : Build container
5662 run : |
63+ echo "Building image..."
5764 make build-image
5865 docker tag "ghcr.io/nhsdigital/eps-devcontainers/${CONTAINER_NAME}:latest" "ghcr.io/nhsdigital/eps-devcontainers/${CONTAINER_NAME}:${DOCKER_TAG}-${ARCHITECTURE}"
59- docker save "ghcr.io/nhsdigital/eps-devcontainers/${CONTAINER_NAME}:${DOCKER_TAG}-${ARCHITECTURE}" -o "eps-devcontainer-${CONTAINER_NAME}-${DOCKER_TAG}-${ARCHITECTURE}.img"
6066
67+ echo "Creating combined trivy ignore file"
6168 # create combined trivy ignore file for use in trivy scan, combining common and specific ignore files if they exist
6269 combined="src/${CONTAINER_NAME}/.trivyignore_combined.yaml"
6370 common="src/common/.trivyignore.yaml"
7380 CONTAINER_NAME : ' ${{ inputs.container_name }}'
7481 BASE_VERSION : ${{ inputs.docker_tag}}
7582 PLATFORM : linux/${{ matrix.arch }}
76- - uses : actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f
77- name : Upload combined trivy ignore file
78- with :
79- name : " trivyigonre-${{ inputs.container_name }}-${{ matrix.arch }}"
80- path : src/${{ inputs.container_name }}/.trivyignore_combined.yaml
81- include-hidden-files : true
82- - uses : actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f
83- name : Upload docker images
84- with :
85- name : " eps-devcontainer-${{ inputs.container_name }}-${{ inputs.docker_tag }}-${{ matrix.arch }}.img"
86- path : |
87- eps-devcontainer-${{ inputs.container_name }}-${{ inputs.docker_tag }}-${{ matrix.arch }}.img
8883 - name : Check docker vulnerabilities - json output
8984 uses : aquasecurity/trivy-action@b6643a29fecd7f34b3597bc6acb0a98b03d33ff8
9085 with :
@@ -125,6 +120,24 @@ jobs:
125120 env :
126121 ARCHITECTURE : ' ${{ matrix.arch }}'
127122 DOCKER_TAG : ' ${{ inputs.docker_tag }}'
123+ - name : Push tagged image
124+ run : |
125+ echo "Pushing image..."
126+ docker push "ghcr.io/nhsdigital/eps-devcontainers/${CONTAINER_NAME}:${DOCKER_TAG}-${ARCHITECTURE}"
127+ env :
128+ DOCKER_TAG : ${{ inputs.docker_tag }}
129+ CONTAINER_NAME : ' ${{ inputs.container_name }}'
130+ ARCHITECTURE : ' ${{ matrix.arch }}'
131+ - name : Push latest image
132+ if : ${{ inputs.tag_latest }}
133+ run : |
134+ docker tag "ghcr.io/nhsdigital/eps-devcontainers/${CONTAINER_NAME}:${DOCKER_TAG}-${ARCHITECTURE}" "ghcr.io/nhsdigital/eps-devcontainers/${CONTAINER_NAME}:latest-${ARCHITECTURE}"
135+ echo "Pushing image..."
136+ docker push "ghcr.io/nhsdigital/eps-devcontainers/${CONTAINER_NAME}:latest-${ARCHITECTURE}"
137+ env :
138+ DOCKER_TAG : ${{ inputs.docker_tag }}
139+ CONTAINER_NAME : ' ${{ inputs.container_name }}'
140+ ARCHITECTURE : ' ${{ matrix.arch }}'
128141
129142 publish_image :
130143 name : Publish image for ${{ inputs.container_name }}
@@ -136,73 +149,28 @@ jobs:
136149 attestations : write
137150 id-token : write
138151 steps :
139- - name : Free Disk Space for Docker
140- uses : endersonmenezes/free-disk-space@e6ed9b02e683a3b55ed0252f1ee469ce3b39a885
141- with :
142- remove_android : true
143- remove_dotnet : true
144- remove_haskell : true
145- remove_tool_cache : true
146- rm_cmd : rm
147- remove_packages : >-
148- azure-cli google-cloud-cli microsoft-edge-stable
149- google-chrome-stable firefox postgresql* temurin-* *llvm* mysql*
150- dotnet-sdk-*
151- remove_packages_one_command : true
152- - name : Download amd64 images
153- uses : actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131
154- with :
155- name : eps-devcontainer-${{ inputs.container_name }}-${{ inputs.docker_tag }}-amd64.img
156- - name : Download arm64 images
157- uses : actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131
158- with :
159- name : eps-devcontainer-${{ inputs.container_name }}-${{ inputs.docker_tag }}-arm64.img
160152 - name : Login to github container registry
161153 uses : docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9
162154 with :
163155 registry : ghcr.io
164156 username : ${{github.actor}}
165157 password : ${{secrets.GITHUB_TOKEN}}
166158
167- - name : Load and push multi-arch tagged image
159+ - name : Push multi-arch tagged image
168160 run : |
169- echo "loading images"
170- docker load -i "eps-devcontainer-${CONTAINER_NAME}-${DOCKER_TAG}-amd64.img"
171- docker load -i "eps-devcontainer-${CONTAINER_NAME}-${DOCKER_TAG}-arm64.img"
172-
173- echo "pushing images"
174- docker push "ghcr.io/nhsdigital/eps-devcontainers/${CONTAINER_NAME}:${DOCKER_TAG}-amd64"
175- docker push "ghcr.io/nhsdigital/eps-devcontainers/${CONTAINER_NAME}:${DOCKER_TAG}-arm64"
176-
177- echo "creating manifest"
178- docker manifest create "ghcr.io/nhsdigital/eps-devcontainers/${CONTAINER_NAME}:${DOCKER_TAG}" \
179- --amend "ghcr.io/nhsdigital/eps-devcontainers/${CONTAINER_NAME}:${DOCKER_TAG}-amd64" \
180- --amend "ghcr.io/nhsdigital/eps-devcontainers/${CONTAINER_NAME}:${DOCKER_TAG}-arm64"
181-
182- echo "pushing manifest"
183- docker manifest push "ghcr.io/nhsdigital/eps-devcontainers/${CONTAINER_NAME}:${DOCKER_TAG}"
161+ docker buildx imagetools create -t "ghcr.io/nhsdigital/eps-devcontainers/${CONTAINER_NAME}:${DOCKER_TAG}" \
162+ "ghcr.io/nhsdigital/eps-devcontainers/${CONTAINER_NAME}:${DOCKER_TAG}-amd64" \
163+ "ghcr.io/nhsdigital/eps-devcontainers/${CONTAINER_NAME}:${DOCKER_TAG}-arm64"
184164 env :
185165 DOCKER_TAG : ${{ inputs.docker_tag }}
186166 CONTAINER_NAME : ' ${{ inputs.container_name }}'
187167
188- - name : Load and push multi-arch latest image
168+ - name : Push multi-arch latest image
189169 if : ${{ inputs.tag_latest }}
190170 run : |
191- echo "Tagging latest images"
192- docker tag "ghcr.io/nhsdigital/eps-devcontainers/${CONTAINER_NAME}:${DOCKER_TAG}-amd64" "ghcr.io/nhsdigital/eps-devcontainers/${CONTAINER_NAME}:latest-amd64"
193- docker tag "ghcr.io/nhsdigital/eps-devcontainers/${CONTAINER_NAME}:${DOCKER_TAG}-arm64" "ghcr.io/nhsdigital/eps-devcontainers/${CONTAINER_NAME}:latest-arm64"
194-
195- echo "pushing images"
196- docker push "ghcr.io/nhsdigital/eps-devcontainers/${CONTAINER_NAME}:latest-amd64"
197- docker push "ghcr.io/nhsdigital/eps-devcontainers/${CONTAINER_NAME}:latest-arm64"
198-
199- echo "creating manifest"
200- docker manifest create "ghcr.io/nhsdigital/eps-devcontainers/${CONTAINER_NAME}:latest" \
201- --amend "ghcr.io/nhsdigital/eps-devcontainers/${CONTAINER_NAME}:latest-amd64" \
202- --amend "ghcr.io/nhsdigital/eps-devcontainers/${CONTAINER_NAME}:latest-arm64"
203-
204- echo "pushing manifest"
205- docker manifest push "ghcr.io/nhsdigital/eps-devcontainers/${CONTAINER_NAME}:latest"
171+ docker buildx imagetools create -t "ghcr.io/nhsdigital/eps-devcontainers/${CONTAINER_NAME}:latest" \
172+ "ghcr.io/nhsdigital/eps-devcontainers/${CONTAINER_NAME}:latest-amd64" \
173+ "ghcr.io/nhsdigital/eps-devcontainers/${CONTAINER_NAME}:latest-arm64"
206174 env :
207175 DOCKER_TAG : ${{ inputs.docker_tag }}
208176 CONTAINER_NAME : ' ${{ inputs.container_name }}'
0 commit comments