Skip to main content
Version: 4.0.0

CI/CD Pipeline

The IDR uses GitHub Actions to automate testing and Docker image publishing. Releases follow a trunk-based, tag-driven flow: maintainers cut releases by tagging master; the docker pipeline picks up the tag and publishes the image. There is no next branch, no release/* branch, and no hotfix/* branch convention.

For the full maintainer-facing release workflow (when to bump version.json, how to tag a release, how to ship a pre-release or a hotfix), see Release Process.

Docker workflow

File: .github/workflows/docker.yml

Triggers

EventBehaviour
Push to master (path-filtered to relevant files)Pushes :master and :master-<sha> image tags. Tracks the trunk's latest state.
Push of a v* tag (e.g. v4.0.0, v4.1.0-rc.1)Pushes the semver-tagged image. The :latest pointer moves only for non-pre-release tags.
workflow_dispatch with a version inputEquivalent to a tag push but triggered manually. Useful for republishing or ad-hoc tagging.

What it does

  1. Checks out the code at the SHA that triggered the workflow (so a parallel push to master cannot move the working tree underneath the build).
  2. Sets up QEMU and Docker Buildx for multi-architecture builds.
  3. Logs in to GitHub Container Registry (ghcr.io).
  4. Generates Docker metadata (image name + applicable tags) using docker/metadata-action.
  5. Builds and pushes the image for linux/amd64 and linux/arm64.

Image variants

Every build produces two image variants, distinguished by suffix:

VariantDockerfileSuffixUse case
StandardDockerfilenoneDocker, Docker Compose, Kubernetes
ServerlessDockerfile.serverless-serverlessAWS Lambda container deployments

Image tag map

Each row below produces the listed standard tag plus a matching -serverless tag (e.g. 4.0.0 and 4.0.0-serverless).

TriggerTag patternExample
Push to mastermaster, master-<sha>master, master-abc1234
Push of release tag vX.Y.ZX.Y.Z, latest (non-pre-release only)4.0.0, latest
Push of pre-release tag vX.Y.Z-rc.NX.Y.Z-rc.N (no latest move)4.0.0-rc.1
workflow_dispatch with version=X.Y.ZX.Y.Z, latest (non-pre-release only)4.0.0, latest
tip

Pin to a specific X.Y.Z version tag in production. The master and latest tags move with every push or non-pre-release tag and may introduce unexpected changes between deploys.

Pulling images

Standard image:

# Specific version (recommended for production)
docker pull ghcr.io/pyx-industries/pyx-identity-resolver:4.0.0

# Trunk's latest state
docker pull ghcr.io/pyx-industries/pyx-identity-resolver:master

# Exact commit on master
docker pull ghcr.io/pyx-industries/pyx-identity-resolver:master-abc1234

# Latest non-pre-release tag
docker pull ghcr.io/pyx-industries/pyx-identity-resolver:latest

Serverless image (Lambda):

# Specific version
docker pull ghcr.io/pyx-industries/pyx-identity-resolver:4.0.0-serverless

# Trunk's latest state
docker pull ghcr.io/pyx-industries/pyx-identity-resolver:master-serverless

# Latest non-pre-release tag
docker pull ghcr.io/pyx-industries/pyx-identity-resolver:latest-serverless

Version source of truth

The release version lives in version.json at the repository root:

{
"version": "4.0.0",
"apiVersion": "4.0",
"docVersion": "4.0.0",
"dependencies": {}
}
FieldPurpose
versionThe release version. Updated on every release; must match the git tag and app/package.json.
apiVersionThe API contract version (MAJOR.MINOR). MAJOR drives the URL path (/api/v<MAJOR>); MINOR documents backwards-compatible additions.
docVersionThe documentation snapshot version. Updated when user-visible docs change.

The project follows Semantic Versioning:

  • Patch (4.0.0 → 4.0.1): backwards-compatible bug fixes.
  • Minor (4.0.0 → 4.1.0): new features, backwards-compatible.
  • Major (4.0.0 → 5.0.0): breaking changes.

See ADR 002 for why apiVersion MAJOR drives the URL but MINOR doesn't.

Supporting workflows

WorkflowFilePurpose
PR Title Lintcommitlint.ymlValidates pull request titles follow the Conventional Commits format using action-semantic-pull-request. Runs on PRs targeting master.
Test Buildtest_build.ymlRuns linting, build, and unit tests on pull requests. Also includes a build_docs job that builds the Docusaurus documentation site to catch broken docs early.
E2E Testse2e_tests.ymlRuns end-to-end tests against a running instance.
Documentationbuild_publish_docs.ymlBuilds and deploys the Docusaurus documentation site to GitHub Pages.

Next steps