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.
Files changed (380) hide show
  1. {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/.copier-answers.yml +1 -1
  2. {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/.devcontainer/devcontainer.json +4 -1
  3. {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/.github/CONTRIBUTING.md +1 -1
  4. {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/.github/workflows/ci.yml +2 -2
  5. dls_deploy_tools-0.8.0/.markdownlint.yaml +12 -0
  6. {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/.pre-commit-config.yaml +23 -0
  7. {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/.vscode/tasks.json +17 -17
  8. {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/Dockerfile +2 -2
  9. {dls_deploy_tools-0.7/src/dls_deploy_tools.egg-info → dls_deploy_tools-0.8.0}/PKG-INFO +22 -77
  10. dls_deploy_tools-0.8.0/README.md +60 -0
  11. dls_deploy_tools-0.8.0/docs/cli.md +9 -0
  12. {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/docs/conf.py +40 -6
  13. dls_deploy_tools-0.8.0/docs/explanations/default-versions.md +48 -0
  14. dls_deploy_tools-0.8.0/docs/explanations/deployment-area.md +74 -0
  15. dls_deploy_tools-0.8.0/docs/explanations/deployment-steps.md +26 -0
  16. dls_deploy_tools-0.8.0/docs/explanations/deprecation-lifecycle.md +41 -0
  17. dls_deploy_tools-0.8.0/docs/explanations/snapshots-and-compare.md +65 -0
  18. dls_deploy_tools-0.8.0/docs/explanations.md +14 -0
  19. dls_deploy_tools-0.8.0/docs/glossary.md +25 -0
  20. dls_deploy_tools-0.8.0/docs/how-to/ci-pipeline.md +61 -0
  21. dls_deploy_tools-0.8.0/docs/how-to/regenerate-schemas.md +23 -0
  22. {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/docs/how-to/run-container.md +3 -0
  23. dls_deploy_tools-0.8.0/docs/how-to/vscode-tasks.md +37 -0
  24. dls_deploy_tools-0.8.0/docs/how-to/write-module-configuration.md +88 -0
  25. dls_deploy_tools-0.8.0/docs/how-to.md +14 -0
  26. dls_deploy_tools-0.8.0/docs/reference/configuration.md +175 -0
  27. {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/docs/reference.md +4 -0
  28. dls_deploy_tools-0.8.0/docs/schemas/deployment-settings.rst +4 -0
  29. dls_deploy_tools-0.8.0/docs/schemas/release.rst +4 -0
  30. dls_deploy_tools-0.8.0/docs/schemas.md +67 -0
  31. dls_deploy_tools-0.8.0/docs/tutorials/your-first-deployment.md +159 -0
  32. {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/docs/tutorials.md +2 -2
  33. {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/pyproject.toml +11 -1
  34. {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/deploy_tools/__main__.py +14 -5
  35. {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/deploy_tools/_version.py +3 -3
  36. {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/deploy_tools/app_builder.py +35 -5
  37. {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/deploy_tools/apptainer.py +7 -4
  38. {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/deploy_tools/build.py +1 -0
  39. {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/deploy_tools/compare.py +23 -10
  40. {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/deploy_tools/demo_configuration/example-module-apps/0.1.yaml +2 -10
  41. {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/deploy_tools/deploy.py +5 -2
  42. dls_deploy_tools-0.8.0/src/deploy_tools/errors.py +10 -0
  43. dls_deploy_tools-0.8.0/src/deploy_tools/external_tools.py +51 -0
  44. {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/deploy_tools/layout.py +21 -2
  45. {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/deploy_tools/models/apptainer_app.py +46 -9
  46. {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/deploy_tools/models/binary_app.py +5 -1
  47. {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/deploy_tools/models/module.py +15 -6
  48. dls_deploy_tools-0.8.0/src/deploy_tools/models/parent.py +15 -0
  49. {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/deploy_tools/models/save_and_load.py +12 -7
  50. {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/deploy_tools/models/schema.py +2 -2
  51. {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/deploy_tools/models/schemas/deployment.json +33 -14
  52. {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/deploy_tools/models/schemas/module.json +132 -134
  53. {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/deploy_tools/models/schemas/release.json +33 -14
  54. {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/deploy_tools/models/shell_app.py +5 -1
  55. {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/deploy_tools/module_builder.py +1 -0
  56. {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/deploy_tools/modulefile.py +5 -0
  57. {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/deploy_tools/print_updates.py +6 -3
  58. {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/deploy_tools/snapshot.py +26 -9
  59. {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/deploy_tools/sync.py +33 -15
  60. {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/deploy_tools/templater.py +2 -0
  61. {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/deploy_tools/templates/apptainer_entrypoint +18 -0
  62. {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/deploy_tools/validate.py +32 -32
  63. {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0/src/dls_deploy_tools.egg-info}/PKG-INFO +22 -77
  64. dls_deploy_tools-0.8.0/src/dls_deploy_tools.egg-info/SOURCES.txt +347 -0
  65. dls_deploy_tools-0.8.0/src/dls_deploy_tools.egg-info/scm_file_list.json +342 -0
  66. dls_deploy_tools-0.8.0/src/dls_deploy_tools.egg-info/scm_version.json +8 -0
  67. dls_deploy_tools-0.8.0/tests/configs/README.md +17 -0
  68. dls_deploy_tools-0.8.0/tests/configs/golden-master/01-initial/apps/0.1.yaml +37 -0
  69. dls_deploy_tools-0.8.0/tests/configs/golden-master/01-initial/deps/0.2.yaml +14 -0
  70. dls_deploy_tools-0.8.0/tests/configs/golden-master/01-initial/settings.yaml +3 -0
  71. dls_deploy_tools-0.8.0/tests/configs/golden-master/01-initial/updatable/1.0.yaml +21 -0
  72. dls_deploy_tools-0.8.0/tests/configs/golden-master/01-initial/versions/1.0.yaml +8 -0
  73. dls_deploy_tools-0.8.0/tests/configs/golden-master/02-added/apps/0.1.yaml +37 -0
  74. dls_deploy_tools-0.8.0/tests/configs/golden-master/02-added/deps/0.2.yaml +14 -0
  75. dls_deploy_tools-0.8.0/tests/configs/golden-master/02-added/settings.yaml +3 -0
  76. dls_deploy_tools-0.8.0/tests/configs/golden-master/02-added/updatable/1.0.yaml +21 -0
  77. dls_deploy_tools-0.8.0/tests/configs/golden-master/02-added/versions/1.0.yaml +8 -0
  78. dls_deploy_tools-0.8.0/tests/configs/golden-master/02-added/versions/2.0.yaml +8 -0
  79. dls_deploy_tools-0.8.0/tests/configs/golden-master/02-added/versions/2.1rc1.yaml +12 -0
  80. dls_deploy_tools-0.8.0/tests/configs/golden-master/03-updated/apps/0.1.yaml +37 -0
  81. dls_deploy_tools-0.8.0/tests/configs/golden-master/03-updated/deps/0.2.yaml +14 -0
  82. dls_deploy_tools-0.8.0/tests/configs/golden-master/03-updated/settings.yaml +3 -0
  83. dls_deploy_tools-0.8.0/tests/configs/golden-master/03-updated/updatable/1.0.yaml +20 -0
  84. dls_deploy_tools-0.8.0/tests/configs/golden-master/03-updated/versions/1.0.yaml +8 -0
  85. dls_deploy_tools-0.8.0/tests/configs/golden-master/03-updated/versions/2.0.yaml +8 -0
  86. dls_deploy_tools-0.8.0/tests/configs/golden-master/03-updated/versions/2.1rc1.yaml +12 -0
  87. dls_deploy_tools-0.8.0/tests/configs/golden-master/04-deprecated/apps/0.1.yaml +37 -0
  88. dls_deploy_tools-0.8.0/tests/configs/golden-master/04-deprecated/deps/0.2.yaml +14 -0
  89. dls_deploy_tools-0.8.0/tests/configs/golden-master/04-deprecated/settings.yaml +3 -0
  90. dls_deploy_tools-0.8.0/tests/configs/golden-master/04-deprecated/updatable/1.0.yaml +20 -0
  91. dls_deploy_tools-0.8.0/tests/configs/golden-master/04-deprecated/versions/1.0.yaml +10 -0
  92. dls_deploy_tools-0.8.0/tests/configs/golden-master/04-deprecated/versions/2.0.yaml +8 -0
  93. dls_deploy_tools-0.8.0/tests/configs/golden-master/04-deprecated/versions/2.1rc1.yaml +14 -0
  94. dls_deploy_tools-0.8.0/tests/configs/golden-master/05-restored/apps/0.1.yaml +37 -0
  95. dls_deploy_tools-0.8.0/tests/configs/golden-master/05-restored/deps/0.2.yaml +14 -0
  96. dls_deploy_tools-0.8.0/tests/configs/golden-master/05-restored/settings.yaml +3 -0
  97. dls_deploy_tools-0.8.0/tests/configs/golden-master/05-restored/updatable/1.0.yaml +20 -0
  98. dls_deploy_tools-0.8.0/tests/configs/golden-master/05-restored/versions/1.0.yaml +10 -0
  99. dls_deploy_tools-0.8.0/tests/configs/golden-master/05-restored/versions/2.0.yaml +8 -0
  100. dls_deploy_tools-0.8.0/tests/configs/golden-master/05-restored/versions/2.1rc1.yaml +12 -0
  101. dls_deploy_tools-0.8.0/tests/configs/golden-master/06-removed/apps/0.1.yaml +37 -0
  102. dls_deploy_tools-0.8.0/tests/configs/golden-master/06-removed/deps/0.2.yaml +14 -0
  103. dls_deploy_tools-0.8.0/tests/configs/golden-master/06-removed/settings.yaml +3 -0
  104. dls_deploy_tools-0.8.0/tests/configs/golden-master/06-removed/updatable/1.0.yaml +20 -0
  105. dls_deploy_tools-0.8.0/tests/configs/golden-master/06-removed/versions/2.0.yaml +8 -0
  106. dls_deploy_tools-0.8.0/tests/configs/golden-master/06-removed/versions/2.1rc1.yaml +12 -0
  107. dls_deploy_tools-0.8.0/tests/configs/invalid/default-version-not-deployed/example-module-shell/1.0.yaml +13 -0
  108. dls_deploy_tools-0.8.0/tests/configs/invalid/default-version-not-deployed/settings.yaml +4 -0
  109. dls_deploy_tools-0.8.0/tests/configs/invalid/deprecated-on-creation/example-module-shell/1.0.yaml +13 -0
  110. dls_deploy_tools-0.8.0/tests/configs/invalid/deprecated-on-creation/example-module-shell/2.0.yaml +15 -0
  111. dls_deploy_tools-0.8.0/tests/configs/invalid/deprecated-on-creation/settings.yaml +3 -0
  112. dls_deploy_tools-0.8.0/tests/configs/invalid/invalid-module-name/example-module-shell/1.0.yaml +15 -0
  113. dls_deploy_tools-0.8.0/tests/configs/invalid/invalid-module-name/settings.yaml +3 -0
  114. dls_deploy_tools-0.8.0/tests/configs/invalid/invalid-shell-script/example-module-shell/1.0.yaml +15 -0
  115. dls_deploy_tools-0.8.0/tests/configs/invalid/invalid-shell-script/settings.yaml +3 -0
  116. dls_deploy_tools-0.8.0/tests/configs/invalid/modified-without-allow-updates/example-module-shell/1.0.yaml +15 -0
  117. dls_deploy_tools-0.8.0/tests/configs/invalid/modified-without-allow-updates/settings.yaml +3 -0
  118. dls_deploy_tools-0.8.0/tests/configs/invalid/name-mismatch/settings.yaml +3 -0
  119. dls_deploy_tools-0.8.0/tests/configs/invalid/name-mismatch/wrong-folder-name/1.0.yaml +15 -0
  120. dls_deploy_tools-0.8.0/tests/configs/invalid/no-eligible-default/example-module-shell/1.0.yaml +15 -0
  121. dls_deploy_tools-0.8.0/tests/configs/invalid/no-eligible-default/settings.yaml +3 -0
  122. dls_deploy_tools-0.8.0/tests/configs/invalid/removed-without-deprecation/settings.yaml +3 -0
  123. dls_deploy_tools-0.8.0/tests/configs/invalid/stray-file/example-module-shell/1.0.yaml +13 -0
  124. dls_deploy_tools-0.8.0/tests/configs/invalid/stray-file/example-module-shell/README.txt +2 -0
  125. dls_deploy_tools-0.8.0/tests/configs/invalid/stray-file/settings.yaml +3 -0
  126. dls_deploy_tools-0.8.0/tests/configs/invalid/unknown-dependency/example-module-base/1.0.yaml +8 -0
  127. dls_deploy_tools-0.8.0/tests/configs/invalid/unknown-dependency/example-module-dependent/1.0.yaml +12 -0
  128. dls_deploy_tools-0.8.0/tests/configs/invalid/unknown-dependency/settings.yaml +3 -0
  129. dls_deploy_tools-0.8.0/tests/configs/invalid/version-mismatch/example-module-shell/2.0.yaml +15 -0
  130. dls_deploy_tools-0.8.0/tests/configs/invalid/version-mismatch/settings.yaml +3 -0
  131. dls_deploy_tools-0.8.0/tests/configs/valid/apptainer-pull/example-apptainer/1.0.yaml +19 -0
  132. dls_deploy_tools-0.8.0/tests/configs/valid/apptainer-pull/settings.yaml +3 -0
  133. dls_deploy_tools-0.8.0/tests/configs/valid/empty/settings.yaml +3 -0
  134. dls_deploy_tools-0.8.0/tests/configs/valid/minimal/example-module-shell/1.0.yaml +13 -0
  135. dls_deploy_tools-0.8.0/tests/configs/valid/minimal/settings.yaml +3 -0
  136. dls_deploy_tools-0.8.0/tests/configs/valid/multi-version-deprecated/example-module-multi/1.0.yaml +12 -0
  137. dls_deploy_tools-0.8.0/tests/configs/valid/multi-version-deprecated/example-module-multi/2.0.yaml +12 -0
  138. dls_deploy_tools-0.8.0/tests/configs/valid/multi-version-deprecated/settings.yaml +3 -0
  139. dls_deploy_tools-0.8.0/tests/configs/valid/multi-version-explicit-default/example-module-multi/1.0.yaml +8 -0
  140. dls_deploy_tools-0.8.0/tests/configs/valid/multi-version-explicit-default/example-module-multi/2.0.yaml +8 -0
  141. dls_deploy_tools-0.8.0/tests/configs/valid/multi-version-explicit-default/settings.yaml +5 -0
  142. dls_deploy_tools-0.8.0/tests/configs/valid/multi-version-live/example-module-multi/1.0.yaml +8 -0
  143. dls_deploy_tools-0.8.0/tests/configs/valid/multi-version-live/example-module-multi/2.0.yaml +8 -0
  144. dls_deploy_tools-0.8.0/tests/configs/valid/multi-version-live/settings.yaml +3 -0
  145. dls_deploy_tools-0.8.0/tests/configs/valid/updatable-deprecated/example-module-updatable/1.0.yaml +18 -0
  146. dls_deploy_tools-0.8.0/tests/configs/valid/updatable-deprecated/settings.yaml +3 -0
  147. dls_deploy_tools-0.8.0/tests/configs/valid/updatable-live/example-module-updatable/1.0.yaml +14 -0
  148. dls_deploy_tools-0.8.0/tests/configs/valid/updatable-live/settings.yaml +3 -0
  149. dls_deploy_tools-0.8.0/tests/configs/valid/updatable-restored/example-module-updatable/1.0.yaml +16 -0
  150. dls_deploy_tools-0.8.0/tests/configs/valid/updatable-restored/settings.yaml +3 -0
  151. dls_deploy_tools-0.8.0/tests/conftest.py +50 -0
  152. dls_deploy_tools-0.8.0/tests/generate_samples.sh +77 -0
  153. dls_deploy_tools-0.8.0/tests/samples/01-initial/deploy-tools-output/deployment.yaml +100 -0
  154. dls_deploy_tools-0.8.0/tests/samples/01-initial/deploy-tools-output/modulefiles/updatable/.version +2 -0
  155. dls_deploy_tools-0.8.0/tests/samples/01-initial/deploy-tools-output/modulefiles/versions/.version +2 -0
  156. {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
  157. {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
  158. dls_deploy_tools-0.8.0/tests/samples/01-initial/deploy-tools-output/modules/apps/0.1/modulefile +15 -0
  159. {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
  160. dls_deploy_tools-0.8.0/tests/samples/01-initial/deploy-tools-output/modules/deps/0.2/modulefile +16 -0
  161. dls_deploy_tools-0.8.0/tests/samples/01-initial/deploy-tools-output/modules/updatable/1.0/entrypoints/test-updatable-echo +7 -0
  162. dls_deploy_tools-0.8.0/tests/samples/01-initial/deploy-tools-output/modules/updatable/1.0/module.yaml +16 -0
  163. dls_deploy_tools-0.8.0/tests/samples/01-initial/deploy-tools-output/modules/updatable/1.0/modulefile +15 -0
  164. dls_deploy_tools-0.8.0/tests/samples/01-initial/deploy-tools-output/modules/versions/1.0/module.yaml +10 -0
  165. dls_deploy_tools-0.8.0/tests/samples/01-initial/deploy-tools-output/modules/versions/1.0/modulefile +13 -0
  166. dls_deploy_tools-0.8.0/tests/samples/01-initial/validate.txt +11 -0
  167. dls_deploy_tools-0.8.0/tests/samples/02-added/deploy-tools-output/deployment.yaml +126 -0
  168. dls_deploy_tools-0.8.0/tests/samples/02-added/deploy-tools-output/modulefiles/deps/.version +2 -0
  169. dls_deploy_tools-0.8.0/tests/samples/02-added/deploy-tools-output/modulefiles/updatable/.version +2 -0
  170. dls_deploy_tools-0.8.0/tests/samples/02-added/deploy-tools-output/modulefiles/versions/.version +2 -0
  171. 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
  172. 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
  173. dls_deploy_tools-0.8.0/tests/samples/02-added/deploy-tools-output/modules/apps/0.1/entrypoints/test-shell-script +9 -0
  174. dls_deploy_tools-0.8.0/tests/samples/02-added/deploy-tools-output/modules/apps/0.1/module.yaml +41 -0
  175. dls_deploy_tools-0.8.0/tests/samples/02-added/deploy-tools-output/modules/apps/0.1/modulefile +15 -0
  176. dls_deploy_tools-0.8.0/tests/samples/02-added/deploy-tools-output/modules/deps/0.2/module.yaml +14 -0
  177. dls_deploy_tools-0.8.0/tests/samples/02-added/deploy-tools-output/modules/deps/0.2/modulefile +16 -0
  178. dls_deploy_tools-0.8.0/tests/samples/02-added/deploy-tools-output/modules/updatable/1.0/entrypoints/test-updatable-echo +7 -0
  179. dls_deploy_tools-0.8.0/tests/samples/02-added/deploy-tools-output/modules/updatable/1.0/module.yaml +16 -0
  180. dls_deploy_tools-0.8.0/tests/samples/02-added/deploy-tools-output/modules/updatable/1.0/modulefile +15 -0
  181. dls_deploy_tools-0.8.0/tests/samples/02-added/deploy-tools-output/modules/versions/1.0/module.yaml +10 -0
  182. dls_deploy_tools-0.8.0/tests/samples/02-added/deploy-tools-output/modules/versions/1.0/modulefile +13 -0
  183. dls_deploy_tools-0.8.0/tests/samples/02-added/deploy-tools-output/modules/versions/2.0/module.yaml +10 -0
  184. dls_deploy_tools-0.8.0/tests/samples/02-added/deploy-tools-output/modules/versions/2.0/modulefile +13 -0
  185. dls_deploy_tools-0.8.0/tests/samples/02-added/deploy-tools-output/modules/versions/2.1rc1/module.yaml +10 -0
  186. dls_deploy_tools-0.8.0/tests/samples/02-added/deploy-tools-output/modules/versions/2.1rc1/modulefile +13 -0
  187. dls_deploy_tools-0.8.0/tests/samples/02-added/validate.txt +6 -0
  188. dls_deploy_tools-0.8.0/tests/samples/03-updated/deploy-tools-output/deployment.yaml +126 -0
  189. dls_deploy_tools-0.8.0/tests/samples/03-updated/deploy-tools-output/modulefiles/deps/.version +2 -0
  190. dls_deploy_tools-0.8.0/tests/samples/03-updated/deploy-tools-output/modulefiles/updatable/.version +2 -0
  191. dls_deploy_tools-0.8.0/tests/samples/03-updated/deploy-tools-output/modulefiles/versions/.version +2 -0
  192. 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
  193. 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
  194. dls_deploy_tools-0.8.0/tests/samples/03-updated/deploy-tools-output/modules/apps/0.1/entrypoints/test-shell-script +9 -0
  195. dls_deploy_tools-0.8.0/tests/samples/03-updated/deploy-tools-output/modules/apps/0.1/module.yaml +41 -0
  196. dls_deploy_tools-0.8.0/tests/samples/03-updated/deploy-tools-output/modules/apps/0.1/modulefile +15 -0
  197. dls_deploy_tools-0.8.0/tests/samples/03-updated/deploy-tools-output/modules/deps/0.2/module.yaml +14 -0
  198. dls_deploy_tools-0.8.0/tests/samples/03-updated/deploy-tools-output/modules/deps/0.2/modulefile +16 -0
  199. dls_deploy_tools-0.8.0/tests/samples/03-updated/deploy-tools-output/modules/updatable/1.0/entrypoints/test-updatable-echo +7 -0
  200. dls_deploy_tools-0.8.0/tests/samples/03-updated/deploy-tools-output/modules/updatable/1.0/module.yaml +16 -0
  201. dls_deploy_tools-0.8.0/tests/samples/03-updated/deploy-tools-output/modules/updatable/1.0/modulefile +15 -0
  202. dls_deploy_tools-0.8.0/tests/samples/03-updated/deploy-tools-output/modules/versions/1.0/module.yaml +10 -0
  203. dls_deploy_tools-0.8.0/tests/samples/03-updated/deploy-tools-output/modules/versions/1.0/modulefile +13 -0
  204. dls_deploy_tools-0.8.0/tests/samples/03-updated/deploy-tools-output/modules/versions/2.0/module.yaml +10 -0
  205. dls_deploy_tools-0.8.0/tests/samples/03-updated/deploy-tools-output/modules/versions/2.0/modulefile +13 -0
  206. dls_deploy_tools-0.8.0/tests/samples/03-updated/deploy-tools-output/modules/versions/2.1rc1/module.yaml +10 -0
  207. dls_deploy_tools-0.8.0/tests/samples/03-updated/deploy-tools-output/modules/versions/2.1rc1/modulefile +13 -0
  208. dls_deploy_tools-0.8.0/tests/samples/03-updated/validate.txt +4 -0
  209. dls_deploy_tools-0.8.0/tests/samples/04-deprecated/deploy-tools-output/deployment.yaml +126 -0
  210. dls_deploy_tools-0.8.0/tests/samples/04-deprecated/deploy-tools-output/modulefiles/deps/.version +2 -0
  211. dls_deploy_tools-0.8.0/tests/samples/04-deprecated/deploy-tools-output/modulefiles/updatable/.version +2 -0
  212. dls_deploy_tools-0.8.0/tests/samples/04-deprecated/deploy-tools-output/modulefiles/versions/.version +2 -0
  213. 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
  214. dls_deploy_tools-0.8.0/tests/samples/04-deprecated/deploy-tools-output/modules/apps/0.1/entrypoints/test-echo-module-var +7 -0
  215. dls_deploy_tools-0.8.0/tests/samples/04-deprecated/deploy-tools-output/modules/apps/0.1/entrypoints/test-shell-script +9 -0
  216. dls_deploy_tools-0.8.0/tests/samples/04-deprecated/deploy-tools-output/modules/apps/0.1/module.yaml +41 -0
  217. dls_deploy_tools-0.8.0/tests/samples/04-deprecated/deploy-tools-output/modules/apps/0.1/modulefile +15 -0
  218. dls_deploy_tools-0.8.0/tests/samples/04-deprecated/deploy-tools-output/modules/deps/0.2/module.yaml +14 -0
  219. dls_deploy_tools-0.8.0/tests/samples/04-deprecated/deploy-tools-output/modules/deps/0.2/modulefile +16 -0
  220. dls_deploy_tools-0.8.0/tests/samples/04-deprecated/deploy-tools-output/modules/updatable/1.0/entrypoints/test-updatable-echo +7 -0
  221. dls_deploy_tools-0.8.0/tests/samples/04-deprecated/deploy-tools-output/modules/updatable/1.0/module.yaml +16 -0
  222. dls_deploy_tools-0.8.0/tests/samples/04-deprecated/deploy-tools-output/modules/updatable/1.0/modulefile +15 -0
  223. dls_deploy_tools-0.8.0/tests/samples/04-deprecated/deploy-tools-output/modules/versions/1.0/module.yaml +10 -0
  224. dls_deploy_tools-0.8.0/tests/samples/04-deprecated/deploy-tools-output/modules/versions/1.0/modulefile +13 -0
  225. dls_deploy_tools-0.8.0/tests/samples/04-deprecated/deploy-tools-output/modules/versions/2.0/module.yaml +10 -0
  226. dls_deploy_tools-0.8.0/tests/samples/04-deprecated/deploy-tools-output/modules/versions/2.0/modulefile +13 -0
  227. dls_deploy_tools-0.8.0/tests/samples/04-deprecated/deploy-tools-output/modules/versions/2.1rc1/module.yaml +10 -0
  228. dls_deploy_tools-0.8.0/tests/samples/04-deprecated/deploy-tools-output/modules/versions/2.1rc1/modulefile +13 -0
  229. dls_deploy_tools-0.8.0/tests/samples/04-deprecated/validate.txt +5 -0
  230. dls_deploy_tools-0.8.0/tests/samples/05-restored/deploy-tools-output/deployment.yaml +126 -0
  231. dls_deploy_tools-0.8.0/tests/samples/05-restored/deploy-tools-output/modulefiles/apps/.version +2 -0
  232. dls_deploy_tools-0.8.0/tests/samples/05-restored/deploy-tools-output/modulefiles/deps/.version +2 -0
  233. dls_deploy_tools-0.8.0/tests/samples/05-restored/deploy-tools-output/modulefiles/updatable/.version +2 -0
  234. dls_deploy_tools-0.8.0/tests/samples/05-restored/deploy-tools-output/modulefiles/versions/.version +2 -0
  235. dls_deploy_tools-0.8.0/tests/samples/05-restored/deploy-tools-output/modules/apps/0.1/entrypoints/cowsay-hello +45 -0
  236. dls_deploy_tools-0.8.0/tests/samples/05-restored/deploy-tools-output/modules/apps/0.1/entrypoints/test-echo-module-var +7 -0
  237. dls_deploy_tools-0.8.0/tests/samples/05-restored/deploy-tools-output/modules/apps/0.1/entrypoints/test-shell-script +9 -0
  238. dls_deploy_tools-0.8.0/tests/samples/05-restored/deploy-tools-output/modules/apps/0.1/module.yaml +41 -0
  239. dls_deploy_tools-0.8.0/tests/samples/05-restored/deploy-tools-output/modules/apps/0.1/modulefile +15 -0
  240. dls_deploy_tools-0.8.0/tests/samples/05-restored/deploy-tools-output/modules/deps/0.2/module.yaml +14 -0
  241. dls_deploy_tools-0.8.0/tests/samples/05-restored/deploy-tools-output/modules/deps/0.2/modulefile +16 -0
  242. dls_deploy_tools-0.8.0/tests/samples/05-restored/deploy-tools-output/modules/updatable/1.0/entrypoints/test-updatable-echo +7 -0
  243. dls_deploy_tools-0.8.0/tests/samples/05-restored/deploy-tools-output/modules/updatable/1.0/module.yaml +16 -0
  244. dls_deploy_tools-0.8.0/tests/samples/05-restored/deploy-tools-output/modules/updatable/1.0/modulefile +15 -0
  245. dls_deploy_tools-0.8.0/tests/samples/05-restored/deploy-tools-output/modules/versions/1.0/module.yaml +10 -0
  246. dls_deploy_tools-0.8.0/tests/samples/05-restored/deploy-tools-output/modules/versions/1.0/modulefile +13 -0
  247. dls_deploy_tools-0.8.0/tests/samples/05-restored/deploy-tools-output/modules/versions/2.0/module.yaml +10 -0
  248. dls_deploy_tools-0.8.0/tests/samples/05-restored/deploy-tools-output/modules/versions/2.0/modulefile +13 -0
  249. dls_deploy_tools-0.8.0/tests/samples/05-restored/deploy-tools-output/modules/versions/2.1rc1/module.yaml +10 -0
  250. dls_deploy_tools-0.8.0/tests/samples/05-restored/deploy-tools-output/modules/versions/2.1rc1/modulefile +13 -0
  251. dls_deploy_tools-0.8.0/tests/samples/05-restored/validate.txt +4 -0
  252. dls_deploy_tools-0.8.0/tests/samples/06-removed/deploy-tools-output/deployment.yaml +113 -0
  253. dls_deploy_tools-0.8.0/tests/samples/06-removed/deploy-tools-output/modulefiles/apps/.version +2 -0
  254. dls_deploy_tools-0.8.0/tests/samples/06-removed/deploy-tools-output/modulefiles/deps/.version +2 -0
  255. dls_deploy_tools-0.8.0/tests/samples/06-removed/deploy-tools-output/modulefiles/updatable/.version +2 -0
  256. dls_deploy_tools-0.8.0/tests/samples/06-removed/deploy-tools-output/modulefiles/versions/.version +2 -0
  257. dls_deploy_tools-0.8.0/tests/samples/06-removed/deploy-tools-output/modules/apps/0.1/entrypoints/cowsay-hello +45 -0
  258. dls_deploy_tools-0.8.0/tests/samples/06-removed/deploy-tools-output/modules/apps/0.1/entrypoints/test-echo-module-var +7 -0
  259. dls_deploy_tools-0.8.0/tests/samples/06-removed/deploy-tools-output/modules/apps/0.1/entrypoints/test-shell-script +9 -0
  260. dls_deploy_tools-0.8.0/tests/samples/06-removed/deploy-tools-output/modules/apps/0.1/module.yaml +41 -0
  261. dls_deploy_tools-0.8.0/tests/samples/06-removed/deploy-tools-output/modules/apps/0.1/modulefile +15 -0
  262. dls_deploy_tools-0.8.0/tests/samples/06-removed/deploy-tools-output/modules/deps/0.2/module.yaml +14 -0
  263. dls_deploy_tools-0.8.0/tests/samples/06-removed/deploy-tools-output/modules/deps/0.2/modulefile +16 -0
  264. dls_deploy_tools-0.8.0/tests/samples/06-removed/deploy-tools-output/modules/updatable/1.0/entrypoints/test-updatable-echo +7 -0
  265. dls_deploy_tools-0.8.0/tests/samples/06-removed/deploy-tools-output/modules/updatable/1.0/module.yaml +16 -0
  266. dls_deploy_tools-0.8.0/tests/samples/06-removed/deploy-tools-output/modules/updatable/1.0/modulefile +15 -0
  267. dls_deploy_tools-0.8.0/tests/samples/06-removed/deploy-tools-output/modules/versions/2.0/module.yaml +10 -0
  268. dls_deploy_tools-0.8.0/tests/samples/06-removed/deploy-tools-output/modules/versions/2.0/modulefile +13 -0
  269. dls_deploy_tools-0.8.0/tests/samples/06-removed/deploy-tools-output/modules/versions/2.1rc1/module.yaml +10 -0
  270. dls_deploy_tools-0.8.0/tests/samples/06-removed/deploy-tools-output/modules/versions/2.1rc1/modulefile +13 -0
  271. dls_deploy_tools-0.8.0/tests/samples/06-removed/validate.txt +4 -0
  272. dls_deploy_tools-0.8.0/tests/test_apptainer_pull.py +14 -0
  273. dls_deploy_tools-0.8.0/tests/test_binary.py +103 -0
  274. dls_deploy_tools-0.8.0/tests/test_cli_common.py +23 -0
  275. dls_deploy_tools-0.8.0/tests/test_compare.py +196 -0
  276. dls_deploy_tools-0.8.0/tests/test_default_versions.py +127 -0
  277. dls_deploy_tools-0.8.0/tests/test_external_tools.py +19 -0
  278. dls_deploy_tools-0.8.0/tests/test_golden_master.py +160 -0
  279. dls_deploy_tools-0.8.0/tests/test_load.py +41 -0
  280. dls_deploy_tools-0.8.0/tests/test_module_options.py +249 -0
  281. dls_deploy_tools-0.8.0/tests/test_modulefile.py +29 -0
  282. dls_deploy_tools-0.8.0/tests/test_schema_gen.py +18 -0
  283. dls_deploy_tools-0.8.0/tests/test_sync.py +103 -0
  284. dls_deploy_tools-0.8.0/tests/test_validate.py +145 -0
  285. dls_deploy_tools-0.8.0/uv.lock +1698 -0
  286. dls_deploy_tools-0.7/README.md +0 -116
  287. dls_deploy_tools-0.7/docs/explanations.md +0 -10
  288. dls_deploy_tools-0.7/docs/how-to.md +0 -10
  289. dls_deploy_tools-0.7/src/deploy_tools/models/parent.py +0 -16
  290. dls_deploy_tools-0.7/src/dls_deploy_tools.egg-info/SOURCES.txt +0 -141
  291. dls_deploy_tools-0.7/tests/conftest.py +0 -30
  292. dls_deploy_tools-0.7/tests/generate_samples.sh +0 -23
  293. dls_deploy_tools-0.7/tests/samples/deploy-tools-output/deployment.yaml +0 -299
  294. dls_deploy_tools-0.7/tests/samples/deploy-tools-output/modulefiles/ec/.version +0 -2
  295. dls_deploy_tools-0.7/tests/samples/deploy-tools-output/modules/argocd/v2.14.10/module.yaml +0 -15
  296. dls_deploy_tools-0.7/tests/samples/deploy-tools-output/modules/argocd/v2.14.10/modulefile +0 -13
  297. dls_deploy_tools-0.7/tests/samples/deploy-tools-output/modules/dls-pmac-control/0.1/module.yaml +0 -33
  298. dls_deploy_tools-0.7/tests/samples/deploy-tools-output/modules/dls-pmac-control/0.1/modulefile +0 -15
  299. dls_deploy_tools-0.7/tests/samples/deploy-tools-output/modules/dls-pmac-control/0.2/module.yaml +0 -33
  300. dls_deploy_tools-0.7/tests/samples/deploy-tools-output/modules/dls-pmac-control/0.2/modulefile +0 -15
  301. dls_deploy_tools-0.7/tests/samples/deploy-tools-output/modules/ec/i13-1/module.yaml +0 -18
  302. dls_deploy_tools-0.7/tests/samples/deploy-tools-output/modules/ec/i13-1/modulefile +0 -19
  303. dls_deploy_tools-0.7/tests/samples/deploy-tools-output/modules/ec/p47/module.yaml +0 -18
  304. dls_deploy_tools-0.7/tests/samples/deploy-tools-output/modules/ec/p47/modulefile +0 -19
  305. dls_deploy_tools-0.7/tests/samples/deploy-tools-output/modules/edge-containers-cli/0.1/entrypoints/ec +0 -44
  306. dls_deploy_tools-0.7/tests/samples/deploy-tools-output/modules/edge-containers-cli/0.1/entrypoints/ec-bash +0 -44
  307. dls_deploy_tools-0.7/tests/samples/deploy-tools-output/modules/edge-containers-cli/0.1/entrypoints/ec-login +0 -8
  308. dls_deploy_tools-0.7/tests/samples/deploy-tools-output/modules/edge-containers-cli/0.1/module.yaml +0 -56
  309. dls_deploy_tools-0.7/tests/samples/deploy-tools-output/modules/edge-containers-cli/0.1/modulefile +0 -18
  310. dls_deploy_tools-0.7/tests/samples/deploy-tools-output/modules/example-module-apps/0.1/modulefile +0 -15
  311. dls_deploy_tools-0.7/tests/samples/deploy-tools-output/modules/example-module-deps/0.2/modulefile +0 -16
  312. dls_deploy_tools-0.7/tests/samples/deploy-tools-output/modules/phoebus/0.1/entrypoints/phoebus +0 -44
  313. dls_deploy_tools-0.7/tests/samples/deploy-tools-output/modules/phoebus/0.1/module.yaml +0 -27
  314. dls_deploy_tools-0.7/tests/samples/deploy-tools-output/modules/phoebus/0.1/modulefile +0 -13
  315. dls_deploy_tools-0.7/tests/test_cli.py +0 -60
  316. dls_deploy_tools-0.7/uv.lock +0 -1491
  317. {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  318. {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/.github/ISSUE_TEMPLATE/issue.md +0 -0
  319. {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md +0 -0
  320. {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/.github/pages/index.html +0 -0
  321. {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/.github/pages/make_switcher.py +0 -0
  322. {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/.github/workflows/_container.yml +0 -0
  323. {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/.github/workflows/_dist.yml +0 -0
  324. {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/.github/workflows/_docs.yml +0 -0
  325. {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/.github/workflows/_pypi.yml +0 -0
  326. {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/.github/workflows/_release.yml +0 -0
  327. {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/.github/workflows/_test.yml +0 -0
  328. {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/.github/workflows/_tox.yml +0 -0
  329. {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/.github/workflows/periodic.yml +0 -0
  330. {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/.gitignore +0 -0
  331. {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/.gitleaks.toml +0 -0
  332. {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/.python-version +0 -0
  333. {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/.vscode/extensions.json +0 -0
  334. {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/.vscode/launch.json +14 -14
  335. {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/.vscode/settings.json +0 -0
  336. {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/LICENSE +0 -0
  337. {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/catalog-info.yaml +0 -0
  338. {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/docs/_api.rst +0 -0
  339. {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/docs/_templates/custom-module-template.rst +0 -0
  340. {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/docs/explanations/decisions/0001-record-architecture-decisions.md +0 -0
  341. {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/docs/explanations/decisions/0002-switched-to-python-copier-template.md +0 -0
  342. {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/docs/explanations/decisions/COPYME +0 -0
  343. {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/docs/explanations/decisions.md +0 -0
  344. {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/docs/genindex.md +0 -0
  345. {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/docs/how-to/contribute.md +0 -0
  346. {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/docs/images/dls-logo.svg +0 -0
  347. {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/docs/index.md +0 -0
  348. {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/docs/tutorials/installation.md +0 -0
  349. {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/renovate.json +0 -0
  350. {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/setup.cfg +0 -0
  351. {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/deploy_tools/__init__.py +0 -0
  352. {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/deploy_tools/demo_configuration/argocd/v2.14.10.yaml +0 -0
  353. {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/deploy_tools/demo_configuration/dls-pmac-control/0.1.yaml +0 -0
  354. {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/deploy_tools/demo_configuration/dls-pmac-control/0.2.yaml +0 -0
  355. {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/deploy_tools/demo_configuration/ec/i13-1.yaml +0 -0
  356. {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/deploy_tools/demo_configuration/ec/p47.yaml +0 -0
  357. {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/deploy_tools/demo_configuration/edge-containers-cli/0.1.yaml +0 -0
  358. {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/deploy_tools/demo_configuration/example-module-deps/0.2.yaml +0 -0
  359. {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/deploy_tools/demo_configuration/phoebus/0.1.yaml +0 -0
  360. {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/deploy_tools/demo_configuration/settings.yaml +0 -0
  361. {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/deploy_tools/models/__init__.py +0 -0
  362. {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/deploy_tools/models/app.py +0 -0
  363. {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/deploy_tools/models/changes.py +0 -0
  364. {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/deploy_tools/models/deployment.py +0 -0
  365. {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/deploy_tools/models/schemas/deployment-settings.json +0 -0
  366. {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/deploy_tools/templates/gitignore +0 -0
  367. {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/deploy_tools/templates/modulefile +0 -0
  368. {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/deploy_tools/templates/modulefile_version +0 -0
  369. {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/deploy_tools/templates/shell_entrypoint +0 -0
  370. {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/dls_deploy_tools.egg-info/dependency_links.txt +0 -0
  371. {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/dls_deploy_tools.egg-info/entry_points.txt +0 -0
  372. {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/dls_deploy_tools.egg-info/requires.txt +0 -0
  373. {dls_deploy_tools-0.7 → dls_deploy_tools-0.8.0}/src/dls_deploy_tools.egg-info/top_level.txt +0 -0
  374. {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
  375. {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
  376. /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
  377. {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
  378. {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
  379. {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
  380. {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
@@ -1,5 +1,5 @@
1
1
  # Changes here will be overwritten by Copier
2
- _commit: 5.0.2
2
+ _commit: 5.1.0
3
3
  _src_path: gh:DiamondLightSource/python-copier-template
4
4
  author_email: martin.gaughran@diamond.ac.uk
5
5
  author_name: Martin Gaughran
@@ -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.2/how-to.html).
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: [ "ubuntu-latest" ] # can add windows-latest, macos-latest
22
- python-version: [ "3.12", "3.13", "3.14" ]
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
- "label": "Tests, lint and docs",
9
- "command": "tox -p",
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": "Generate schema",
13
+ "label": "Validate deployment",
17
14
  "type": "shell",
18
- "command": "deploy-tools schema ${input:schema-folder}",
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": "Clean deployment",
25
+ "label": "Compare deployment to snapshot",
29
26
  "type": "shell",
30
- "command": "rm -rf ${workspaceFolder}/demo-output/ && mkdir ${workspaceFolder}/demo-output/",
27
+ "command": "deploy-tools compare ${input:compare-mode} ${input:deploy-folder}",
31
28
  "problemMatcher": []
32
29
  },
33
30
  {
34
- "label": "Validate deployment",
31
+ "label": "Generate schema",
35
32
  "type": "shell",
36
- "command": "deploy-tools validate ${input:allow-all} ${input:from-scratch} ${input:test-build} ${input:deploy-folder} ${input:config-folder}",
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
- "command": "deploy-tools compare ${input:compare-mode} ${input:deploy-folder}",
43
- "problemMatcher": []
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": "Recreate tests sample output from demo_configuration",
48
- "command": "tests/generate_samples.sh",
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.7
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
- Source | <https://github.com/DiamondLightSource/deploy-tools>
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
- python -m deploy_tools validate $deployment_root $config_folder
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
- python -m deploy_tools sync $deployment_root $config_folder
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
- We strongly recommend that you provide a schema for configuration file validation. The relevant lines at the top of each release file are:
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
- ```# yaml-language-server: $schema=/workspaces/deploy-tools/src/deploy_tools/models/schemas/release.json```
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
- |**Term** |**Definition** |
320
- |-------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
321
- |Environment Modules|A [standard package for Linux](https://modules.readthedocs.io/en/latest/) that provides definitions for loading and unloading 'Environment Modules'. Note that while we are using this system, our definition of Module is separate. If we are referring to an Environment Module, we will use the full name|
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
+ [![CI](https://github.com/DiamondLightSource/deploy-tools/actions/workflows/ci.yml/badge.svg)](https://github.com/DiamondLightSource/deploy-tools/actions/workflows/ci.yml)
2
+ [![Coverage](https://codecov.io/gh/DiamondLightSource/deploy-tools/branch/main/graph/badge.svg)](https://codecov.io/gh/DiamondLightSource/deploy-tools)
3
+ [![PyPI](https://img.shields.io/pypi/v/dls-deploy-tools.svg)](https://pypi.org/project/dls-deploy-tools)
4
+ [![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](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.
@@ -0,0 +1,9 @@
1
+ # Command-line interface
2
+
3
+ `deploy-tools` is driven entirely through its command-line interface.
4
+
5
+ ```{typer} deploy_tools.__main__:app
6
+ :prog: deploy-tools
7
+ :make-sections:
8
+ :show-nested:
9
+ ```
@@ -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
- # Both the class’ and the __init__ method’s docstring are concatenated and
77
- # inserted into the main body of the autoclass directive
78
- autoclass_content = "both"
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
- # Document only what is in __all__
87
- autosummary_ignore_module_all = False
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 = {"python": ("https://docs.python.org/3/", None)}
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.