dls-deploy-tools 0.7__tar.gz → 0.8.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/.copier-answers.yml +1 -1
- {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/.devcontainer/devcontainer.json +4 -1
- {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/.github/CONTRIBUTING.md +1 -1
- {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/.github/workflows/ci.yml +2 -2
- dls_deploy_tools-0.8.0/.markdownlint.yaml +12 -0
- {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/.pre-commit-config.yaml +23 -0
- {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/.vscode/tasks.json +17 -17
- {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/Dockerfile +2 -2
- {dls_deploy_tools-0.7/src/dls_deploy_tools.egg-info → dls_deploy_tools-0.8.0}/PKG-INFO +22 -77
- dls_deploy_tools-0.8.0/README.md +60 -0
- dls_deploy_tools-0.8.0/docs/cli.md +9 -0
- {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/docs/conf.py +40 -6
- dls_deploy_tools-0.8.0/docs/explanations/default-versions.md +48 -0
- dls_deploy_tools-0.8.0/docs/explanations/deployment-area.md +74 -0
- dls_deploy_tools-0.8.0/docs/explanations/deployment-steps.md +26 -0
- dls_deploy_tools-0.8.0/docs/explanations/deprecation-lifecycle.md +41 -0
- dls_deploy_tools-0.8.0/docs/explanations/snapshots-and-compare.md +65 -0
- dls_deploy_tools-0.8.0/docs/explanations.md +14 -0
- dls_deploy_tools-0.8.0/docs/glossary.md +25 -0
- dls_deploy_tools-0.8.0/docs/how-to/ci-pipeline.md +61 -0
- dls_deploy_tools-0.8.0/docs/how-to/regenerate-schemas.md +23 -0
- {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/docs/how-to/run-container.md +3 -0
- dls_deploy_tools-0.8.0/docs/how-to/vscode-tasks.md +37 -0
- dls_deploy_tools-0.8.0/docs/how-to/write-module-configuration.md +88 -0
- dls_deploy_tools-0.8.0/docs/how-to.md +14 -0
- dls_deploy_tools-0.8.0/docs/reference/configuration.md +175 -0
- {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/docs/reference.md +4 -0
- dls_deploy_tools-0.8.0/docs/schemas/deployment-settings.rst +4 -0
- dls_deploy_tools-0.8.0/docs/schemas/release.rst +4 -0
- dls_deploy_tools-0.8.0/docs/schemas.md +67 -0
- dls_deploy_tools-0.8.0/docs/tutorials/your-first-deployment.md +159 -0
- {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/docs/tutorials.md +2 -2
- {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/pyproject.toml +11 -1
- {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/deploy_tools/__main__.py +14 -5
- {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/deploy_tools/_version.py +3 -3
- {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/deploy_tools/app_builder.py +35 -5
- {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/deploy_tools/apptainer.py +7 -4
- {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/deploy_tools/build.py +1 -0
- {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/deploy_tools/compare.py +23 -10
- {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/deploy_tools/demo_configuration/example-module-apps/0.1.yaml +2 -10
- {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/deploy_tools/deploy.py +5 -2
- dls_deploy_tools-0.8.0/src/deploy_tools/errors.py +10 -0
- dls_deploy_tools-0.8.0/src/deploy_tools/external_tools.py +51 -0
- {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/deploy_tools/layout.py +21 -2
- {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/deploy_tools/models/apptainer_app.py +46 -9
- {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/deploy_tools/models/binary_app.py +5 -1
- {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/deploy_tools/models/module.py +15 -6
- dls_deploy_tools-0.8.0/src/deploy_tools/models/parent.py +15 -0
- {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/deploy_tools/models/save_and_load.py +12 -7
- {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/deploy_tools/models/schema.py +2 -2
- {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/deploy_tools/models/schemas/deployment.json +33 -14
- {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/deploy_tools/models/schemas/module.json +132 -134
- {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/deploy_tools/models/schemas/release.json +33 -14
- {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/deploy_tools/models/shell_app.py +5 -1
- {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/deploy_tools/module_builder.py +1 -0
- {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/deploy_tools/modulefile.py +5 -0
- {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/deploy_tools/print_updates.py +6 -3
- {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/deploy_tools/snapshot.py +26 -9
- {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/deploy_tools/sync.py +33 -15
- {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/deploy_tools/templater.py +2 -0
- {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/deploy_tools/templates/apptainer_entrypoint +18 -0
- {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/deploy_tools/validate.py +32 -32
- {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0/src/dls_deploy_tools.egg-info}/PKG-INFO +22 -77
- dls_deploy_tools-0.8.0/src/dls_deploy_tools.egg-info/SOURCES.txt +347 -0
- dls_deploy_tools-0.8.0/src/dls_deploy_tools.egg-info/scm_file_list.json +342 -0
- dls_deploy_tools-0.8.0/src/dls_deploy_tools.egg-info/scm_version.json +8 -0
- dls_deploy_tools-0.8.0/tests/configs/README.md +17 -0
- dls_deploy_tools-0.8.0/tests/configs/golden-master/01-initial/apps/0.1.yaml +37 -0
- dls_deploy_tools-0.8.0/tests/configs/golden-master/01-initial/deps/0.2.yaml +14 -0
- dls_deploy_tools-0.8.0/tests/configs/golden-master/01-initial/settings.yaml +3 -0
- dls_deploy_tools-0.8.0/tests/configs/golden-master/01-initial/updatable/1.0.yaml +21 -0
- dls_deploy_tools-0.8.0/tests/configs/golden-master/01-initial/versions/1.0.yaml +8 -0
- dls_deploy_tools-0.8.0/tests/configs/golden-master/02-added/apps/0.1.yaml +37 -0
- dls_deploy_tools-0.8.0/tests/configs/golden-master/02-added/deps/0.2.yaml +14 -0
- dls_deploy_tools-0.8.0/tests/configs/golden-master/02-added/settings.yaml +3 -0
- dls_deploy_tools-0.8.0/tests/configs/golden-master/02-added/updatable/1.0.yaml +21 -0
- dls_deploy_tools-0.8.0/tests/configs/golden-master/02-added/versions/1.0.yaml +8 -0
- dls_deploy_tools-0.8.0/tests/configs/golden-master/02-added/versions/2.0.yaml +8 -0
- dls_deploy_tools-0.8.0/tests/configs/golden-master/02-added/versions/2.1rc1.yaml +12 -0
- dls_deploy_tools-0.8.0/tests/configs/golden-master/03-updated/apps/0.1.yaml +37 -0
- dls_deploy_tools-0.8.0/tests/configs/golden-master/03-updated/deps/0.2.yaml +14 -0
- dls_deploy_tools-0.8.0/tests/configs/golden-master/03-updated/settings.yaml +3 -0
- dls_deploy_tools-0.8.0/tests/configs/golden-master/03-updated/updatable/1.0.yaml +20 -0
- dls_deploy_tools-0.8.0/tests/configs/golden-master/03-updated/versions/1.0.yaml +8 -0
- dls_deploy_tools-0.8.0/tests/configs/golden-master/03-updated/versions/2.0.yaml +8 -0
- dls_deploy_tools-0.8.0/tests/configs/golden-master/03-updated/versions/2.1rc1.yaml +12 -0
- dls_deploy_tools-0.8.0/tests/configs/golden-master/04-deprecated/apps/0.1.yaml +37 -0
- dls_deploy_tools-0.8.0/tests/configs/golden-master/04-deprecated/deps/0.2.yaml +14 -0
- dls_deploy_tools-0.8.0/tests/configs/golden-master/04-deprecated/settings.yaml +3 -0
- dls_deploy_tools-0.8.0/tests/configs/golden-master/04-deprecated/updatable/1.0.yaml +20 -0
- dls_deploy_tools-0.8.0/tests/configs/golden-master/04-deprecated/versions/1.0.yaml +10 -0
- dls_deploy_tools-0.8.0/tests/configs/golden-master/04-deprecated/versions/2.0.yaml +8 -0
- dls_deploy_tools-0.8.0/tests/configs/golden-master/04-deprecated/versions/2.1rc1.yaml +14 -0
- dls_deploy_tools-0.8.0/tests/configs/golden-master/05-restored/apps/0.1.yaml +37 -0
- dls_deploy_tools-0.8.0/tests/configs/golden-master/05-restored/deps/0.2.yaml +14 -0
- dls_deploy_tools-0.8.0/tests/configs/golden-master/05-restored/settings.yaml +3 -0
- dls_deploy_tools-0.8.0/tests/configs/golden-master/05-restored/updatable/1.0.yaml +20 -0
- dls_deploy_tools-0.8.0/tests/configs/golden-master/05-restored/versions/1.0.yaml +10 -0
- dls_deploy_tools-0.8.0/tests/configs/golden-master/05-restored/versions/2.0.yaml +8 -0
- dls_deploy_tools-0.8.0/tests/configs/golden-master/05-restored/versions/2.1rc1.yaml +12 -0
- dls_deploy_tools-0.8.0/tests/configs/golden-master/06-removed/apps/0.1.yaml +37 -0
- dls_deploy_tools-0.8.0/tests/configs/golden-master/06-removed/deps/0.2.yaml +14 -0
- dls_deploy_tools-0.8.0/tests/configs/golden-master/06-removed/settings.yaml +3 -0
- dls_deploy_tools-0.8.0/tests/configs/golden-master/06-removed/updatable/1.0.yaml +20 -0
- dls_deploy_tools-0.8.0/tests/configs/golden-master/06-removed/versions/2.0.yaml +8 -0
- dls_deploy_tools-0.8.0/tests/configs/golden-master/06-removed/versions/2.1rc1.yaml +12 -0
- dls_deploy_tools-0.8.0/tests/configs/invalid/default-version-not-deployed/example-module-shell/1.0.yaml +13 -0
- dls_deploy_tools-0.8.0/tests/configs/invalid/default-version-not-deployed/settings.yaml +4 -0
- dls_deploy_tools-0.8.0/tests/configs/invalid/deprecated-on-creation/example-module-shell/1.0.yaml +13 -0
- dls_deploy_tools-0.8.0/tests/configs/invalid/deprecated-on-creation/example-module-shell/2.0.yaml +15 -0
- dls_deploy_tools-0.8.0/tests/configs/invalid/deprecated-on-creation/settings.yaml +3 -0
- dls_deploy_tools-0.8.0/tests/configs/invalid/invalid-module-name/example-module-shell/1.0.yaml +15 -0
- dls_deploy_tools-0.8.0/tests/configs/invalid/invalid-module-name/settings.yaml +3 -0
- dls_deploy_tools-0.8.0/tests/configs/invalid/invalid-shell-script/example-module-shell/1.0.yaml +15 -0
- dls_deploy_tools-0.8.0/tests/configs/invalid/invalid-shell-script/settings.yaml +3 -0
- dls_deploy_tools-0.8.0/tests/configs/invalid/modified-without-allow-updates/example-module-shell/1.0.yaml +15 -0
- dls_deploy_tools-0.8.0/tests/configs/invalid/modified-without-allow-updates/settings.yaml +3 -0
- dls_deploy_tools-0.8.0/tests/configs/invalid/name-mismatch/settings.yaml +3 -0
- dls_deploy_tools-0.8.0/tests/configs/invalid/name-mismatch/wrong-folder-name/1.0.yaml +15 -0
- dls_deploy_tools-0.8.0/tests/configs/invalid/no-eligible-default/example-module-shell/1.0.yaml +15 -0
- dls_deploy_tools-0.8.0/tests/configs/invalid/no-eligible-default/settings.yaml +3 -0
- dls_deploy_tools-0.8.0/tests/configs/invalid/removed-without-deprecation/settings.yaml +3 -0
- dls_deploy_tools-0.8.0/tests/configs/invalid/stray-file/example-module-shell/1.0.yaml +13 -0
- dls_deploy_tools-0.8.0/tests/configs/invalid/stray-file/example-module-shell/README.txt +2 -0
- dls_deploy_tools-0.8.0/tests/configs/invalid/stray-file/settings.yaml +3 -0
- dls_deploy_tools-0.8.0/tests/configs/invalid/unknown-dependency/example-module-base/1.0.yaml +8 -0
- dls_deploy_tools-0.8.0/tests/configs/invalid/unknown-dependency/example-module-dependent/1.0.yaml +12 -0
- dls_deploy_tools-0.8.0/tests/configs/invalid/unknown-dependency/settings.yaml +3 -0
- dls_deploy_tools-0.8.0/tests/configs/invalid/version-mismatch/example-module-shell/2.0.yaml +15 -0
- dls_deploy_tools-0.8.0/tests/configs/invalid/version-mismatch/settings.yaml +3 -0
- dls_deploy_tools-0.8.0/tests/configs/valid/apptainer-pull/example-apptainer/1.0.yaml +19 -0
- dls_deploy_tools-0.8.0/tests/configs/valid/apptainer-pull/settings.yaml +3 -0
- dls_deploy_tools-0.8.0/tests/configs/valid/empty/settings.yaml +3 -0
- dls_deploy_tools-0.8.0/tests/configs/valid/minimal/example-module-shell/1.0.yaml +13 -0
- dls_deploy_tools-0.8.0/tests/configs/valid/minimal/settings.yaml +3 -0
- dls_deploy_tools-0.8.0/tests/configs/valid/multi-version-deprecated/example-module-multi/1.0.yaml +12 -0
- dls_deploy_tools-0.8.0/tests/configs/valid/multi-version-deprecated/example-module-multi/2.0.yaml +12 -0
- dls_deploy_tools-0.8.0/tests/configs/valid/multi-version-deprecated/settings.yaml +3 -0
- dls_deploy_tools-0.8.0/tests/configs/valid/multi-version-explicit-default/example-module-multi/1.0.yaml +8 -0
- dls_deploy_tools-0.8.0/tests/configs/valid/multi-version-explicit-default/example-module-multi/2.0.yaml +8 -0
- dls_deploy_tools-0.8.0/tests/configs/valid/multi-version-explicit-default/settings.yaml +5 -0
- dls_deploy_tools-0.8.0/tests/configs/valid/multi-version-live/example-module-multi/1.0.yaml +8 -0
- dls_deploy_tools-0.8.0/tests/configs/valid/multi-version-live/example-module-multi/2.0.yaml +8 -0
- dls_deploy_tools-0.8.0/tests/configs/valid/multi-version-live/settings.yaml +3 -0
- dls_deploy_tools-0.8.0/tests/configs/valid/updatable-deprecated/example-module-updatable/1.0.yaml +18 -0
- dls_deploy_tools-0.8.0/tests/configs/valid/updatable-deprecated/settings.yaml +3 -0
- dls_deploy_tools-0.8.0/tests/configs/valid/updatable-live/example-module-updatable/1.0.yaml +14 -0
- dls_deploy_tools-0.8.0/tests/configs/valid/updatable-live/settings.yaml +3 -0
- dls_deploy_tools-0.8.0/tests/configs/valid/updatable-restored/example-module-updatable/1.0.yaml +16 -0
- dls_deploy_tools-0.8.0/tests/configs/valid/updatable-restored/settings.yaml +3 -0
- dls_deploy_tools-0.8.0/tests/conftest.py +50 -0
- dls_deploy_tools-0.8.0/tests/generate_samples.sh +77 -0
- dls_deploy_tools-0.8.0/tests/samples/01-initial/deploy-tools-output/deployment.yaml +100 -0
- dls_deploy_tools-0.8.0/tests/samples/01-initial/deploy-tools-output/modulefiles/updatable/.version +2 -0
- dls_deploy_tools-0.8.0/tests/samples/01-initial/deploy-tools-output/modulefiles/versions/.version +2 -0
- {dls_deploy_tools-0.7/tests/samples/deploy-tools-output/modules/example-module-apps → dls_deploy_tools-0.8.0/tests/samples/01-initial/deploy-tools-output/modules/apps}/0.1/entrypoints/cowsay-hello +2 -1
- {dls_deploy_tools-0.7/tests/samples/deploy-tools-output/modules/example-module-apps → dls_deploy_tools-0.8.0/tests/samples/01-initial/deploy-tools-output/modules/apps}/0.1/module.yaml +7 -13
- dls_deploy_tools-0.8.0/tests/samples/01-initial/deploy-tools-output/modules/apps/0.1/modulefile +15 -0
- {dls_deploy_tools-0.7/tests/samples/deploy-tools-output/modules/example-module-deps → dls_deploy_tools-0.8.0/tests/samples/01-initial/deploy-tools-output/modules/deps}/0.2/module.yaml +5 -5
- dls_deploy_tools-0.8.0/tests/samples/01-initial/deploy-tools-output/modules/deps/0.2/modulefile +16 -0
- dls_deploy_tools-0.8.0/tests/samples/01-initial/deploy-tools-output/modules/updatable/1.0/entrypoints/test-updatable-echo +7 -0
- dls_deploy_tools-0.8.0/tests/samples/01-initial/deploy-tools-output/modules/updatable/1.0/module.yaml +16 -0
- dls_deploy_tools-0.8.0/tests/samples/01-initial/deploy-tools-output/modules/updatable/1.0/modulefile +15 -0
- dls_deploy_tools-0.8.0/tests/samples/01-initial/deploy-tools-output/modules/versions/1.0/module.yaml +10 -0
- dls_deploy_tools-0.8.0/tests/samples/01-initial/deploy-tools-output/modules/versions/1.0/modulefile +13 -0
- dls_deploy_tools-0.8.0/tests/samples/01-initial/validate.txt +11 -0
- dls_deploy_tools-0.8.0/tests/samples/02-added/deploy-tools-output/deployment.yaml +126 -0
- dls_deploy_tools-0.8.0/tests/samples/02-added/deploy-tools-output/modulefiles/deps/.version +2 -0
- dls_deploy_tools-0.8.0/tests/samples/02-added/deploy-tools-output/modulefiles/updatable/.version +2 -0
- dls_deploy_tools-0.8.0/tests/samples/02-added/deploy-tools-output/modulefiles/versions/.version +2 -0
- dls_deploy_tools-0.7/tests/samples/deploy-tools-output/modules/example-module-apps/0.1/entrypoints/show-directory → dls_deploy_tools-0.8.0/tests/samples/02-added/deploy-tools-output/modules/apps/0.1/entrypoints/cowsay-hello +4 -3
- dls_deploy_tools-0.7/tests/samples/deploy-tools-output/modules/dls-pmac-control/0.2/entrypoints/test-echo-module-file → dls_deploy_tools-0.8.0/tests/samples/02-added/deploy-tools-output/modules/apps/0.1/entrypoints/test-echo-module-var +1 -1
- dls_deploy_tools-0.8.0/tests/samples/02-added/deploy-tools-output/modules/apps/0.1/entrypoints/test-shell-script +9 -0
- dls_deploy_tools-0.8.0/tests/samples/02-added/deploy-tools-output/modules/apps/0.1/module.yaml +41 -0
- dls_deploy_tools-0.8.0/tests/samples/02-added/deploy-tools-output/modules/apps/0.1/modulefile +15 -0
- dls_deploy_tools-0.8.0/tests/samples/02-added/deploy-tools-output/modules/deps/0.2/module.yaml +14 -0
- dls_deploy_tools-0.8.0/tests/samples/02-added/deploy-tools-output/modules/deps/0.2/modulefile +16 -0
- dls_deploy_tools-0.8.0/tests/samples/02-added/deploy-tools-output/modules/updatable/1.0/entrypoints/test-updatable-echo +7 -0
- dls_deploy_tools-0.8.0/tests/samples/02-added/deploy-tools-output/modules/updatable/1.0/module.yaml +16 -0
- dls_deploy_tools-0.8.0/tests/samples/02-added/deploy-tools-output/modules/updatable/1.0/modulefile +15 -0
- dls_deploy_tools-0.8.0/tests/samples/02-added/deploy-tools-output/modules/versions/1.0/module.yaml +10 -0
- dls_deploy_tools-0.8.0/tests/samples/02-added/deploy-tools-output/modules/versions/1.0/modulefile +13 -0
- dls_deploy_tools-0.8.0/tests/samples/02-added/deploy-tools-output/modules/versions/2.0/module.yaml +10 -0
- dls_deploy_tools-0.8.0/tests/samples/02-added/deploy-tools-output/modules/versions/2.0/modulefile +13 -0
- dls_deploy_tools-0.8.0/tests/samples/02-added/deploy-tools-output/modules/versions/2.1rc1/module.yaml +10 -0
- dls_deploy_tools-0.8.0/tests/samples/02-added/deploy-tools-output/modules/versions/2.1rc1/modulefile +13 -0
- dls_deploy_tools-0.8.0/tests/samples/02-added/validate.txt +6 -0
- dls_deploy_tools-0.8.0/tests/samples/03-updated/deploy-tools-output/deployment.yaml +126 -0
- dls_deploy_tools-0.8.0/tests/samples/03-updated/deploy-tools-output/modulefiles/deps/.version +2 -0
- dls_deploy_tools-0.8.0/tests/samples/03-updated/deploy-tools-output/modulefiles/updatable/.version +2 -0
- dls_deploy_tools-0.8.0/tests/samples/03-updated/deploy-tools-output/modulefiles/versions/.version +2 -0
- dls_deploy_tools-0.7/tests/samples/deploy-tools-output/modules/dls-pmac-control/0.1/entrypoints/dls-pmac-control → dls_deploy_tools-0.8.0/tests/samples/03-updated/deploy-tools-output/modules/apps/0.1/entrypoints/cowsay-hello +5 -4
- dls_deploy_tools-0.7/tests/samples/deploy-tools-output/modules/dls-pmac-control/0.1/entrypoints/test-echo-module-file → dls_deploy_tools-0.8.0/tests/samples/03-updated/deploy-tools-output/modules/apps/0.1/entrypoints/test-echo-module-var +1 -1
- dls_deploy_tools-0.8.0/tests/samples/03-updated/deploy-tools-output/modules/apps/0.1/entrypoints/test-shell-script +9 -0
- dls_deploy_tools-0.8.0/tests/samples/03-updated/deploy-tools-output/modules/apps/0.1/module.yaml +41 -0
- dls_deploy_tools-0.8.0/tests/samples/03-updated/deploy-tools-output/modules/apps/0.1/modulefile +15 -0
- dls_deploy_tools-0.8.0/tests/samples/03-updated/deploy-tools-output/modules/deps/0.2/module.yaml +14 -0
- dls_deploy_tools-0.8.0/tests/samples/03-updated/deploy-tools-output/modules/deps/0.2/modulefile +16 -0
- dls_deploy_tools-0.8.0/tests/samples/03-updated/deploy-tools-output/modules/updatable/1.0/entrypoints/test-updatable-echo +7 -0
- dls_deploy_tools-0.8.0/tests/samples/03-updated/deploy-tools-output/modules/updatable/1.0/module.yaml +16 -0
- dls_deploy_tools-0.8.0/tests/samples/03-updated/deploy-tools-output/modules/updatable/1.0/modulefile +15 -0
- dls_deploy_tools-0.8.0/tests/samples/03-updated/deploy-tools-output/modules/versions/1.0/module.yaml +10 -0
- dls_deploy_tools-0.8.0/tests/samples/03-updated/deploy-tools-output/modules/versions/1.0/modulefile +13 -0
- dls_deploy_tools-0.8.0/tests/samples/03-updated/deploy-tools-output/modules/versions/2.0/module.yaml +10 -0
- dls_deploy_tools-0.8.0/tests/samples/03-updated/deploy-tools-output/modules/versions/2.0/modulefile +13 -0
- dls_deploy_tools-0.8.0/tests/samples/03-updated/deploy-tools-output/modules/versions/2.1rc1/module.yaml +10 -0
- dls_deploy_tools-0.8.0/tests/samples/03-updated/deploy-tools-output/modules/versions/2.1rc1/modulefile +13 -0
- dls_deploy_tools-0.8.0/tests/samples/03-updated/validate.txt +4 -0
- dls_deploy_tools-0.8.0/tests/samples/04-deprecated/deploy-tools-output/deployment.yaml +126 -0
- dls_deploy_tools-0.8.0/tests/samples/04-deprecated/deploy-tools-output/modulefiles/deps/.version +2 -0
- dls_deploy_tools-0.8.0/tests/samples/04-deprecated/deploy-tools-output/modulefiles/updatable/.version +2 -0
- dls_deploy_tools-0.8.0/tests/samples/04-deprecated/deploy-tools-output/modulefiles/versions/.version +2 -0
- dls_deploy_tools-0.7/tests/samples/deploy-tools-output/modules/dls-pmac-control/0.2/entrypoints/dls-pmac-control → dls_deploy_tools-0.8.0/tests/samples/04-deprecated/deploy-tools-output/modules/apps/0.1/entrypoints/cowsay-hello +5 -4
- dls_deploy_tools-0.8.0/tests/samples/04-deprecated/deploy-tools-output/modules/apps/0.1/entrypoints/test-echo-module-var +7 -0
- dls_deploy_tools-0.8.0/tests/samples/04-deprecated/deploy-tools-output/modules/apps/0.1/entrypoints/test-shell-script +9 -0
- dls_deploy_tools-0.8.0/tests/samples/04-deprecated/deploy-tools-output/modules/apps/0.1/module.yaml +41 -0
- dls_deploy_tools-0.8.0/tests/samples/04-deprecated/deploy-tools-output/modules/apps/0.1/modulefile +15 -0
- dls_deploy_tools-0.8.0/tests/samples/04-deprecated/deploy-tools-output/modules/deps/0.2/module.yaml +14 -0
- dls_deploy_tools-0.8.0/tests/samples/04-deprecated/deploy-tools-output/modules/deps/0.2/modulefile +16 -0
- dls_deploy_tools-0.8.0/tests/samples/04-deprecated/deploy-tools-output/modules/updatable/1.0/entrypoints/test-updatable-echo +7 -0
- dls_deploy_tools-0.8.0/tests/samples/04-deprecated/deploy-tools-output/modules/updatable/1.0/module.yaml +16 -0
- dls_deploy_tools-0.8.0/tests/samples/04-deprecated/deploy-tools-output/modules/updatable/1.0/modulefile +15 -0
- dls_deploy_tools-0.8.0/tests/samples/04-deprecated/deploy-tools-output/modules/versions/1.0/module.yaml +10 -0
- dls_deploy_tools-0.8.0/tests/samples/04-deprecated/deploy-tools-output/modules/versions/1.0/modulefile +13 -0
- dls_deploy_tools-0.8.0/tests/samples/04-deprecated/deploy-tools-output/modules/versions/2.0/module.yaml +10 -0
- dls_deploy_tools-0.8.0/tests/samples/04-deprecated/deploy-tools-output/modules/versions/2.0/modulefile +13 -0
- dls_deploy_tools-0.8.0/tests/samples/04-deprecated/deploy-tools-output/modules/versions/2.1rc1/module.yaml +10 -0
- dls_deploy_tools-0.8.0/tests/samples/04-deprecated/deploy-tools-output/modules/versions/2.1rc1/modulefile +13 -0
- dls_deploy_tools-0.8.0/tests/samples/04-deprecated/validate.txt +5 -0
- dls_deploy_tools-0.8.0/tests/samples/05-restored/deploy-tools-output/deployment.yaml +126 -0
- dls_deploy_tools-0.8.0/tests/samples/05-restored/deploy-tools-output/modulefiles/apps/.version +2 -0
- dls_deploy_tools-0.8.0/tests/samples/05-restored/deploy-tools-output/modulefiles/deps/.version +2 -0
- dls_deploy_tools-0.8.0/tests/samples/05-restored/deploy-tools-output/modulefiles/updatable/.version +2 -0
- dls_deploy_tools-0.8.0/tests/samples/05-restored/deploy-tools-output/modulefiles/versions/.version +2 -0
- dls_deploy_tools-0.8.0/tests/samples/05-restored/deploy-tools-output/modules/apps/0.1/entrypoints/cowsay-hello +45 -0
- dls_deploy_tools-0.8.0/tests/samples/05-restored/deploy-tools-output/modules/apps/0.1/entrypoints/test-echo-module-var +7 -0
- dls_deploy_tools-0.8.0/tests/samples/05-restored/deploy-tools-output/modules/apps/0.1/entrypoints/test-shell-script +9 -0
- dls_deploy_tools-0.8.0/tests/samples/05-restored/deploy-tools-output/modules/apps/0.1/module.yaml +41 -0
- dls_deploy_tools-0.8.0/tests/samples/05-restored/deploy-tools-output/modules/apps/0.1/modulefile +15 -0
- dls_deploy_tools-0.8.0/tests/samples/05-restored/deploy-tools-output/modules/deps/0.2/module.yaml +14 -0
- dls_deploy_tools-0.8.0/tests/samples/05-restored/deploy-tools-output/modules/deps/0.2/modulefile +16 -0
- dls_deploy_tools-0.8.0/tests/samples/05-restored/deploy-tools-output/modules/updatable/1.0/entrypoints/test-updatable-echo +7 -0
- dls_deploy_tools-0.8.0/tests/samples/05-restored/deploy-tools-output/modules/updatable/1.0/module.yaml +16 -0
- dls_deploy_tools-0.8.0/tests/samples/05-restored/deploy-tools-output/modules/updatable/1.0/modulefile +15 -0
- dls_deploy_tools-0.8.0/tests/samples/05-restored/deploy-tools-output/modules/versions/1.0/module.yaml +10 -0
- dls_deploy_tools-0.8.0/tests/samples/05-restored/deploy-tools-output/modules/versions/1.0/modulefile +13 -0
- dls_deploy_tools-0.8.0/tests/samples/05-restored/deploy-tools-output/modules/versions/2.0/module.yaml +10 -0
- dls_deploy_tools-0.8.0/tests/samples/05-restored/deploy-tools-output/modules/versions/2.0/modulefile +13 -0
- dls_deploy_tools-0.8.0/tests/samples/05-restored/deploy-tools-output/modules/versions/2.1rc1/module.yaml +10 -0
- dls_deploy_tools-0.8.0/tests/samples/05-restored/deploy-tools-output/modules/versions/2.1rc1/modulefile +13 -0
- dls_deploy_tools-0.8.0/tests/samples/05-restored/validate.txt +4 -0
- dls_deploy_tools-0.8.0/tests/samples/06-removed/deploy-tools-output/deployment.yaml +113 -0
- dls_deploy_tools-0.8.0/tests/samples/06-removed/deploy-tools-output/modulefiles/apps/.version +2 -0
- dls_deploy_tools-0.8.0/tests/samples/06-removed/deploy-tools-output/modulefiles/deps/.version +2 -0
- dls_deploy_tools-0.8.0/tests/samples/06-removed/deploy-tools-output/modulefiles/updatable/.version +2 -0
- dls_deploy_tools-0.8.0/tests/samples/06-removed/deploy-tools-output/modulefiles/versions/.version +2 -0
- dls_deploy_tools-0.8.0/tests/samples/06-removed/deploy-tools-output/modules/apps/0.1/entrypoints/cowsay-hello +45 -0
- dls_deploy_tools-0.8.0/tests/samples/06-removed/deploy-tools-output/modules/apps/0.1/entrypoints/test-echo-module-var +7 -0
- dls_deploy_tools-0.8.0/tests/samples/06-removed/deploy-tools-output/modules/apps/0.1/entrypoints/test-shell-script +9 -0
- dls_deploy_tools-0.8.0/tests/samples/06-removed/deploy-tools-output/modules/apps/0.1/module.yaml +41 -0
- dls_deploy_tools-0.8.0/tests/samples/06-removed/deploy-tools-output/modules/apps/0.1/modulefile +15 -0
- dls_deploy_tools-0.8.0/tests/samples/06-removed/deploy-tools-output/modules/deps/0.2/module.yaml +14 -0
- dls_deploy_tools-0.8.0/tests/samples/06-removed/deploy-tools-output/modules/deps/0.2/modulefile +16 -0
- dls_deploy_tools-0.8.0/tests/samples/06-removed/deploy-tools-output/modules/updatable/1.0/entrypoints/test-updatable-echo +7 -0
- dls_deploy_tools-0.8.0/tests/samples/06-removed/deploy-tools-output/modules/updatable/1.0/module.yaml +16 -0
- dls_deploy_tools-0.8.0/tests/samples/06-removed/deploy-tools-output/modules/updatable/1.0/modulefile +15 -0
- dls_deploy_tools-0.8.0/tests/samples/06-removed/deploy-tools-output/modules/versions/2.0/module.yaml +10 -0
- dls_deploy_tools-0.8.0/tests/samples/06-removed/deploy-tools-output/modules/versions/2.0/modulefile +13 -0
- dls_deploy_tools-0.8.0/tests/samples/06-removed/deploy-tools-output/modules/versions/2.1rc1/module.yaml +10 -0
- dls_deploy_tools-0.8.0/tests/samples/06-removed/deploy-tools-output/modules/versions/2.1rc1/modulefile +13 -0
- dls_deploy_tools-0.8.0/tests/samples/06-removed/validate.txt +4 -0
- dls_deploy_tools-0.8.0/tests/test_apptainer_pull.py +14 -0
- dls_deploy_tools-0.8.0/tests/test_binary.py +103 -0
- dls_deploy_tools-0.8.0/tests/test_cli_common.py +23 -0
- dls_deploy_tools-0.8.0/tests/test_compare.py +196 -0
- dls_deploy_tools-0.8.0/tests/test_default_versions.py +127 -0
- dls_deploy_tools-0.8.0/tests/test_external_tools.py +19 -0
- dls_deploy_tools-0.8.0/tests/test_golden_master.py +160 -0
- dls_deploy_tools-0.8.0/tests/test_load.py +41 -0
- dls_deploy_tools-0.8.0/tests/test_module_options.py +249 -0
- dls_deploy_tools-0.8.0/tests/test_modulefile.py +29 -0
- dls_deploy_tools-0.8.0/tests/test_schema_gen.py +18 -0
- dls_deploy_tools-0.8.0/tests/test_sync.py +103 -0
- dls_deploy_tools-0.8.0/tests/test_validate.py +145 -0
- dls_deploy_tools-0.8.0/uv.lock +1698 -0
- dls_deploy_tools-0.7/README.md +0 -116
- dls_deploy_tools-0.7/docs/explanations.md +0 -10
- dls_deploy_tools-0.7/docs/how-to.md +0 -10
- dls_deploy_tools-0.7/src/deploy_tools/models/parent.py +0 -16
- dls_deploy_tools-0.7/src/dls_deploy_tools.egg-info/SOURCES.txt +0 -141
- dls_deploy_tools-0.7/tests/conftest.py +0 -30
- dls_deploy_tools-0.7/tests/generate_samples.sh +0 -23
- dls_deploy_tools-0.7/tests/samples/deploy-tools-output/deployment.yaml +0 -299
- dls_deploy_tools-0.7/tests/samples/deploy-tools-output/modulefiles/ec/.version +0 -2
- dls_deploy_tools-0.7/tests/samples/deploy-tools-output/modules/argocd/v2.14.10/module.yaml +0 -15
- dls_deploy_tools-0.7/tests/samples/deploy-tools-output/modules/argocd/v2.14.10/modulefile +0 -13
- dls_deploy_tools-0.7/tests/samples/deploy-tools-output/modules/dls-pmac-control/0.1/module.yaml +0 -33
- dls_deploy_tools-0.7/tests/samples/deploy-tools-output/modules/dls-pmac-control/0.1/modulefile +0 -15
- dls_deploy_tools-0.7/tests/samples/deploy-tools-output/modules/dls-pmac-control/0.2/module.yaml +0 -33
- dls_deploy_tools-0.7/tests/samples/deploy-tools-output/modules/dls-pmac-control/0.2/modulefile +0 -15
- dls_deploy_tools-0.7/tests/samples/deploy-tools-output/modules/ec/i13-1/module.yaml +0 -18
- dls_deploy_tools-0.7/tests/samples/deploy-tools-output/modules/ec/i13-1/modulefile +0 -19
- dls_deploy_tools-0.7/tests/samples/deploy-tools-output/modules/ec/p47/module.yaml +0 -18
- dls_deploy_tools-0.7/tests/samples/deploy-tools-output/modules/ec/p47/modulefile +0 -19
- dls_deploy_tools-0.7/tests/samples/deploy-tools-output/modules/edge-containers-cli/0.1/entrypoints/ec +0 -44
- dls_deploy_tools-0.7/tests/samples/deploy-tools-output/modules/edge-containers-cli/0.1/entrypoints/ec-bash +0 -44
- dls_deploy_tools-0.7/tests/samples/deploy-tools-output/modules/edge-containers-cli/0.1/entrypoints/ec-login +0 -8
- dls_deploy_tools-0.7/tests/samples/deploy-tools-output/modules/edge-containers-cli/0.1/module.yaml +0 -56
- dls_deploy_tools-0.7/tests/samples/deploy-tools-output/modules/edge-containers-cli/0.1/modulefile +0 -18
- dls_deploy_tools-0.7/tests/samples/deploy-tools-output/modules/example-module-apps/0.1/modulefile +0 -15
- dls_deploy_tools-0.7/tests/samples/deploy-tools-output/modules/example-module-deps/0.2/modulefile +0 -16
- dls_deploy_tools-0.7/tests/samples/deploy-tools-output/modules/phoebus/0.1/entrypoints/phoebus +0 -44
- dls_deploy_tools-0.7/tests/samples/deploy-tools-output/modules/phoebus/0.1/module.yaml +0 -27
- dls_deploy_tools-0.7/tests/samples/deploy-tools-output/modules/phoebus/0.1/modulefile +0 -13
- dls_deploy_tools-0.7/tests/test_cli.py +0 -60
- dls_deploy_tools-0.7/uv.lock +0 -1491
- {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/.github/ISSUE_TEMPLATE/issue.md +0 -0
- {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md +0 -0
- {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/.github/pages/index.html +0 -0
- {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/.github/pages/make_switcher.py +0 -0
- {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/.github/workflows/_container.yml +0 -0
- {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/.github/workflows/_dist.yml +0 -0
- {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/.github/workflows/_docs.yml +0 -0
- {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/.github/workflows/_pypi.yml +0 -0
- {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/.github/workflows/_release.yml +0 -0
- {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/.github/workflows/_test.yml +0 -0
- {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/.github/workflows/_tox.yml +0 -0
- {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/.github/workflows/periodic.yml +0 -0
- {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/.gitignore +0 -0
- {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/.gitleaks.toml +0 -0
- {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/.python-version +0 -0
- {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/.vscode/extensions.json +0 -0
- {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/.vscode/launch.json +14 -14
- {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/.vscode/settings.json +0 -0
- {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/LICENSE +0 -0
- {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/catalog-info.yaml +0 -0
- {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/docs/_api.rst +0 -0
- {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/docs/_templates/custom-module-template.rst +0 -0
- {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/docs/explanations/decisions/0001-record-architecture-decisions.md +0 -0
- {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/docs/explanations/decisions/0002-switched-to-python-copier-template.md +0 -0
- {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/docs/explanations/decisions/COPYME +0 -0
- {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/docs/explanations/decisions.md +0 -0
- {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/docs/genindex.md +0 -0
- {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/docs/how-to/contribute.md +0 -0
- {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/docs/images/dls-logo.svg +0 -0
- {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/docs/index.md +0 -0
- {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/docs/tutorials/installation.md +0 -0
- {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/renovate.json +0 -0
- {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/setup.cfg +0 -0
- {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/deploy_tools/__init__.py +0 -0
- {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/deploy_tools/demo_configuration/argocd/v2.14.10.yaml +0 -0
- {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/deploy_tools/demo_configuration/dls-pmac-control/0.1.yaml +0 -0
- {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/deploy_tools/demo_configuration/dls-pmac-control/0.2.yaml +0 -0
- {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/deploy_tools/demo_configuration/ec/i13-1.yaml +0 -0
- {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/deploy_tools/demo_configuration/ec/p47.yaml +0 -0
- {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/deploy_tools/demo_configuration/edge-containers-cli/0.1.yaml +0 -0
- {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/deploy_tools/demo_configuration/example-module-deps/0.2.yaml +0 -0
- {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/deploy_tools/demo_configuration/phoebus/0.1.yaml +0 -0
- {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/deploy_tools/demo_configuration/settings.yaml +0 -0
- {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/deploy_tools/models/__init__.py +0 -0
- {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/deploy_tools/models/app.py +0 -0
- {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/deploy_tools/models/changes.py +0 -0
- {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/deploy_tools/models/deployment.py +0 -0
- {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/deploy_tools/models/schemas/deployment-settings.json +0 -0
- {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/deploy_tools/templates/gitignore +0 -0
- {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/deploy_tools/templates/modulefile +0 -0
- {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/deploy_tools/templates/modulefile_version +0 -0
- {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/deploy_tools/templates/shell_entrypoint +0 -0
- {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/dls_deploy_tools.egg-info/dependency_links.txt +0 -0
- {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/dls_deploy_tools.egg-info/entry_points.txt +0 -0
- {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/dls_deploy_tools.egg-info/requires.txt +0 -0
- {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/dls_deploy_tools.egg-info/top_level.txt +0 -0
- {dls_deploy_tools-0.7/tests/samples/deploy-tools-output/modulefiles/dls-pmac-control → dls_deploy_tools-0.8.0/tests/samples/01-initial/deploy-tools-output/modulefiles/apps}/.version +0 -0
- {dls_deploy_tools-0.7/tests/samples/deploy-tools-output/modulefiles/example-module-deps → dls_deploy_tools-0.8.0/tests/samples/01-initial/deploy-tools-output/modulefiles/deps}/.version +0 -0
- /dls_deploy_tools-0.7/tests/samples/deploy-tools-output/modules/example-module-apps/0.1/entrypoints/test-echo-module-folder → /dls_deploy_tools-0.8.0/tests/samples/01-initial/deploy-tools-output/modules/apps/0.1/entrypoints/test-echo-module-var +0 -0
- {dls_deploy_tools-0.7/tests/samples/deploy-tools-output/modules/example-module-apps → dls_deploy_tools-0.8.0/tests/samples/01-initial/deploy-tools-output/modules/apps}/0.1/entrypoints/test-shell-script +0 -0
- {dls_deploy_tools-0.7/tests/samples/deploy-tools-output/modulefiles/edge-containers-cli → dls_deploy_tools-0.8.0/tests/samples/02-added/deploy-tools-output/modulefiles/apps}/.version +0 -0
- {dls_deploy_tools-0.7/tests/samples/deploy-tools-output/modulefiles/example-module-apps → dls_deploy_tools-0.8.0/tests/samples/03-updated/deploy-tools-output/modulefiles/apps}/.version +0 -0
- {dls_deploy_tools-0.7/tests/samples/deploy-tools-output/modulefiles/phoebus → dls_deploy_tools-0.8.0/tests/samples/04-deprecated/deploy-tools-output/modulefiles/apps}/.version +0 -0
|
@@ -39,7 +39,10 @@
|
|
|
39
39
|
"redhat.vscode-yaml",
|
|
40
40
|
"ryanluker.vscode-coverage-gutters",
|
|
41
41
|
"charliermarsh.ruff",
|
|
42
|
-
"ms-azuretools.vscode-docker"
|
|
42
|
+
"ms-azuretools.vscode-docker",
|
|
43
|
+
// Embedded HTML preview for built Sphinx docs (right-click
|
|
44
|
+
// build/html/index.html -> "Show Preview")
|
|
45
|
+
"ms-vscode.live-server"
|
|
43
46
|
]
|
|
44
47
|
}
|
|
45
48
|
},
|
|
@@ -24,4 +24,4 @@ It is recommended that developers use a [vscode devcontainer](https://code.visua
|
|
|
24
24
|
|
|
25
25
|
This project was created using the [Diamond Light Source Copier Template](https://github.com/DiamondLightSource/python-copier-template) for Python projects.
|
|
26
26
|
|
|
27
|
-
For more information on common tasks like setting up a developer environment, running the tests, and setting a pre-commit hook, see the template's [How-to guides](https://diamondlightsource.github.io/python-copier-template/5.0
|
|
27
|
+
For more information on common tasks like setting up a developer environment, running the tests, and setting a pre-commit hook, see the template's [How-to guides](https://diamondlightsource.github.io/python-copier-template/5.1.0/how-to.html).
|
|
@@ -18,8 +18,8 @@ jobs:
|
|
|
18
18
|
test:
|
|
19
19
|
strategy:
|
|
20
20
|
matrix:
|
|
21
|
-
runs-on: [
|
|
22
|
-
python-version: [
|
|
21
|
+
runs-on: ["ubuntu-latest"] # can add windows-latest, macos-latest
|
|
22
|
+
python-version: ["3.12", "3.13", "3.14"]
|
|
23
23
|
fail-fast: false
|
|
24
24
|
uses: ./.github/workflows/_test.yml
|
|
25
25
|
with:
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# Documentation line-length enforcement.
|
|
2
|
+
#
|
|
3
|
+
# An 88-character limit for documentation, matching [tool.ruff] line-length in
|
|
4
|
+
# pyproject.toml. Only the line-length rule (MD013) is enabled.
|
|
5
|
+
#
|
|
6
|
+
# Files generated by the Copier template are excluded via the
|
|
7
|
+
# markdownlint-cli2 hook in .pre-commit-config.yaml rather than reformatted.
|
|
8
|
+
default: false
|
|
9
|
+
MD013:
|
|
10
|
+
line_length: 88
|
|
11
|
+
tables: false # Markdown tables cannot be sensibly wrapped
|
|
12
|
+
code_blocks: false # fenced code and tree diagrams cannot be wrapped
|
|
@@ -31,6 +31,29 @@ repos:
|
|
|
31
31
|
entry: uv sync
|
|
32
32
|
files: ^(uv\.lock|pyproject\.toml)$
|
|
33
33
|
|
|
34
|
+
- id: generate-schema
|
|
35
|
+
name: regenerate JSON schemas from models
|
|
36
|
+
pass_filenames: false
|
|
37
|
+
language: system
|
|
38
|
+
entry: deploy-tools schema src/deploy_tools/models/schemas
|
|
39
|
+
files: ^src/deploy_tools/models/.*\.py$
|
|
40
|
+
|
|
41
|
+
- repo: https://github.com/DavidAnson/markdownlint-cli2
|
|
42
|
+
rev: v0.23.1
|
|
43
|
+
hooks:
|
|
44
|
+
- id: markdownlint-cli2
|
|
45
|
+
name: enforce 88-char line length in docs
|
|
46
|
+
files: ^docs/.*\.md$
|
|
47
|
+
# Files generated by the Copier template are excluded.
|
|
48
|
+
exclude: |
|
|
49
|
+
(?x)^docs/(
|
|
50
|
+
index|genindex|how-to|tutorials|explanations|reference|
|
|
51
|
+
how-to/contribute|how-to/run-container|tutorials/installation|
|
|
52
|
+
explanations/decisions|
|
|
53
|
+
explanations/decisions/0001-record-architecture-decisions|
|
|
54
|
+
explanations/decisions/0002-switched-to-python-copier-template
|
|
55
|
+
)\.md$
|
|
56
|
+
|
|
34
57
|
- repo: https://github.com/gitleaks/gitleaks
|
|
35
58
|
rev: v8.28.0
|
|
36
59
|
hooks:
|
|
@@ -4,18 +4,15 @@
|
|
|
4
4
|
"version": "2.0.0",
|
|
5
5
|
"tasks": [
|
|
6
6
|
{
|
|
7
|
+
"label": "Clean deployment",
|
|
7
8
|
"type": "shell",
|
|
8
|
-
"
|
|
9
|
-
"
|
|
10
|
-
"options": {
|
|
11
|
-
"cwd": "${workspaceRoot}"
|
|
12
|
-
},
|
|
13
|
-
"problemMatcher": [],
|
|
9
|
+
"command": "rm -rf ${workspaceFolder}/demo-output/ && mkdir ${workspaceFolder}/demo-output/",
|
|
10
|
+
"problemMatcher": []
|
|
14
11
|
},
|
|
15
12
|
{
|
|
16
|
-
"label": "
|
|
13
|
+
"label": "Validate deployment",
|
|
17
14
|
"type": "shell",
|
|
18
|
-
"command": "deploy-tools
|
|
15
|
+
"command": "deploy-tools validate ${input:allow-all} ${input:from-scratch} ${input:test-build} ${input:deploy-folder} ${input:config-folder}",
|
|
19
16
|
"problemMatcher": []
|
|
20
17
|
},
|
|
21
18
|
{
|
|
@@ -25,27 +22,30 @@
|
|
|
25
22
|
"problemMatcher": []
|
|
26
23
|
},
|
|
27
24
|
{
|
|
28
|
-
"label": "
|
|
25
|
+
"label": "Compare deployment to snapshot",
|
|
29
26
|
"type": "shell",
|
|
30
|
-
"command": "
|
|
27
|
+
"command": "deploy-tools compare ${input:compare-mode} ${input:deploy-folder}",
|
|
31
28
|
"problemMatcher": []
|
|
32
29
|
},
|
|
33
30
|
{
|
|
34
|
-
"label": "
|
|
31
|
+
"label": "Generate schema",
|
|
35
32
|
"type": "shell",
|
|
36
|
-
"command": "deploy-tools
|
|
33
|
+
"command": "deploy-tools schema ${input:schema-folder}",
|
|
37
34
|
"problemMatcher": []
|
|
38
35
|
},
|
|
39
36
|
{
|
|
40
|
-
"label": "Compare deployment to snapshot",
|
|
41
37
|
"type": "shell",
|
|
42
|
-
"
|
|
43
|
-
"
|
|
38
|
+
"label": "Recreate tests sample output from golden-master configuration",
|
|
39
|
+
"command": "tests/generate_samples.sh",
|
|
40
|
+
"options": {
|
|
41
|
+
"cwd": "${workspaceRoot}"
|
|
42
|
+
},
|
|
43
|
+
"problemMatcher": [],
|
|
44
44
|
},
|
|
45
45
|
{
|
|
46
46
|
"type": "shell",
|
|
47
|
-
"label": "
|
|
48
|
-
"command": "
|
|
47
|
+
"label": "Tests, lint and docs",
|
|
48
|
+
"command": "tox -p",
|
|
49
49
|
"options": {
|
|
50
50
|
"cwd": "${workspaceRoot}"
|
|
51
51
|
},
|
|
@@ -4,7 +4,7 @@ FROM ghcr.io/diamondlightsource/ubuntu-devcontainer:noble AS developer
|
|
|
4
4
|
|
|
5
5
|
# Add any system dependencies for the developer/build environment here
|
|
6
6
|
RUN apt-get update -y && apt-get install -y --no-install-recommends \
|
|
7
|
-
graphviz environment-modules wget \
|
|
7
|
+
graphviz environment-modules wget file \
|
|
8
8
|
&& cd /tmp \
|
|
9
9
|
&& wget https://github.com/apptainer/apptainer/releases/download/v1.3.3/apptainer_1.3.3_amd64.deb \
|
|
10
10
|
&& apt install -y ./apptainer_1.3.3_amd64.deb \
|
|
@@ -31,7 +31,7 @@ FROM ubuntu:noble AS runtime
|
|
|
31
31
|
|
|
32
32
|
# Add apt-get system dependecies for runtime here if needed
|
|
33
33
|
RUN apt-get update -y && apt-get install -y --no-install-recommends \
|
|
34
|
-
graphviz environment-modules wget git ca-certificates \
|
|
34
|
+
graphviz environment-modules wget git ca-certificates file \
|
|
35
35
|
&& update-ca-certificates \
|
|
36
36
|
&& cd /tmp \
|
|
37
37
|
&& wget https://github.com/apptainer/apptainer/releases/download/v1.3.3/apptainer_1.3.3_amd64.deb \
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dls-deploy-tools
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.8.0
|
|
4
4
|
Summary: A set of tools used for deploying applications to a shared filesystem.
|
|
5
5
|
Author-email: Martin Gaughran <martin.gaughran@diamond.ac.uk>
|
|
6
6
|
License: Apache License
|
|
@@ -210,6 +210,7 @@ Classifier: Development Status :: 3 - Alpha
|
|
|
210
210
|
Classifier: License :: OSI Approved :: Apache Software License
|
|
211
211
|
Classifier: Programming Language :: Python :: 3.12
|
|
212
212
|
Classifier: Programming Language :: Python :: 3.13
|
|
213
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
213
214
|
Requires-Python: >=3.12
|
|
214
215
|
Description-Content-Type: text/markdown
|
|
215
216
|
License-File: LICENSE
|
|
@@ -235,8 +236,9 @@ access to a shared filesystem. We use the
|
|
|
235
236
|
[Environment Modules](https://modules.readthedocs.io/en/latest/) package to make these
|
|
236
237
|
applications available to the end user.
|
|
237
238
|
|
|
238
|
-
|
|
239
|
+
What | Where
|
|
239
240
|
:---: | :---:
|
|
241
|
+
Source | <https://github.com/DiamondLightSource/deploy-tools>
|
|
240
242
|
PyPI | `pip install dls-deploy-tools`
|
|
241
243
|
Docker | `docker run ghcr.io/diamondlightsource/deploy-tools:latest`
|
|
242
244
|
Documentation | <https://diamondlightsource.github.io/deploy-tools>
|
|
@@ -246,93 +248,36 @@ The demo_configuration folder in this repository can be passed as the config_fol
|
|
|
246
248
|
the deploy-tools commands. The deployment_root needs to be a writeable location for all
|
|
247
249
|
files to get deployed under.
|
|
248
250
|
|
|
251
|
+
These commands act on a shared deployment area, so we recommend running them from a CI
|
|
252
|
+
pipeline gated by change review rather than by hand. Running them manually against the demo
|
|
253
|
+
configuration, as below, is the quickest way to see what each does — the
|
|
254
|
+
[documentation](https://diamondlightsource.github.io/deploy-tools) has a hands-on tutorial
|
|
255
|
+
and a guide to driving them from CI.
|
|
256
|
+
|
|
257
|
+
The examples below use the `deploy-tools` console script; `python -m deploy_tools` is
|
|
258
|
+
equivalent if you prefer to invoke the module directly.
|
|
259
|
+
|
|
249
260
|
```
|
|
250
261
|
deployment_root = /path/to/deployment/root
|
|
251
262
|
config_folder = /path/to/config/folder
|
|
252
|
-
schema_folder = /path/to/schema/folder
|
|
253
|
-
|
|
254
|
-
# Generate the schema for configuration yaml files
|
|
255
|
-
python -m deploy_tools schema $schema_folder
|
|
256
263
|
|
|
257
264
|
# Validate the deployment configuration files, also ensuring that the required updates
|
|
258
265
|
# are compatible with the previous deployments.
|
|
259
|
-
|
|
266
|
+
deploy-tools validate $deployment_root $config_folder
|
|
260
267
|
|
|
261
268
|
# Synchronise the deployment area with the configuration files. This will first run
|
|
262
269
|
# validation as part of determining the required changes
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
```
|
|
266
|
-
|
|
267
|
-
## Deployment Steps
|
|
268
|
-
|
|
269
|
-
There are several key steps that make up the deployment process. Note that these are a
|
|
270
|
-
bit different to the CLI commands; see `deploy-tools --help` for more information.
|
|
271
|
-
|
|
272
|
-
|**Step**|**Description** |
|
|
273
|
-
|--------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
|
274
|
-
|Compare |Compare the snapshot taken of the previous deployment with the modulefiles and built modules that already exist. This ensures that the Deployment Area is in a healthy state |
|
|
275
|
-
|Validate|Process the updated configuration. By comparing the new configuration files with a snapshot from the previous deployment, we determine the set of actions that need to be taken |
|
|
276
|
-
|Build |Generate entrypoint scripts, configuration files and environment variables for a given Module. These are output to the Build Area |
|
|
277
|
-
|Deploy |Move all built Modules from the Build Area into the Modules Area. A link to the built modulefile is moved to either the Modulefiles Folder or Deprecated Folder, depending on its deprecation status. Update default versions for the modulefiles|
|
|
278
|
-
|
|
279
|
-
## JSON Schema
|
|
280
|
-
|
|
281
|
-
A set of JSON schema files are provided under `src/deploy_tools/models/schemas`. These are generated from the Pydantic models in the schemas parent directory.
|
|
270
|
+
deploy-tools sync $deployment_root $config_folder
|
|
282
271
|
|
|
283
|
-
|
|
272
|
+
# Compare the current deployment snapshot against what is actually deployed in the
|
|
273
|
+
# deployment area. Run this before a deploy to confirm a healthy state.
|
|
274
|
+
deploy-tools compare $deployment_root
|
|
284
275
|
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
As the demo_configuration is used during development, we set it to use the locally generated schemas. Note that the 'Generate Schema' VSCode task will update the schemas according to any update of the code, but you need to trigger this manually and check the contents in.
|
|
288
|
-
|
|
289
|
-
For any production configuration, you should set it to use schema files from GitHub.
|
|
290
|
-
|
|
291
|
-
## CLI Commands, VSCode Tasks and Debug Configuration
|
|
292
|
-
|
|
293
|
-
The following CLI commands are used in our CI/CD process to update the Deployment Area
|
|
294
|
-
using new configuration.
|
|
295
|
-
|
|
296
|
-
In order to help with development and testing, these commands (plus useful defaults) are
|
|
297
|
-
available as Tasks and Debug configurations for VSCode. These tasks (plus their default
|
|
298
|
-
inputs) should create a separate `demo-output` folder at the top-level of the workspace
|
|
299
|
-
folder.
|
|
300
|
-
|
|
301
|
-
You will need to use the `--from-scratch` argument if starting from a clean Deployment
|
|
302
|
-
Area, as there is no snapshot from a prior Deploy step.
|
|
303
|
-
|
|
304
|
-
It is recommended that you use `--help` to explore the commands, arguments and options
|
|
305
|
-
in greater detail.
|
|
306
|
-
|
|
307
|
-
|**Name** |**CLI command** |**Description** |
|
|
308
|
-
|------------------------------|--------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
|
309
|
-
|Generate Schema |`deploy-tools schema` |Generate the yaml schema (in .json format) for the top-level configuration files |
|
|
310
|
-
|Clean deployment |`rm -rf <Deployment Root>`|Wipe the deployment area local to your own checkout of deploy-tools, enabling you to test a deployment from scratch |
|
|
311
|
-
|Sync Modules |`deploy-tools sync` |Synchronise the Deployment configuration with the Deployment Area |
|
|
312
|
-
|Validate deployment |`deploy-tools validate` |Compare the new configuration with that previously used when deploying modules, and test the build process if requested |
|
|
313
|
-
|Compare deployment to snapshot|`deploy-tools compare` |Compare the configuration stored from the last `deploy-tools sync` run, with the state of any deployed Modules. This should always be run by CI/CD before attempting to Deploy, and any differences will be reported|
|
|
314
|
-
|
|
315
|
-
## Glossary
|
|
316
|
-
|
|
317
|
-
See the Deployment Steps above for an overview of the primary stages of a deployment.
|
|
276
|
+
```
|
|
318
277
|
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|Modulefile |Used by the Environment Modules package to specify all details of an Environment Module. This can include executables to add to the path, environment variables to set, etc. |
|
|
323
|
-
|Deployment |The sum total of all Releases (deprecated or not) that are to be maintained in the Deployment Area |
|
|
324
|
-
|Module |A set of files that can be used to provide applications on your path, provide configuration, and set environment variables. We do this using the Environment Modules system by providing a Modulefile with the relevant configuration |
|
|
325
|
-
|Release (noun) |A Module, including version, alongside its lifecycle (i.e. deprecation) status |
|
|
326
|
-
|Application |Each Module can be configured with multiple Applications, each one providing one or more executables. As of writing, there are 2 types of Application: `Apptainer` and `Shell` (Bash script) |
|
|
327
|
-
|Deployment Area |The top-level location where all Modules are to be deployed. This is typically a shared filesystem location for general use by multiple people. Note that there are several subdirectories which are used by `deploy-tools` for different purposes |
|
|
328
|
-
|(Area) Root |Refers to the filesystem path at the root of the given Area. |
|
|
329
|
-
|Deployment Step |Refers to one of the primary steps that make up the Deployment process. See the section 'Deployment Steps' above for a breakdown |
|
|
330
|
-
|Build Area |The filesystem location used for building modules. This should ideally be on the same filesystem as the Deployment area to ensure that later move operations are atomic, so by default it is the `build` subdirectory of the Deployment Root. We use a different location when testing builds |
|
|
331
|
-
|Modules Area |Refers to the `modules` folder under the Deployment Root. The final location for files built for a particular Module configuration |
|
|
332
|
-
|Modulefiles Folder |Refers to the `modulefiles` folder under the Deployment Root. When this path is added to the MODULEPATH environment variable, all modulefiles can then be accessed by the End User using the standard Environment Modules interface (`module avail`, etc.) |
|
|
333
|
-
|Deprecate |Moving a modulefile to the separate Deprecated Folder, to indicate that its use should be discouraged |
|
|
334
|
-
|Deprecated Folder |The folder used to contain Modulefiles for Modules that have been deprecated. By adding the modulefiles subdirectory to your MODULEPATH environment variable, you then have the ability to use any deprecated Module as normal. |
|
|
335
|
-
|End User |Refers to anybody who is intending to make use of a deployed Module. This can include the people modifying configuration themselves |
|
|
278
|
+
Generating the JSON schema files with `deploy-tools schema <folder>` is a separate,
|
|
279
|
+
occasional task: it produces the schemas that editors use to validate configuration files,
|
|
280
|
+
and is not part of a deployment. See the schema reference in the documentation.
|
|
336
281
|
|
|
337
282
|
<!-- README only content. Anything below this line won't be included in index.md -->
|
|
338
283
|
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
[](https://github.com/DiamondLightSource/deploy-tools/actions/workflows/ci.yml)
|
|
2
|
+
[](https://codecov.io/gh/DiamondLightSource/deploy-tools)
|
|
3
|
+
[](https://pypi.org/project/dls-deploy-tools)
|
|
4
|
+
[](https://www.apache.org/licenses/LICENSE-2.0)
|
|
5
|
+
|
|
6
|
+
# deploy_tools
|
|
7
|
+
|
|
8
|
+
A set of tools used for deploying applications to a shared filesystem.
|
|
9
|
+
|
|
10
|
+
This is used for deploying containerised desktop applications to many users who have
|
|
11
|
+
access to a shared filesystem. We use the
|
|
12
|
+
[Environment Modules](https://modules.readthedocs.io/en/latest/) package to make these
|
|
13
|
+
applications available to the end user.
|
|
14
|
+
|
|
15
|
+
What | Where
|
|
16
|
+
:---: | :---:
|
|
17
|
+
Source | <https://github.com/DiamondLightSource/deploy-tools>
|
|
18
|
+
PyPI | `pip install dls-deploy-tools`
|
|
19
|
+
Docker | `docker run ghcr.io/diamondlightsource/deploy-tools:latest`
|
|
20
|
+
Documentation | <https://diamondlightsource.github.io/deploy-tools>
|
|
21
|
+
Releases | <https://github.com/DiamondLightSource/deploy-tools/releases>
|
|
22
|
+
|
|
23
|
+
The demo_configuration folder in this repository can be passed as the config_folder to
|
|
24
|
+
the deploy-tools commands. The deployment_root needs to be a writeable location for all
|
|
25
|
+
files to get deployed under.
|
|
26
|
+
|
|
27
|
+
These commands act on a shared deployment area, so we recommend running them from a CI
|
|
28
|
+
pipeline gated by change review rather than by hand. Running them manually against the demo
|
|
29
|
+
configuration, as below, is the quickest way to see what each does — the
|
|
30
|
+
[documentation](https://diamondlightsource.github.io/deploy-tools) has a hands-on tutorial
|
|
31
|
+
and a guide to driving them from CI.
|
|
32
|
+
|
|
33
|
+
The examples below use the `deploy-tools` console script; `python -m deploy_tools` is
|
|
34
|
+
equivalent if you prefer to invoke the module directly.
|
|
35
|
+
|
|
36
|
+
```
|
|
37
|
+
deployment_root = /path/to/deployment/root
|
|
38
|
+
config_folder = /path/to/config/folder
|
|
39
|
+
|
|
40
|
+
# Validate the deployment configuration files, also ensuring that the required updates
|
|
41
|
+
# are compatible with the previous deployments.
|
|
42
|
+
deploy-tools validate $deployment_root $config_folder
|
|
43
|
+
|
|
44
|
+
# Synchronise the deployment area with the configuration files. This will first run
|
|
45
|
+
# validation as part of determining the required changes
|
|
46
|
+
deploy-tools sync $deployment_root $config_folder
|
|
47
|
+
|
|
48
|
+
# Compare the current deployment snapshot against what is actually deployed in the
|
|
49
|
+
# deployment area. Run this before a deploy to confirm a healthy state.
|
|
50
|
+
deploy-tools compare $deployment_root
|
|
51
|
+
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
Generating the JSON schema files with `deploy-tools schema <folder>` is a separate,
|
|
55
|
+
occasional task: it produces the schemas that editors use to validate configuration files,
|
|
56
|
+
and is not part of a deployment. See the schema reference in the documentation.
|
|
57
|
+
|
|
58
|
+
<!-- README only content. Anything below this line won't be included in index.md -->
|
|
59
|
+
|
|
60
|
+
See https://diamondlightsource.github.io/deploy-tools for more detailed documentation.
|
|
@@ -49,11 +49,20 @@ extensions = [
|
|
|
49
49
|
"sphinx_design",
|
|
50
50
|
# So we can write markdown files
|
|
51
51
|
"myst_parser",
|
|
52
|
+
# For the generation of schema docs
|
|
53
|
+
"sphinx-jsonschema",
|
|
54
|
+
# Render Pydantic models cleanly (hides internals like model_config / FieldInfo)
|
|
55
|
+
"sphinxcontrib.autodoc_pydantic",
|
|
56
|
+
# Render the Typer command-line interface
|
|
57
|
+
"sphinxcontrib.typer",
|
|
52
58
|
]
|
|
53
59
|
|
|
54
60
|
# So we can use the ::: syntax
|
|
55
61
|
myst_enable_extensions = ["colon_fence"]
|
|
56
62
|
|
|
63
|
+
# Generate anchors for headings (levels 1-3) so pages can link to sections.
|
|
64
|
+
myst_heading_anchors = 3
|
|
65
|
+
|
|
57
66
|
# If true, Sphinx will warn about all references where the target cannot
|
|
58
67
|
# be found.
|
|
59
68
|
nitpicky = True
|
|
@@ -71,11 +80,24 @@ nitpick_ignore = [
|
|
|
71
80
|
("py:class", "'object'"),
|
|
72
81
|
("py:class", "'id'"),
|
|
73
82
|
("py:class", "typing_extensions.Literal"),
|
|
83
|
+
# Generic type variable used in save_and_load.load_from_yaml
|
|
84
|
+
("py:class", "T"),
|
|
85
|
+
# PEP 695 type aliases in models.deployment cannot be resolved as classes
|
|
86
|
+
("py:class", "deploy_tools.models.deployment.DefaultVersionsByName"),
|
|
87
|
+
("py:class", "deploy_tools.models.deployment.ModuleVersionsByName"),
|
|
88
|
+
("py:class", "deploy_tools.models.deployment.ReleasesByNameAndVersion"),
|
|
89
|
+
("py:class", "deploy_tools.models.deployment.ReleasesByVersion"),
|
|
90
|
+
("py:class", "deploy_tools.models.deployment.ModulesByName"),
|
|
91
|
+
("py:class", "deploy_tools.models.apptainer_app.MountPoint"),
|
|
92
|
+
# Pydantic's FieldInfo leaks from the discriminated-union default in the
|
|
93
|
+
# models.module.Application type alias when rendered in signatures
|
|
94
|
+
("py:class", "FieldInfo"),
|
|
74
95
|
]
|
|
75
96
|
|
|
76
|
-
#
|
|
77
|
-
#
|
|
78
|
-
|
|
97
|
+
# Use only the class docstring in the main body of the autoclass directive. The
|
|
98
|
+
# __init__ docstring is excluded because Pydantic's autogenerated BaseModel.__init__
|
|
99
|
+
# docstring references unresolvable targets (self, ValidationError) under nitpicky mode.
|
|
100
|
+
autoclass_content = "class"
|
|
79
101
|
|
|
80
102
|
# Order the members by the order they appear in the source code
|
|
81
103
|
autodoc_member_order = "bysource"
|
|
@@ -83,8 +105,17 @@ autodoc_member_order = "bysource"
|
|
|
83
105
|
# Don't inherit docstrings from baseclasses
|
|
84
106
|
autodoc_inherit_docstrings = False
|
|
85
107
|
|
|
86
|
-
#
|
|
87
|
-
|
|
108
|
+
# Ignore module __all__ so every public member is documented. Internals are kept out
|
|
109
|
+
# of the docs by marking them private with a leading underscore instead.
|
|
110
|
+
autosummary_ignore_module_all = True
|
|
111
|
+
|
|
112
|
+
# Set global options for sphinx-jsonschema
|
|
113
|
+
jsonschema_options = {
|
|
114
|
+
"lift_description": True,
|
|
115
|
+
"lift_definitions": True,
|
|
116
|
+
"auto_target": True,
|
|
117
|
+
"auto_reference": True,
|
|
118
|
+
}
|
|
88
119
|
|
|
89
120
|
# Add any paths that contain templates here, relative to this directory.
|
|
90
121
|
templates_path = ["_templates"]
|
|
@@ -109,7 +140,10 @@ pygments_style = "sphinx"
|
|
|
109
140
|
|
|
110
141
|
# This means you can link things like `str` and `asyncio` to the relevant
|
|
111
142
|
# docs in the python documentation.
|
|
112
|
-
intersphinx_mapping = {
|
|
143
|
+
intersphinx_mapping = {
|
|
144
|
+
"python": ("https://docs.python.org/3/", None),
|
|
145
|
+
"pydantic": ("https://docs.pydantic.dev/latest/", None),
|
|
146
|
+
}
|
|
113
147
|
|
|
114
148
|
# A dictionary of graphviz graph attributes for inheritance diagrams.
|
|
115
149
|
inheritance_graph_attrs = {"rankdir": "TB"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# Default version resolution
|
|
2
|
+
|
|
3
|
+
When a user runs `module load <name>` without a version, Environment Modules must pick
|
|
4
|
+
one. By default it picks the lexically last version, which is often wrong: `1.10` sorts
|
|
5
|
+
before `1.9`, and an unfinished alpha might also win. `deploy-tools` allows you to make
|
|
6
|
+
an explicit choice, and otherwise uses the `natsort` library for a more reasonable default.
|
|
7
|
+
|
|
8
|
+
## Every Module has a specific default configured
|
|
9
|
+
|
|
10
|
+
For every live module name, `deploy-tools` writes a `.version` file in its modulefiles
|
|
11
|
+
folder (`modulefiles/<name>/.version`) containing a `set ModulesVersion <version>` line.
|
|
12
|
+
It is written even if the configuration does not have an explicit default, so Environment
|
|
13
|
+
Modules never guesses.
|
|
14
|
+
|
|
15
|
+
The version it records is resolved as follows:
|
|
16
|
+
|
|
17
|
+
1. **An explicit default has priority.** If `settings.default_versions` names a version,
|
|
18
|
+
it is used. It must be a live (non-deprecated) version that exists, or validation fails.
|
|
19
|
+
2. **Otherwise the highest eligible version is chosen automatically**, by natural version
|
|
20
|
+
sorting (see below), considering only versions *not* marked `exclude_from_defaults`.
|
|
21
|
+
|
|
22
|
+
Deprecated versions are never candidates and never get a `.version` file.
|
|
23
|
+
|
|
24
|
+
## Natural version sorting
|
|
25
|
+
|
|
26
|
+
Automatic selection uses [`natsort`](https://natsort.readthedocs.io) rather than plain
|
|
27
|
+
string comparison, so `1.10` sorts after `1.9`. It also uses natsort's key for
|
|
28
|
+
pre-release schemes, so pre-release tags sort *before* the release they lead up to:
|
|
29
|
+
|
|
30
|
+
```text
|
|
31
|
+
1.2alpha1 < 1.2rc1 < 1.2 < 1.2.1
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
So publishing `1.2rc1` does not make it the default while `1.2` exists, and publishing
|
|
35
|
+
`1.2` makes it the default over its own release candidates. Be aware that `1.3alpha1` still
|
|
36
|
+
sorts after `1.2.1`, however; to keep alphas or similar out of the automatic default, mark
|
|
37
|
+
them `exclude_from_defaults: true`.
|
|
38
|
+
|
|
39
|
+
## Excluding a version from the automatic default
|
|
40
|
+
|
|
41
|
+
Marking a version `exclude_from_defaults: true` keeps it out of *automatic* selection
|
|
42
|
+
while still allowing it to be set explicitly. Use this to publish an alpha or beta that
|
|
43
|
+
users can opt into with `module load <name>/<version>` without it ever being handed to
|
|
44
|
+
someone who just typed `module load <name>`.
|
|
45
|
+
|
|
46
|
+
One safety check applies: if *every* version of a name is excluded and no explicit default
|
|
47
|
+
is given, validation fails rather than leave the Module with no default. Either give an
|
|
48
|
+
explicit default or keep at least one non-excluded version.
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# The deployment area
|
|
2
|
+
|
|
3
|
+
The *deployment area* is the directory tree that `deploy-tools` writes into. It is normally
|
|
4
|
+
a shared filesystem location that end users put on their `MODULEPATH`, so its layout is
|
|
5
|
+
important to the end user. This page explains what lives where, and why.
|
|
6
|
+
|
|
7
|
+
## Layout
|
|
8
|
+
|
|
9
|
+
Everything below is created and maintained by `deploy-tools`; nothing in the area is meant
|
|
10
|
+
to be edited by hand.
|
|
11
|
+
|
|
12
|
+
```text
|
|
13
|
+
<deployment root>/
|
|
14
|
+
├── deployment.yaml # snapshot of the deployed configuration
|
|
15
|
+
├── modules/ # Modules Area — the built files for every Module
|
|
16
|
+
│ └── <name>/<version>/
|
|
17
|
+
│ ├── modulefile # the Environment Modules (Tcl) file
|
|
18
|
+
│ ├── entrypoints/ # the executables added to PATH on module load
|
|
19
|
+
│ ├── module.yaml # this Module's configuration snapshot
|
|
20
|
+
│ └── sif_files/ # Apptainer images, when the Module uses any
|
|
21
|
+
├── modulefiles/ # Modulefiles Area — placed on MODULEPATH
|
|
22
|
+
│ └── <name>/
|
|
23
|
+
│ ├── <version> # absolute symlink into modules/<name>/<version>/modulefile
|
|
24
|
+
│ └── .version # records the default version (see below)
|
|
25
|
+
├── deprecated/ # Deprecated Area
|
|
26
|
+
│ └── modulefiles/ # mirrors the Modulefiles Area — optionally on MODULEPATH
|
|
27
|
+
│ └── <name>/<version> # symlink for a deprecated Module version
|
|
28
|
+
└── build/ # transient build area (default location)
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
The split between the **Modules Area** (`modules/`) and the **Modulefiles Area**
|
|
32
|
+
(`modulefiles/`) is the central design choice. The Modules Area holds the real files for
|
|
33
|
+
*every* version that has been deployed and not removed, both live and deprecated. The
|
|
34
|
+
Modulefiles Area holds only a thin tree of symlinks, one per version, pointing at the
|
|
35
|
+
corresponding `modulefile`. Users put only the *modulefiles* directories on their
|
|
36
|
+
`MODULEPATH`, making each Module visible to `module avail` and `module load`.
|
|
37
|
+
|
|
38
|
+
Deprecation is therefore cheap and reversible: the built files never move, only the symlink
|
|
39
|
+
moves between `modulefiles/` and `deprecated/modulefiles/`. See
|
|
40
|
+
[the release lifecycle](deprecation-lifecycle.md#configuration-is-declarative) for
|
|
41
|
+
the full set of transitions.
|
|
42
|
+
|
|
43
|
+
## The build area
|
|
44
|
+
|
|
45
|
+
Modules are first assembled under the **build area** (`build/` by default), then moved into
|
|
46
|
+
the Modules Area. The move is a filesystem `rename`, which is atomic *only when source and
|
|
47
|
+
destination are on the same filesystem* — hence the default build area sits inside the
|
|
48
|
+
deployment root. Building and deploying separately means a half-built Module is never
|
|
49
|
+
visible: either the rename succeeds and the whole version appears, or nothing changes.
|
|
50
|
+
|
|
51
|
+
The transient `build/` directory and the large Apptainer `sif_files/` images are
|
|
52
|
+
deliberately kept out of the deployment area's git history (see
|
|
53
|
+
[snapshots and the compare safety net](snapshots-and-compare.md)). They are reference-only
|
|
54
|
+
data used by the `compare` command, not something to revert to.
|
|
55
|
+
|
|
56
|
+
## Why modulefiles embed absolute paths
|
|
57
|
+
|
|
58
|
+
A generated `modulefile` adds its Module's executables to the user's path with one line:
|
|
59
|
+
|
|
60
|
+
```tcl
|
|
61
|
+
prepend-path PATH "<deployment root>/modules/<name>/<version>/entrypoints"
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
That path is **absolute**, so a deployment area cannot be relocated after the fact.
|
|
65
|
+
This is a deliberate trade-off.
|
|
66
|
+
|
|
67
|
+
A path relative to the modulefile does not work. Environment Modules sources the file
|
|
68
|
+
*through the symlink* under `modulefiles/` without resolving it first (`[info script]`
|
|
69
|
+
/ `ModulesCurrentModulefile` report the link path). A relative path would be interpreted
|
|
70
|
+
relative to the *link's* location — which changes when a Module is deprecated and the link
|
|
71
|
+
moves to a different location in the tree, silently breaking it.
|
|
72
|
+
|
|
73
|
+
This allows us to use two separate `modulefiles/` folders, corresponding to live and
|
|
74
|
+
deprecated modules, without needing to edit modulefiles after initial creation.
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# The deployment process
|
|
2
|
+
|
|
3
|
+
A deployment is made up of several conceptual **steps**, deliberately **not** one-to-one
|
|
4
|
+
with the CLI commands: one command may run several steps, and some are never exposed as
|
|
5
|
+
a command of their own. For the commands themselves see the [CLI reference](../cli.md).
|
|
6
|
+
|
|
7
|
+
| Step | Description | Run by |
|
|
8
|
+
|------|-------------|--------|
|
|
9
|
+
| Compare | Compare the current deployment snapshot against the modulefiles and built modules that actually exist, confirming the [deployment area](deployment-area.md) is healthy. | `compare` |
|
|
10
|
+
| Validate | Diff the new configuration against the current snapshot to determine the set of actions to take, and check those actions are permitted by the [lifecycle guard rails](deprecation-lifecycle.md#the-guard-rails). | `validate`, `sync` |
|
|
11
|
+
| Build | Generate entrypoint scripts, configuration files and environment variables for each changed Module, writing them to the build area. | `sync` (`validate --test-build`) |
|
|
12
|
+
| Deploy | Move the built Modules from the build area into the Modules Area, link each modulefile into the live or deprecated tree according to its status, and update default versions. | `sync` |
|
|
13
|
+
|
|
14
|
+
## Why build and deploy are not separate commands
|
|
15
|
+
|
|
16
|
+
There is no standalone `build` or `deploy` command. `sync` always runs them together, so
|
|
17
|
+
a half-built Module is never exposed to users: either a version is built *and* linked into
|
|
18
|
+
place, or nothing changes.
|
|
19
|
+
|
|
20
|
+
## How the steps fit together
|
|
21
|
+
|
|
22
|
+
`sync` is the only step that writes to the deployment area; `compare` and `validate` are
|
|
23
|
+
read-only checks run before it. See
|
|
24
|
+
[snapshots and the compare safety net](snapshots-and-compare.md) for how the snapshot
|
|
25
|
+
ties them together, and [drive deploy-tools from CI](../how-to/ci-pipeline.md) for the
|
|
26
|
+
order to run them in.
|