diracx 0.0.1a48__tar.gz → 0.0.1a50__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 (455) hide show
  1. {diracx-0.0.1a48 → diracx-0.0.1a50}/.github/workflows/deployment.yml +89 -8
  2. diracx-0.0.1a50/.github/workflows/generate_pixi_tasks_doc.py +61 -0
  3. {diracx-0.0.1a48 → diracx-0.0.1a50}/.github/workflows/integration.yml +2 -2
  4. {diracx-0.0.1a48 → diracx-0.0.1a50}/.github/workflows/main.yml +14 -34
  5. diracx-0.0.1a50/.github/workflows/update_chart_version.py +158 -0
  6. {diracx-0.0.1a48 → diracx-0.0.1a50}/.github/workflows/update_security_txt_expiry.yml +2 -2
  7. {diracx-0.0.1a48 → diracx-0.0.1a50}/.github/workflows/vulnerabilities.yml +5 -5
  8. {diracx-0.0.1a48 → diracx-0.0.1a50}/.pre-commit-config.yaml +24 -3
  9. diracx-0.0.1a50/.readthedocs.yaml +25 -0
  10. {diracx-0.0.1a48 → diracx-0.0.1a50}/PKG-INFO +1 -1
  11. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-cli/tests/legacy/cs_sync/integration_test.yaml +6 -94
  12. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-cli/tests/legacy/cs_sync/test_cssync.py +6 -1
  13. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-client/src/diracx/client/_generated/models/_models.py +9 -0
  14. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-client/src/diracx/client/patches/jobs/aio.py +20 -2
  15. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-client/src/diracx/client/patches/jobs/common.py +51 -2
  16. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-client/src/diracx/client/patches/jobs/sync.py +20 -2
  17. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-core/pyproject.toml +4 -0
  18. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-core/src/diracx/core/config/schema.py +95 -7
  19. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-core/src/diracx/core/extensions.py +38 -0
  20. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-core/src/diracx/core/models.py +23 -6
  21. diracx-0.0.1a50/diracx-core/src/diracx/core/resources.py +30 -0
  22. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-core/src/diracx/core/utils.py +37 -2
  23. diracx-0.0.1a50/diracx-core/tests/test_entry_points.py +71 -0
  24. diracx-0.0.1a50/diracx-core/tests/test_extensions.py +138 -0
  25. diracx-0.0.1a50/diracx-core/tests/test_resources.py +93 -0
  26. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-core/tests/test_utils.py +14 -0
  27. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-db/src/diracx/db/sql/auth/schema.py +6 -2
  28. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-db/src/diracx/db/sql/utils/__init__.py +15 -11
  29. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-db/src/diracx/db/sql/utils/base.py +33 -1
  30. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-db/tests/auth/test_refresh_token.py +0 -2
  31. diracx-0.0.1a50/diracx-db/tests/utils/test_uuid.py +221 -0
  32. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-logic/pyproject.toml +1 -1
  33. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-logic/src/diracx/logic/auth/token.py +16 -12
  34. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-logic/src/diracx/logic/jobs/query.py +7 -9
  35. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-logic/src/diracx/logic/jobs/status.py +23 -24
  36. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-logic/src/diracx/logic/jobs/submission.py +18 -7
  37. diracx-0.0.1a50/diracx-logic/src/diracx/logic/jobs/utils.py +80 -0
  38. diracx-0.0.1a50/diracx-logic/tests/jobs/test_status.py +160 -0
  39. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-routers/pyproject.toml +1 -1
  40. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-routers/src/diracx/routers/auth/authorize_code_flow.py +1 -30
  41. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-routers/src/diracx/routers/auth/device_flow.py +1 -50
  42. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-routers/src/diracx/routers/jobs/query.py +7 -1
  43. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-routers/src/diracx/routers/jobs/submission.py +3 -1
  44. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-routers/tests/auth/test_standard.py +1 -2
  45. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-routers/tests/jobs/test_query.py +4 -6
  46. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-routers/tests/jobs/test_sandboxes.py +1 -0
  47. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-routers/tests/jobs/test_status.py +2 -43
  48. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-testing/pyproject.toml +1 -0
  49. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-testing/src/diracx/testing/utils.py +1 -1
  50. diracx-0.0.1a50/docs/SECURITY.md +4 -0
  51. diracx-0.0.1a50/docs/admin/explanations/auth-with-diracx.md +324 -0
  52. diracx-0.0.1a50/docs/admin/explanations/auth-with-external.md +32 -0
  53. diracx-0.0.1a50/docs/admin/how-to/install/embracing.md +128 -0
  54. diracx-0.0.1a50/docs/admin/how-to/install/index.md +16 -0
  55. diracx-0.0.1a50/docs/admin/how-to/install/minimal-requirements.md +15 -0
  56. diracx-0.0.1a50/docs/admin/how-to/install/register-a-vo.md +92 -0
  57. diracx-0.0.1a50/docs/admin/how-to/install/register-the-admin-vo.md +158 -0
  58. diracx-0.0.1a50/docs/admin/reference/env-variables.md +39 -0
  59. diracx-0.0.1a50/docs/admin/reference/settings-and-preferences.md +7 -0
  60. {diracx-0.0.1a48/docs/dev/explanations → diracx-0.0.1a50/docs/dev/explanations/components}/client.md +3 -3
  61. {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/dev/explanations/components/db.md +1 -1
  62. {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/dev/explanations/components/index.md +2 -2
  63. {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/dev/explanations/components/routes.md +7 -5
  64. {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/dev/explanations/extensions.md +27 -18
  65. diracx-0.0.1a50/docs/dev/how-to/client-generation.md +13 -0
  66. {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/dev/how-to/contribute.md +4 -4
  67. {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/dev/reference/dependency-injection.md +1 -1
  68. diracx-0.0.1a50/docs/dev/reference/entrypoints.md +42 -0
  69. diracx-0.0.1a50/docs/dev/reference/env-variables.md +5 -0
  70. diracx-0.0.1a50/docs/dev/reference/pixi-tasks.md +53 -0
  71. {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/dev/tutorials/getting-started.md +2 -2
  72. {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/dev/tutorials/run-locally.md +1 -1
  73. diracx-0.0.1a50/docs/user/index.md +10 -0
  74. {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/user/reference/known-installations.md +12 -2
  75. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/containers/services/Dockerfile +2 -1
  76. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/.github/workflows/main.yml +0 -8
  77. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/models/_models.py +9 -0
  78. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/pyproject.toml +1 -1
  79. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins_values.yaml +1 -0
  80. {diracx-0.0.1a48 → diracx-0.0.1a50}/mkdocs.yml +58 -8
  81. {diracx-0.0.1a48 → diracx-0.0.1a50}/pixi.toml +26 -3
  82. {diracx-0.0.1a48 → diracx-0.0.1a50}/pyproject.toml +1 -1
  83. diracx-0.0.1a50/release.notes.new +22 -0
  84. {diracx-0.0.1a48 → diracx-0.0.1a50}/tests/make_token_local.py +6 -4
  85. diracx-0.0.1a48/.readthedocs.yaml +0 -16
  86. diracx-0.0.1a48/diracx-core/tests/test_extensions.py +0 -8
  87. diracx-0.0.1a48/diracx-logic/src/diracx/logic/jobs/utils.py +0 -40
  88. diracx-0.0.1a48/docs/SECURITY.md +0 -3
  89. diracx-0.0.1a48/docs/admin/explanations/authentication.md +0 -3
  90. diracx-0.0.1a48/docs/admin/how-to/install/register-a-vo.md +0 -85
  91. diracx-0.0.1a48/docs/admin/how-to/install/register-the-admin-vo.md +0 -96
  92. diracx-0.0.1a48/docs/admin/reference/settings-and-preferences.md +0 -0
  93. diracx-0.0.1a48/docs/assets/images/pic02.jpg +0 -0
  94. diracx-0.0.1a48/docs/dev/how-to/client-generation.md +0 -2
  95. diracx-0.0.1a48/docs/dev/reference/entrypoints.md +0 -3
  96. diracx-0.0.1a48/docs/dev/reference/pixi-tasks.md +0 -3
  97. diracx-0.0.1a48/docs/user/index.md +0 -3
  98. diracx-0.0.1a48/release.notes.new +0 -9
  99. {diracx-0.0.1a48 → diracx-0.0.1a50}/.coveragerc +0 -0
  100. {diracx-0.0.1a48 → diracx-0.0.1a50}/.gitattributes +0 -0
  101. {diracx-0.0.1a48 → diracx-0.0.1a50}/.github/dependabot.yml +0 -0
  102. {diracx-0.0.1a48 → diracx-0.0.1a50}/.github/workflows/make_release.py +0 -0
  103. {diracx-0.0.1a48 → diracx-0.0.1a50}/.gitignore +0 -0
  104. {diracx-0.0.1a48 → diracx-0.0.1a50}/LICENSE +0 -0
  105. {diracx-0.0.1a48 → diracx-0.0.1a50}/MANIFEST.in +0 -0
  106. {diracx-0.0.1a48 → diracx-0.0.1a50}/README.md +0 -0
  107. {diracx-0.0.1a48 → diracx-0.0.1a50}/codecov.yml +0 -0
  108. {diracx-0.0.1a48 → diracx-0.0.1a50}/containers/client/Dockerfile +0 -0
  109. {diracx-0.0.1a48 → diracx-0.0.1a50}/containers/services/Dockerfile +0 -0
  110. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-api/README.md +0 -0
  111. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-api/pyproject.toml +0 -0
  112. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-api/src/diracx/api/__init__.py +0 -0
  113. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-api/src/diracx/api/jobs.py +0 -0
  114. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-api/src/diracx/api/py.typed +0 -0
  115. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-api/src/diracx/api/utils.py +0 -0
  116. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-api/tests/test_jobs.py +0 -0
  117. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-api/tests/test_utils.py +0 -0
  118. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-cli/README.md +0 -0
  119. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-cli/pyproject.toml +0 -0
  120. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-cli/src/diracx/cli/__init__.py +0 -0
  121. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-cli/src/diracx/cli/__main__.py +0 -0
  122. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-cli/src/diracx/cli/auth.py +0 -0
  123. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-cli/src/diracx/cli/config.py +0 -0
  124. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-cli/src/diracx/cli/internal/__init__.py +0 -0
  125. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-cli/src/diracx/cli/internal/config.py +0 -0
  126. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-cli/src/diracx/cli/internal/legacy.py +0 -0
  127. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-cli/src/diracx/cli/jobs.py +0 -0
  128. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-cli/src/diracx/cli/py.typed +0 -0
  129. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-cli/src/diracx/cli/utils.py +0 -0
  130. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-cli/tests/legacy/cs_sync/integration_test.cfg +0 -0
  131. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-cli/tests/legacy/cs_sync/integration_test_buggy.cfg +0 -0
  132. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-cli/tests/legacy/cs_sync/integration_test_secret.cfg +0 -0
  133. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-cli/tests/legacy/test_legacy.py +0 -0
  134. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-cli/tests/test_internal.py +0 -0
  135. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-cli/tests/test_jobs.py +0 -0
  136. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-cli/tests/test_login.py +0 -0
  137. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-client/README.md +0 -0
  138. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-client/pyproject.toml +0 -0
  139. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-client/src/_diracx_client_importer.pth +0 -0
  140. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-client/src/diracx/_client_importer.py +0 -0
  141. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-client/src/diracx/client/__init__.py +0 -0
  142. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-client/src/diracx/client/_generated/__init__.py +0 -0
  143. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-client/src/diracx/client/_generated/_client.py +0 -0
  144. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-client/src/diracx/client/_generated/_configuration.py +0 -0
  145. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-client/src/diracx/client/_generated/_patch.py +0 -0
  146. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-client/src/diracx/client/_generated/_serialization.py +0 -0
  147. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-client/src/diracx/client/_generated/_utils/__init__.py +0 -0
  148. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-client/src/diracx/client/_generated/_utils/serialization.py +0 -0
  149. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-client/src/diracx/client/_generated/_utils/utils.py +0 -0
  150. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-client/src/diracx/client/_generated/_vendor.py +0 -0
  151. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-client/src/diracx/client/_generated/aio/__init__.py +0 -0
  152. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-client/src/diracx/client/_generated/aio/_client.py +0 -0
  153. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-client/src/diracx/client/_generated/aio/_configuration.py +0 -0
  154. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-client/src/diracx/client/_generated/aio/_patch.py +0 -0
  155. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-client/src/diracx/client/_generated/aio/_vendor.py +0 -0
  156. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-client/src/diracx/client/_generated/aio/operations/__init__.py +0 -0
  157. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-client/src/diracx/client/_generated/aio/operations/_operations.py +0 -0
  158. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-client/src/diracx/client/_generated/aio/operations/_patch.py +0 -0
  159. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-client/src/diracx/client/_generated/models/__init__.py +0 -0
  160. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-client/src/diracx/client/_generated/models/_enums.py +0 -0
  161. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-client/src/diracx/client/_generated/models/_patch.py +0 -0
  162. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-client/src/diracx/client/_generated/operations/__init__.py +0 -0
  163. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-client/src/diracx/client/_generated/operations/_operations.py +0 -0
  164. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-client/src/diracx/client/_generated/operations/_patch.py +0 -0
  165. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-client/src/diracx/client/_generated/py.typed +0 -0
  166. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-client/src/diracx/client/aio.py +0 -0
  167. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-client/src/diracx/client/models.py +0 -0
  168. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-client/src/diracx/client/patches/auth/aio.py +0 -0
  169. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-client/src/diracx/client/patches/auth/common.py +0 -0
  170. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-client/src/diracx/client/patches/auth/sync.py +0 -0
  171. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-client/src/diracx/client/patches/client/aio.py +0 -0
  172. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-client/src/diracx/client/patches/client/common.py +0 -0
  173. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-client/src/diracx/client/patches/client/sync.py +0 -0
  174. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-client/src/diracx/client/patches/utils.py +0 -0
  175. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-client/src/diracx/client/py.typed +0 -0
  176. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-client/src/diracx/client/sync.py +0 -0
  177. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-client/tests/test_auth.py +0 -0
  178. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-core/README.md +0 -0
  179. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-core/src/diracx/core/__init__.py +0 -0
  180. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-core/src/diracx/core/config/__init__.py +0 -0
  181. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-core/src/diracx/core/config/sources.py +0 -0
  182. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-core/src/diracx/core/exceptions.py +0 -0
  183. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-core/src/diracx/core/preferences.py +0 -0
  184. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-core/src/diracx/core/properties.py +0 -0
  185. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-core/src/diracx/core/py.typed +0 -0
  186. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-core/src/diracx/core/s3.py +0 -0
  187. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-core/src/diracx/core/settings.py +0 -0
  188. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-core/tests/test_config_source.py +0 -0
  189. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-core/tests/test_s3.py +0 -0
  190. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-core/tests/test_secrets.py +0 -0
  191. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-db/README.md +0 -0
  192. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-db/pyproject.toml +0 -0
  193. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-db/src/diracx/db/__init__.py +0 -0
  194. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-db/src/diracx/db/__main__.py +0 -0
  195. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-db/src/diracx/db/exceptions.py +0 -0
  196. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-db/src/diracx/db/os/__init__.py +0 -0
  197. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-db/src/diracx/db/os/job_parameters.py +0 -0
  198. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-db/src/diracx/db/os/utils.py +0 -0
  199. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-db/src/diracx/db/py.typed +0 -0
  200. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-db/src/diracx/db/sql/__init__.py +0 -0
  201. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-db/src/diracx/db/sql/auth/__init__.py +0 -0
  202. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-db/src/diracx/db/sql/auth/db.py +0 -0
  203. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-db/src/diracx/db/sql/dummy/__init__.py +0 -0
  204. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-db/src/diracx/db/sql/dummy/db.py +0 -0
  205. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-db/src/diracx/db/sql/dummy/schema.py +0 -0
  206. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-db/src/diracx/db/sql/job/__init__.py +0 -0
  207. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-db/src/diracx/db/sql/job/db.py +0 -0
  208. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-db/src/diracx/db/sql/job/schema.py +0 -0
  209. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-db/src/diracx/db/sql/job_logging/__init__.py +0 -0
  210. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-db/src/diracx/db/sql/job_logging/db.py +0 -0
  211. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-db/src/diracx/db/sql/job_logging/schema.py +0 -0
  212. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-db/src/diracx/db/sql/pilot_agents/__init__.py +0 -0
  213. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-db/src/diracx/db/sql/pilot_agents/db.py +0 -0
  214. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-db/src/diracx/db/sql/pilot_agents/schema.py +0 -0
  215. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-db/src/diracx/db/sql/sandbox_metadata/__init__.py +0 -0
  216. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-db/src/diracx/db/sql/sandbox_metadata/db.py +0 -0
  217. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-db/src/diracx/db/sql/sandbox_metadata/schema.py +0 -0
  218. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-db/src/diracx/db/sql/task_queue/__init__.py +0 -0
  219. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-db/src/diracx/db/sql/task_queue/db.py +0 -0
  220. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-db/src/diracx/db/sql/task_queue/schema.py +0 -0
  221. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-db/src/diracx/db/sql/utils/functions.py +0 -0
  222. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-db/src/diracx/db/sql/utils/types.py +0 -0
  223. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-db/tests/auth/test_authorization_flow.py +0 -0
  224. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-db/tests/auth/test_device_flow.py +0 -0
  225. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-db/tests/jobs/test_job_db.py +0 -0
  226. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-db/tests/jobs/test_job_logging_db.py +0 -0
  227. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-db/tests/jobs/test_sandbox_metadata.py +0 -0
  228. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-db/tests/opensearch/test_connection.py +0 -0
  229. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-db/tests/opensearch/test_index_template.py +0 -0
  230. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-db/tests/opensearch/test_search.py +0 -0
  231. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-db/tests/pilot_agents/__init__.py +0 -0
  232. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-db/tests/pilot_agents/test_pilot_agents_db.py +0 -0
  233. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-db/tests/test_dummy_db.py +0 -0
  234. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-db/tests/test_freeze_time.py +0 -0
  235. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-logic/README.md +0 -0
  236. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-logic/src/diracx/logic/__init__.py +0 -0
  237. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-logic/src/diracx/logic/__main__.py +0 -0
  238. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-logic/src/diracx/logic/auth/__init__.py +0 -0
  239. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-logic/src/diracx/logic/auth/authorize_code_flow.py +0 -0
  240. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-logic/src/diracx/logic/auth/device_flow.py +0 -0
  241. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-logic/src/diracx/logic/auth/management.py +0 -0
  242. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-logic/src/diracx/logic/auth/utils.py +0 -0
  243. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-logic/src/diracx/logic/auth/well_known.py +0 -0
  244. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-logic/src/diracx/logic/jobs/__init__.py +0 -0
  245. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-logic/src/diracx/logic/jobs/sandboxes.py +0 -0
  246. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-logic/src/diracx/logic/py.typed +0 -0
  247. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-logic/src/diracx/logic/task_queues/__init__.py +0 -0
  248. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-logic/src/diracx/logic/task_queues/priority.py +0 -0
  249. {diracx-0.0.1a48/diracx-logic/tests/logic → diracx-0.0.1a50/diracx-logic/tests/jobs}/test_sandboxes.py +0 -0
  250. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-routers/README.md +0 -0
  251. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-routers/src/diracx/routers/__init__.py +0 -0
  252. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-routers/src/diracx/routers/access_policies.py +0 -0
  253. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-routers/src/diracx/routers/auth/__init__.py +0 -0
  254. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-routers/src/diracx/routers/auth/management.py +0 -0
  255. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-routers/src/diracx/routers/auth/token.py +0 -0
  256. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-routers/src/diracx/routers/auth/utils.py +0 -0
  257. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-routers/src/diracx/routers/auth/well_known.py +0 -0
  258. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-routers/src/diracx/routers/configuration.py +0 -0
  259. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-routers/src/diracx/routers/dependencies.py +0 -0
  260. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-routers/src/diracx/routers/factory.py +0 -0
  261. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-routers/src/diracx/routers/fastapi_classes.py +0 -0
  262. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-routers/src/diracx/routers/health/__init__.py +0 -0
  263. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-routers/src/diracx/routers/health/probes.py +0 -0
  264. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-routers/src/diracx/routers/jobs/__init__.py +0 -0
  265. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-routers/src/diracx/routers/jobs/access_policies.py +0 -0
  266. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-routers/src/diracx/routers/jobs/legacy.py +0 -0
  267. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-routers/src/diracx/routers/jobs/sandboxes.py +0 -0
  268. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-routers/src/diracx/routers/jobs/status.py +0 -0
  269. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-routers/src/diracx/routers/otel.py +0 -0
  270. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-routers/src/diracx/routers/py.typed +0 -0
  271. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-routers/src/diracx/routers/utils/__init__.py +0 -0
  272. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-routers/src/diracx/routers/utils/users.py +0 -0
  273. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-routers/tests/auth/test_legacy_exchange.py +0 -0
  274. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-routers/tests/data/idp-server.invalid/.well-known/openid-configuration +0 -0
  275. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-routers/tests/health/test_probes.py +0 -0
  276. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-routers/tests/jobs/conftest.py +0 -0
  277. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-routers/tests/jobs/test_wms_access_policy.py +0 -0
  278. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-routers/tests/test_config_manager.py +0 -0
  279. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-routers/tests/test_generic.py +0 -0
  280. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-routers/tests/test_policy.py +0 -0
  281. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-testing/README.md +0 -0
  282. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-testing/src/diracx/testing/__init__.py +0 -0
  283. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-testing/src/diracx/testing/__main__.py +0 -0
  284. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-testing/src/diracx/testing/client_generation.py +0 -0
  285. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-testing/src/diracx/testing/client_generation_pytest.py +0 -0
  286. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-testing/src/diracx/testing/dummy_osdb.py +0 -0
  287. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-testing/src/diracx/testing/entrypoints.py +0 -0
  288. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-testing/src/diracx/testing/mock_osdb.py +0 -0
  289. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-testing/src/diracx/testing/osdb.py +0 -0
  290. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-testing/src/diracx/testing/routers.py +0 -0
  291. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-testing/src/diracx/testing/scripts/collect_demo_coverage.sh +0 -0
  292. {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-testing/src/diracx/testing/time.py +0 -0
  293. {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/admin/explanations/configuration.md +0 -0
  294. {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/admin/explanations/opentelemetry.md +0 -0
  295. {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/admin/explanations/sandbox-store.md +0 -0
  296. {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/admin/explanations/user-management.md +0 -0
  297. {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/admin/how-to/install/convert-cs.md +0 -0
  298. {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/admin/index.md +0 -0
  299. {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/admin/reference/security_model.md +0 -0
  300. {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/admin/tutorials/authentication.md +0 -0
  301. {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/assets/css/extra.css +0 -0
  302. {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/assets/css/fontawesome-all.min.css +0 -0
  303. {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/assets/css/images/arrow.svg +0 -0
  304. {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/assets/css/images/overlay.png +0 -0
  305. {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/assets/css/main.css +0 -0
  306. {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/assets/home.html +0 -0
  307. {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/assets/images/diracx-logo-square.svg +0 -0
  308. {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/assets/images/logo.svg +0 -0
  309. {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/assets/styles/extra.css +0 -0
  310. {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/assets/webfonts/fa-brands-400.woff2 +0 -0
  311. {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/assets/webfonts/fa-solid-900.woff +0 -0
  312. {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/dev/explanations/components/api.md +0 -0
  313. {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/dev/explanations/components/cli.md +0 -0
  314. {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/dev/explanations/designing-functionality.md +0 -0
  315. {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/dev/explanations/index.md +0 -0
  316. {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/dev/explanations/testing.md +0 -0
  317. {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/dev/how-to/add-a-cli-command.md +0 -0
  318. {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/dev/how-to/add-a-db.md +0 -0
  319. {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/dev/how-to/add-a-route.md +0 -0
  320. {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/dev/how-to/add-a-setting.md +0 -0
  321. {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/dev/how-to/add-a-task.md +0 -0
  322. {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/dev/how-to/add-a-test.md +0 -0
  323. {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/dev/how-to/add-functionality/index.md +0 -0
  324. {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/dev/how-to/client-customization.md +0 -0
  325. {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/dev/how-to/client-extension.md +0 -0
  326. {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/dev/how-to/develop-legacy-dirac.md +0 -0
  327. {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/dev/how-to/extend-diracx/index.md +0 -0
  328. {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/dev/how-to/use-the-demo/index.md +0 -0
  329. {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/dev/how-to/use-the-demo/swagger.md +0 -0
  330. {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/dev/how-to/use-the-demo/web.md +0 -0
  331. {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/dev/index.md +0 -0
  332. {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/dev/reference/application-state.md +0 -0
  333. {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/dev/reference/client-metapathfinder.md +0 -0
  334. {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/dev/reference/coding-conventions.md +0 -0
  335. {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/dev/reference/configuration.md +0 -0
  336. {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/dev/reference/db-transaction-model.md +0 -0
  337. {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/dev/reference/security-policies.md +0 -0
  338. {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/dev/reference/security-properties.md +0 -0
  339. {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/dev/reference/test-recipes.md +0 -0
  340. {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/dev/reference/writing-tests.md +0 -0
  341. {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/dev/tutorials/advanced-tutorial.md +0 -0
  342. {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/dev/tutorials/develop-web.md +0 -0
  343. {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/dev/tutorials/larger-developments.md +0 -0
  344. {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/dev/tutorials/making-changes.md +0 -0
  345. {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/dev/tutorials/play-with-auth.md +0 -0
  346. {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/dev/tutorials/write-docs.md +0 -0
  347. {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/index.md +0 -0
  348. {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/overrides/main.html +0 -0
  349. {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/roadmap.md +0 -0
  350. {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/user/reference/client-configuration.md +0 -0
  351. {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/user/reference/programmatic-usage/command-line-interface.md +0 -0
  352. {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/user/reference/programmatic-usage/https-interface.md +0 -0
  353. {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/user/reference/programmatic-usage/index.md +0 -0
  354. {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/user/reference/programmatic-usage/python-interface.md +0 -0
  355. {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/user/tutorials/getting-started.md +0 -0
  356. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/containers/client/Dockerfile +0 -0
  357. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/README.md +0 -0
  358. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-api/README.md +0 -0
  359. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-api/pyproject.toml +0 -0
  360. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-api/src/gubbins/api/__init__.py +0 -0
  361. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-api/src/gubbins/api/py.typed +0 -0
  362. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-api/tests/test_gubbins_api.py +0 -0
  363. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-cli/README.md +0 -0
  364. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-cli/pyproject.toml +0 -0
  365. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-cli/src/gubbins/cli/__init__.py +0 -0
  366. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-cli/src/gubbins/cli/config.py +0 -0
  367. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-cli/src/gubbins/cli/lollygag.py +0 -0
  368. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-cli/src/gubbins/cli/py.typed +0 -0
  369. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-cli/tests/test_gubbins_cli.py +0 -0
  370. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-client/README.md +0 -0
  371. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-client/pyproject.toml +0 -0
  372. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-client/src/gubbins/client/__init__.py +0 -0
  373. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/__init__.py +0 -0
  374. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/_client.py +0 -0
  375. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/_configuration.py +0 -0
  376. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/_patch.py +0 -0
  377. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/_serialization.py +0 -0
  378. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/_utils/__init__.py +0 -0
  379. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/_utils/serialization.py +0 -0
  380. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/_utils/utils.py +0 -0
  381. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/_vendor.py +0 -0
  382. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/aio/__init__.py +0 -0
  383. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/aio/_client.py +0 -0
  384. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/aio/_configuration.py +0 -0
  385. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/aio/_patch.py +0 -0
  386. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/aio/_vendor.py +0 -0
  387. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/aio/operations/__init__.py +0 -0
  388. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/aio/operations/_operations.py +0 -0
  389. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/aio/operations/_patch.py +0 -0
  390. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/models/__init__.py +0 -0
  391. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/models/_enums.py +0 -0
  392. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/operations/__init__.py +0 -0
  393. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/operations/_operations.py +0 -0
  394. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/operations/_patch.py +0 -0
  395. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/py.typed +0 -0
  396. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-client/src/gubbins/client/aio.py +0 -0
  397. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-client/src/gubbins/client/models.py +0 -0
  398. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-client/src/gubbins/client/py.typed +0 -0
  399. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-client/src/gubbins/client/sync.py +0 -0
  400. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-client/tests/test_gubbins_client.py +0 -0
  401. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-core/README.md +0 -0
  402. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-core/pyproject.toml +0 -0
  403. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-core/src/gubbins/core/__init__.py +0 -0
  404. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-core/src/gubbins/core/config/__init__.py +0 -0
  405. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-core/src/gubbins/core/config/schema.py +0 -0
  406. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-core/src/gubbins/core/models.py +0 -0
  407. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-core/src/gubbins/core/properties.py +0 -0
  408. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-core/src/gubbins/core/py.typed +0 -0
  409. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-core/tests/test_config.py +0 -0
  410. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-core/tests/test_properties.py +0 -0
  411. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-db/README.md +0 -0
  412. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-db/pyproject.toml +0 -0
  413. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-db/src/gubbins/db/__init__.py +0 -0
  414. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-db/src/gubbins/db/py.typed +0 -0
  415. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-db/src/gubbins/db/sql/__init__.py +0 -0
  416. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-db/src/gubbins/db/sql/jobs/__init__.py +0 -0
  417. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-db/src/gubbins/db/sql/jobs/db.py +0 -0
  418. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-db/src/gubbins/db/sql/jobs/schema.py +0 -0
  419. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-db/src/gubbins/db/sql/lollygag/__init__.py +0 -0
  420. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-db/src/gubbins/db/sql/lollygag/db.py +0 -0
  421. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-db/src/gubbins/db/sql/lollygag/schema.py +0 -0
  422. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-db/tests/test_gubbins_job_db.py +0 -0
  423. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-db/tests/test_lollygag_db.py +0 -0
  424. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-logic/README.md +0 -0
  425. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-logic/pyproject.toml +0 -0
  426. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-logic/src/gubbins/logic/__init__.py +0 -0
  427. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-logic/src/gubbins/logic/auth/__init__.py +0 -0
  428. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-logic/src/gubbins/logic/auth/well_known.py +0 -0
  429. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-logic/src/gubbins/logic/lollygag/__init__.py +0 -0
  430. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-logic/src/gubbins/logic/lollygag/lollygag.py +0 -0
  431. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-logic/src/gubbins/logic/py.typed +0 -0
  432. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-logic/tests/test_gubbins_logic.py +0 -0
  433. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-routers/README.md +0 -0
  434. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-routers/pyproject.toml +0 -0
  435. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-routers/src/gubbins/routers/__init__.py +0 -0
  436. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-routers/src/gubbins/routers/dependencies.py +0 -0
  437. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-routers/src/gubbins/routers/lollygag/__init__.py +0 -0
  438. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-routers/src/gubbins/routers/lollygag/access_policy.py +0 -0
  439. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-routers/src/gubbins/routers/lollygag/lollygag.py +0 -0
  440. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-routers/src/gubbins/routers/py.typed +0 -0
  441. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-routers/src/gubbins/routers/well_known.py +0 -0
  442. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-routers/tests/data/idp-server.invalid/.well-known/openid-configuration +0 -0
  443. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-routers/tests/test_gubbins_job_manager.py +0 -0
  444. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-routers/tests/test_lollybag.py +0 -0
  445. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-routers/tests/test_wellknown.py +0 -0
  446. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-testing/README.md +0 -0
  447. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-testing/pyproject.toml +0 -0
  448. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-testing/src/gubbins/testing/__init__.py +0 -0
  449. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/pixi.toml +0 -0
  450. {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/release.notes +0 -0
  451. {diracx-0.0.1a48 → diracx-0.0.1a50}/release.notes +0 -0
  452. {diracx-0.0.1a48 → diracx-0.0.1a50}/release.notes.old +0 -0
  453. {diracx-0.0.1a48 → diracx-0.0.1a50}/run_local.sh +0 -0
  454. {diracx-0.0.1a48 → diracx-0.0.1a50}/tests/__init__.py +0 -0
  455. {diracx-0.0.1a48 → diracx-0.0.1a50}/tests/test_generic.py +0 -0
@@ -41,14 +41,14 @@ jobs:
41
41
  # We need extglob for REFERENCE_BRANCH substitution
42
42
  shell: bash -l -O extglob {0}
43
43
  steps:
44
- - uses: actions/checkout@v4
44
+ - uses: actions/checkout@v5
45
45
  with:
46
46
  token: ${{ github.token }}
47
47
  - run: |
48
48
  git fetch --prune --unshallow
49
49
  git config --global user.email "ci@diracgrid.org"
50
50
  git config --global user.name "DIRACGrid CI"
51
- - uses: actions/setup-python@v5
51
+ - uses: actions/setup-python@v6
52
52
  with:
53
53
  python-version: '3.11'
54
54
  - name: Installing dependencies
@@ -156,7 +156,7 @@ jobs:
156
156
  runs-on: ubuntu-latest
157
157
  steps:
158
158
  - name: Checkout
159
- uses: actions/checkout@v4
159
+ uses: actions/checkout@v5
160
160
  - name: Set up QEMU
161
161
  uses: docker/setup-qemu-action@v3
162
162
  - name: Set up Docker Buildx
@@ -168,7 +168,7 @@ jobs:
168
168
  username: ${{ github.actor }}
169
169
  password: ${{ secrets.GITHUB_TOKEN }}
170
170
  - name: Download diracx wheels
171
- uses: actions/download-artifact@v4
171
+ uses: actions/download-artifact@v5
172
172
  with:
173
173
  name: diracx-whl
174
174
  - name: "Find wheels"
@@ -190,7 +190,7 @@ jobs:
190
190
  push: ${{ needs.deploy-pypi.outputs.create-release == 'true' }}
191
191
  tags: "ghcr.io/diracgrid/diracx/client:${{ needs.deploy-pypi.outputs.new-version }}"
192
192
  platforms: linux/amd64,linux/arm64
193
- build-args: EXTRA_PACKAGES_TO_INSTALL=DIRAC~=9.0.0a1
193
+ build-args: EXTRA_PACKAGES_TO_INSTALL=DIRACCommon~=9.0.0a1
194
194
  - name: Build and push services (release)
195
195
  uses: docker/build-push-action@v6
196
196
  if: ${{ needs.deploy-pypi.outputs.create-release == 'true' }}
@@ -199,7 +199,7 @@ jobs:
199
199
  push: ${{ needs.deploy-pypi.outputs.create-release == 'true' }}
200
200
  tags: "ghcr.io/diracgrid/diracx/services:${{ needs.deploy-pypi.outputs.new-version }}"
201
201
  platforms: linux/amd64,linux/arm64
202
- build-args: EXTRA_PACKAGES_TO_INSTALL=DIRAC~=9.0.0a1
202
+ build-args: EXTRA_PACKAGES_TO_INSTALL=DIRACCommon~=9.0.0a1
203
203
 
204
204
  - name: Build and push client (dev)
205
205
  uses: docker/build-push-action@v6
@@ -209,7 +209,7 @@ jobs:
209
209
  tags: ghcr.io/diracgrid/diracx/client:dev
210
210
  platforms: linux/amd64,linux/arm64
211
211
  build-args: |
212
- EXTRA_PACKAGES_TO_INSTALL=git+https://github.com/DIRACGrid/DIRAC.git@integration
212
+ EXTRA_PACKAGES_TO_INSTALL=git+https://github.com/DIRACGrid/DIRAC.git@integration#egg=diraccommon\&subdirectory=dirac-common
213
213
  - name: Build and push services (dev)
214
214
  uses: docker/build-push-action@v6
215
215
  with:
@@ -218,4 +218,85 @@ jobs:
218
218
  tags: ghcr.io/diracgrid/diracx/services:dev
219
219
  platforms: linux/amd64,linux/arm64
220
220
  build-args: |
221
- EXTRA_PACKAGES_TO_INSTALL=git+https://github.com/DIRACGrid/DIRAC.git@integration
221
+ EXTRA_PACKAGES_TO_INSTALL=git+https://github.com/DIRACGrid/DIRAC.git@integration#egg=diraccommon\&subdirectory=dirac-common
222
+
223
+ update-charts:
224
+ name: Update Helm charts
225
+ needs:
226
+ - deploy-pypi
227
+ - docker
228
+ runs-on: ubuntu-latest
229
+ if: ${{ needs.deploy-pypi.outputs.create-release == 'true' }}
230
+ steps:
231
+ - name: Checkout diracx
232
+ uses: actions/checkout@v5
233
+ with:
234
+ path: diracx
235
+
236
+ - name: Checkout diracx-charts
237
+ uses: actions/checkout@v5
238
+ with:
239
+ repository: DIRACGrid/diracx-charts
240
+ token: ${{ secrets.CHARTS_UPDATE_TOKEN }}
241
+ path: diracx-charts
242
+
243
+ - name: Configure Git
244
+ run: |
245
+ cd diracx-charts
246
+ git config user.name "github-actions[bot]"
247
+ git config user.email "github-actions[bot]@users.noreply.github.com"
248
+
249
+ - name: Update chart versions
250
+ id: update-versions
251
+ run: |
252
+ cd diracx-charts
253
+ VERSION="${{ needs.deploy-pypi.outputs.new-version }}"
254
+
255
+ # Get current chart version before updating
256
+ CURRENT_CHART_VERSION=$(grep '^version:' diracx/Chart.yaml | sed 's/version: //' | tr -d '"')
257
+
258
+ # Use Python script to update versions
259
+ python ../diracx/.github/workflows/update_chart_version.py \
260
+ --charts-dir . \
261
+ --diracx-version "$VERSION"
262
+
263
+ # Get new chart version after update
264
+ NEW_CHART_VERSION=$(grep '^version:' diracx/Chart.yaml | sed 's/version: //' | tr -d '"')
265
+
266
+ echo "current_chart_version=$CURRENT_CHART_VERSION" >> $GITHUB_OUTPUT
267
+ echo "new_chart_version=$NEW_CHART_VERSION" >> $GITHUB_OUTPUT
268
+ echo "diracx_version=$VERSION" >> $GITHUB_OUTPUT
269
+
270
+ - name: Install pre-commit
271
+ run: |
272
+ pip install pre-commit
273
+
274
+ - name: Run pre-commit to update README
275
+ run: |
276
+ cd diracx-charts
277
+ pre-commit run --all-files || true
278
+
279
+ - name: Commit and push changes
280
+ if: success()
281
+ run: |
282
+ cd diracx-charts
283
+
284
+ # Stage all changes
285
+ git add -A
286
+
287
+ # Check if there are changes to commit
288
+ if ! git diff --cached --quiet; then
289
+ # Commit the changes
290
+ git commit -m "chore: bump chart to ${{ steps.update-versions.outputs.new_chart_version }} for DiracX ${{ steps.update-versions.outputs.diracx_version }}
291
+
292
+ - Update appVersion to ${{ steps.update-versions.outputs.diracx_version }}
293
+ - Update image tag to ${{ steps.update-versions.outputs.diracx_version }}
294
+ - Bump chart version from ${{ steps.update-versions.outputs.current_chart_version }} to ${{ steps.update-versions.outputs.new_chart_version }}"
295
+
296
+ # Push the commit to main branch
297
+ git push origin main
298
+
299
+ echo "✅ Successfully pushed chart version ${{ steps.update-versions.outputs.new_chart_version }} and tag ${TAG_NAME}"
300
+ else
301
+ echo "No changes to commit"
302
+ fi
@@ -0,0 +1,61 @@
1
+ from __future__ import annotations
2
+
3
+ import json
4
+ import subprocess
5
+ from collections import defaultdict
6
+
7
+
8
+ def get_task_group(task_name):
9
+ if task_name.startswith("pytest-diracx"):
10
+ return "DiracX"
11
+ if task_name.startswith("pytest-gubbins"):
12
+ return "Gubbins"
13
+ if task_name.startswith("mkdocs"):
14
+ return "Documentation"
15
+ if task_name == "pre-commit":
16
+ return "Pre-commit"
17
+ if task_name == "generate-client":
18
+ return "Client Generation"
19
+ if task_name == "shellcheck":
20
+ return "Shellcheck"
21
+ return "Default"
22
+
23
+
24
+ def main():
25
+ """Generate the pixi-tasks.md file."""
26
+ result = subprocess.run(
27
+ ["pixi", "task", "list", "--json"], # noqa: S607
28
+ capture_output=True,
29
+ text=True,
30
+ )
31
+ environments = json.loads(result.stdout)
32
+
33
+ tasks_by_group = defaultdict(list)
34
+ for env in environments:
35
+ for feature in env["features"]:
36
+ for task in feature["tasks"]:
37
+ group = get_task_group(task["name"])
38
+ tasks_by_group[group].append(task)
39
+
40
+ with open("docs/dev/reference/pixi-tasks.md", "w") as f:
41
+ f.write("# Pixi Tasks\n\n")
42
+ f.write("*This page is auto-generated. Do not edit directly.*\n\n")
43
+ f.write("DiracX uses [Pixi](https://pixi.dev/) as package manager\n")
44
+ f.write("This page documents the available pixi tasks.\n\n")
45
+
46
+ for group in sorted(tasks_by_group.keys()):
47
+ f.write(f"## {group} Tasks\n\n")
48
+ # Remove duplicates
49
+ tasks = list({v["name"]: v for v in tasks_by_group[group]}.values())
50
+ for task in sorted(tasks, key=lambda x: x["name"]):
51
+ description = (
52
+ task.get("description") or task.get("cmd") or "No description"
53
+ )
54
+ f.write(f"- `{task['name']}`: {description}\n")
55
+ f.write("\n")
56
+
57
+ f.write("Generated by .github/workflows/generate_pixi_tasks_doc.py\n")
58
+
59
+
60
+ if __name__ == "__main__":
61
+ main()
@@ -23,8 +23,8 @@ jobs:
23
23
  dirac-branch:
24
24
  - integration
25
25
  steps:
26
- - uses: actions/checkout@v4
27
- - uses: actions/setup-python@v5
26
+ - uses: actions/checkout@v5
27
+ - uses: actions/setup-python@v6
28
28
  with:
29
29
  python-version: '3.11'
30
30
  - name: Build wheels
@@ -13,26 +13,16 @@ concurrency:
13
13
  cancel-in-progress: true
14
14
 
15
15
  jobs:
16
-
17
16
  shellcheck:
18
17
  runs-on: ubuntu-latest
19
18
  steps:
20
19
  - name: Checkout code
21
- uses: actions/checkout@v4
22
- - uses: prefix-dev/setup-pixi@v0.8.12
20
+ uses: actions/checkout@v5
21
+ - uses: prefix-dev/setup-pixi@v0.9.0
23
22
  with:
24
23
  run-install: false
25
24
  post-cleanup: false
26
- - name: Apply workarounds
27
- run: |
28
- # Workaround for https://github.com/prefix-dev/pixi/issues/3762
29
- sed -i.bak 's@editable = true@editable = false@g' pixi.toml
30
- rm pixi.toml.bak
31
- # Add annotations to github actions
32
- pixi add --no-install --pypi --feature diracx-core pytest-github-actions-annotate-failures
33
- # Show any changes
34
- git diff
35
- - uses: prefix-dev/setup-pixi@v0.8.12
25
+ - uses: prefix-dev/setup-pixi@v0.9.0
36
26
  with:
37
27
  cache: false
38
28
  environments: shellcheck
@@ -62,8 +52,8 @@ jobs:
62
52
  - gubbins-cli
63
53
  steps:
64
54
  - name: Checkout code
65
- uses: actions/checkout@v4
66
- - uses: prefix-dev/setup-pixi@v0.8.12
55
+ uses: actions/checkout@v5
56
+ - uses: prefix-dev/setup-pixi@v0.9.0
67
57
  with:
68
58
  run-install: false
69
59
  post-cleanup: false
@@ -72,18 +62,16 @@ jobs:
72
62
  # Workaround for https://github.com/prefix-dev/pixi/issues/3762
73
63
  sed -i.bak 's@editable = true@editable = false@g' pixi.toml
74
64
  rm pixi.toml.bak
75
- # Add annotations to github actions
76
- pixi add --no-install --pypi --feature diracx-core pytest-github-actions-annotate-failures
77
65
  # Show any changes
78
66
  git diff
79
- - uses: prefix-dev/setup-pixi@v0.8.12
67
+ - uses: prefix-dev/setup-pixi@v0.9.0
80
68
  with:
81
69
  cache: false
82
70
  environments: ${{ matrix.package }}
83
71
  - name: Run pytest
84
72
  run: pixi run pytest-${{ matrix.package }} --cov-report=xml:coverage.xml --junitxml=report.xml
85
73
  - name: Upload coverage report
86
- uses: codecov/codecov-action@v5.4.3
74
+ uses: codecov/codecov-action@v5.5.1
87
75
 
88
76
  pytest-integration:
89
77
  runs-on: ubuntu-latest
@@ -95,8 +83,8 @@ jobs:
95
83
  - gubbins
96
84
  steps:
97
85
  - name: Checkout code
98
- uses: actions/checkout@v4
99
- - uses: prefix-dev/setup-pixi@v0.8.12
86
+ uses: actions/checkout@v5
87
+ - uses: prefix-dev/setup-pixi@v0.9.0
100
88
  with:
101
89
  run-install: false
102
90
  post-cleanup: false
@@ -105,11 +93,9 @@ jobs:
105
93
  # Workaround for https://github.com/prefix-dev/pixi/issues/3762
106
94
  sed -i.bak 's@editable = true@editable = false@g' pixi.toml
107
95
  rm pixi.toml.bak
108
- # Add annotations to github actions
109
- pixi add --no-install --pypi --feature diracx-core pytest-github-actions-annotate-failures
110
96
  # Show any changes
111
97
  git diff
112
- - uses: prefix-dev/setup-pixi@v0.8.12
98
+ - uses: prefix-dev/setup-pixi@v0.9.0
113
99
  with:
114
100
  cache: false
115
101
  environments: ${{ matrix.extension == 'diracx' && 'default' || 'default-gubbins' }}
@@ -209,7 +195,7 @@ jobs:
209
195
  run: |
210
196
  pixi run -e ${{ matrix.extension == 'diracx' && 'default' || 'default-gubbins' }} python -m diracx.testing coverage collect-demo --demo-dir=../diracx-charts/.demo
211
197
  - name: Upload coverage report
212
- uses: codecov/codecov-action@v5.4.3
198
+ uses: codecov/codecov-action@v5.5.1
213
199
  with:
214
200
  files: ./coverage-pytest.xml,./coverage-demo.xml
215
201
 
@@ -221,18 +207,12 @@ jobs:
221
207
  package: [diracx, gubbins]
222
208
  steps:
223
209
  - name: Checkout code
224
- uses: actions/checkout@v4
225
- - uses: prefix-dev/setup-pixi@v0.8.12
210
+ uses: actions/checkout@v5
211
+ - uses: prefix-dev/setup-pixi@v0.9.0
226
212
  with:
227
213
  run-install: false
228
214
  post-cleanup: false
229
- - name: Apply workarounds
230
- run: |
231
- # Add annotations to github actions
232
- pixi add --no-install --pypi --feature diracx-core pytest-github-actions-annotate-failures
233
- # Show any changes
234
- git diff
235
- - uses: prefix-dev/setup-pixi@v0.8.12
215
+ - uses: prefix-dev/setup-pixi@v0.9.0
236
216
  with:
237
217
  cache: false
238
218
  locked: false
@@ -0,0 +1,158 @@
1
+ #!/usr/bin/env python3
2
+ """Script to update chart versions based on DiracX releases."""
3
+
4
+ from __future__ import annotations
5
+
6
+ import argparse
7
+ import re
8
+ import sys
9
+ from pathlib import Path
10
+
11
+
12
+ def parse_version(version_str: str) -> tuple[int, int, int, str | None]:
13
+ """Parse a semantic version string into components.
14
+
15
+ Args:
16
+ version_str: Version string like "1.0.0-alpha.1"
17
+
18
+ Returns:
19
+ Tuple of (major, minor, patch, pre_release_suffix)
20
+
21
+ """
22
+ # Remove leading 'v' if present
23
+ version_str = version_str.lstrip("v")
24
+
25
+ # Pattern for semver with optional pre-release
26
+ pattern = r"^(\d+)\.(\d+)\.(\d+)(?:-(.+))?$"
27
+ match = re.match(pattern, version_str)
28
+
29
+ if not match:
30
+ raise ValueError(f"Invalid version format: {version_str}")
31
+
32
+ major, minor, patch, pre_release = match.groups()
33
+ return int(major), int(minor), int(patch), pre_release
34
+
35
+
36
+ def bump_version(current_version: str) -> str:
37
+ """Bump a version automatically - alpha if present, else patch.
38
+
39
+ Args:
40
+ current_version: Current version string
41
+
42
+ Returns:
43
+ New version string
44
+
45
+ """
46
+ major, minor, patch, pre_release = parse_version(current_version)
47
+
48
+ if pre_release and pre_release.startswith("alpha."):
49
+ # Increment alpha number
50
+ alpha_match = re.match(r"alpha\.(\d+)", pre_release)
51
+ if alpha_match:
52
+ alpha_num = int(alpha_match.group(1)) + 1
53
+ return f"{major}.{minor}.{patch}-alpha.{alpha_num}"
54
+ else:
55
+ # Invalid alpha format, start with alpha.1
56
+ return f"{major}.{minor}.{patch}-alpha.1"
57
+ else:
58
+ # No alpha suffix, bump patch version
59
+ return f"{major}.{minor}.{patch + 1}"
60
+
61
+
62
+ def update_chart_yaml(
63
+ chart_path: Path, diracx_version: str, new_chart_version: str
64
+ ) -> None:
65
+ """Update Chart.yaml with new versions."""
66
+ content = chart_path.read_text()
67
+
68
+ # Update appVersion
69
+ content = re.sub(
70
+ r"^appVersion:\s*.*$",
71
+ f"appVersion: {diracx_version}",
72
+ content,
73
+ flags=re.MULTILINE,
74
+ )
75
+
76
+ # Update version
77
+ content = re.sub(
78
+ r"^version:\s*.*$",
79
+ f'version: "{new_chart_version}"',
80
+ content,
81
+ flags=re.MULTILINE,
82
+ )
83
+
84
+ chart_path.write_text(content)
85
+
86
+
87
+ def update_values_yaml(values_path: Path, diracx_version: str) -> None:
88
+ """Update values.yaml with new image tag."""
89
+ content = values_path.read_text()
90
+
91
+ # Update only the main services image tag under global.images.tag
92
+ # This pattern looks for the first occurrence of 'tag:' after 'images:' section
93
+ content = re.sub(
94
+ r"(global:\s*[\s\S]*?images:\s*[\s\S]*?tag:\s*).*?(\s)",
95
+ f"\\1{diracx_version}\\2",
96
+ content,
97
+ count=1,
98
+ )
99
+
100
+ values_path.write_text(content)
101
+
102
+
103
+ def main() -> None:
104
+ """Main function."""
105
+ parser = argparse.ArgumentParser(
106
+ description="Update chart versions for DiracX release"
107
+ )
108
+ parser.add_argument(
109
+ "--charts-dir", type=Path, default=".", help="Path to charts directory"
110
+ )
111
+ parser.add_argument(
112
+ "--diracx-version", required=True, help="DiracX version (e.g., v0.0.1a49)"
113
+ )
114
+
115
+ args = parser.parse_args()
116
+
117
+ # Define paths
118
+ chart_yaml = args.charts_dir / "diracx" / "Chart.yaml"
119
+ values_yaml = args.charts_dir / "diracx" / "values.yaml"
120
+
121
+ if not chart_yaml.exists():
122
+ print(f"Error: Chart.yaml not found at {chart_yaml}")
123
+ sys.exit(1)
124
+
125
+ if not values_yaml.exists():
126
+ print(f"Error: values.yaml not found at {values_yaml}")
127
+ sys.exit(1)
128
+
129
+ # Get current chart version
130
+ chart_content = chart_yaml.read_text()
131
+ version_match = re.search(
132
+ r'^version:\s*["\']?([^"\']+)["\']?$', chart_content, re.MULTILINE
133
+ )
134
+
135
+ if not version_match:
136
+ print("Error: Could not find version in Chart.yaml")
137
+ sys.exit(1)
138
+
139
+ current_chart_version = version_match.group(1)
140
+ print(f"Current chart version: {current_chart_version}")
141
+
142
+ # Calculate new chart version (alpha if present, else patch)
143
+ new_chart_version = bump_version(current_chart_version)
144
+ print(f"New chart version: {new_chart_version}")
145
+
146
+ # Update files
147
+ print("Updating Chart.yaml...")
148
+ update_chart_yaml(chart_yaml, args.diracx_version, new_chart_version)
149
+
150
+ print("Updating values.yaml...")
151
+ update_values_yaml(values_yaml, args.diracx_version)
152
+
153
+ print(f"Successfully updated charts for DiracX {args.diracx_version}")
154
+ print(f"Chart version: {current_chart_version} -> {new_chart_version}")
155
+
156
+
157
+ if __name__ == "__main__":
158
+ main()
@@ -16,10 +16,10 @@ jobs:
16
16
 
17
17
  steps:
18
18
  - name: Checkout repository
19
- uses: actions/checkout@v4
19
+ uses: actions/checkout@v5
20
20
 
21
21
  - name: Set up Python
22
- uses: actions/setup-python@v5
22
+ uses: actions/setup-python@v6
23
23
  with:
24
24
  python-version: '3.x'
25
25
 
@@ -16,13 +16,13 @@ jobs:
16
16
  runs-on: ubuntu-latest
17
17
  steps:
18
18
  - name: Checkout
19
- uses: actions/checkout@v4
19
+ uses: actions/checkout@v5
20
20
  with:
21
21
  fetch-depth: 0
22
22
  tags: true
23
23
 
24
24
  - name: Run Trivy (client:dev)
25
- uses: aquasecurity/trivy-action@0.32.0
25
+ uses: aquasecurity/trivy-action@0.33.1
26
26
  with:
27
27
  image-ref: "ghcr.io/diracgrid/diracx/client:dev"
28
28
  format: "sarif"
@@ -35,7 +35,7 @@ jobs:
35
35
  category: "client-dev"
36
36
 
37
37
  - name: Run Trivy (services:dev)
38
- uses: aquasecurity/trivy-action@0.32.0
38
+ uses: aquasecurity/trivy-action@0.33.1
39
39
  with:
40
40
  image-ref: "ghcr.io/diracgrid/diracx/services:dev"
41
41
  format: "sarif"
@@ -61,7 +61,7 @@ jobs:
61
61
 
62
62
  - name: Run Trivy (client:release)
63
63
  if: ${{ steps.get-latest-tag.outputs.latest_tag != '' }}
64
- uses: aquasecurity/trivy-action@0.32.0
64
+ uses: aquasecurity/trivy-action@0.33.1
65
65
  with:
66
66
  image-ref: "ghcr.io/diracgrid/diracx/client:${{ steps.get-latest-tag.outputs.latest_tag }}"
67
67
  format: "sarif"
@@ -77,7 +77,7 @@ jobs:
77
77
 
78
78
  - name: Run Trivy (services:release)
79
79
  if: ${{ steps.get-latest-tag.outputs.latest_tag != '' }}
80
- uses: aquasecurity/trivy-action@0.32.0
80
+ uses: aquasecurity/trivy-action@0.33.1
81
81
  with:
82
82
  image-ref: "ghcr.io/diracgrid/diracx/services:${{ steps.get-latest-tag.outputs.latest_tag }}"
83
83
  format: "sarif"
@@ -7,6 +7,9 @@ default_install_hook_types:
7
7
  default_language_version:
8
8
  python: python3
9
9
 
10
+ ci:
11
+ skip: [generate-pixi-docs]
12
+
10
13
  default_stages: [pre-commit]
11
14
 
12
15
  repos:
@@ -18,7 +21,7 @@ repos:
18
21
  args: ["--verbose"]
19
22
 
20
23
  - repo: https://github.com/pre-commit/pre-commit-hooks
21
- rev: v5.0.0
24
+ rev: v6.0.0
22
25
  hooks:
23
26
  - id: trailing-whitespace
24
27
  - id: end-of-file-fixer
@@ -27,14 +30,14 @@ repos:
27
30
  - id: check-added-large-files
28
31
 
29
32
  - repo: https://github.com/astral-sh/ruff-pre-commit
30
- rev: 'v0.12.7'
33
+ rev: 'v0.13.0'
31
34
  hooks:
32
35
  - id: ruff
33
36
  args: ["--fix", "--show-fixes"]
34
37
  - id: ruff-format
35
38
 
36
39
  - repo: https://github.com/pre-commit/mirrors-mypy
37
- rev: v1.17.1
40
+ rev: v1.18.1
38
41
  hooks:
39
42
  - id: mypy
40
43
  additional_dependencies:
@@ -62,3 +65,21 @@ repos:
62
65
  hooks:
63
66
  - id: codespell
64
67
  args: ["-w"]
68
+
69
+ - repo: local
70
+ hooks:
71
+ - id: check-lollygag
72
+ name: check for lollygag
73
+ types: [python]
74
+ entry: '(?i)lollygag'
75
+ language: pygrep
76
+ files: ^diracx
77
+
78
+ - repo: local
79
+ hooks:
80
+ - id: generate-pixi-docs
81
+ name: Generate pixi tasks documentation
82
+ entry: pixi run -e default python .github/workflows/generate_pixi_tasks_doc.py
83
+ language: system
84
+ pass_filenames: false
85
+ files: ^pixi\.toml$|^pixi\.lock$ # only run if pixi files change
@@ -0,0 +1,25 @@
1
+ version: 2
2
+
3
+ build:
4
+ os: "ubuntu-24.04"
5
+ tools:
6
+ python: "3"
7
+ # We recommend using a requirements file for reproducible builds.
8
+ # This is just a quick example to get started.
9
+ # https://docs.readthedocs.io/page/guides/reproducible-builds.html
10
+ jobs:
11
+ create_environment:
12
+ - asdf plugin add pixi
13
+ - asdf install pixi latest
14
+ - asdf global pixi latest
15
+
16
+ install:
17
+ - pixi install -e mkdocs
18
+
19
+ build:
20
+ html:
21
+ - pixi run -e mkdocs mkdocs-build --site-dir $READTHEDOCS_OUTPUT/html
22
+
23
+ mkdocs:
24
+ configuration: mkdocs.yml
25
+ fail_on_warning: true
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: diracx
3
- Version: 0.0.1a48
3
+ Version: 0.0.1a50
4
4
  Summary: Client installation for users of DiracX installations
5
5
  License: GPL-3.0-only
6
6
  License-File: LICENSE