dsoxlab 0.2.3__tar.gz → 0.2.4__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 (324) hide show
  1. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/.github/workflows/appliance.yml +7 -1
  2. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/CHANGELOG.fr.md +15 -0
  3. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/CHANGELOG.md +14 -0
  4. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/PKG-INFO +1 -1
  5. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/pyproject.toml +1 -1
  6. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/uv.lock +1 -1
  7. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/.bestpractices.json +0 -0
  8. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/.github/CODEOWNERS +0 -0
  9. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/.github/FUNDING.yml +0 -0
  10. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  11. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  12. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  13. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  14. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/.github/dependabot.yml +0 -0
  15. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/.github/workflows/ci.yml +0 -0
  16. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/.github/workflows/plumber.yml +0 -0
  17. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/.github/workflows/release.yml +0 -0
  18. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/.github/workflows/scorecard.yml +0 -0
  19. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/.gitignore +0 -0
  20. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/.plumber.yaml +0 -0
  21. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/.poutine.yml +0 -0
  22. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/.pre-commit-config.yaml +0 -0
  23. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/CODE_OF_CONDUCT.fr.md +0 -0
  24. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/CODE_OF_CONDUCT.md +0 -0
  25. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/CONTRIBUTING.fr.md +0 -0
  26. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/CONTRIBUTING.md +0 -0
  27. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/LICENSE +0 -0
  28. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/NOTICE +0 -0
  29. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/README.fr.md +0 -0
  30. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/README.md +0 -0
  31. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/RELEASING.fr.md +0 -0
  32. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/RELEASING.md +0 -0
  33. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/SECURITY.fr.md +0 -0
  34. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/SECURITY.md +0 -0
  35. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/docs/README.fr.md +0 -0
  36. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/docs/README.md +0 -0
  37. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/docs/appliance.fr.md +0 -0
  38. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/docs/appliance.md +0 -0
  39. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/docs/assets/appliance-bureau.png +0 -0
  40. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/docs/assets/appliance-connexion.png +0 -0
  41. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/docs/assets/appliance-lab-vm.png +0 -0
  42. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/docs/assets/brand/dsoxlab-icon-dark.svg +0 -0
  43. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/docs/assets/brand/dsoxlab-icon-mono.svg +0 -0
  44. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/docs/assets/brand/dsoxlab-icon.svg +0 -0
  45. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/docs/assets/brand/dsoxlab-lockup-dark.svg +0 -0
  46. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/docs/assets/brand/dsoxlab-lockup-light.svg +0 -0
  47. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/docs/assets/brand/dsoxlab-lockup-mono.svg +0 -0
  48. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/docs/assets/brand/png/dsoxlab-icon-1024.png +0 -0
  49. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/docs/assets/brand/png/dsoxlab-icon-256.png +0 -0
  50. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/docs/assets/brand/png/dsoxlab-icon-512.png +0 -0
  51. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/docs/assets/brand/png/dsoxlab-icon-dark-1024.png +0 -0
  52. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/docs/assets/brand/png/dsoxlab-icon-dark-512.png +0 -0
  53. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/docs/assets/brand/png/dsoxlab-lockup-dark-1024.png +0 -0
  54. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/docs/assets/brand/png/dsoxlab-lockup-dark-2048.png +0 -0
  55. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/docs/assets/brand/png/dsoxlab-lockup-light-1024.png +0 -0
  56. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/docs/assets/brand/png/dsoxlab-lockup-light-2048.png +0 -0
  57. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/docs/assets/brand/png/dsoxlab-social-preview-dark.png +0 -0
  58. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/docs/assets/brand/png/dsoxlab-social-preview.png +0 -0
  59. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/docs/brand.fr.md +0 -0
  60. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/docs/brand.md +0 -0
  61. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/docs/catalog-author.fr.md +0 -0
  62. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/docs/catalog-author.md +0 -0
  63. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/docs/commands.fr.md +0 -0
  64. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/docs/commands.md +0 -0
  65. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/docs/contract-v1.fr.md +0 -0
  66. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/docs/contract-v1.md +0 -0
  67. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/docs/demo.gif +0 -0
  68. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/docs/demo.tape +0 -0
  69. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/docs/exit-codes.fr.md +0 -0
  70. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/docs/exit-codes.md +0 -0
  71. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/docs/files.fr.md +0 -0
  72. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/docs/files.md +0 -0
  73. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/docs/infra-only.fr.md +0 -0
  74. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/docs/infra-only.md +0 -0
  75. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/docs/learner.fr.md +0 -0
  76. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/docs/learner.md +0 -0
  77. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/docs/machine-output.fr.md +0 -0
  78. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/docs/machine-output.md +0 -0
  79. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/docs/trainer.fr.md +0 -0
  80. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/docs/trainer.md +0 -0
  81. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/fuzz/corpus/context_json/champ-inconnu.json +0 -0
  82. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/fuzz/corpus/context_json/complet.json +0 -0
  83. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/fuzz/corpus/context_json/position-negative.json +0 -0
  84. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/fuzz/corpus/context_json/position-non-numerique.json +0 -0
  85. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/fuzz/corpus/context_json/racine-chaine.json +0 -0
  86. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/fuzz/corpus/context_json/racine-liste.json +0 -0
  87. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/fuzz/corpus/context_json/racine-nulle.json +0 -0
  88. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/fuzz/corpus/context_json/section-liste.json +0 -0
  89. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/fuzz/corpus/context_json/tronque.json +0 -0
  90. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/fuzz/corpus/context_json/vide.json +0 -0
  91. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/fuzz/corpus/lab_yaml/capstone-exam-score.yaml +0 -0
  92. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/fuzz/corpus/lab_yaml/schema-version-courante.yaml +0 -0
  93. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/fuzz/corpus/lab_yaml/schema-version-future.yaml +0 -0
  94. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/fuzz/corpus/lab_yaml/schema-version-mauvais-type.yaml +0 -0
  95. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/fuzz/corpus/lab_yaml/shell-fixtures-nested.yaml +0 -0
  96. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/fuzz/corpus/lab_yaml/shell-minimal.yaml +0 -0
  97. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/fuzz/corpus/lab_yaml/shell-services-init.yaml +0 -0
  98. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/fuzz/corpus/lab_yaml/shell-services.yaml +0 -0
  99. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/fuzz/corpus/lab_yaml/vm-multi-target.yaml +0 -0
  100. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/fuzz/corpus/lab_yaml/vm-snapshot-requis.yaml +0 -0
  101. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/fuzz/corpus/meta_yml/full-infra.yml +0 -0
  102. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/fuzz/corpus/meta_yml/schema-version-courante.yml +0 -0
  103. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/fuzz/corpus/meta_yml/schema-version-future.yml +0 -0
  104. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/fuzz/corpus/terraform_outputs/avec-bastion.json +0 -0
  105. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/fuzz/corpus/terraform_outputs/bastion-sans-ip.json +0 -0
  106. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/fuzz/corpus/terraform_outputs/hosts-liste.json +0 -0
  107. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/fuzz/corpus/terraform_outputs/ip-numerique.json +0 -0
  108. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/fuzz/corpus/terraform_outputs/outputs-aplatis.json +0 -0
  109. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/fuzz/corpus/terraform_outputs/outputs-encapsules.json +0 -0
  110. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/fuzz/corpus/terraform_outputs/sans-hosts.json +0 -0
  111. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/fuzz/corpus/terraform_outputs/value-non-objet.json +0 -0
  112. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/fuzz/corpus/terraform_outputs/vide.json +0 -0
  113. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/fuzz/dict/yaml_contract.dict +0 -0
  114. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/fuzz/fuzz_context_json.py +0 -0
  115. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/fuzz/fuzz_lab_yaml.py +0 -0
  116. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/fuzz/fuzz_meta_yaml.py +0 -0
  117. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/fuzz/fuzz_terraform_outputs.py +0 -0
  118. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/packer/README.md +0 -0
  119. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/packer/dsoxlab-appliance.pkr.hcl +0 -0
  120. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/packer/faire-ova.sh +0 -0
  121. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/packer/http/preseed.cfg +0 -0
  122. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/packer/scripts/10-base.sh +0 -0
  123. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/packer/scripts/20-outils.sh +0 -0
  124. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/packer/scripts/30-premier-demarrage.sh +0 -0
  125. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/packer/scripts/40-reseau-portable.sh +0 -0
  126. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/packer/scripts/90-nettoyage.sh +0 -0
  127. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/schemas/lab.schema.json +0 -0
  128. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/schemas/meta.schema.json +0 -0
  129. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/scripts/check-release.py +0 -0
  130. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/scripts/generer-doc.py +0 -0
  131. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/scripts/generer-png-marque.py +0 -0
  132. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/scripts/parcours-distribution.py +0 -0
  133. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/__init__.py +0 -0
  134. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/cli/__init__.py +0 -0
  135. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/cli/_amorcage.py +0 -0
  136. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/cli/_barres.py +0 -0
  137. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/cli/_commun.py +0 -0
  138. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/cli/_socle.py +0 -0
  139. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/cli/_validation.py +0 -0
  140. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/cli/auteur.py +0 -0
  141. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/cli/catalogues.py +0 -0
  142. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/cli/contexte.py +0 -0
  143. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/cli/demarrage.py +0 -0
  144. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/cli/destruction.py +0 -0
  145. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/cli/diagnostic.py +0 -0
  146. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/cli/etat.py +0 -0
  147. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/cli/indices.py +0 -0
  148. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/cli/infrastructure.py +0 -0
  149. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/cli/instructeur.py +0 -0
  150. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/cli/parcours.py +0 -0
  151. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/cli/progression.py +0 -0
  152. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/config.py +0 -0
  153. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/discovery/__init__.py +0 -0
  154. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/discovery/repo.py +0 -0
  155. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/discovery/scanner.py +0 -0
  156. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/exit_codes.py +0 -0
  157. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/i18n/__init__.py +0 -0
  158. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/i18n/strings/__init__.py +0 -0
  159. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/i18n/strings/en.py +0 -0
  160. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/i18n/strings/fr.py +0 -0
  161. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/infra/__init__.py +0 -0
  162. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/infra/ansible.py +0 -0
  163. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/infra/credentials.py +0 -0
  164. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/infra/inventory.py +0 -0
  165. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/infra/libvirt.py +0 -0
  166. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/infra/pont.py +0 -0
  167. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/infra/snapshot/__init__.py +0 -0
  168. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/infra/snapshot/kvm.py +0 -0
  169. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/infra/terraform.py +0 -0
  170. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/interrupt.py +0 -0
  171. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/locking.py +0 -0
  172. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/logging_setup.py +0 -0
  173. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/models/__init__.py +0 -0
  174. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/models/_contract.py +0 -0
  175. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/models/course.py +0 -0
  176. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/models/hint.py +0 -0
  177. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/models/lab.py +0 -0
  178. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/models/repo.py +0 -0
  179. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/models/runtime.py +0 -0
  180. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/models/schema_version.py +0 -0
  181. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/py.typed +0 -0
  182. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/reporting/__init__.py +0 -0
  183. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/reporting/console.py +0 -0
  184. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/reporting/machine.py +0 -0
  185. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/runtimes/__init__.py +0 -0
  186. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/runtimes/base.py +0 -0
  187. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/runtimes/manager.py +0 -0
  188. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/runtimes/services.py +0 -0
  189. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/runtimes/shell.py +0 -0
  190. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/runtimes/vm.py +0 -0
  191. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/services/__init__.py +0 -0
  192. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/services/catalog.py +0 -0
  193. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/services/demo.py +0 -0
  194. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/services/doctor.py +0 -0
  195. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/services/guide_service.py +0 -0
  196. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/services/host_diagnosis.py +0 -0
  197. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/services/issue_service.py +0 -0
  198. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/services/lab_service.py +0 -0
  199. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/services/lab_state.py +0 -0
  200. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/services/progress_service.py +0 -0
  201. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/services/scaffold.py +0 -0
  202. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/services/support.py +0 -0
  203. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/services/update_check.py +0 -0
  204. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/sessions/__init__.py +0 -0
  205. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/sessions/store.py +0 -0
  206. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/templates/__init__.py +0 -0
  207. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/templates/catalogues.yml +0 -0
  208. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/templates/cloud-init/README.md +0 -0
  209. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/templates/cloud-init/almalinux.yaml.tmpl +0 -0
  210. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/templates/cloud-init/debian.yaml.tmpl +0 -0
  211. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/templates/cloud-init/ubuntu.yaml.tmpl +0 -0
  212. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/templates/demo/labs/demo/premiers-pas/README.fr.md +0 -0
  213. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/templates/demo/labs/demo/premiers-pas/README.md +0 -0
  214. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/templates/demo/labs/demo/premiers-pas/challenge/README.fr.md +0 -0
  215. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/templates/demo/labs/demo/premiers-pas/challenge/README.md +0 -0
  216. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/templates/demo/labs/demo/premiers-pas/challenge/hints.yaml +0 -0
  217. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/templates/demo/labs/demo/premiers-pas/challenge/tests/conftest.py +0 -0
  218. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/templates/demo/labs/demo/premiers-pas/challenge/tests/test_functional.py +0 -0
  219. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/templates/demo/labs/demo/premiers-pas/lab.fr.yaml +0 -0
  220. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/templates/demo/labs/demo/premiers-pas/lab.yaml +0 -0
  221. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/templates/demo/labs/demo/premiers-pas/scenario.fr.md +0 -0
  222. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/templates/demo/labs/demo/premiers-pas/scenario.md +0 -0
  223. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/templates/demo/meta.fr.yml +0 -0
  224. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/templates/demo/meta.yml +0 -0
  225. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/templates/terraform/README.md +0 -0
  226. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/templates/terraform/incus/main.tf +0 -0
  227. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/templates/terraform/incus/outputs.tf +0 -0
  228. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/templates/terraform/incus/variables.tf +0 -0
  229. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/templates/terraform/incus/versions.tf +0 -0
  230. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/templates/terraform/kvm/main.tf +0 -0
  231. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/templates/terraform/kvm/outputs.tf +0 -0
  232. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/templates/terraform/kvm/variables.tf +0 -0
  233. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/templates/terraform/kvm/versions.tf +0 -0
  234. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/templates/terraform/outscale/main.tf +0 -0
  235. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/templates/terraform/outscale/outputs.tf +0 -0
  236. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/templates/terraform/outscale/variables.tf +0 -0
  237. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/templates/terraform/outscale/versions.tf +0 -0
  238. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/utils/__init__.py +0 -0
  239. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/utils/fichiers.py +0 -0
  240. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/utils/shell.py +0 -0
  241. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/validators/__init__.py +0 -0
  242. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/validators/content.py +0 -0
  243. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/validators/contract.py +0 -0
  244. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/validators/metadata.py +0 -0
  245. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/src/dsoxlab/validators/structure.py +0 -0
  246. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/tests/__init__.py +0 -0
  247. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/tests/conftest.py +0 -0
  248. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/tests/test_ansible_availability.py +0 -0
  249. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/tests/test_catalog.py +0 -0
  250. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/tests/test_check_release.py +0 -0
  251. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/tests/test_ci_valide_les_templates.py +0 -0
  252. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/tests/test_cles_i18n_existantes.py +0 -0
  253. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/tests/test_cli_smoke.py +0 -0
  254. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/tests/test_cloud_init_degrade.py +0 -0
  255. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/tests/test_cloud_init_incus_agent.py +0 -0
  256. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/tests/test_cloud_init_templates.py +0 -0
  257. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/tests/test_codes_de_sortie.py +0 -0
  258. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/tests/test_commande_absente.py +0 -0
  259. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/tests/test_completion.py +0 -0
  260. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/tests/test_conteneurs_engendres.py +0 -0
  261. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/tests/test_contrat_honore.py +0 -0
  262. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/tests/test_convention_de_nommage.py +0 -0
  263. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/tests/test_demo.py +0 -0
  264. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/tests/test_description_alignee.py +0 -0
  265. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/tests/test_doc_auteur_couvre_les_controles.py +0 -0
  266. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/tests/test_doctor.py +0 -0
  267. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/tests/test_doctor_explique.py +0 -0
  268. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/tests/test_doctor_fix.py +0 -0
  269. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/tests/test_doctor_installation.py +0 -0
  270. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/tests/test_doctor_prerequis_vm.py +0 -0
  271. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/tests/test_doctor_strict.py +0 -0
  272. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/tests/test_documentation_synchrone.py +0 -0
  273. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/tests/test_etat_libvirt.py +0 -0
  274. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/tests/test_executable_absent.py +0 -0
  275. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/tests/test_fixtures_declarees.py +0 -0
  276. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/tests/test_guide_service.py +0 -0
  277. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/tests/test_host_ready_timeout.py +0 -0
  278. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/tests/test_i18n_coverage.py +0 -0
  279. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/tests/test_i18n_validators.py +0 -0
  280. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/tests/test_incus_pool.py +0 -0
  281. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/tests/test_install_et_contexte.py +0 -0
  282. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/tests/test_instructor_bootstrap.py +0 -0
  283. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/tests/test_interruption.py +0 -0
  284. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/tests/test_issue_service.py +0 -0
  285. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/tests/test_journal_en_anglais.py +0 -0
  286. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/tests/test_journalisation.py +0 -0
  287. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/tests/test_json_output.py +0 -0
  288. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/tests/test_json_schemas.py +0 -0
  289. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/tests/test_kvm_disques_apparmor.py +0 -0
  290. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/tests/test_lab_state.py +0 -0
  291. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/tests/test_moteur_injoignable.py +0 -0
  292. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/tests/test_nom_de_pont.py +0 -0
  293. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/tests/test_note_sans_mesure.py +0 -0
  294. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/tests/test_outputs_terraform.py +0 -0
  295. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/tests/test_pager.py +0 -0
  296. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/tests/test_parcours_distribution.py +0 -0
  297. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/tests/test_progress_service.py +0 -0
  298. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/tests/test_provision_ciblee.py +0 -0
  299. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/tests/test_provision_et_json_services.py +0 -0
  300. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/tests/test_repertoire_de_travail_annonce.py +0 -0
  301. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/tests/test_scaffold.py +0 -0
  302. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/tests/test_schema_version.py +0 -0
  303. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/tests/test_schemas_sur_documents.py +0 -0
  304. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/tests/test_services.py +0 -0
  305. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/tests/test_session_spec.py +0 -0
  306. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/tests/test_shell_fixtures.py +0 -0
  307. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/tests/test_snapshot_kvm.py +0 -0
  308. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/tests/test_sondes_des_tests_docker.py +0 -0
  309. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/tests/test_sondes_virsh.py +0 -0
  310. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/tests/test_stack_infra.py +0 -0
  311. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/tests/test_start_sequence.py +0 -0
  312. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/tests/test_support.py +0 -0
  313. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/tests/test_support_en_anglais.py +0 -0
  314. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/tests/test_update_check.py +0 -0
  315. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/tests/test_validator_voit_tout.py +0 -0
  316. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/tests/test_validators_content.py +0 -0
  317. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/tests/test_verrou_depot.py +0 -0
  318. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/tests/test_versions_supportees.py +0 -0
  319. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/tests/test_yaml_contract.py +0 -0
  320. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/tests_e2e/conftest.py +0 -0
  321. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/tests_e2e/pytest.ini +0 -0
  322. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/tests_e2e/test_boite_noire.py +0 -0
  323. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/tests_e2e/test_installation.py +0 -0
  324. {dsoxlab-0.2.3 → dsoxlab-0.2.4}/tests_e2e/test_parcours.py +0 -0
