Skip to content

Update Chainguard Digests #18

Update Chainguard Digests

Update Chainguard Digests #18

name: Update Chainguard Digests
on:
workflow_dispatch:
schedule:
- cron: "0 0 * * 0"
jobs:
update-digests:
runs-on: ubuntu-latest
permissions:
contents: write
pull-requests: write
steps:
- uses: actions/checkout@v4
- name: Setup JFrog CLI
uses: jfrog/setup-jfrog-cli@v4
env:
JF_URL: https://artifacts-artefacts.devops.cloud-nuage.canada.ca
JF_USER: ${{ secrets.JFROG_USERNAME }}
JF_ACCESS_TOKEN: ${{ secrets.JFROG_JWT_TOKEN }}
- name: Docker login
run: |
echo "${{ secrets.JFROG_JWT_TOKEN }}" | docker login artifacts-artefacts.devops.cloud-nuage.canada.ca \
--username "${{ secrets.JFROG_USERNAME }}" --password-stdin
- name: Get latest digests
run: |
docker pull artifacts-artefacts.devops.cloud-nuage.canada.ca/docker-chainguard-remote/ssc-spc.gc.ca/jdk:openjdk-21
JDK_DIGEST=$(docker inspect artifacts-artefacts.devops.cloud-nuage.canada.ca/docker-chainguard-remote/ssc-spc.gc.ca/jdk:openjdk-21 --format='{{index .RepoDigests 0}}' | cut -d'@' -f2)
echo "JDK_DIGEST=$JDK_DIGEST" >> $GITHUB_ENV
docker pull artifacts-artefacts.devops.cloud-nuage.canada.ca/docker-chainguard-remote/ssc-spc.gc.ca/jre:openjdk-21
JRE_DIGEST=$(docker inspect artifacts-artefacts.devops.cloud-nuage.canada.ca/docker-chainguard-remote/ssc-spc.gc.ca/jre:openjdk-21 --format='{{index .RepoDigests 0}}' | cut -d'@' -f2)
echo "JRE_DIGEST=$JRE_DIGEST" >> $GITHUB_ENV
docker pull artifacts-artefacts.devops.cloud-nuage.canada.ca/docker-chainguard-remote/ssc-spc.gc.ca/python:3.13.3
PYTHON_DIGEST=$(docker inspect artifacts-artefacts.devops.cloud-nuage.canada.ca/docker-chainguard-remote/ssc-spc.gc.ca/python:3.13.3 --format='{{index .RepoDigests 0}}' | cut -d'@' -f2)
echo "PYTHON_DIGEST=$PYTHON_DIGEST" >> $GITHUB_ENV
docker pull artifacts-artefacts.devops.cloud-nuage.canada.ca/docker-chainguard-remote/ssc-spc.gc.ca/node:24.1.0
NODE_DIGEST=$(docker inspect artifacts-artefacts.devops.cloud-nuage.canada.ca/docker-chainguard-remote/ssc-spc.gc.ca/node:24.1.0 --format='{{index .RepoDigests 0}}' | cut -d'@' -f2)
echo "NODE_DIGEST=$NODE_DIGEST" >> $GITHUB_ENV
- name: Update Dockerfiles
run: |
sed -i "s|FROM artifacts-artefacts.devops.cloud-nuage.canada.ca/docker-chainguard-remote/ssc-spc.gc.ca/jdk:openjdk-21.*|FROM artifacts-artefacts.devops.cloud-nuage.canada.ca/docker-chainguard-remote/ssc-spc.gc.ca/jdk@$JDK_DIGEST|g" examples/java-app/Dockerfile.chainguard
sed -i "s|FROM artifacts-artefacts.devops.cloud-nuage.canada.ca/docker-chainguard-remote/ssc-spc.gc.ca/jre:openjdk-21.*|FROM artifacts-artefacts.devops.cloud-nuage.canada.ca/docker-chainguard-remote/ssc-spc.gc.ca/jre@$JRE_DIGEST|g" examples/java-app/Dockerfile.chainguard
sed -i "s|FROM artifacts-artefacts.devops.cloud-nuage.canada.ca/docker-chainguard-remote/ssc-spc.gc.ca/python:3.13.3.*|FROM artifacts-artefacts.devops.cloud-nuage.canada.ca/docker-chainguard-remote/ssc-spc.gc.ca/python@$PYTHON_DIGEST|g" examples/python-app/Dockerfile.chainguard
sed -i "s|FROM artifacts-artefacts.devops.cloud-nuage.canada.ca/docker-chainguard-remote/ssc-spc.gc.ca/node:24.1.0.*|FROM artifacts-artefacts.devops.cloud-nuage.canada.ca/docker-chainguard-remote/ssc-spc.gc.ca/node@$NODE_DIGEST|g" examples/node-app/Dockerfile.chainguard
- name: Check for changes
id: changes
run: |
if git diff --quiet; then
echo "changes=false" >> $GITHUB_OUTPUT
else
echo "changes=true" >> $GITHUB_OUTPUT
fi
- name: Create PR
if: steps.changes.outputs.changes == 'true'
uses: peter-evans/create-pull-request@v5
with:
token: ${{ secrets.GITHUB_TOKEN }}
commit-message: "Update Chainguard image digests"
title: "Update Chainguard image digests"
body: |
Automated update of Chainguard base images to latest digests.
Updates:
- Java JDK: ${{ env.JDK_DIGEST }}
- Java JRE: ${{ env.JRE_DIGEST }}
- Python: ${{ env.PYTHON_DIGEST }}
- Node.js: ${{ env.NODE_DIGEST }}
branch: update-digests
labels: security,automated
- name: Comment on PR
if: steps.changes.outputs.changes == 'true'
uses: actions/github-script@v7
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
script: |
const prs = await github.rest.pulls.list({
owner: context.repo.owner,
repo: context.repo.repo,
head: `${context.repo.owner}:update-digests`
});
if (prs.data.length > 0) {
const pr = prs.data[0];
await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: pr.number,
body: `New digest update ready for review!\n\nPlease review and approve this pull request to keep our Chainguard base images secure and up to date.`
});
}