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.
- {diracx-0.0.1a48 → diracx-0.0.1a50}/.github/workflows/deployment.yml +89 -8
- diracx-0.0.1a50/.github/workflows/generate_pixi_tasks_doc.py +61 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/.github/workflows/integration.yml +2 -2
- {diracx-0.0.1a48 → diracx-0.0.1a50}/.github/workflows/main.yml +14 -34
- diracx-0.0.1a50/.github/workflows/update_chart_version.py +158 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/.github/workflows/update_security_txt_expiry.yml +2 -2
- {diracx-0.0.1a48 → diracx-0.0.1a50}/.github/workflows/vulnerabilities.yml +5 -5
- {diracx-0.0.1a48 → diracx-0.0.1a50}/.pre-commit-config.yaml +24 -3
- diracx-0.0.1a50/.readthedocs.yaml +25 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/PKG-INFO +1 -1
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-cli/tests/legacy/cs_sync/integration_test.yaml +6 -94
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-cli/tests/legacy/cs_sync/test_cssync.py +6 -1
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-client/src/diracx/client/_generated/models/_models.py +9 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-client/src/diracx/client/patches/jobs/aio.py +20 -2
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-client/src/diracx/client/patches/jobs/common.py +51 -2
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-client/src/diracx/client/patches/jobs/sync.py +20 -2
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-core/pyproject.toml +4 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-core/src/diracx/core/config/schema.py +95 -7
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-core/src/diracx/core/extensions.py +38 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-core/src/diracx/core/models.py +23 -6
- diracx-0.0.1a50/diracx-core/src/diracx/core/resources.py +30 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-core/src/diracx/core/utils.py +37 -2
- diracx-0.0.1a50/diracx-core/tests/test_entry_points.py +71 -0
- diracx-0.0.1a50/diracx-core/tests/test_extensions.py +138 -0
- diracx-0.0.1a50/diracx-core/tests/test_resources.py +93 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-core/tests/test_utils.py +14 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-db/src/diracx/db/sql/auth/schema.py +6 -2
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-db/src/diracx/db/sql/utils/__init__.py +15 -11
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-db/src/diracx/db/sql/utils/base.py +33 -1
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-db/tests/auth/test_refresh_token.py +0 -2
- diracx-0.0.1a50/diracx-db/tests/utils/test_uuid.py +221 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-logic/pyproject.toml +1 -1
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-logic/src/diracx/logic/auth/token.py +16 -12
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-logic/src/diracx/logic/jobs/query.py +7 -9
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-logic/src/diracx/logic/jobs/status.py +23 -24
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-logic/src/diracx/logic/jobs/submission.py +18 -7
- diracx-0.0.1a50/diracx-logic/src/diracx/logic/jobs/utils.py +80 -0
- diracx-0.0.1a50/diracx-logic/tests/jobs/test_status.py +160 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-routers/pyproject.toml +1 -1
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-routers/src/diracx/routers/auth/authorize_code_flow.py +1 -30
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-routers/src/diracx/routers/auth/device_flow.py +1 -50
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-routers/src/diracx/routers/jobs/query.py +7 -1
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-routers/src/diracx/routers/jobs/submission.py +3 -1
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-routers/tests/auth/test_standard.py +1 -2
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-routers/tests/jobs/test_query.py +4 -6
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-routers/tests/jobs/test_sandboxes.py +1 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-routers/tests/jobs/test_status.py +2 -43
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-testing/pyproject.toml +1 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-testing/src/diracx/testing/utils.py +1 -1
- diracx-0.0.1a50/docs/SECURITY.md +4 -0
- diracx-0.0.1a50/docs/admin/explanations/auth-with-diracx.md +324 -0
- diracx-0.0.1a50/docs/admin/explanations/auth-with-external.md +32 -0
- diracx-0.0.1a50/docs/admin/how-to/install/embracing.md +128 -0
- diracx-0.0.1a50/docs/admin/how-to/install/index.md +16 -0
- diracx-0.0.1a50/docs/admin/how-to/install/minimal-requirements.md +15 -0
- diracx-0.0.1a50/docs/admin/how-to/install/register-a-vo.md +92 -0
- diracx-0.0.1a50/docs/admin/how-to/install/register-the-admin-vo.md +158 -0
- diracx-0.0.1a50/docs/admin/reference/env-variables.md +39 -0
- diracx-0.0.1a50/docs/admin/reference/settings-and-preferences.md +7 -0
- {diracx-0.0.1a48/docs/dev/explanations → diracx-0.0.1a50/docs/dev/explanations/components}/client.md +3 -3
- {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/dev/explanations/components/db.md +1 -1
- {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/dev/explanations/components/index.md +2 -2
- {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/dev/explanations/components/routes.md +7 -5
- {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/dev/explanations/extensions.md +27 -18
- diracx-0.0.1a50/docs/dev/how-to/client-generation.md +13 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/dev/how-to/contribute.md +4 -4
- {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/dev/reference/dependency-injection.md +1 -1
- diracx-0.0.1a50/docs/dev/reference/entrypoints.md +42 -0
- diracx-0.0.1a50/docs/dev/reference/env-variables.md +5 -0
- diracx-0.0.1a50/docs/dev/reference/pixi-tasks.md +53 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/dev/tutorials/getting-started.md +2 -2
- {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/dev/tutorials/run-locally.md +1 -1
- diracx-0.0.1a50/docs/user/index.md +10 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/user/reference/known-installations.md +12 -2
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/containers/services/Dockerfile +2 -1
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/.github/workflows/main.yml +0 -8
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/models/_models.py +9 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/pyproject.toml +1 -1
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins_values.yaml +1 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/mkdocs.yml +58 -8
- {diracx-0.0.1a48 → diracx-0.0.1a50}/pixi.toml +26 -3
- {diracx-0.0.1a48 → diracx-0.0.1a50}/pyproject.toml +1 -1
- diracx-0.0.1a50/release.notes.new +22 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/tests/make_token_local.py +6 -4
- diracx-0.0.1a48/.readthedocs.yaml +0 -16
- diracx-0.0.1a48/diracx-core/tests/test_extensions.py +0 -8
- diracx-0.0.1a48/diracx-logic/src/diracx/logic/jobs/utils.py +0 -40
- diracx-0.0.1a48/docs/SECURITY.md +0 -3
- diracx-0.0.1a48/docs/admin/explanations/authentication.md +0 -3
- diracx-0.0.1a48/docs/admin/how-to/install/register-a-vo.md +0 -85
- diracx-0.0.1a48/docs/admin/how-to/install/register-the-admin-vo.md +0 -96
- diracx-0.0.1a48/docs/admin/reference/settings-and-preferences.md +0 -0
- diracx-0.0.1a48/docs/assets/images/pic02.jpg +0 -0
- diracx-0.0.1a48/docs/dev/how-to/client-generation.md +0 -2
- diracx-0.0.1a48/docs/dev/reference/entrypoints.md +0 -3
- diracx-0.0.1a48/docs/dev/reference/pixi-tasks.md +0 -3
- diracx-0.0.1a48/docs/user/index.md +0 -3
- diracx-0.0.1a48/release.notes.new +0 -9
- {diracx-0.0.1a48 → diracx-0.0.1a50}/.coveragerc +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/.gitattributes +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/.github/dependabot.yml +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/.github/workflows/make_release.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/.gitignore +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/LICENSE +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/MANIFEST.in +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/README.md +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/codecov.yml +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/containers/client/Dockerfile +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/containers/services/Dockerfile +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-api/README.md +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-api/pyproject.toml +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-api/src/diracx/api/__init__.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-api/src/diracx/api/jobs.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-api/src/diracx/api/py.typed +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-api/src/diracx/api/utils.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-api/tests/test_jobs.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-api/tests/test_utils.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-cli/README.md +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-cli/pyproject.toml +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-cli/src/diracx/cli/__init__.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-cli/src/diracx/cli/__main__.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-cli/src/diracx/cli/auth.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-cli/src/diracx/cli/config.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-cli/src/diracx/cli/internal/__init__.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-cli/src/diracx/cli/internal/config.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-cli/src/diracx/cli/internal/legacy.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-cli/src/diracx/cli/jobs.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-cli/src/diracx/cli/py.typed +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-cli/src/diracx/cli/utils.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-cli/tests/legacy/cs_sync/integration_test.cfg +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-cli/tests/legacy/cs_sync/integration_test_buggy.cfg +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-cli/tests/legacy/cs_sync/integration_test_secret.cfg +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-cli/tests/legacy/test_legacy.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-cli/tests/test_internal.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-cli/tests/test_jobs.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-cli/tests/test_login.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-client/README.md +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-client/pyproject.toml +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-client/src/_diracx_client_importer.pth +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-client/src/diracx/_client_importer.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-client/src/diracx/client/__init__.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-client/src/diracx/client/_generated/__init__.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-client/src/diracx/client/_generated/_client.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-client/src/diracx/client/_generated/_configuration.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-client/src/diracx/client/_generated/_patch.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-client/src/diracx/client/_generated/_serialization.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-client/src/diracx/client/_generated/_utils/__init__.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-client/src/diracx/client/_generated/_utils/serialization.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-client/src/diracx/client/_generated/_utils/utils.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-client/src/diracx/client/_generated/_vendor.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-client/src/diracx/client/_generated/aio/__init__.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-client/src/diracx/client/_generated/aio/_client.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-client/src/diracx/client/_generated/aio/_configuration.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-client/src/diracx/client/_generated/aio/_patch.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-client/src/diracx/client/_generated/aio/_vendor.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-client/src/diracx/client/_generated/aio/operations/__init__.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-client/src/diracx/client/_generated/aio/operations/_operations.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-client/src/diracx/client/_generated/aio/operations/_patch.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-client/src/diracx/client/_generated/models/__init__.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-client/src/diracx/client/_generated/models/_enums.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-client/src/diracx/client/_generated/models/_patch.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-client/src/diracx/client/_generated/operations/__init__.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-client/src/diracx/client/_generated/operations/_operations.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-client/src/diracx/client/_generated/operations/_patch.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-client/src/diracx/client/_generated/py.typed +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-client/src/diracx/client/aio.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-client/src/diracx/client/models.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-client/src/diracx/client/patches/auth/aio.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-client/src/diracx/client/patches/auth/common.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-client/src/diracx/client/patches/auth/sync.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-client/src/diracx/client/patches/client/aio.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-client/src/diracx/client/patches/client/common.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-client/src/diracx/client/patches/client/sync.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-client/src/diracx/client/patches/utils.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-client/src/diracx/client/py.typed +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-client/src/diracx/client/sync.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-client/tests/test_auth.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-core/README.md +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-core/src/diracx/core/__init__.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-core/src/diracx/core/config/__init__.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-core/src/diracx/core/config/sources.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-core/src/diracx/core/exceptions.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-core/src/diracx/core/preferences.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-core/src/diracx/core/properties.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-core/src/diracx/core/py.typed +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-core/src/diracx/core/s3.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-core/src/diracx/core/settings.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-core/tests/test_config_source.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-core/tests/test_s3.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-core/tests/test_secrets.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-db/README.md +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-db/pyproject.toml +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-db/src/diracx/db/__init__.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-db/src/diracx/db/__main__.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-db/src/diracx/db/exceptions.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-db/src/diracx/db/os/__init__.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-db/src/diracx/db/os/job_parameters.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-db/src/diracx/db/os/utils.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-db/src/diracx/db/py.typed +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-db/src/diracx/db/sql/__init__.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-db/src/diracx/db/sql/auth/__init__.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-db/src/diracx/db/sql/auth/db.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-db/src/diracx/db/sql/dummy/__init__.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-db/src/diracx/db/sql/dummy/db.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-db/src/diracx/db/sql/dummy/schema.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-db/src/diracx/db/sql/job/__init__.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-db/src/diracx/db/sql/job/db.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-db/src/diracx/db/sql/job/schema.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-db/src/diracx/db/sql/job_logging/__init__.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-db/src/diracx/db/sql/job_logging/db.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-db/src/diracx/db/sql/job_logging/schema.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-db/src/diracx/db/sql/pilot_agents/__init__.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-db/src/diracx/db/sql/pilot_agents/db.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-db/src/diracx/db/sql/pilot_agents/schema.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-db/src/diracx/db/sql/sandbox_metadata/__init__.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-db/src/diracx/db/sql/sandbox_metadata/db.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-db/src/diracx/db/sql/sandbox_metadata/schema.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-db/src/diracx/db/sql/task_queue/__init__.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-db/src/diracx/db/sql/task_queue/db.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-db/src/diracx/db/sql/task_queue/schema.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-db/src/diracx/db/sql/utils/functions.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-db/src/diracx/db/sql/utils/types.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-db/tests/auth/test_authorization_flow.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-db/tests/auth/test_device_flow.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-db/tests/jobs/test_job_db.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-db/tests/jobs/test_job_logging_db.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-db/tests/jobs/test_sandbox_metadata.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-db/tests/opensearch/test_connection.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-db/tests/opensearch/test_index_template.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-db/tests/opensearch/test_search.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-db/tests/pilot_agents/__init__.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-db/tests/pilot_agents/test_pilot_agents_db.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-db/tests/test_dummy_db.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-db/tests/test_freeze_time.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-logic/README.md +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-logic/src/diracx/logic/__init__.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-logic/src/diracx/logic/__main__.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-logic/src/diracx/logic/auth/__init__.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-logic/src/diracx/logic/auth/authorize_code_flow.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-logic/src/diracx/logic/auth/device_flow.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-logic/src/diracx/logic/auth/management.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-logic/src/diracx/logic/auth/utils.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-logic/src/diracx/logic/auth/well_known.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-logic/src/diracx/logic/jobs/__init__.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-logic/src/diracx/logic/jobs/sandboxes.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-logic/src/diracx/logic/py.typed +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-logic/src/diracx/logic/task_queues/__init__.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-logic/src/diracx/logic/task_queues/priority.py +0 -0
- {diracx-0.0.1a48/diracx-logic/tests/logic → diracx-0.0.1a50/diracx-logic/tests/jobs}/test_sandboxes.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-routers/README.md +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-routers/src/diracx/routers/__init__.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-routers/src/diracx/routers/access_policies.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-routers/src/diracx/routers/auth/__init__.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-routers/src/diracx/routers/auth/management.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-routers/src/diracx/routers/auth/token.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-routers/src/diracx/routers/auth/utils.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-routers/src/diracx/routers/auth/well_known.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-routers/src/diracx/routers/configuration.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-routers/src/diracx/routers/dependencies.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-routers/src/diracx/routers/factory.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-routers/src/diracx/routers/fastapi_classes.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-routers/src/diracx/routers/health/__init__.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-routers/src/diracx/routers/health/probes.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-routers/src/diracx/routers/jobs/__init__.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-routers/src/diracx/routers/jobs/access_policies.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-routers/src/diracx/routers/jobs/legacy.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-routers/src/diracx/routers/jobs/sandboxes.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-routers/src/diracx/routers/jobs/status.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-routers/src/diracx/routers/otel.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-routers/src/diracx/routers/py.typed +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-routers/src/diracx/routers/utils/__init__.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-routers/src/diracx/routers/utils/users.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-routers/tests/auth/test_legacy_exchange.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-routers/tests/data/idp-server.invalid/.well-known/openid-configuration +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-routers/tests/health/test_probes.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-routers/tests/jobs/conftest.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-routers/tests/jobs/test_wms_access_policy.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-routers/tests/test_config_manager.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-routers/tests/test_generic.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-routers/tests/test_policy.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-testing/README.md +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-testing/src/diracx/testing/__init__.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-testing/src/diracx/testing/__main__.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-testing/src/diracx/testing/client_generation.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-testing/src/diracx/testing/client_generation_pytest.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-testing/src/diracx/testing/dummy_osdb.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-testing/src/diracx/testing/entrypoints.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-testing/src/diracx/testing/mock_osdb.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-testing/src/diracx/testing/osdb.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-testing/src/diracx/testing/routers.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-testing/src/diracx/testing/scripts/collect_demo_coverage.sh +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/diracx-testing/src/diracx/testing/time.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/admin/explanations/configuration.md +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/admin/explanations/opentelemetry.md +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/admin/explanations/sandbox-store.md +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/admin/explanations/user-management.md +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/admin/how-to/install/convert-cs.md +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/admin/index.md +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/admin/reference/security_model.md +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/admin/tutorials/authentication.md +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/assets/css/extra.css +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/assets/css/fontawesome-all.min.css +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/assets/css/images/arrow.svg +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/assets/css/images/overlay.png +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/assets/css/main.css +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/assets/home.html +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/assets/images/diracx-logo-square.svg +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/assets/images/logo.svg +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/assets/styles/extra.css +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/assets/webfonts/fa-brands-400.woff2 +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/assets/webfonts/fa-solid-900.woff +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/dev/explanations/components/api.md +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/dev/explanations/components/cli.md +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/dev/explanations/designing-functionality.md +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/dev/explanations/index.md +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/dev/explanations/testing.md +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/dev/how-to/add-a-cli-command.md +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/dev/how-to/add-a-db.md +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/dev/how-to/add-a-route.md +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/dev/how-to/add-a-setting.md +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/dev/how-to/add-a-task.md +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/dev/how-to/add-a-test.md +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/dev/how-to/add-functionality/index.md +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/dev/how-to/client-customization.md +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/dev/how-to/client-extension.md +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/dev/how-to/develop-legacy-dirac.md +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/dev/how-to/extend-diracx/index.md +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/dev/how-to/use-the-demo/index.md +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/dev/how-to/use-the-demo/swagger.md +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/dev/how-to/use-the-demo/web.md +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/dev/index.md +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/dev/reference/application-state.md +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/dev/reference/client-metapathfinder.md +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/dev/reference/coding-conventions.md +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/dev/reference/configuration.md +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/dev/reference/db-transaction-model.md +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/dev/reference/security-policies.md +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/dev/reference/security-properties.md +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/dev/reference/test-recipes.md +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/dev/reference/writing-tests.md +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/dev/tutorials/advanced-tutorial.md +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/dev/tutorials/develop-web.md +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/dev/tutorials/larger-developments.md +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/dev/tutorials/making-changes.md +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/dev/tutorials/play-with-auth.md +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/dev/tutorials/write-docs.md +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/index.md +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/overrides/main.html +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/roadmap.md +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/user/reference/client-configuration.md +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/user/reference/programmatic-usage/command-line-interface.md +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/user/reference/programmatic-usage/https-interface.md +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/user/reference/programmatic-usage/index.md +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/user/reference/programmatic-usage/python-interface.md +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/docs/user/tutorials/getting-started.md +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/containers/client/Dockerfile +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/README.md +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-api/README.md +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-api/pyproject.toml +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-api/src/gubbins/api/__init__.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-api/src/gubbins/api/py.typed +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-api/tests/test_gubbins_api.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-cli/README.md +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-cli/pyproject.toml +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-cli/src/gubbins/cli/__init__.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-cli/src/gubbins/cli/config.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-cli/src/gubbins/cli/lollygag.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-cli/src/gubbins/cli/py.typed +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-cli/tests/test_gubbins_cli.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-client/README.md +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-client/pyproject.toml +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-client/src/gubbins/client/__init__.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/__init__.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/_client.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/_configuration.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/_patch.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/_serialization.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/_utils/__init__.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/_utils/serialization.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/_utils/utils.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/_vendor.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/aio/__init__.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/aio/_client.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/aio/_configuration.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/aio/_patch.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/aio/_vendor.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/aio/operations/__init__.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/aio/operations/_operations.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/aio/operations/_patch.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/models/__init__.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/models/_enums.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/operations/__init__.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/operations/_operations.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/operations/_patch.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/py.typed +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-client/src/gubbins/client/aio.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-client/src/gubbins/client/models.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-client/src/gubbins/client/py.typed +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-client/src/gubbins/client/sync.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-client/tests/test_gubbins_client.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-core/README.md +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-core/pyproject.toml +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-core/src/gubbins/core/__init__.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-core/src/gubbins/core/config/__init__.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-core/src/gubbins/core/config/schema.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-core/src/gubbins/core/models.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-core/src/gubbins/core/properties.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-core/src/gubbins/core/py.typed +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-core/tests/test_config.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-core/tests/test_properties.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-db/README.md +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-db/pyproject.toml +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-db/src/gubbins/db/__init__.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-db/src/gubbins/db/py.typed +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-db/src/gubbins/db/sql/__init__.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-db/src/gubbins/db/sql/jobs/__init__.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-db/src/gubbins/db/sql/jobs/db.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-db/src/gubbins/db/sql/jobs/schema.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-db/src/gubbins/db/sql/lollygag/__init__.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-db/src/gubbins/db/sql/lollygag/db.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-db/src/gubbins/db/sql/lollygag/schema.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-db/tests/test_gubbins_job_db.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-db/tests/test_lollygag_db.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-logic/README.md +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-logic/pyproject.toml +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-logic/src/gubbins/logic/__init__.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-logic/src/gubbins/logic/auth/__init__.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-logic/src/gubbins/logic/auth/well_known.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-logic/src/gubbins/logic/lollygag/__init__.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-logic/src/gubbins/logic/lollygag/lollygag.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-logic/src/gubbins/logic/py.typed +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-logic/tests/test_gubbins_logic.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-routers/README.md +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-routers/pyproject.toml +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-routers/src/gubbins/routers/__init__.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-routers/src/gubbins/routers/dependencies.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-routers/src/gubbins/routers/lollygag/__init__.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-routers/src/gubbins/routers/lollygag/access_policy.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-routers/src/gubbins/routers/lollygag/lollygag.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-routers/src/gubbins/routers/py.typed +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-routers/src/gubbins/routers/well_known.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-routers/tests/data/idp-server.invalid/.well-known/openid-configuration +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-routers/tests/test_gubbins_job_manager.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-routers/tests/test_lollybag.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-routers/tests/test_wellknown.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-testing/README.md +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-testing/pyproject.toml +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/gubbins-testing/src/gubbins/testing/__init__.py +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/pixi.toml +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/extensions/gubbins/release.notes +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/release.notes +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/release.notes.old +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/run_local.sh +0 -0
- {diracx-0.0.1a48 → diracx-0.0.1a50}/tests/__init__.py +0 -0
- {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@
|
|
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@
|
|
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@
|
|
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@
|
|
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=
|
|
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=
|
|
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()
|
|
@@ -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@
|
|
22
|
-
- uses: prefix-dev/setup-pixi@v0.
|
|
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
|
-
-
|
|
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@
|
|
66
|
-
- uses: prefix-dev/setup-pixi@v0.
|
|
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.
|
|
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.
|
|
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@
|
|
99
|
-
- uses: prefix-dev/setup-pixi@v0.
|
|
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.
|
|
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.
|
|
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@
|
|
225
|
-
- uses: prefix-dev/setup-pixi@v0.
|
|
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
|
-
-
|
|
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,13 +16,13 @@ jobs:
|
|
|
16
16
|
runs-on: ubuntu-latest
|
|
17
17
|
steps:
|
|
18
18
|
- name: Checkout
|
|
19
|
-
uses: actions/checkout@
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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:
|
|
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.
|
|
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.
|
|
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
|