This repository contains a FHIR Implementation Guide (IG) and two GitHub Actions workflows:
- Build & Push Builder Image – builds a reusable Docker image with all IG tooling
- Build & Publish IG to S3 – uses that image to build and publish the IG
The design goal is deterministic, reproducible IG builds with zero toolchain setup on CI runners.
.
├── TASMC/ # FHIR Implementation Guide root
│ ├── input/
│ ├── fsh/
│ ├── ig.ini
│ └── output/ # Generated IG (cleaned on every build)
├── Dockerfile # IG Builder image
└── .github/workflows/
Purpose
Builds a Docker image that contains:
- Java
- FHIR IG Publisher
- SUSHI
- Node / Ruby / Jekyll
- All other IG build dependencies
This image is published to GitHub Container Registry (GHCR) and reused by the IG build workflow.
Trigger
- Manual (
workflow_dispatch)
Output
- Docker image pushed to GHCR
ghcr.io/<owner>/ig-builder:latest
Notes
- Tool versions are intentionally pinned
- This workflow can be disabled once the image is built and validated
Purpose
Builds the FHIR IG inside the builder Docker image and deploys the generated output to S3.
Trigger
- Push to
main - Manual (
workflow_dispatch)
Steps
- Checkout repository
- Authenticate to GHCR
- Pull IG Builder image
- Clean
TASMC/output - Build IG inside the container
- Sync output to S3
Deployment target
s3://<bucket>/current
To build the IG locally using the same container as CI:
docker run --rm -v "$PWD:/work" ghcr.io/<owner>/ig-builder:latest -ig TASMCNotes
- Repository root is mounted to
/work TASMCis passed as the IG directory- Output is written to
TASMC/output
This is 1:1 identical to the GitHub Actions build.
The deployment workflow uses static AWS credentials stored as GitHub Secrets:
AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEYAWS_REGIONS3_BUCKET
No AWS tooling is required locally unless deploying manually.
- No tool installation in CI
- Reproducible, pinned toolchain
- Containerized IG builds
- Clean output on every run
- CI behavior identical to local builds
- SUSHI version warnings are informational only
- Tool upgrades are done by rebuilding the builder image
- The builder workflow can be disabled after publishing the image