Build Images#

Pre-built OCI images are available from the simtools package registry. The GitHub Actions workflows in .github/workflows/build-*.yml are the reference image builds.

Build dependency graph#

dependency_versions.yml
        |
        +-- weekly refresh: compare remote commits, build snapshots, open review PR
        |                                                           |
        v                                                           v
  private CORSIKA input snapshot                            private sim_telarray input snapshot
  (source, patches, Autoconf)                               (source, dependencies, GSL)
        |                                                           |
        +---------------- GitHub Actions artifacts ----------------+
                                                    |
                                                    v
                         CORSIKA and sim_telarray image builds (per architecture)
                                                    |
                                                    v
                                      GHCR scientific component images
                                                    |
                         +--------------------------+--------------------------+
                         v                                                     v
              simtools production image                                  simtools dev image
                         |
                         v
              reusable integration-test workflow

All scientific build versions come from dependency_versions.yml; see Dependency versions and provenance. Dockerfiles provide fallback values for standalone local builds, while the workflows pass the values generated from the catalog. Before a reproducible local build, export the validated values with

simtools-dependency-versions --format github-output

Refreshing source snapshots#

Refresh build-input snapshots runs weekly on Monday at 03:00 UTC and can also be started with Run workflow from the GitHub Actions page. It resolves the configured source references and builds a new private GHCR snapshot when an input revision changes or its corresponding snapshot is missing.

When a new snapshot is published, the workflow opens or updates a review PR. The PR is labelled no-changelog-needed and changes only dependency_versions.yml: the resolved source revisions and private snapshot digest. It never adds the generated source or auxiliary archives to Git.

Scientific component images#

docker/Dockerfile-corsika7 builds each catalogued CORSIKA and CPU variant. The workflow prepares the CORSIKA source, configuration, and optimization-patch trees before the Docker build and provides them with the autoconf.tar.gz archive. Once the catalog contains an immutable source snapshot digest, these inputs are restored from private GHCR instead of fetched from remote sites.

docker/Dockerfile-simtel_array builds the catalogued sim_telarray, hessio, and stdtools releases. The workflow prepares those source trees before the Docker build and provides them with the gsl.tar.gz archive. Once the catalog contains an immutable source snapshot digest, these inputs are restored from private GHCR instead of fetched from remote sites.

Use the workflow-generated matrix values as build arguments. This ensures that a local build uses the same base-image tags, source releases and flags as CI. Add optional digests and revisions to the catalog when a fully immutable build is needed.

Production and development images#

docker/Dockerfile-simtools-prod installs the checked-out simtools revision with the compatible Python dependencies declared in pyproject.toml. Its CORSIKA, sim_telarray and AlmaLinux inputs are version-tag references unless optional OCI digests are declared.

docker/Dockerfile-simtools-dev installs the same compatible Python dependencies, including the development, documentation and test extras, but leaves simtools itself to be installed from a bind-mounted checkout.

Run a development image with

podman run --rm -it \
  -v "$(pwd):/workdir/external/simtools" \
  ghcr.io/gammasim/simtools-dev:latest \
  bash -lc "cd /workdir/external/simtools && pip install -e . && exec bash"

Published production images include /opt/simtools/provenance/dependency-manifest.json. Apptainer users should pull a production image directly from the OCI registry with a docker:// reference.