ci: migrate Docker build from CircleCI to GitHub Actions (#14) - #44
Conversation
Replace the CircleCI pipeline with a GitHub Actions workflow that keeps the same behaviour: build and publish filigran/python-fips and filigran/python-nodejs-fips on every push to main and on a daily schedule, plus a manual workflow_dispatch trigger. The two images are now built in parallel through a matrix instead of sequentially in a single job, and the ms-teams/report orb is replaced by an Adaptive Card posted to the MS Teams workflow webhook, which no-ops when the secret is not configured. Note that the Docker Hub credential secret is now DOCKERHUB_TOKEN, whereas CircleCI used DOCKERHUB_PASS. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
There was a problem hiding this comment.
Pull request overview
Migrates the Docker image build-and-publish pipeline from CircleCI to GitHub Actions, keeping the same image tags/platform and adding an MS Teams notification step, while removing the legacy CircleCI configuration and updating the README badge accordingly.
Changes:
- Added a GitHub Actions workflow to build/push
filigran/python-fipsandfiligran/python-nodejs-fipsvia a matrix onmain, nightly schedule, and manual dispatch. - Added an always-running MS Teams notification job that posts an Adaptive Card (and safely no-ops if the webhook secret is missing).
- Removed CircleCI config and updated the README build badge to point at the new workflow.
Reviewed changes
Copilot reviewed 3 out of 3 changed files in this pull request and generated no comments.
| File | Description |
|---|---|
.github/workflows/docker-build-push.yml |
New GitHub Actions workflow to build/push both Docker images and notify MS Teams. |
.circleci/config.yml |
Removed legacy CircleCI pipeline configuration. |
README.md |
Updated CI badge from CircleCI to the new GitHub Actions workflow. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
The build result is already visible in the Actions tab and through the README badge, so the notification job and its MS_TEAMS_WORKFLOW_WEBHOOK_URL secret are not carried over from CircleCI. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Eloise Faure (efaure)
left a comment
There was a problem hiding this comment.
lgtm for the migration to github action.
Maybe it's worth creating another issue to follow up on nodejs version mismatch. And maybe on pinning some other version to avoid breaking changes in base image.
Eloise Faure (@efaure) yes, this is completly refactor in #46 |
Proposed changes
.github/workflows/docker-build-push.yml, which builds and publishesfiligran/python-fipsandfiligran/python-nodejs-fipson every push tomain, on a daily0 0 * * *schedule, and on manualworkflow_dispatch. Same tags as before (python-fips:python3.12/latestandpython-nodejs-fips:python3.12-nodejs22/latest), samelinux/amd64platform, withpull: trueandno-cache: true.fail-fast: false) instead of sequentially in a single job, and replace CircleCI'sno_output_timeout: 30mwithtimeout-minutes: 120.cloudradar-monitoring/ms-teamsorb is not carried over and there is no replacement notification job. Build results are visible in the Actions tab and through the README badge..circleci/config.ymland point the README build badge at the new workflow.The Dockerfiles are intentionally untouched — see Further comments.
Related issues
How to test this PR
The workflow only runs on
main, on the schedule, or via manual dispatch, so it cannot be exercised from this branch. After merge:FIPS smoke test on the published image:
docker run --rm -it filigran/python-nodejs-fips:latest /bin/sh -c \ 'openssl version && node --enable-fips -p "crypto.getFips()" && python3 -c "import ssl; print(ssl.OPENSSL_VERSION)"'Checklist
type(scope?): description (#issue)The functionality box is unchecked because the workflow cannot run before it lands on
main. The workflow YAML was validated locally.Further comments
Required secrets. The Docker Hub credential secret is now
DOCKERHUB_TOKEN, whereas CircleCI usedDOCKERHUB_PASS.DOCKERHUB_USERNAMEandDOCKERHUB_TOKENmust be available to this repository (organization or repository level) before the first run.MS_TEAMS_WORKFLOW_WEBHOOK_URLis no longer used by this repository and can be revoked if nothing else depends on it.Runner choice. CircleCI used
resource_class: large; this workflow usesubuntu-latest, which is 4 vCPU / 16 GB on public repositories and therefore comparable, while avoiding a dependency on the organization'slarge-runnerlabel being granted to this repository. Happy to switch tolarge-runnerif preferred.Scope. Issue #14 also suggested using the Python FIPS image as the base for the Python + Node.js image and pinning a fixed Node.js version managed by Renovate. Those two items were explicitly deferred, so this PR is a pure CI migration and leaves both Dockerfiles unchanged.
Two follow-ups worth considering, deliberately left out of this PR:
mainunverified. A build-onlypull_requesttrigger would close that gap, at the cost of roughly doubling CI time per bump PR.nodejs22tag is now inaccurate:apk add nodejsonalpine:3.23currently resolves to Node.js 24.18.1. Fixing this properly overlaps with the deferred Renovate pinning work.🤖 Generated with Claude Code