This is a monorepo for USATLAS/MaNIAC Lab container images. Each image lives under images/<name>/.
images/
analysisbase-dask/ # ATLAS AnalysisBase + Dask + Scikit-HEP (pip + uv)
analysisbase-dask-uc/ # UChicago AF layer over analysis-dask-base (plain Dockerfile)
ml-platform/ # ML platform: TF/Keras + ROOT + CUDA (pixi + conda-forge)
.github/
workflows/
_build-and-push.yml # Reusable workflow (don't call directly)
analysisbase-dask.yml
analysisbase-dask-uc.yml
ml-platform.yml
- The shared reusable workflow is
_build-and-push.yml. Per-image workflows call it withuses: ./.github/workflows/_build-and-push.yml. - Releases are triggered by
workflow_dispatchwith aversioninput — no release git tags in this repo. The SHA tag is always attached for traceability. analysis-dask-ucrebuilds automatically viaworkflow_runwhenanalysis-dask-basebuilds onmain. Do not reinstaterepository_dispatchfor this.- Path filters on each workflow are intentional — modifying
_build-and-push.ymltriggers all three builds. - Never hardcode secrets. Use
secrets: inheritand the documented secret names (DOCKER_HUB_USERNAME,DOCKER_HUB_PASSWORD,OSG_HARBOR_USERNAME,OSG_HARBOR_PASSWORD).
analysisbase-dask uses pip + uv with a hashed lockfile (docker/requirements.lock). To update dependencies:
cd images/analysisbase-dask && make lockml-platform uses pixi. Always commit pixi.toml and pixi.lock together:
cd images/ml-platform
# edit pixi.toml
CONDA_OVERRIDE_CUDA=12.6 pixi install # regenerate lock
git add pixi.toml pixi.lockDockerfile commands in ml-platform's final stage must be prefixed with /app/entrypoint.sh to activate the pixi environment.
cd images/ml-platform
pixi run -e dev bump # updates pixi.toml + tbump.toml with today's date
# commit pixi.toml + tbump.toml, then:
gh workflow run ml-platform.yml -f version=YYYY.M.D# analysisbase-dask
cd images/analysisbase-dask && make build
# ml-platform
docker build --platform linux/amd64 --build-arg ENVIRONMENT=ml -t ml-platform:test images/ml-platform/
docker run --rm ml-platform:test python -c "import tensorflow, keras; print('OK')"- Changing any base image version
- Adding a new registry or modifying registry configuration
- Changing CUDA version in ml-platform
- Adding a new image to the monorepo (requires workflow + README updates)
- Making breaking changes to the shared
_build-and-push.ymlreusable workflow