If a term is unfamiliar, check the shared glossary first:
docs/glossary.md
Containerfile native image build definition
build_files/build-image.sh build-time orchestration inside the image
containerfiles/zfs-akmods/ compose-time ZFS install helper
shared/ shared Python helpers copied into CI and image build context
ci/defaults.json checked-in defaults shared by workflows and helpers
files/scripts/ image-local helper scripts
ci_tools/ workflow helper commands
.github/actions/ local composite actions used by the workflows
.github/workflows/ GitHub Actions pipelines
.github/scripts/README.md workflow step -> command-line interface (CLI) command map
docs/ teaching-style documentation
.github/workflows/build.yml- main push/schedule/manual workflow
- candidate-first build and promotion
- scheduled runs skip when the upstream Aurora base image has not advanced since the last promoted image (see "Safety Model" above)
.github/workflows/build-branch.yml- branch-tagged test builds
- reuse or rebuild the shared akmods cache when the branch targets a new primary kernel
.github/workflows/build-pr.yml- pull request (PR) validation build
- no push and no signing
.github/workflows/test.yml- Python unit tests and
rufflint for all CI tool modules - runs on pull requests and pushes to main
- Python unit tests and
Docs-only changes do not trigger image builds.
ci_tools/resolve_build_inputs.pyci_tools/write_build_inputs_manifest.pyci_tools/check_akmods_cache.pyci_tools/prepare_validation_build.py- pull-request cache validation plus pinned-akmods-ref fetch validation
ci_tools/tagging_context.py- normalizes registry paths and detects automation accounts
ci_tools/akmods_clone_pinned.py- clones the resolved upstream akmods commit and verifies the exact SHA
ci_tools/akmods_configure_zfs_target.pyci_tools/akmods_build_and_publish.py
Containerfilebuild_files/build-image.shfiles/scripts/configure_signing_policy.pycontainerfiles/zfs-akmods/install_zfs_from_akmods_cache.pyshared/oci_layout.py
ci_tools/tagging_context.py- builds candidate tags, branch tags, branch-safe prefixes, and registry context values
ci_tools/promote_stable.pyci_tools/sign_image.py- used by branch/main publish flows; publication requires
SIGNING_SECRET
- used by branch/main publish flows; publication requires
.github/actions/- local composite actions used to keep the workflow files readable
.github/workflows/akmods-failure-triage.yml- opens or updates sticky GitHub issues for classified akmods build failures
ci_tools/classify_akmods_failure.py- turns akmods build logs into a small issue payload for the triage workflow
tests/test_akmods_build_and_publish.pytests/test_akmods_clone_pinned.pytests/test_akmods_configure_zfs_target.pytests/test_check_akmods_cache.pytests/test_classify_akmods_failure.pytests/test_cli.pytests/test_common.pytests/test_configure_signing_policy.pytests/test_export_repo_defaults.pytests/test_install_zfs_from_akmods_cache.pytests/test_prepare_validation_build.pytests/test_promote_stable.pytests/test_resolve_build_inputs.pytests/test_sign_image.pytests/test_tagging_context.pytests/test_write_build_inputs_manifest.py
pip install pytest pytest-cov pyyaml
python3 -m pytest tests/ -vTests use unittest.TestCase with unittest.mock.patch and have no external
dependencies beyond pytest as the test runner (pyyaml is installed so the
YAML-schema tests run instead of skipping; pytest-cov feeds the coverage floors). Every CI tool module in
ci_tools/ has a corresponding tests/test_<module_name>.py file. All external
calls (subprocess, registry, filesystem) are mocked so tests run without network
access or container tooling.
Tests run automatically in CI via
.github/workflows/test.yml on every pull
request and push to main.