@@ -110,9 +110,15 @@ jobs:
110
110
  # this workflow died on exactly that, four hundredths of a second in —
111
111
  # a defect no local build could show, since the directory exists and is
112
112
  # writable on a developer's machine.
113
+ #
114
+ # `out/` is deliberately NOT created: Packer refuses to start when its
115
+ # output directory already exists ("It must not exist"), which is how
116
+ # it guarantees it never writes over a previous build. Creating it here
117
+ # traded one failure for another, one step later — measured on the
118
+ # second real run.
113
119
  run: |
114
120
  set -euo pipefail
115
- sudo mkdir -p "${BUILD_DIR}/out" "${BUILD_DIR}/tmp"
121
+ sudo mkdir -p "${BUILD_DIR}/tmp"
116
122
  sudo chown -R "$(id -u):$(id -g)" "${BUILD_DIR}"
117
123
  df -h "${BUILD_DIR}"
118
124
 
@@ -9,6 +9,21 @@ et le projet suit le [versionnage sémantique](https://semver.org/lang/fr/).
9
9
 
10
10
  ## [Non publié]
11
11
 
12
+ ## [0.2.4] - 2026-09-26
13
+
14
+ ### Corrigé
15
+
16
+ - **Le build de l'appliance a avancé d'une étape, et s'est arrêté sur la
17
+ précédente.** `/mnt` étant enfin accessible en écriture, c'est Packer qui a
18
+ refusé de démarrer : *Output directory '/mnt/appliance/out' already exists.
19
+ It must not exist.* Ce refus est une qualité — c'est ainsi que Packer
20
+ garantit qu'il n'écrase jamais un build précédent — et l'étape de
21
+ préparation créait précisément ce répertoire. Elle ne crée plus que le
22
+ parent et le répertoire temporaire, et laisse `out/` à Packer. Deux échecs
23
+ de suite au même endroit disent quelque chose qu'il vaut la peine de
24
+ retenir : un workflow qui n'a jamais tourné est un workflow qui ne marche
25
+ pas, et le seul moyen de le savoir est de le jouer.
26
+
12
27
  ## [0.2.3] - 2026-09-26
13
28
 
14
29
  ### Corrigé
@@ -9,6 +9,20 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
9
9
 
10
10
  ## [Unreleased]
11
11
 
12
+ ## [0.2.4] - 2026-09-26
13
+
14
+ ### Fixed
15
+
16
+ - **The appliance build got one step further, and stopped on the step before.**
17
+ With `/mnt` finally writable, Packer refused to start: *Output directory
18
+ '/mnt/appliance/out' already exists. It must not exist.* That refusal is a
19
+ feature — it is how Packer guarantees it never writes over a previous
20
+ build — and the preparation step was creating that very directory. It now
21
+ creates only the parent and the temporary directory, and leaves `out/` to
22
+ Packer. Two failures in a row at the same place say something worth keeping:
23
+ a workflow that has never run is a workflow that does not work, and the only
24
+ way to know is to run it.
25
+
12
26
  ## [0.2.3] - 2026-09-26
13
27
 
14
28
  ### Fixed
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: dsoxlab
3
- Version: 0.2.3
3
+ Version: 0.2.4
4
4
  Summary: Turn declarative exercises into reproducible, runnable and verifiable lab environments
5
5
  Project-URL: Homepage, https://blog.stephane-robert.info/
6
6
  Project-URL: Documentation, https://github.com/stephrobert/dsoxlab/blob/main/docs/README.md
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "dsoxlab"
7
- version = "0.2.3"
7
+ version = "0.2.4"
8
8
  description = "Turn declarative exercises into reproducible, runnable and verifiable lab environments"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11"
@@ -290,7 +290,7 @@ wheels = [
290
290
 
291
291
  [[package]]
292
292
  name = "dsoxlab"
293
- version = "0.2.3"
293
+ version = "0.2.4"
294
294
  source = { editable = "." }
295
295
  dependencies = [
296
296
  { name = "ansible-core" },
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes