From 8e08c77d1e1fa0edc771f4318e185ec2310181d6 Mon Sep 17 00:00:00 2001 From: James Chapman Date: Mon, 27 Jul 2026 08:11:43 +0000 Subject: [PATCH 01/27] revert deleted changelog entries --- CHANGELOG.md | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bbe52b5a4..96891f15b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,10 @@ ENHANCEMENTS: * Add Windows Server 2025 image support to Guacamole. ([#4890](https://github.com/microsoft/AzureTRE/issues/4890)) * Add support for setting resource processor VMSS SKU via environment variables ([#4936](https://github.com/microsoft/AzureTRE/issues/4936)) * Exclude recovery service vaults from e2e tests ([#4920](https://github.com/microsoft/AzureTRE/issues/4920)) +* Update API, CLI, and UI dependencies to address high-severity Dependabot alerts, including `PyJWT`, `Vite`, `lodash`, `fast-uri`, `flatted`, `immutable`, and `minimatch`. +* Update dependencies to address Dependabot security alerts: `aiohttp` to 3.14.1, `Pygments` to 2.20.0, `esbuild`, `ws`, `js-yaml`, `@babel/core`, `flatted` (via vitest upgrade), and `react-router-dom`. ([#4950](https://github.com/microsoft/AzureTRE/issues/4950)) +* Added support for formatting UI code via `pre-commit` and fixed existing formatting issues. ([#4955](https://github.com/microsoft/AzureTRE/issues/4955)) +* Updated the version of `super-linter` used in the `build_validation_develop` workflow ([#4957](https://github.com/microsoft/AzureTRE/issues/4957)) BUG FIXES: * Fix Nexus shared service security: fetch admin password from Key Vault at runtime via managed identity (IMDS) instead of embedding it in the VM Run Command script content. Fix `deploy_nexus_container.sh` short-circuit path to fail loudly if the container does not start. (`sonatype-nexus` 3.10.0) ([#4983](https://github.com/microsoft/AzureTRE/pull/4983)) @@ -41,7 +45,7 @@ ENHANCEMENTS: BUG FIXES: * Fix OpenAPI/schema sample generation for `get_sample_operation` step parameters. ([#4864](https://github.com/microsoft/AzureTRE/issues/4864)) * Fix test airlock request sample data fields and enum values. ([#4866](https://github.com/microsoft/AzureTRE/issues/4866)) -* Fix property substitution not occuring where there is only a main step in the pipeline ([#4824](https://github.com/microsoft/AzureTRE/issues/4824)) +* Fix property substitution not occurring where there is only a main step in the pipeline ([#4824](https://github.com/microsoft/AzureTRE/issues/4824)) * Fix Mysql template ignored storage_mb ([#4846](https://github.com/microsoft/AzureTRE/issues/4846)) * Fix duplicate `TOPIC_SUBSCRIPTION_NAME` in `core/terraform/airlock/airlock_processor.tf` ([#4847](https://github.com/microsoft/AzureTRE/pull/4847)) * Fix Nexus repository access blocked by unaccepted EULA in Nexus 3.77+ Community Edition ([#4842](https://github.com/microsoft/AzureTRE/issues/4842)) @@ -103,7 +107,7 @@ BUG FIXES: * Fix Azure Health Data Services deployment failures by upgrading AzureRM provider to 4.58.0, switching to RBAC group assignments, and adding workspace group parameter mappings ([#4844](https://github.com/microsoft/AzureTRE/issues/4844)) * Replace deprecated `--username` flag with `--client-id` in `az login --identity` commands across all Porter bundles ([#4817](https://github.com/microsoft/AzureTRE/issues/4817)) * Fix deleted workspaces still accessible via URL - get_*_by_id methods now filter out deleted resources ([#4785](https://github.com/microsoft/AzureTRE/issues/4785)) -* Fix circular dependancy in base workspace. ([#4756](https://github.com/microsoft/AzureTRE/pull/4756)) +* Fix circular dependency in base workspace. ([#4756](https://github.com/microsoft/AzureTRE/pull/4756)) * Replaced deprecated `datetime.utcnow()` with `datetime.now(datetime.UTC)` in the API and airlock processor. ([#4743](https://github.com/microsoft/AzureTRE/issues/4743)) * Updated error messages when publishing a template version that is lower than the existing version. ([#4685](https://github.com/microsoft/AzureTRE/issues/4685)) * Disable public access on stweb storage account ([#4766](https://github.com/microsoft/AzureTRE/issues/4766)) @@ -701,7 +705,7 @@ BUG FIXES: * Airlock: Creating an import/export request causes a routing error ([#3830](https://github.com/microsoft/AzureTRE/issues/3830)) * Fix registration of templates with no 'authorizedRoles' or 'required' defined ([#3849](https://github.com/microsoft/AzureTRE/pull/3849)) * Update terraform for services bus to move network rules into namespace resource to avoid depreciation warning, and update setup_local_debugging.sh to use network_rule_sets ([#3858](https://github.com/microsoft/AzureTRE/pull/3858)) -* Update terraform MySQL resources to MySQL Flexible resources to fix depricating recources. ([#3892](https://github.com/microsoft/AzureTRE/pull/3892)) +* Update terraform MySQL resources to MySQL Flexible resources to fix deprecating resources. ([#3892](https://github.com/microsoft/AzureTRE/pull/3892)) * Fix issue with firewall failing to deploy on a new TRE deploy ([#3775](https://github.com/microsoft/AzureTRE/issues/3775)) COMPONENTS: From bf023b59e042907420d6e37b011d29044a9c4aa8 Mon Sep 17 00:00:00 2001 From: James Chapman Date: Mon, 27 Jul 2026 08:14:03 +0000 Subject: [PATCH 02/27] add missing issue number --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 96891f15b..dd4d3d666 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,7 +12,7 @@ ENHANCEMENTS: * Add Windows Server 2025 image support to Guacamole. ([#4890](https://github.com/microsoft/AzureTRE/issues/4890)) * Add support for setting resource processor VMSS SKU via environment variables ([#4936](https://github.com/microsoft/AzureTRE/issues/4936)) * Exclude recovery service vaults from e2e tests ([#4920](https://github.com/microsoft/AzureTRE/issues/4920)) -* Update API, CLI, and UI dependencies to address high-severity Dependabot alerts, including `PyJWT`, `Vite`, `lodash`, `fast-uri`, `flatted`, `immutable`, and `minimatch`. +* Update API, CLI, and UI dependencies to address high-severity Dependabot alerts, including `PyJWT`, `Vite`, `lodash`, `fast-uri`, `flatted`, `immutable`, and `minimatch`. ([#4914](https://github.com/microsoft/AzureTRE/issues/4914)) * Update dependencies to address Dependabot security alerts: `aiohttp` to 3.14.1, `Pygments` to 2.20.0, `esbuild`, `ws`, `js-yaml`, `@babel/core`, `flatted` (via vitest upgrade), and `react-router-dom`. ([#4950](https://github.com/microsoft/AzureTRE/issues/4950)) * Added support for formatting UI code via `pre-commit` and fixed existing formatting issues. ([#4955](https://github.com/microsoft/AzureTRE/issues/4955)) * Updated the version of `super-linter` used in the `build_validation_develop` workflow ([#4957](https://github.com/microsoft/AzureTRE/issues/4957)) From ac42fb811016611898b2ff25197cc39cfdf65cea Mon Sep 17 00:00:00 2001 From: James Chapman Date: Mon, 27 Jul 2026 08:26:56 +0000 Subject: [PATCH 03/27] Update changelog to reflect dependency updates addressing high-severity Dependabot alerts --- CHANGELOG.md | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index dd4d3d666..9b20d6e77 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,8 +12,6 @@ ENHANCEMENTS: * Add Windows Server 2025 image support to Guacamole. ([#4890](https://github.com/microsoft/AzureTRE/issues/4890)) * Add support for setting resource processor VMSS SKU via environment variables ([#4936](https://github.com/microsoft/AzureTRE/issues/4936)) * Exclude recovery service vaults from e2e tests ([#4920](https://github.com/microsoft/AzureTRE/issues/4920)) -* Update API, CLI, and UI dependencies to address high-severity Dependabot alerts, including `PyJWT`, `Vite`, `lodash`, `fast-uri`, `flatted`, `immutable`, and `minimatch`. ([#4914](https://github.com/microsoft/AzureTRE/issues/4914)) -* Update dependencies to address Dependabot security alerts: `aiohttp` to 3.14.1, `Pygments` to 2.20.0, `esbuild`, `ws`, `js-yaml`, `@babel/core`, `flatted` (via vitest upgrade), and `react-router-dom`. ([#4950](https://github.com/microsoft/AzureTRE/issues/4950)) * Added support for formatting UI code via `pre-commit` and fixed existing formatting issues. ([#4955](https://github.com/microsoft/AzureTRE/issues/4955)) * Updated the version of `super-linter` used in the `build_validation_develop` workflow ([#4957](https://github.com/microsoft/AzureTRE/issues/4957)) @@ -23,8 +21,8 @@ BUG FIXES: * Fix API timeout and name collision failures on workspace creation by checking storage account name availability and improved logging. ([#4946](https://github.com/microsoft/AzureTRE/pull/4946)) * Fix error handling in airlock processor ([#4929](https://github.com/microsoft/AzureTRE/pull/4929)) * Update allowed URLs in Nexus for letsencrypt ([#4899](https://github.com/microsoft/AzureTRE/pull/4899)) -* Fix dependabot high severity alerts for packages fast-uri, lodash, picomatch, immutable, minimatch, flatted and PyJWT -* Fix dependabot high moderate alerts for packages aiohttp and pytest, pytest-asyncio +* Update API, CLI, and UI dependencies to address high-severity Dependabot alerts, including `PyJWT`, `Vite`, `lodash`, `fast-uri`, `flatted`, `immutable`, and `minimatch`. ([#4914](https://github.com/microsoft/AzureTRE/issues/4914)) +* Update dependencies to address Dependabot security alerts: `aiohttp` to 3.14.1, `Pygments` to 2.20.0, `esbuild`, `ws`, `js-yaml`, `@babel/core`, `flatted` (via vitest upgrade), and `react-router-dom`. ([#4950](https://github.com/microsoft/AzureTRE/issues/4950)) * Fix spelling in docs using codespell ([#4954](https://github.com/microsoft/AzureTRE/issues/4954)) * Fix issues identified by flake8 ([#4958](https://github.com/microsoft/AzureTRE/issues/4958)) * Replace deprecated yaspell with codespell and add pre-commit hook installer to devcontainer. ([#4953](https://github.com/microsoft/AzureTRE/issues/4953)) From 2db7d18916ca490904cf92da842b11949c2844e6 Mon Sep 17 00:00:00 2001 From: James Chapman Date: Mon, 27 Jul 2026 08:32:38 +0000 Subject: [PATCH 04/27] Update changelog to reflect dependency updates addressing security alerts --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9b20d6e77..e6c154095 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,7 +22,7 @@ BUG FIXES: * Fix error handling in airlock processor ([#4929](https://github.com/microsoft/AzureTRE/pull/4929)) * Update allowed URLs in Nexus for letsencrypt ([#4899](https://github.com/microsoft/AzureTRE/pull/4899)) * Update API, CLI, and UI dependencies to address high-severity Dependabot alerts, including `PyJWT`, `Vite`, `lodash`, `fast-uri`, `flatted`, `immutable`, and `minimatch`. ([#4914](https://github.com/microsoft/AzureTRE/issues/4914)) -* Update dependencies to address Dependabot security alerts: `aiohttp` to 3.14.1, `Pygments` to 2.20.0, `esbuild`, `ws`, `js-yaml`, `@babel/core`, `flatted` (via vitest upgrade), and `react-router-dom`. ([#4950](https://github.com/microsoft/AzureTRE/issues/4950)) +* Update dependencies to address Dependabot security alerts: `aiohttp`, `pytest`, `pytest-asyncio`, `Pygments`, `esbuild`, `ws`, `js-yaml`, `@babel/core`, `flatted` (via vitest upgrade), and `react-router-dom`. ([#4915](https://github.com/microsoft/AzureTRE/issues/4915), [#4950](https://github.com/microsoft/AzureTRE/issues/4950)) * Fix spelling in docs using codespell ([#4954](https://github.com/microsoft/AzureTRE/issues/4954)) * Fix issues identified by flake8 ([#4958](https://github.com/microsoft/AzureTRE/issues/4958)) * Replace deprecated yaspell with codespell and add pre-commit hook installer to devcontainer. ([#4953](https://github.com/microsoft/AzureTRE/issues/4953)) From 47b6a8bc05e6900a4f5bcbb2d881514fe6553ad2 Mon Sep 17 00:00:00 2001 From: James Chapman Date: Mon, 27 Jul 2026 08:35:18 +0000 Subject: [PATCH 05/27] Update changelog to reflect enhancements in UI code formatting and super-linter version --- CHANGELOG.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e6c154095..2f3b12231 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,8 +12,8 @@ ENHANCEMENTS: * Add Windows Server 2025 image support to Guacamole. ([#4890](https://github.com/microsoft/AzureTRE/issues/4890)) * Add support for setting resource processor VMSS SKU via environment variables ([#4936](https://github.com/microsoft/AzureTRE/issues/4936)) * Exclude recovery service vaults from e2e tests ([#4920](https://github.com/microsoft/AzureTRE/issues/4920)) -* Added support for formatting UI code via `pre-commit` and fixed existing formatting issues. ([#4955](https://github.com/microsoft/AzureTRE/issues/4955)) -* Updated the version of `super-linter` used in the `build_validation_develop` workflow ([#4957](https://github.com/microsoft/AzureTRE/issues/4957)) +* Add support for formatting UI code via `pre-commit` and fixed existing formatting issues. ([#4955](https://github.com/microsoft/AzureTRE/issues/4955)) +* Update the version of `super-linter` used in the `build_validation_develop` workflow to 8.7.0 ([#4957](https://github.com/microsoft/AzureTRE/issues/4957)) BUG FIXES: * Fix Nexus shared service security: fetch admin password from Key Vault at runtime via managed identity (IMDS) instead of embedding it in the VM Run Command script content. Fix `deploy_nexus_container.sh` short-circuit path to fail loudly if the container does not start. (`sonatype-nexus` 3.10.0) ([#4983](https://github.com/microsoft/AzureTRE/pull/4983)) From 033e5512585d4beae7b4ab4fdccbce8b2cf9e178 Mon Sep 17 00:00:00 2001 From: James Chapman Date: Mon, 27 Jul 2026 08:52:36 +0000 Subject: [PATCH 06/27] changelog --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2f3b12231..e673ccbe0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,7 +12,7 @@ ENHANCEMENTS: * Add Windows Server 2025 image support to Guacamole. ([#4890](https://github.com/microsoft/AzureTRE/issues/4890)) * Add support for setting resource processor VMSS SKU via environment variables ([#4936](https://github.com/microsoft/AzureTRE/issues/4936)) * Exclude recovery service vaults from e2e tests ([#4920](https://github.com/microsoft/AzureTRE/issues/4920)) -* Add support for formatting UI code via `pre-commit` and fixed existing formatting issues. ([#4955](https://github.com/microsoft/AzureTRE/issues/4955)) +* Add support for formatting UI code via `pre-commit` and fix existing formatting issues. ([#4955](https://github.com/microsoft/AzureTRE/issues/4955)) * Update the version of `super-linter` used in the `build_validation_develop` workflow to 8.7.0 ([#4957](https://github.com/microsoft/AzureTRE/issues/4957)) BUG FIXES: From bcdd26ff4037fb4986eea9e8894ec4fb8672b51f Mon Sep 17 00:00:00 2001 From: James Chapman Date: Mon, 27 Jul 2026 10:54:58 +0000 Subject: [PATCH 07/27] Update JSON Schema version to Draft 2020-12 across multiple templates and schemas - Changed "$schema" from "http://json-schema.org/draft-07/schema" to "https://json-schema.org/draft/2020-12/schema" in: - api_app/schemas/workspace_service.json - api_app/tests_ma/conftest.py - api_http_requests/API Template Modifying Endpoints.http - api_http_requests/API User Journey.http - docs/schemas/operation.json - docs/schemas/resource-assignment.json - docs/schemas/resource.json - docs/tre-templates/pipeline-templates/overview.md - docs/tre-workspace-authors/authoring-workspace-templates.md - e2e_tests/test.http - e2e_tests/test_workspace_service_templates.py - templates/shared_services/admin-vm/template_schema.json - templates/shared_services/airlock_notifier/template_schema.json - templates/shared_services/certs/template_schema.json - templates/shared_services/cyclecloud/template_schema.json - templates/shared_services/databricks-auth/template_schema.json - templates/shared_services/firewall/template_schema.json - templates/shared_services/gitea/template_schema.json - templates/shared_services/sonatype-nexus-vm/template_schema.json - templates/workspace_services/azureml/template_schema.json - templates/workspace_services/azuresql/template_schema.json - templates/workspace_services/databricks/template_schema.json - templates/workspace_services/guacamole/template_schema.json - templates/workspaces/airlock-import-review/template_schema.json - templates/workspaces/base/template_schema.json - templates/workspaces/unrestricted/template_schema.json - Updated version numbers for several shared services and workspace templates to reflect new changes. --- api_app/_version.py | 2 +- api_app/models/schemas/shared_service_template.py | 2 +- api_app/models/schemas/user_resource_template.py | 2 +- api_app/models/schemas/workspace_service_template.py | 2 +- api_app/models/schemas/workspace_template.py | 2 +- api_app/schemas/azuread.json | 2 +- api_app/schemas/shared_service.json | 2 +- api_app/schemas/user_resource.json | 2 +- api_app/schemas/workspace.json | 2 +- api_app/schemas/workspace_service.json | 2 +- api_app/tests_ma/conftest.py | 8 ++++---- .../API Template Modifying Endpoints.http | 6 +++--- api_http_requests/API User Journey.http | 6 +++--- docs/schemas/operation.json | 2 +- docs/schemas/resource-assignment.json | 2 +- docs/schemas/resource.json | 2 +- docs/tre-templates/pipeline-templates/overview.md | 2 +- .../authoring-workspace-templates.md | 12 +++++++++++- e2e_tests/test.http | 2 +- e2e_tests/test_workspace_service_templates.py | 2 +- templates/shared_services/admin-vm/porter.yaml | 2 +- .../shared_services/admin-vm/template_schema.json | 2 +- .../shared_services/airlock_notifier/porter.yaml | 2 +- .../airlock_notifier/template_schema.json | 2 +- templates/shared_services/certs/porter.yaml | 2 +- templates/shared_services/certs/template_schema.json | 2 +- templates/shared_services/cyclecloud/porter.yaml | 2 +- .../shared_services/cyclecloud/template_schema.json | 2 +- .../shared_services/databricks-auth/porter.yaml | 2 +- .../databricks-auth/template_schema.json | 2 +- templates/shared_services/firewall/porter.yaml | 2 +- .../shared_services/firewall/template_schema.json | 2 +- templates/shared_services/gitea/porter.yaml | 2 +- templates/shared_services/gitea/template_schema.json | 2 +- .../shared_services/sonatype-nexus-vm/porter.yaml | 2 +- .../sonatype-nexus-vm/template_schema.json | 2 +- templates/workspace_services/azureml/porter.yaml | 2 +- .../workspace_services/azureml/template_schema.json | 2 +- .../azureml/user_resources/aml_compute/porter.yaml | 2 +- .../user_resources/aml_compute/template_schema.json | 2 +- templates/workspace_services/azuresql/porter.yaml | 2 +- .../workspace_services/azuresql/template_schema.json | 2 +- templates/workspace_services/databricks/porter.yaml | 2 +- .../databricks/template_schema.json | 2 +- templates/workspace_services/gitea/porter.yaml | 2 +- .../workspace_services/gitea/template_schema.json | 2 +- templates/workspace_services/guacamole/porter.yaml | 2 +- .../guacamole/template_schema.json | 2 +- .../guacamole-azure-export-reviewvm/porter.yaml | 2 +- .../template_schema.json | 2 +- .../guacamole-azure-import-reviewvm/porter.yaml | 2 +- .../template_schema.json | 2 +- .../guacamole-azure-linuxvm/porter.yaml | 2 +- .../guacamole-azure-linuxvm/template_schema.json | 2 +- .../guacamole-azure-windowsvm/porter.yaml | 2 +- .../guacamole-azure-windowsvm/template_schema.json | 2 +- .../workspace_services/health-services/porter.yaml | 2 +- .../health-services/template_schema.json | 2 +- templates/workspace_services/mysql/porter.yaml | 2 +- .../workspace_services/mysql/template_schema.json | 2 +- templates/workspace_services/ohdsi/porter.yaml | 2 +- .../workspace_services/ohdsi/template_schema.json | 2 +- templates/workspace_services/openai/porter.yaml | 2 +- .../workspace_services/openai/template_schema.json | 2 +- .../workspaces/airlock-import-review/porter.yaml | 2 +- .../airlock-import-review/template_schema.json | 2 +- templates/workspaces/base/porter.yaml | 2 +- templates/workspaces/base/template_schema.json | 2 +- templates/workspaces/unrestricted/porter.yaml | 2 +- .../workspaces/unrestricted/template_schema.json | 2 +- 70 files changed, 87 insertions(+), 77 deletions(-) diff --git a/api_app/_version.py b/api_app/_version.py index 605b3cd20..7c4a9591e 100644 --- a/api_app/_version.py +++ b/api_app/_version.py @@ -1 +1 @@ -__version__ = "0.25.29" +__version__ = "0.26.0" diff --git a/api_app/models/schemas/shared_service_template.py b/api_app/models/schemas/shared_service_template.py index 048973b37..75df0bfa5 100644 --- a/api_app/models/schemas/shared_service_template.py +++ b/api_app/models/schemas/shared_service_template.py @@ -44,7 +44,7 @@ class Config: "version": "0.0.1", "current": "true", "json_schema": { - "$schema": "http://json-schema.org/draft-07/schema", + "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://github.com/microsoft/AzureTRE/templates/shared_services/myshared_service/shared_service.json", "type": "object", "title": "My Shared Service Template", diff --git a/api_app/models/schemas/user_resource_template.py b/api_app/models/schemas/user_resource_template.py index cc0013cd7..971e1cfcf 100644 --- a/api_app/models/schemas/user_resource_template.py +++ b/api_app/models/schemas/user_resource_template.py @@ -44,7 +44,7 @@ class Config: "version": "0.0.1", "current": "true", "json_schema": { - "$schema": "http://json-schema.org/draft-07/schema", + "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://github.com/microsoft/AzureTRE/templates/workspaces/myworkspace/user_resource.json", "type": "object", "title": "My User Resource Template", diff --git a/api_app/models/schemas/workspace_service_template.py b/api_app/models/schemas/workspace_service_template.py index c3f493169..1dbe16f2a 100644 --- a/api_app/models/schemas/workspace_service_template.py +++ b/api_app/models/schemas/workspace_service_template.py @@ -45,7 +45,7 @@ class Config: "version": "0.0.1", "current": "true", "json_schema": { - "$schema": "http://json-schema.org/draft-07/schema", + "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://github.com/microsoft/AzureTRE/templates/workspaces/myworkspace/workspace_service.json", "type": "object", "title": "My Workspace Service Template", diff --git a/api_app/models/schemas/workspace_template.py b/api_app/models/schemas/workspace_template.py index bc2095521..f08b33005 100644 --- a/api_app/models/schemas/workspace_template.py +++ b/api_app/models/schemas/workspace_template.py @@ -49,7 +49,7 @@ class Config: "version": "0.0.1", "current": "true", "json_schema": { - "$schema": "http://json-schema.org/draft-07/schema", + "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://github.com/microsoft/AzureTRE/templates/workspaces/myworkspace/workspace.json", "type": "object", "title": "My Workspace Template", diff --git a/api_app/schemas/azuread.json b/api_app/schemas/azuread.json index 8c4fa5218..9f19f4a79 100644 --- a/api_app/schemas/azuread.json +++ b/api_app/schemas/azuread.json @@ -1,5 +1,5 @@ { - "$schema": "http://json-schema.org/draft-07/schema", + "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://github.com/microsoft/AzureTRE/schema/azuread.json", "type": "object", "title": "Azure AD Authorisation Schema", diff --git a/api_app/schemas/shared_service.json b/api_app/schemas/shared_service.json index 59866500f..a9b7420f9 100644 --- a/api_app/schemas/shared_service.json +++ b/api_app/schemas/shared_service.json @@ -1,5 +1,5 @@ { - "$schema": "http://json-schema.org/draft-07/schema", + "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://github.com/microsoft/AzureTRE/schema/shared_service.json", "type": "object", "title": "Shared Service Default Parameters", diff --git a/api_app/schemas/user_resource.json b/api_app/schemas/user_resource.json index fc2e1ce2d..d7b4da512 100644 --- a/api_app/schemas/user_resource.json +++ b/api_app/schemas/user_resource.json @@ -1,5 +1,5 @@ { - "$schema": "http://json-schema.org/draft-07/schema", + "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://github.com/microsoft/AzureTRE/schema/user_resource.json", "type": "object", "title": "User Resource Default Parameters", diff --git a/api_app/schemas/workspace.json b/api_app/schemas/workspace.json index 70a974a7d..792b3ab45 100644 --- a/api_app/schemas/workspace.json +++ b/api_app/schemas/workspace.json @@ -1,5 +1,5 @@ { - "$schema": "http://json-schema.org/draft-07/schema", + "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://github.com/microsoft/AzureTRE/schema/workspace.json", "type": "object", "title": "Workspace Default Parameters", diff --git a/api_app/schemas/workspace_service.json b/api_app/schemas/workspace_service.json index 1476f6a71..75a56423d 100644 --- a/api_app/schemas/workspace_service.json +++ b/api_app/schemas/workspace_service.json @@ -1,5 +1,5 @@ { - "$schema": "http://json-schema.org/draft-07/schema", + "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://github.com/microsoft/AzureTRE/schema/workspace_service.json", "type": "object", "title": "Workspace Service Default Parameters", diff --git a/api_app/tests_ma/conftest.py b/api_app/tests_ma/conftest.py index 6245ec23e..0cc6fdc1a 100644 --- a/api_app/tests_ma/conftest.py +++ b/api_app/tests_ma/conftest.py @@ -36,7 +36,7 @@ def input_workspace_template(): version="0.0.1", current=True, json_schema={ - "$schema": "http://json-schema.org/draft-07/schema", + "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://github.com/microsoft/AzureTRE/templates/workspaces/myworkspace/workspace.json", "type": "object", "title": "My Workspace Template", @@ -101,7 +101,7 @@ def input_workspace_service_template(): version="0.0.1", current=True, json_schema={ - "$schema": "http://json-schema.org/draft-07/schema", + "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://github.com/microsoft/AzureTRE/templates/workspaces/myworkspace/workspace_service.json", "type": "object", "title": "My Workspace Service Template", @@ -122,7 +122,7 @@ def input_user_resource_template(): version="0.0.1", current=True, json_schema={ - "$schema": "http://json-schema.org/draft-07/schema", + "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://github.com/microsoft/AzureTRE/templates/workspaces/myworkspace/user_resource.json", "type": "object", "title": "My User Resource Template", @@ -143,7 +143,7 @@ def input_shared_service_template(): version="0.0.1", current=True, json_schema={ - "$schema": "http://json-schema.org/draft-07/schema", + "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://github.com/microsoft/AzureTRE/templates/shared_services/mysharedservice/shared_service.json", "type": "object", "title": "My Shared Service Template", diff --git a/api_http_requests/API Template Modifying Endpoints.http b/api_http_requests/API Template Modifying Endpoints.http index c888f47f9..0a034d9f4 100644 --- a/api_http_requests/API Template Modifying Endpoints.http +++ b/api_http_requests/API Template Modifying Endpoints.http @@ -10,7 +10,7 @@ Content-Type: {{contentType}} "version": "0.0.3", "current": "true", "json_schema": { - "$schema": "http://json-schema.org/draft-07/schema", + "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://github.com/microsoft/AzureTRE/templates/workspaces/myworkspace/workspace.json", "type": "object", "title": "My Workspace Template", @@ -55,7 +55,7 @@ Content-Type: {{contentType}} "version": "0.0.1", "current": "true", "json_schema": { - "$schema": "http://json-schema.org/draft-07/schema", + "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://github.com/microsoft/AzureTRE/templates/workspaces/myworkspace/workspace_service.json", "type": "object", "title": "My Workspace Service Template", @@ -77,7 +77,7 @@ Content-Type: {{contentType}} "version": "0.0.1", "current": "true", "json_schema": { - "$schema": "http://json-schema.org/draft-07/schema", + "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://github.com/microsoft/AzureTRE/templates/workspaces/myworkspace/user_resource.json", "type": "object", "title": "My User Resource Template", diff --git a/api_http_requests/API User Journey.http b/api_http_requests/API User Journey.http index f011fd37a..c0f793a80 100644 --- a/api_http_requests/API User Journey.http +++ b/api_http_requests/API User Journey.http @@ -12,7 +12,7 @@ Content-Type: {{contentType}} "version": "0.0.3", "current": "true", "json_schema": { - "$schema": "http://json-schema.org/draft-07/schema", + "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://github.com/microsoft/AzureTRE/templates/workspaces/myworkspace/workspace.json", "type": "object", "title": "My Workspace Template", @@ -57,7 +57,7 @@ Content-Type: {{contentType}} "version": "0.0.1", "current": "true", "json_schema": { - "$schema": "http://json-schema.org/draft-07/schema", + "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://github.com/microsoft/AzureTRE/templates/workspaces/myworkspace/workspace_service.json", "type": "object", "title": "My Workspace Service Template", @@ -79,7 +79,7 @@ Content-Type: {{contentType}} "version": "0.0.1", "current": "true", "json_schema": { - "$schema": "http://json-schema.org/draft-07/schema", + "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://github.com/microsoft/AzureTRE/templates/workspaces/myworkspace/user_resource.json", "type": "object", "title": "My User Resource Template", diff --git a/docs/schemas/operation.json b/docs/schemas/operation.json index 0878f416c..1fb91a9e5 100644 --- a/docs/schemas/operation.json +++ b/docs/schemas/operation.json @@ -1,5 +1,5 @@ { - "$schema": "https://json-schema.org/draft/2019-09/schema", + "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": { "id": { diff --git a/docs/schemas/resource-assignment.json b/docs/schemas/resource-assignment.json index cd7dd0461..7fc3a379d 100644 --- a/docs/schemas/resource-assignment.json +++ b/docs/schemas/resource-assignment.json @@ -1,5 +1,5 @@ { - "$schema": "https://json-schema.org/draft/2019-09/schema", + "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": { "id": { diff --git a/docs/schemas/resource.json b/docs/schemas/resource.json index fdb7eaad4..cf29364d7 100644 --- a/docs/schemas/resource.json +++ b/docs/schemas/resource.json @@ -1,5 +1,5 @@ { - "$schema": "https://json-schema.org/draft/2019-09/schema", + "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": { "id": { diff --git a/docs/tre-templates/pipeline-templates/overview.md b/docs/tre-templates/pipeline-templates/overview.md index 730ded971..916512188 100644 --- a/docs/tre-templates/pipeline-templates/overview.md +++ b/docs/tre-templates/pipeline-templates/overview.md @@ -10,7 +10,7 @@ Consider the following `template_schema.json`: ```json { - "$schema": "http://json-schema.org/draft-07/schema", + "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://github.com/microsoft/AzureTRE/templates/workspace_services/guacamole/user_resources/guacamole-dev-vm/template_schema.json", ... "properties": {...}, diff --git a/docs/tre-workspace-authors/authoring-workspace-templates.md b/docs/tre-workspace-authors/authoring-workspace-templates.md index eba6bc875..a14250b8f 100644 --- a/docs/tre-workspace-authors/authoring-workspace-templates.md +++ b/docs/tre-workspace-authors/authoring-workspace-templates.md @@ -74,7 +74,17 @@ Similarly to `tre_id`, `workspace_id` is used in the resource names of the works All the values for the required parameters will be provided by the deployment runner. -Any **custom parameters** are picked up by Azure TRE API and will be queried from the user deploying the workspace bundle. Custom parameters should also be defined in the `template_schema.json` file at the root of the bundle. This file follows the [JSON schema standard](http://json-schema.org/) and can be used by a user interface to generate a UI for the user to input the parameters. +Any **custom parameters** are picked up by Azure TRE API and will be queried from the user deploying the workspace bundle. Custom parameters should also be defined in the `template_schema.json` file at the root of the bundle. This file follows the [JSON schema standard](https://json-schema.org/) Draft 2020-12 (`https://json-schema.org/draft/2020-12/schema`) and can be used by a user interface to generate a UI for the user to input the parameters. + +### JSON Schema Version Standard + +Azure TRE template schemas (`template_schema.json`) use the **JSON Schema Draft 2020-12** specification: + +```json +"$schema": "https://json-schema.org/draft/2020-12/schema" +``` + +Draft 2020-12 is supported by the API schema validation engine and supports new keywords such as `unevaluatedProperties`. The Azure TRE API automatically sets `unevaluatedProperties: false` on template schemas to prevent unspecified parameters from being supplied, including when evaluating conditional schemas defined with `allOf`. ### Template properties diff --git a/e2e_tests/test.http b/e2e_tests/test.http index 7d782f402..be3000908 100644 --- a/e2e_tests/test.http +++ b/e2e_tests/test.http @@ -63,7 +63,7 @@ Content-type: application/json "version": "0.0.1", "current": "true", "json_schema": { - "$schema": "http://json-schema.org/draft-07/schema", + "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://github.com/microsoft/AzureTRE/templates/workspaces/myworkspace/workspace_service.json", "type": "object", "title": "DONOTUSE - E2E workspace service", diff --git a/e2e_tests/test_workspace_service_templates.py b/e2e_tests/test_workspace_service_templates.py index 8ea70e636..323b2d856 100644 --- a/e2e_tests/test_workspace_service_templates.py +++ b/e2e_tests/test_workspace_service_templates.py @@ -45,7 +45,7 @@ async def test_create_workspace_service_templates(verify) -> None: "version": "0.0.1", "current": "true", "json_schema": { - "$schema": "http://json-schema.org/draft-07/schema", + "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://github.com/microsoft/AzureTRE/templates/workspaces/myworkspace/workspace_service.json", "type": "object", "title": "DONOTUSE", diff --git a/templates/shared_services/admin-vm/porter.yaml b/templates/shared_services/admin-vm/porter.yaml index 9cbdf3eaa..63353d5bc 100644 --- a/templates/shared_services/admin-vm/porter.yaml +++ b/templates/shared_services/admin-vm/porter.yaml @@ -1,7 +1,7 @@ --- schemaVersion: 1.0.0 name: tre-shared-service-admin-vm -version: 0.5.4 +version: 0.5.5 description: "An admin vm shared service" dockerfile: Dockerfile.tmpl registry: azuretre diff --git a/templates/shared_services/admin-vm/template_schema.json b/templates/shared_services/admin-vm/template_schema.json index e0f08f17f..bea7fcedf 100644 --- a/templates/shared_services/admin-vm/template_schema.json +++ b/templates/shared_services/admin-vm/template_schema.json @@ -1,5 +1,5 @@ { - "$schema": "http://json-schema.org/draft-07/schema", + "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://github.com/microsoft/AzureTRE/templates/shared_services/admin-vm/template_schema.json", "type": "object", "title": "Admin VM Shared Service", diff --git a/templates/shared_services/airlock_notifier/porter.yaml b/templates/shared_services/airlock_notifier/porter.yaml index 700821b6c..9a60dba98 100644 --- a/templates/shared_services/airlock_notifier/porter.yaml +++ b/templates/shared_services/airlock_notifier/porter.yaml @@ -1,7 +1,7 @@ --- schemaVersion: 1.0.0 name: tre-shared-service-airlock-notifier -version: 1.0.10 +version: 1.0.11 description: "A shared service notifying on Airlock Operations" registry: azuretre dockerfile: Dockerfile.tmpl diff --git a/templates/shared_services/airlock_notifier/template_schema.json b/templates/shared_services/airlock_notifier/template_schema.json index fb22366da..744ae4b65 100644 --- a/templates/shared_services/airlock_notifier/template_schema.json +++ b/templates/shared_services/airlock_notifier/template_schema.json @@ -1,5 +1,5 @@ { - "$schema": "http://json-schema.org/draft-07/schema", + "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://github.com/microsoft/AzureTRE/templates/shared_services/airlock_notifier/template_schema.json", "type": "object", "title": "Airlock Notifier Shared Service", diff --git a/templates/shared_services/certs/porter.yaml b/templates/shared_services/certs/porter.yaml index 7d01fd763..bb61f19c0 100755 --- a/templates/shared_services/certs/porter.yaml +++ b/templates/shared_services/certs/porter.yaml @@ -1,7 +1,7 @@ --- schemaVersion: 1.0.0 name: tre-shared-service-certs -version: 0.7.10 +version: 0.7.11 description: "An Azure TRE shared service to generate certificates for a specified internal domain using Letsencrypt" registry: azuretre dockerfile: Dockerfile.tmpl diff --git a/templates/shared_services/certs/template_schema.json b/templates/shared_services/certs/template_schema.json index 4b3f69a5b..eff3c5f03 100644 --- a/templates/shared_services/certs/template_schema.json +++ b/templates/shared_services/certs/template_schema.json @@ -1,5 +1,5 @@ { - "$schema": "http://json-schema.org/draft-07/schema", + "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://github.com/microsoft/AzureTRE/templates/shared_services/certs/template_schema.json", "type": "object", "title": "Certificate Service", diff --git a/templates/shared_services/cyclecloud/porter.yaml b/templates/shared_services/cyclecloud/porter.yaml index df454e012..48e3f40ab 100644 --- a/templates/shared_services/cyclecloud/porter.yaml +++ b/templates/shared_services/cyclecloud/porter.yaml @@ -1,7 +1,7 @@ --- schemaVersion: 1.0.0 name: tre-shared-service-cyclecloud -version: 0.7.5 +version: 0.7.6 description: "An Azure TRE Shared Service Template for Azure Cyclecloud" registry: azuretre dockerfile: Dockerfile.tmpl diff --git a/templates/shared_services/cyclecloud/template_schema.json b/templates/shared_services/cyclecloud/template_schema.json index 8a5031a51..972b25a94 100644 --- a/templates/shared_services/cyclecloud/template_schema.json +++ b/templates/shared_services/cyclecloud/template_schema.json @@ -1,5 +1,5 @@ { - "$schema": "http://json-schema.org/draft-07/schema", + "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://github.com/microsoft/AzureTRE/templates/workspace_services/guacamole/user_resources/guacamole-azure-linuxvm/template_schema.json", "type": "object", "title": "Azure CycleCloud", diff --git a/templates/shared_services/databricks-auth/porter.yaml b/templates/shared_services/databricks-auth/porter.yaml index f7d34be8c..37c92151b 100644 --- a/templates/shared_services/databricks-auth/porter.yaml +++ b/templates/shared_services/databricks-auth/porter.yaml @@ -1,7 +1,7 @@ --- schemaVersion: 1.0.0 name: tre-shared-service-databricks-private-auth -version: 0.1.14 +version: 0.1.15 description: "An Azure TRE shared service for Azure Databricks authentication." registry: azuretre dockerfile: Dockerfile.tmpl diff --git a/templates/shared_services/databricks-auth/template_schema.json b/templates/shared_services/databricks-auth/template_schema.json index 2d87fd841..2d24a1ac7 100644 --- a/templates/shared_services/databricks-auth/template_schema.json +++ b/templates/shared_services/databricks-auth/template_schema.json @@ -1,5 +1,5 @@ { - "$schema": "http://json-schema.org/draft-07/schema", + "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://github.com/microsoft/AzureTRE/templates/shared_services/databricks-auth/template_schema.json", "type": "object", "title": "Azure Databricks Private Authentication Shared Service", diff --git a/templates/shared_services/firewall/porter.yaml b/templates/shared_services/firewall/porter.yaml index e8399e844..45174e8ae 100644 --- a/templates/shared_services/firewall/porter.yaml +++ b/templates/shared_services/firewall/porter.yaml @@ -1,7 +1,7 @@ --- schemaVersion: 1.0.0 name: tre-shared-service-firewall -version: 1.6.1 +version: 1.6.2 description: "An Azure TRE Firewall shared service" dockerfile: Dockerfile.tmpl registry: azuretre diff --git a/templates/shared_services/firewall/template_schema.json b/templates/shared_services/firewall/template_schema.json index 12ea9a40e..3b896716c 100644 --- a/templates/shared_services/firewall/template_schema.json +++ b/templates/shared_services/firewall/template_schema.json @@ -1,5 +1,5 @@ { - "$schema": "http://json-schema.org/draft-07/schema", + "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://github.com/microsoft/AzureTRE/templates/shared_services/firewall/template_schema.json", "type": "object", "title": "Firewall Shared Service", diff --git a/templates/shared_services/gitea/porter.yaml b/templates/shared_services/gitea/porter.yaml index f9a76a756..700be2a7f 100644 --- a/templates/shared_services/gitea/porter.yaml +++ b/templates/shared_services/gitea/porter.yaml @@ -1,7 +1,7 @@ --- schemaVersion: 1.0.0 name: tre-shared-service-gitea -version: 1.2.2 +version: 1.2.3 description: "A Gitea shared service" dockerfile: Dockerfile.tmpl registry: azuretre diff --git a/templates/shared_services/gitea/template_schema.json b/templates/shared_services/gitea/template_schema.json index 463a6715f..894a4dd7a 100644 --- a/templates/shared_services/gitea/template_schema.json +++ b/templates/shared_services/gitea/template_schema.json @@ -1,5 +1,5 @@ { - "$schema": "http://json-schema.org/draft-07/schema", + "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://github.com/microsoft/AzureTRE/templates/shared_services/gitea/template_schema.json", "type": "object", "title": "Gitea - Git Mirror", diff --git a/templates/shared_services/sonatype-nexus-vm/porter.yaml b/templates/shared_services/sonatype-nexus-vm/porter.yaml index 8aea05c7c..79f7009b9 100644 --- a/templates/shared_services/sonatype-nexus-vm/porter.yaml +++ b/templates/shared_services/sonatype-nexus-vm/porter.yaml @@ -1,7 +1,7 @@ --- schemaVersion: 1.0.0 name: tre-shared-service-sonatype-nexus -version: 3.10.0 +version: 3.10.1 description: "A Sonatype Nexus shared service" dockerfile: Dockerfile.tmpl registry: azuretre diff --git a/templates/shared_services/sonatype-nexus-vm/template_schema.json b/templates/shared_services/sonatype-nexus-vm/template_schema.json index 8f490def9..f4ab97f81 100644 --- a/templates/shared_services/sonatype-nexus-vm/template_schema.json +++ b/templates/shared_services/sonatype-nexus-vm/template_schema.json @@ -1,5 +1,5 @@ { - "$schema": "http://json-schema.org/draft-07/schema", + "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://github.com/microsoft/AzureTRE/templates/shared_services/sonatype-nexus-vm/template_schema.json", "type": "object", "title": "Sonatype Nexus Repository Manager", diff --git a/templates/workspace_services/azureml/porter.yaml b/templates/workspace_services/azureml/porter.yaml index d6d4593ad..723713cf3 100644 --- a/templates/workspace_services/azureml/porter.yaml +++ b/templates/workspace_services/azureml/porter.yaml @@ -1,7 +1,7 @@ --- schemaVersion: 1.0.0 name: tre-service-azureml -version: 1.1.4 +version: 1.1.5 description: "An Azure TRE service for Azure Machine Learning" registry: azuretre dockerfile: Dockerfile.tmpl diff --git a/templates/workspace_services/azureml/template_schema.json b/templates/workspace_services/azureml/template_schema.json index c09cfc592..34d34a3bf 100644 --- a/templates/workspace_services/azureml/template_schema.json +++ b/templates/workspace_services/azureml/template_schema.json @@ -1,5 +1,5 @@ { - "$schema": "http://json-schema.org/draft-07/schema", + "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://github.com/microsoft/AzureTRE/templates/workspace_services/azureml/template_schema.json", "type": "object", "title": "Azure Machine Learning", diff --git a/templates/workspace_services/azureml/user_resources/aml_compute/porter.yaml b/templates/workspace_services/azureml/user_resources/aml_compute/porter.yaml index 34d3ee784..b3c529c99 100644 --- a/templates/workspace_services/azureml/user_resources/aml_compute/porter.yaml +++ b/templates/workspace_services/azureml/user_resources/aml_compute/porter.yaml @@ -1,7 +1,7 @@ --- schemaVersion: 1.0.0 name: tre-user-resource-aml-compute-instance -version: 0.5.12 +version: 0.5.13 description: "Azure Machine Learning Compute Instance" registry: azuretre dockerfile: Dockerfile.tmpl diff --git a/templates/workspace_services/azureml/user_resources/aml_compute/template_schema.json b/templates/workspace_services/azureml/user_resources/aml_compute/template_schema.json index 044dfa5ee..c74462423 100644 --- a/templates/workspace_services/azureml/user_resources/aml_compute/template_schema.json +++ b/templates/workspace_services/azureml/user_resources/aml_compute/template_schema.json @@ -1,5 +1,5 @@ { - "$schema": "http://json-schema.org/draft-07/schema", + "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://github.com/microsoft/AzureTRE/templates/workspace_services/azureml/user_resources/aml_compute/custom_parameters.json", "type": "object", "title": "Azure Machine Learning Compute Instance", diff --git a/templates/workspace_services/azuresql/porter.yaml b/templates/workspace_services/azuresql/porter.yaml index 7e72065bb..48e969cb9 100644 --- a/templates/workspace_services/azuresql/porter.yaml +++ b/templates/workspace_services/azuresql/porter.yaml @@ -1,7 +1,7 @@ --- schemaVersion: 1.0.0 name: tre-workspace-service-azuresql -version: 1.0.17 +version: 1.0.18 description: "An Azure SQL workspace service" registry: azuretre dockerfile: Dockerfile.tmpl diff --git a/templates/workspace_services/azuresql/template_schema.json b/templates/workspace_services/azuresql/template_schema.json index 2e8040630..7be530f07 100644 --- a/templates/workspace_services/azuresql/template_schema.json +++ b/templates/workspace_services/azuresql/template_schema.json @@ -1,5 +1,5 @@ { - "$schema": "http://json-schema.org/draft-07/schema", + "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://github.com/microsoft/AzureTRE/templates/workspace_services/azuresql/template_schema.json", "type": "object", "title": "Azure SQL", diff --git a/templates/workspace_services/databricks/porter.yaml b/templates/workspace_services/databricks/porter.yaml index abfdd18a8..4e913a4e0 100644 --- a/templates/workspace_services/databricks/porter.yaml +++ b/templates/workspace_services/databricks/porter.yaml @@ -1,7 +1,7 @@ --- schemaVersion: 1.0.0 name: tre-service-databricks -version: 1.0.16 +version: 1.0.17 description: "An Azure TRE service for Azure Databricks." registry: azuretre dockerfile: Dockerfile.tmpl diff --git a/templates/workspace_services/databricks/template_schema.json b/templates/workspace_services/databricks/template_schema.json index 1e43ba039..d61c46f5c 100644 --- a/templates/workspace_services/databricks/template_schema.json +++ b/templates/workspace_services/databricks/template_schema.json @@ -1,5 +1,5 @@ { - "$schema": "http://json-schema.org/draft-07/schema", + "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://github.com/microsoft/AzureTRE/templates/workspace_services/databricks/template_schema.json", "type": "object", "title": "Azure Databricks", diff --git a/templates/workspace_services/gitea/porter.yaml b/templates/workspace_services/gitea/porter.yaml index f9044eb34..39621ab35 100644 --- a/templates/workspace_services/gitea/porter.yaml +++ b/templates/workspace_services/gitea/porter.yaml @@ -1,7 +1,7 @@ --- schemaVersion: 1.0.0 name: tre-workspace-service-gitea -version: 1.3.3 +version: 1.3.4 description: "A Gitea workspace service" dockerfile: Dockerfile.tmpl registry: azuretre diff --git a/templates/workspace_services/gitea/template_schema.json b/templates/workspace_services/gitea/template_schema.json index ef53192e7..736575379 100644 --- a/templates/workspace_services/gitea/template_schema.json +++ b/templates/workspace_services/gitea/template_schema.json @@ -1,5 +1,5 @@ { - "$schema": "http://json-schema.org/draft-07/schema", + "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://github.com/microsoft/AzureTRE/templates/workspace_services/guacamole/template_schema.json", "type": "object", "title": "Gitea", diff --git a/templates/workspace_services/guacamole/porter.yaml b/templates/workspace_services/guacamole/porter.yaml index b2ce9174b..8f172fe98 100644 --- a/templates/workspace_services/guacamole/porter.yaml +++ b/templates/workspace_services/guacamole/porter.yaml @@ -1,7 +1,7 @@ --- schemaVersion: 1.0.0 name: tre-service-guacamole -version: 0.14.2 +version: 0.14.3 description: "An Azure TRE service for Guacamole" dockerfile: Dockerfile.tmpl registry: azuretre diff --git a/templates/workspace_services/guacamole/template_schema.json b/templates/workspace_services/guacamole/template_schema.json index 4bf0f7b2d..a01faf606 100644 --- a/templates/workspace_services/guacamole/template_schema.json +++ b/templates/workspace_services/guacamole/template_schema.json @@ -1,5 +1,5 @@ { - "$schema": "http://json-schema.org/draft-07/schema", + "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://github.com/microsoft/AzureTRE/templates/workspace_services/guacamole/template_schema.json", "type": "object", "title": "Apache Guacamole - Virtual Desktop Service", diff --git a/templates/workspace_services/guacamole/user_resources/guacamole-azure-export-reviewvm/porter.yaml b/templates/workspace_services/guacamole/user_resources/guacamole-azure-export-reviewvm/porter.yaml index ef129291f..2907e7ec5 100644 --- a/templates/workspace_services/guacamole/user_resources/guacamole-azure-export-reviewvm/porter.yaml +++ b/templates/workspace_services/guacamole/user_resources/guacamole-azure-export-reviewvm/porter.yaml @@ -1,7 +1,7 @@ --- schemaVersion: 1.0.0 name: tre-service-guacamole-export-reviewvm -version: 2.0.0 +version: 2.0.1 description: "An Azure TRE User Resource Template for reviewing Airlock export requests" dockerfile: Dockerfile.tmpl registry: azuretre diff --git a/templates/workspace_services/guacamole/user_resources/guacamole-azure-export-reviewvm/template_schema.json b/templates/workspace_services/guacamole/user_resources/guacamole-azure-export-reviewvm/template_schema.json index ed7d04f6d..b49fdf486 100644 --- a/templates/workspace_services/guacamole/user_resources/guacamole-azure-export-reviewvm/template_schema.json +++ b/templates/workspace_services/guacamole/user_resources/guacamole-azure-export-reviewvm/template_schema.json @@ -1,5 +1,5 @@ { - "$schema": "http://json-schema.org/draft-07/schema", + "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://github.com/microsoft/AzureTRE/templates/workspace_services/guacamole/user_resources/guacamole-azure-export-reviewvm/template_schema.json", "type": "object", "title": "Export review Virtual Machine", diff --git a/templates/workspace_services/guacamole/user_resources/guacamole-azure-import-reviewvm/porter.yaml b/templates/workspace_services/guacamole/user_resources/guacamole-azure-import-reviewvm/porter.yaml index 28e5167a4..dcfff7300 100644 --- a/templates/workspace_services/guacamole/user_resources/guacamole-azure-import-reviewvm/porter.yaml +++ b/templates/workspace_services/guacamole/user_resources/guacamole-azure-import-reviewvm/porter.yaml @@ -1,7 +1,7 @@ --- schemaVersion: 1.0.0 name: tre-service-guacamole-import-reviewvm -version: 2.0.0 +version: 2.0.1 description: "An Azure TRE User Resource Template for reviewing Airlock import requests" dockerfile: Dockerfile.tmpl registry: azuretre diff --git a/templates/workspace_services/guacamole/user_resources/guacamole-azure-import-reviewvm/template_schema.json b/templates/workspace_services/guacamole/user_resources/guacamole-azure-import-reviewvm/template_schema.json index efa1b7971..7732c3efe 100644 --- a/templates/workspace_services/guacamole/user_resources/guacamole-azure-import-reviewvm/template_schema.json +++ b/templates/workspace_services/guacamole/user_resources/guacamole-azure-import-reviewvm/template_schema.json @@ -1,5 +1,5 @@ { - "$schema": "http://json-schema.org/draft-07/schema", + "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://github.com/microsoft/AzureTRE/templates/workspace_services/guacamole/user_resources/guacamole-azure-import-reviewvm/template_schema.json", "type": "object", "title": "Import review Virtual Machine", diff --git a/templates/workspace_services/guacamole/user_resources/guacamole-azure-linuxvm/porter.yaml b/templates/workspace_services/guacamole/user_resources/guacamole-azure-linuxvm/porter.yaml index 186da0d57..f95113432 100644 --- a/templates/workspace_services/guacamole/user_resources/guacamole-azure-linuxvm/porter.yaml +++ b/templates/workspace_services/guacamole/user_resources/guacamole-azure-linuxvm/porter.yaml @@ -1,7 +1,7 @@ --- schemaVersion: 1.0.0 name: tre-service-guacamole-linuxvm -version: 1.4.3 +version: 1.4.4 description: "An Azure TRE User Resource Template for Guacamole (Linux)" dockerfile: Dockerfile.tmpl registry: azuretre diff --git a/templates/workspace_services/guacamole/user_resources/guacamole-azure-linuxvm/template_schema.json b/templates/workspace_services/guacamole/user_resources/guacamole-azure-linuxvm/template_schema.json index c2c2ffc66..7ab390499 100644 --- a/templates/workspace_services/guacamole/user_resources/guacamole-azure-linuxvm/template_schema.json +++ b/templates/workspace_services/guacamole/user_resources/guacamole-azure-linuxvm/template_schema.json @@ -1,5 +1,5 @@ { - "$schema": "http://json-schema.org/draft-07/schema", + "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://github.com/microsoft/AzureTRE/templates/workspace_services/guacamole/user_resources/guacamole-azure-linuxvm/template_schema.json", "type": "object", "title": "Linux Virtual Machine", diff --git a/templates/workspace_services/guacamole/user_resources/guacamole-azure-windowsvm/porter.yaml b/templates/workspace_services/guacamole/user_resources/guacamole-azure-windowsvm/porter.yaml index f994d0e02..e7ebb8242 100644 --- a/templates/workspace_services/guacamole/user_resources/guacamole-azure-windowsvm/porter.yaml +++ b/templates/workspace_services/guacamole/user_resources/guacamole-azure-windowsvm/porter.yaml @@ -1,7 +1,7 @@ --- schemaVersion: 1.0.0 name: tre-service-guacamole-windowsvm -version: 3.0.0 +version: 3.0.1 description: "An Azure TRE User Resource Template for Guacamole (Windows 11 or Windows Server 2025)" dockerfile: Dockerfile.tmpl registry: azuretre diff --git a/templates/workspace_services/guacamole/user_resources/guacamole-azure-windowsvm/template_schema.json b/templates/workspace_services/guacamole/user_resources/guacamole-azure-windowsvm/template_schema.json index 7ac0d9ee8..82c066cb9 100644 --- a/templates/workspace_services/guacamole/user_resources/guacamole-azure-windowsvm/template_schema.json +++ b/templates/workspace_services/guacamole/user_resources/guacamole-azure-windowsvm/template_schema.json @@ -1,5 +1,5 @@ { - "$schema": "http://json-schema.org/draft-07/schema", + "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://github.com/microsoft/AzureTRE/templates/workspace_services/guacamole/user_resources/guacamole-azure-windowsvm/template_schema.json", "type": "object", "title": "Windows Virtual Machine", diff --git a/templates/workspace_services/health-services/porter.yaml b/templates/workspace_services/health-services/porter.yaml index d7dd92c46..c59b50f62 100644 --- a/templates/workspace_services/health-services/porter.yaml +++ b/templates/workspace_services/health-services/porter.yaml @@ -1,7 +1,7 @@ --- schemaVersion: 1.0.0 name: tre-workspace-service-health -version: 0.3.5 +version: 0.3.6 description: "An Azure Data Health Services workspace service" registry: azuretre dockerfile: Dockerfile.tmpl diff --git a/templates/workspace_services/health-services/template_schema.json b/templates/workspace_services/health-services/template_schema.json index 98e5061de..68311f553 100644 --- a/templates/workspace_services/health-services/template_schema.json +++ b/templates/workspace_services/health-services/template_schema.json @@ -1,5 +1,5 @@ { - "$schema": "http://json-schema.org/draft-07/schema", + "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://github.com/microsoft/AzureTRE/templates/workspace_services/healthcare_services/template_schema.json", "type": "object", "title": "Azure Health Data Services Workspace Service", diff --git a/templates/workspace_services/mysql/porter.yaml b/templates/workspace_services/mysql/porter.yaml index 80ce54d0a..fb18c7bf9 100644 --- a/templates/workspace_services/mysql/porter.yaml +++ b/templates/workspace_services/mysql/porter.yaml @@ -1,7 +1,7 @@ --- schemaVersion: 1.0.0 name: tre-workspace-service-mysql -version: 1.0.12 +version: 1.0.13 description: "A MySQL workspace service" registry: azuretre dockerfile: Dockerfile.tmpl diff --git a/templates/workspace_services/mysql/template_schema.json b/templates/workspace_services/mysql/template_schema.json index fd2b69039..974359962 100644 --- a/templates/workspace_services/mysql/template_schema.json +++ b/templates/workspace_services/mysql/template_schema.json @@ -1,5 +1,5 @@ { - "$schema": "http://json-schema.org/draft-07/schema", + "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://github.com/microsoft/AzureTRE/templates/workspace_services/sql/template_schema.json", "type": "object", "title": "MySQL Workspace Service", diff --git a/templates/workspace_services/ohdsi/porter.yaml b/templates/workspace_services/ohdsi/porter.yaml index ca5e7ef55..7c9aa6caa 100644 --- a/templates/workspace_services/ohdsi/porter.yaml +++ b/templates/workspace_services/ohdsi/porter.yaml @@ -1,7 +1,7 @@ --- schemaVersion: 1.0.0 name: tre-workspace-service-ohdsi -version: 0.3.7 +version: 0.3.8 description: "An OHDSI workspace service" registry: azuretre dockerfile: Dockerfile.tmpl diff --git a/templates/workspace_services/ohdsi/template_schema.json b/templates/workspace_services/ohdsi/template_schema.json index 1fa56948b..400100c17 100644 --- a/templates/workspace_services/ohdsi/template_schema.json +++ b/templates/workspace_services/ohdsi/template_schema.json @@ -1,5 +1,5 @@ { - "$schema": "http://json-schema.org/draft-07/schema", + "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://github.com/microsoft/AzureTRE/templates/workspace_services/ohdsi/template_schema.json", "type": "object", "title": "OHDSI Workspace Service", diff --git a/templates/workspace_services/openai/porter.yaml b/templates/workspace_services/openai/porter.yaml index 4ad4efc6b..f5d2a8383 100644 --- a/templates/workspace_services/openai/porter.yaml +++ b/templates/workspace_services/openai/porter.yaml @@ -1,7 +1,7 @@ --- schemaVersion: 1.0.0 name: tre-workspace-service-openai -version: 1.0.8 +version: 1.0.9 description: "An OpenAI workspace service" registry: azuretre dockerfile: Dockerfile.tmpl diff --git a/templates/workspace_services/openai/template_schema.json b/templates/workspace_services/openai/template_schema.json index da2cf39f9..be283c7c4 100644 --- a/templates/workspace_services/openai/template_schema.json +++ b/templates/workspace_services/openai/template_schema.json @@ -1,5 +1,5 @@ { - "$schema": "http://json-schema.org/draft-07/schema", + "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://github.com/microsoft/AzureTRE/templates/workspace_services/sql/template_schema.json", "type": "object", "title": "OpenAI Workspace Service", diff --git a/templates/workspaces/airlock-import-review/porter.yaml b/templates/workspaces/airlock-import-review/porter.yaml index 464a41d4f..3e5602834 100644 --- a/templates/workspaces/airlock-import-review/porter.yaml +++ b/templates/workspaces/airlock-import-review/porter.yaml @@ -1,7 +1,7 @@ --- schemaVersion: 1.0.0 name: tre-workspace-airlock-import-review -version: 0.15.0 +version: 0.15.1 description: "A workspace to do Airlock Data Import Reviews for Azure TRE" dockerfile: Dockerfile.tmpl registry: azuretre diff --git a/templates/workspaces/airlock-import-review/template_schema.json b/templates/workspaces/airlock-import-review/template_schema.json index 27ad22a5d..419b3b12f 100644 --- a/templates/workspaces/airlock-import-review/template_schema.json +++ b/templates/workspaces/airlock-import-review/template_schema.json @@ -1,5 +1,5 @@ { - "$schema": "http://json-schema.org/draft-07/schema", + "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://github.com/microsoft/AzureTRE/templates/workspaces/airlock_import_review/template_schema.json", "type": "object", "title": "Airlock Import Review Workspace", diff --git a/templates/workspaces/base/porter.yaml b/templates/workspaces/base/porter.yaml index 22cb6cdfc..456e99b85 100644 --- a/templates/workspaces/base/porter.yaml +++ b/templates/workspaces/base/porter.yaml @@ -1,7 +1,7 @@ --- schemaVersion: 1.0.0 name: tre-workspace-base -version: 2.8.4 +version: 2.8.5 description: "A base Azure TRE workspace" dockerfile: Dockerfile.tmpl registry: azuretre diff --git a/templates/workspaces/base/template_schema.json b/templates/workspaces/base/template_schema.json index c69024b8e..9138ab0ca 100644 --- a/templates/workspaces/base/template_schema.json +++ b/templates/workspaces/base/template_schema.json @@ -1,5 +1,5 @@ { - "$schema": "http://json-schema.org/draft-07/schema", + "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://github.com/microsoft/AzureTRE/templates/workspaces/base/template_schema.json", "type": "object", "title": "Base Workspace", diff --git a/templates/workspaces/unrestricted/porter.yaml b/templates/workspaces/unrestricted/porter.yaml index bd4373b58..ede4b755d 100644 --- a/templates/workspaces/unrestricted/porter.yaml +++ b/templates/workspaces/unrestricted/porter.yaml @@ -1,7 +1,7 @@ --- schemaVersion: 1.0.0 name: tre-workspace-unrestricted -version: 0.13.7 +version: 0.13.8 description: "A base Azure TRE workspace" dockerfile: Dockerfile.tmpl registry: azuretre diff --git a/templates/workspaces/unrestricted/template_schema.json b/templates/workspaces/unrestricted/template_schema.json index cea34ab8f..527350e92 100644 --- a/templates/workspaces/unrestricted/template_schema.json +++ b/templates/workspaces/unrestricted/template_schema.json @@ -1,5 +1,5 @@ { - "$schema": "http://json-schema.org/draft-07/schema", + "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://github.com/microsoft/AzureTRE/templates/workspaces/base/template_schema.json", "type": "object", "title": "Unrestricted Workspace", From 7a1e6f3d87a66332ae8323e096a812dfcd6ac7de Mon Sep 17 00:00:00 2001 From: James Chapman Date: Mon, 27 Jul 2026 11:07:52 +0000 Subject: [PATCH 08/27] changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e673ccbe0..2fb1f3e96 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -28,6 +28,7 @@ BUG FIXES: * Replace deprecated yaspell with codespell and add pre-commit hook installer to devcontainer. ([#4953](https://github.com/microsoft/AzureTRE/issues/4953)) * Fix Guacamole Windows VM image selections by aligning schema enums/defaults with supported image options in Windows and review VM templates. ([#4963](https://github.com/microsoft/AzureTRE/issues/4963)) * Remove deprecated `soft_delete_enabled` setting from `azurerm_recovery_services_vault` in base workspace template. ([#4967](https://github.com/microsoft/AzureTRE/issues/4967)) +* Update JSON Schema version to Draft 2020-12 ([#5005](https://github.com/microsoft/AzureTRE/pull/5005)) ## (0.28.0) (March 2, 2026) **BREAKING CHANGES** From 6c22dc4448c18f57b4b307b4b61e1a7847731f6e Mon Sep 17 00:00:00 2001 From: James Chapman Date: Mon, 27 Jul 2026 11:11:34 +0000 Subject: [PATCH 09/27] linting --- docs/tre-workspace-authors/authoring-workspace-templates.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/docs/tre-workspace-authors/authoring-workspace-templates.md b/docs/tre-workspace-authors/authoring-workspace-templates.md index a14250b8f..91f9c4b84 100644 --- a/docs/tre-workspace-authors/authoring-workspace-templates.md +++ b/docs/tre-workspace-authors/authoring-workspace-templates.md @@ -74,7 +74,8 @@ Similarly to `tre_id`, `workspace_id` is used in the resource names of the works All the values for the required parameters will be provided by the deployment runner. -Any **custom parameters** are picked up by Azure TRE API and will be queried from the user deploying the workspace bundle. Custom parameters should also be defined in the `template_schema.json` file at the root of the bundle. This file follows the [JSON schema standard](https://json-schema.org/) Draft 2020-12 (`https://json-schema.org/draft/2020-12/schema`) and can be used by a user interface to generate a UI for the user to input the parameters. +Any **custom parameters** are picked up by Azure TRE API and will be queried from the user deploying the workspace bundle. Custom parameters should also be defined in the `template_schema.json` file at the root of the bundle. +This file follows the [JSON schema standard](https://json-schema.org/) Draft 2020-12 (`https://json-schema.org/draft/2020-12/schema`) and can be used by a user interface to generate a UI for the user to input the parameters. ### JSON Schema Version Standard @@ -84,7 +85,7 @@ Azure TRE template schemas (`template_schema.json`) use the **JSON Schema Draft "$schema": "https://json-schema.org/draft/2020-12/schema" ``` -Draft 2020-12 is supported by the API schema validation engine and supports new keywords such as `unevaluatedProperties`. The Azure TRE API automatically sets `unevaluatedProperties: false` on template schemas to prevent unspecified parameters from being supplied, including when evaluating conditional schemas defined with `allOf`. +Draft 2020-12 is supported by the API schema validation engine and is the recommended JSON Schema version for Azure TRE templates. ### Template properties From e352b5232467b2bc09b09abb21b54a2cb29650ae Mon Sep 17 00:00:00 2001 From: James Chapman <196318169+JC-wk@users.noreply.github.com> Date: Mon, 27 Jul 2026 12:18:41 +0100 Subject: [PATCH 10/27] Apply suggestions from code review Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- templates/shared_services/cyclecloud/template_schema.json | 2 +- .../azureml/user_resources/aml_compute/template_schema.json | 2 +- templates/workspace_services/gitea/template_schema.json | 2 +- .../workspace_services/health-services/template_schema.json | 2 +- templates/workspace_services/mysql/template_schema.json | 2 +- templates/workspace_services/openai/template_schema.json | 2 +- templates/workspaces/airlock-import-review/template_schema.json | 2 +- templates/workspaces/unrestricted/template_schema.json | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/templates/shared_services/cyclecloud/template_schema.json b/templates/shared_services/cyclecloud/template_schema.json index 972b25a94..425fe4bd9 100644 --- a/templates/shared_services/cyclecloud/template_schema.json +++ b/templates/shared_services/cyclecloud/template_schema.json @@ -1,6 +1,6 @@ { "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://github.com/microsoft/AzureTRE/templates/workspace_services/guacamole/user_resources/guacamole-azure-linuxvm/template_schema.json", + "$id": "https://github.com/microsoft/AzureTRE/templates/shared_services/cyclecloud/template_schema.json", "type": "object", "title": "Azure CycleCloud", "description": "Azure CycleCloud is an enterprise-friendly tool for orchestrating and managing High Performance Computing (HPC) environments on Azure.", diff --git a/templates/workspace_services/azureml/user_resources/aml_compute/template_schema.json b/templates/workspace_services/azureml/user_resources/aml_compute/template_schema.json index c74462423..bffc7824c 100644 --- a/templates/workspace_services/azureml/user_resources/aml_compute/template_schema.json +++ b/templates/workspace_services/azureml/user_resources/aml_compute/template_schema.json @@ -1,6 +1,6 @@ { "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://github.com/microsoft/AzureTRE/templates/workspace_services/azureml/user_resources/aml_compute/custom_parameters.json", + "$id": "https://github.com/microsoft/AzureTRE/templates/workspace_services/azureml/user_resources/aml_compute/template_schema.json", "type": "object", "title": "Azure Machine Learning Compute Instance", "description": "An Azure Machine Learning compute instance is a managed cloud-based workstation for data scientists. Each compute instance has only one owner, although you can share files between multiple compute instances.", diff --git a/templates/workspace_services/gitea/template_schema.json b/templates/workspace_services/gitea/template_schema.json index 736575379..57a0e717f 100644 --- a/templates/workspace_services/gitea/template_schema.json +++ b/templates/workspace_services/gitea/template_schema.json @@ -1,6 +1,6 @@ { "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://github.com/microsoft/AzureTRE/templates/workspace_services/guacamole/template_schema.json", + "$id": "https://github.com/microsoft/AzureTRE/templates/workspace_services/gitea/template_schema.json", "type": "object", "title": "Gitea", "description": "Gitea is a lightweight DevOps platform. Features include code hosting, code review, CI/CD, project management and package management.", diff --git a/templates/workspace_services/health-services/template_schema.json b/templates/workspace_services/health-services/template_schema.json index 68311f553..166d289b6 100644 --- a/templates/workspace_services/health-services/template_schema.json +++ b/templates/workspace_services/health-services/template_schema.json @@ -1,6 +1,6 @@ { "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://github.com/microsoft/AzureTRE/templates/workspace_services/healthcare_services/template_schema.json", + "$id": "https://github.com/microsoft/AzureTRE/templates/workspace_services/health-services/template_schema.json", "type": "object", "title": "Azure Health Data Services Workspace Service", "description": "Provides Azure Health Data Services within the workspace", diff --git a/templates/workspace_services/mysql/template_schema.json b/templates/workspace_services/mysql/template_schema.json index 974359962..7c11e5891 100644 --- a/templates/workspace_services/mysql/template_schema.json +++ b/templates/workspace_services/mysql/template_schema.json @@ -1,6 +1,6 @@ { "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://github.com/microsoft/AzureTRE/templates/workspace_services/sql/template_schema.json", + "$id": "https://github.com/microsoft/AzureTRE/templates/workspace_services/mysql/template_schema.json", "type": "object", "title": "MySQL Workspace Service", "description": "Provides MySQL within the workspace", diff --git a/templates/workspace_services/openai/template_schema.json b/templates/workspace_services/openai/template_schema.json index be283c7c4..811a13a96 100644 --- a/templates/workspace_services/openai/template_schema.json +++ b/templates/workspace_services/openai/template_schema.json @@ -1,6 +1,6 @@ { "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://github.com/microsoft/AzureTRE/templates/workspace_services/sql/template_schema.json", + "$id": "https://github.com/microsoft/AzureTRE/templates/workspace_services/openai/template_schema.json", "type": "object", "title": "OpenAI Workspace Service", "description": "Provides OpenAI within the workspace", diff --git a/templates/workspaces/airlock-import-review/template_schema.json b/templates/workspaces/airlock-import-review/template_schema.json index 419b3b12f..b69bfa535 100644 --- a/templates/workspaces/airlock-import-review/template_schema.json +++ b/templates/workspaces/airlock-import-review/template_schema.json @@ -1,6 +1,6 @@ { "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://github.com/microsoft/AzureTRE/templates/workspaces/airlock_import_review/template_schema.json", + "$id": "https://github.com/microsoft/AzureTRE/templates/workspaces/airlock-import-review/template_schema.json", "type": "object", "title": "Airlock Import Review Workspace", "description": "This workspace template is intended to conduct Airlock Data Import reviews from.", diff --git a/templates/workspaces/unrestricted/template_schema.json b/templates/workspaces/unrestricted/template_schema.json index 527350e92..f91a5a05e 100644 --- a/templates/workspaces/unrestricted/template_schema.json +++ b/templates/workspaces/unrestricted/template_schema.json @@ -1,6 +1,6 @@ { "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://github.com/microsoft/AzureTRE/templates/workspaces/base/template_schema.json", + "$id": "https://github.com/microsoft/AzureTRE/templates/workspaces/unrestricted/template_schema.json", "type": "object", "title": "Unrestricted Workspace", "description": "Workspace with unrestricted access to the Internet", From 3e771c90f5f7443fa78492f92014b17843601277 Mon Sep 17 00:00:00 2001 From: James Chapman Date: Mon, 27 Jul 2026 11:19:41 +0000 Subject: [PATCH 11/27] docs --- docs/tre-workspace-authors/authoring-workspace-templates.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/tre-workspace-authors/authoring-workspace-templates.md b/docs/tre-workspace-authors/authoring-workspace-templates.md index 91f9c4b84..aff6a446d 100644 --- a/docs/tre-workspace-authors/authoring-workspace-templates.md +++ b/docs/tre-workspace-authors/authoring-workspace-templates.md @@ -82,7 +82,9 @@ This file follows the [JSON schema standard](https://json-schema.org/) Draft 202 Azure TRE template schemas (`template_schema.json`) use the **JSON Schema Draft 2020-12** specification: ```json -"$schema": "https://json-schema.org/draft/2020-12/schema" +{ + "$schema": "https://json-schema.org/draft/2020-12/schema" +} ``` Draft 2020-12 is supported by the API schema validation engine and is the recommended JSON Schema version for Azure TRE templates. From bdbccaa056f4962e9f03997dedfffa895d4f1b64 Mon Sep 17 00:00:00 2001 From: James Chapman Date: Mon, 27 Jul 2026 11:39:18 +0000 Subject: [PATCH 12/27] improve wording --- api_app/models/schemas/shared_service_template.py | 2 +- api_app/models/schemas/user_resource_template.py | 2 +- api_app/models/schemas/workspace_service_template.py | 2 +- api_app/tests_ma/conftest.py | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/api_app/models/schemas/shared_service_template.py b/api_app/models/schemas/shared_service_template.py index 75df0bfa5..0048e6194 100644 --- a/api_app/models/schemas/shared_service_template.py +++ b/api_app/models/schemas/shared_service_template.py @@ -48,7 +48,7 @@ class Config: "$id": "https://github.com/microsoft/AzureTRE/templates/shared_services/myshared_service/shared_service.json", "type": "object", "title": "My Shared Service Template", - "description": "These is a test shared service resource template schema", + "description": "This is a test shared service resource template schema", "required": [], "authorizedRoles": [], "properties": {} diff --git a/api_app/models/schemas/user_resource_template.py b/api_app/models/schemas/user_resource_template.py index 971e1cfcf..741c4d5ae 100644 --- a/api_app/models/schemas/user_resource_template.py +++ b/api_app/models/schemas/user_resource_template.py @@ -48,7 +48,7 @@ class Config: "$id": "https://github.com/microsoft/AzureTRE/templates/workspaces/myworkspace/user_resource.json", "type": "object", "title": "My User Resource Template", - "description": "These is a test user resource template schema", + "description": "This is a test user resource template schema", "required": [], "authorizedRoles": [], "properties": {}, diff --git a/api_app/models/schemas/workspace_service_template.py b/api_app/models/schemas/workspace_service_template.py index 1dbe16f2a..af07d751d 100644 --- a/api_app/models/schemas/workspace_service_template.py +++ b/api_app/models/schemas/workspace_service_template.py @@ -49,7 +49,7 @@ class Config: "$id": "https://github.com/microsoft/AzureTRE/templates/workspaces/myworkspace/workspace_service.json", "type": "object", "title": "My Workspace Service Template", - "description": "These is a test workspace service resource template schema", + "description": "This is a test workspace service resource template schema", "required": [], "authorizedRoles": [], "properties": {} diff --git a/api_app/tests_ma/conftest.py b/api_app/tests_ma/conftest.py index 0cc6fdc1a..1733d255a 100644 --- a/api_app/tests_ma/conftest.py +++ b/api_app/tests_ma/conftest.py @@ -126,7 +126,7 @@ def input_user_resource_template(): "$id": "https://github.com/microsoft/AzureTRE/templates/workspaces/myworkspace/user_resource.json", "type": "object", "title": "My User Resource Template", - "description": "These is a test user resource template schema", + "description": "This is a test user resource template schema", "required": [], "properties": {}, }, From 44263d2ef2e88c324958e5739d9b4c6c88665e63 Mon Sep 17 00:00:00 2001 From: James Chapman <196318169+JC-wk@users.noreply.github.com> Date: Mon, 27 Jul 2026 12:48:42 +0100 Subject: [PATCH 13/27] Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- api_app/models/schemas/shared_service_template.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api_app/models/schemas/shared_service_template.py b/api_app/models/schemas/shared_service_template.py index 0048e6194..dcce183d5 100644 --- a/api_app/models/schemas/shared_service_template.py +++ b/api_app/models/schemas/shared_service_template.py @@ -45,7 +45,7 @@ class Config: "current": "true", "json_schema": { "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://github.com/microsoft/AzureTRE/templates/shared_services/myshared_service/shared_service.json", + "$id": "https://github.com/microsoft/AzureTRE/templates/shared_services/mysharedservice/shared_service.json", "type": "object", "title": "My Shared Service Template", "description": "This is a test shared service resource template schema", From aab3d686d175d0f4cb3d0f7da748b9d842c9fc39 Mon Sep 17 00:00:00 2001 From: James Chapman Date: Mon, 27 Jul 2026 12:19:50 +0000 Subject: [PATCH 14/27] remove $id's which are invalid and unnecessary --- api_http_requests/API Template Modifying Endpoints.http | 2 -- api_http_requests/API User Journey.http | 2 -- templates/shared_services/admin-vm/template_schema.json | 2 -- .../shared_services/airlock_notifier/template_schema.json | 7 ------- templates/shared_services/certs/template_schema.json | 2 -- templates/shared_services/firewall/template_schema.json | 2 -- templates/shared_services/gitea/template_schema.json | 2 -- .../shared_services/sonatype-nexus-vm/template_schema.json | 1 - templates/workspace_services/azureml/template_schema.json | 5 ----- templates/workspace_services/azuresql/template_schema.json | 3 --- .../workspace_services/databricks/template_schema.json | 2 -- templates/workspace_services/gitea/template_schema.json | 2 -- .../workspace_services/guacamole/template_schema.json | 6 ------ .../guacamole-azure-export-reviewvm/template_schema.json | 3 --- .../guacamole-azure-import-reviewvm/template_schema.json | 3 --- .../guacamole-azure-linuxvm/template_schema.json | 4 ---- .../guacamole-azure-windowsvm/template_schema.json | 4 ---- .../health-services/template_schema.json | 4 ---- templates/workspace_services/mysql/template_schema.json | 3 --- templates/workspace_services/ohdsi/template_schema.json | 1 - templates/workspace_services/openai/template_schema.json | 2 -- 21 files changed, 62 deletions(-) diff --git a/api_http_requests/API Template Modifying Endpoints.http b/api_http_requests/API Template Modifying Endpoints.http index 0a034d9f4..060f4a777 100644 --- a/api_http_requests/API Template Modifying Endpoints.http +++ b/api_http_requests/API Template Modifying Endpoints.http @@ -21,7 +21,6 @@ Content-Type: {{contentType}} ], "properties": { "vm_size": { - "$id": "#/properties/vm_size", "type": "string", "title": "VM size", "description": "Size of the VMs in my workspace", @@ -33,7 +32,6 @@ Content-Type: {{contentType}} ] }, "no_of_vms": { - "$id": "#/properties/no_of_vms", "type": "integer", "title": "Number of VMs", "description": "Number of virtual machines to be deployed in the workspace", diff --git a/api_http_requests/API User Journey.http b/api_http_requests/API User Journey.http index c0f793a80..b69d18984 100644 --- a/api_http_requests/API User Journey.http +++ b/api_http_requests/API User Journey.http @@ -23,7 +23,6 @@ Content-Type: {{contentType}} ], "properties": { "vm_size": { - "$id": "#/properties/vm_size", "type": "string", "title": "VM size", "description": "Size of the VMs in my workspace", @@ -35,7 +34,6 @@ Content-Type: {{contentType}} ] }, "no_of_vms": { - "$id": "#/properties/no_of_vms", "type": "integer", "title": "Number of VMs", "description": "Number of virtual machines to be deployed in the workspace", diff --git a/templates/shared_services/admin-vm/template_schema.json b/templates/shared_services/admin-vm/template_schema.json index bea7fcedf..a32086d0e 100644 --- a/templates/shared_services/admin-vm/template_schema.json +++ b/templates/shared_services/admin-vm/template_schema.json @@ -7,7 +7,6 @@ "required": [], "properties": { "os_image": { - "$id": "#/properties/os_image", "type": "string", "title": "Windows image", "description": "Select Windows image to use for VM", @@ -17,7 +16,6 @@ "default": "Windows 11" }, "admin_jumpbox_vm_sku": { - "$id": "#/properties/admin_jumpbox_vm_sku", "type": "string", "enum": [ "Standard_B2s", diff --git a/templates/shared_services/airlock_notifier/template_schema.json b/templates/shared_services/airlock_notifier/template_schema.json index 744ae4b65..bc601ffaa 100644 --- a/templates/shared_services/airlock_notifier/template_schema.json +++ b/templates/shared_services/airlock_notifier/template_schema.json @@ -21,21 +21,18 @@ "updateable": true }, "smtp_server_address": { - "$id": "#/properties/smtp_server_address", "type": "string", "title": "SMTP Server Address", "description": "SMTP Server Address", "updateable": false }, "smtp_username": { - "$id": "#/properties/smtp_username", "type": "string", "title": "SMTP Username", "description": "SMTP Username", "updateable": false }, "smtpPassword": { - "$id": "#/properties/smtpPassword", "type": "string", "title": "SMTP Password", "description": "SMTP Password", @@ -43,14 +40,12 @@ "sensitive": true }, "smtp_from_email": { - "$id": "#/properties/smtp_from_email", "type": "string", "title": "SMTP From Email", "description": "The notification emails will be sent from this address", "updateable": false }, "tre_url": { - "$id": "#/properties/tre_url", "type": "string", "title": "TRE URL", "description": "If your TRE URL is different from ${TRE_ID}.${LOCATION}.cloudapp.azure.com, please enter it here", @@ -61,14 +56,12 @@ ] }, "smtp_server_enable_ssl": { - "$id": "#/properties/smtp_server_enable_ssl", "type": "boolean", "title": "SMTP SSL Enabled", "updateable": false, "default": true }, "smtp_server_port": { - "$id": "#/properties/smtp_server_port", "type": "integer", "title": "SMTP Server Port", "updateable": false, diff --git a/templates/shared_services/certs/template_schema.json b/templates/shared_services/certs/template_schema.json index eff3c5f03..276670973 100644 --- a/templates/shared_services/certs/template_schema.json +++ b/templates/shared_services/certs/template_schema.json @@ -24,13 +24,11 @@ "updateable": true }, "domain_prefix": { - "$id": "#/properties/domain_prefix", "type": "string", "title": "Domain prefix", "description": "The FQDN prefix (which will be prepended to {TRE_ID}.{LOCATION}.cloudapp.azure.com) to generate a certificate for" }, "cert_name": { - "$id": "#/properties/cert_name", "type": "string", "title": "Cert name", "description": "What to call the certificate that's exported to KeyVault (alphanumeric and '-' only)" diff --git a/templates/shared_services/firewall/template_schema.json b/templates/shared_services/firewall/template_schema.json index 3b896716c..af536c15e 100644 --- a/templates/shared_services/firewall/template_schema.json +++ b/templates/shared_services/firewall/template_schema.json @@ -7,7 +7,6 @@ "required": [], "properties": { "rule_collections": { - "$id": "#properties/rule_collections", "title": "application rule collections", "type": "array", "default": [], @@ -183,7 +182,6 @@ } }, "network_rule_collections": { - "$id": "#properties/network_rule_collections", "title": "network rule collections", "type": "array", "default": [], diff --git a/templates/shared_services/gitea/template_schema.json b/templates/shared_services/gitea/template_schema.json index 894a4dd7a..de2346197 100644 --- a/templates/shared_services/gitea/template_schema.json +++ b/templates/shared_services/gitea/template_schema.json @@ -28,7 +28,6 @@ "updateable": true }, "sql_sku": { - "$id": "#/properties/sql_sku", "type": "string", "title": "MySQL server SKU", "description": "MySQL server SKU", @@ -41,7 +40,6 @@ "default": "B | 4GB 2vCores" }, "is_exposed_externally": { - "$id": "#/properties/is_exposed_externally", "type": "boolean", "title": "Expose externally", "description": "Is the Gitea accessible from outside of the TRE network.", diff --git a/templates/shared_services/sonatype-nexus-vm/template_schema.json b/templates/shared_services/sonatype-nexus-vm/template_schema.json index f4ab97f81..4da269906 100644 --- a/templates/shared_services/sonatype-nexus-vm/template_schema.json +++ b/templates/shared_services/sonatype-nexus-vm/template_schema.json @@ -43,7 +43,6 @@ "default": "nexus-ssl" }, "is_exposed_externally": { - "$id": "#/properties/is_exposed_externally", "type": "boolean", "title": "Expose externally", "description": "Is the Sonatype Nexus accessible from outside of the TRE network.", diff --git a/templates/workspace_services/azureml/template_schema.json b/templates/workspace_services/azureml/template_schema.json index 34d34a3bf..7a2b418be 100644 --- a/templates/workspace_services/azureml/template_schema.json +++ b/templates/workspace_services/azureml/template_schema.json @@ -28,31 +28,26 @@ "updateable": true }, "is_exposed_externally": { - "$id": "#/properties/is_exposed_externally", "type": "boolean", "title": "Expose externally", "description": "Is the Azure ML workspace accessible from outside of the workspace network. Also opens firewall rules to allow compute instances with public IP addresses.", "default": false }, "address_space": { - "$id": "#/properties/address_space", "type": "string", "title": "Address space", "description": "The address space for use by AML subnets" }, "log_analytics_workspace_name": { - "$id": "#/properties/log_analytics_workspace_name", "type": "string", "title": "Log Analytics Workspace Name" }, "workspace_owners_group_id": { - "$id": "#/properties/workspace_owners_group_id", "type": "string", "title": "Workspace Owners Group ID", "description": "Object ID of the workspace owners AAD group" }, "workspace_researchers_group_id": { - "$id": "#/properties/workspace_researchers_group_id", "type": "string", "title": "Workspace Researchers Group ID", "description": "Object ID of the workspace researchers AAD group" diff --git a/templates/workspace_services/azuresql/template_schema.json b/templates/workspace_services/azuresql/template_schema.json index 7be530f07..17b7e3354 100644 --- a/templates/workspace_services/azuresql/template_schema.json +++ b/templates/workspace_services/azuresql/template_schema.json @@ -7,7 +7,6 @@ "required": [], "properties": { "sql_sku": { - "$id": "#/properties/sql_sku", "type": "string", "title": "Azure SQL SKU", "description": "Azure SQL SKU", @@ -22,14 +21,12 @@ "default": "S2 | 50 DTUs" }, "storage_gb": { - "$id": "#/properties/storage_gb", "type": "number", "title": "Max storage allowed for a database (GB)", "description": "Max storage allowed for a database (GB)", "default": 5 }, "db_name": { - "$id": "#/properties/db_name", "type": "string", "title": "Database name", "description": "Database name", diff --git a/templates/workspace_services/databricks/template_schema.json b/templates/workspace_services/databricks/template_schema.json index d61c46f5c..38a7a4942 100644 --- a/templates/workspace_services/databricks/template_schema.json +++ b/templates/workspace_services/databricks/template_schema.json @@ -28,14 +28,12 @@ "updateable": true }, "is_exposed_externally": { - "$id": "#/properties/is_exposed_externally", "type": "boolean", "title": "Expose externally", "description": "Is the Databricks workspace accessible from outside of the workspace network", "default": false }, "address_space": { - "$id": "#/properties/address_space", "type": "string", "title": "Address space", "description": "The address space of the databricks subnets" diff --git a/templates/workspace_services/gitea/template_schema.json b/templates/workspace_services/gitea/template_schema.json index 57a0e717f..cee286be2 100644 --- a/templates/workspace_services/gitea/template_schema.json +++ b/templates/workspace_services/gitea/template_schema.json @@ -29,7 +29,6 @@ "updateable": true }, "sql_sku": { - "$id": "#/properties/sql_sku", "type": "string", "title": "MySQL server SKU", "description": "MySQL server SKU", @@ -42,7 +41,6 @@ "default": "B | 4GB 2vCores" }, "is_exposed_externally": { - "$id": "#/properties/is_exposed_externally", "type": "boolean", "title": "Expose externally", "description": "Is Gitea accessible from outside of the TRE network.", diff --git a/templates/workspace_services/guacamole/template_schema.json b/templates/workspace_services/guacamole/template_schema.json index a01faf606..361259089 100644 --- a/templates/workspace_services/guacamole/template_schema.json +++ b/templates/workspace_services/guacamole/template_schema.json @@ -28,21 +28,18 @@ "updateable": true }, "guac_disable_copy": { - "$id": "#/properties/guac_disable_copy", "type": "boolean", "title": "Disable 'Copy'", "description": "Disable Copy functionality", "updateable": true }, "guac_disable_paste": { - "$id": "#/properties/guac_disable_paste", "type": "boolean", "title": "Disable 'Paste'", "description": "Disable Paste functionality", "updateable": true }, "guac_enable_drive": { - "$id": "#/properties/guac_enable_drive", "type": "boolean", "title": "Enable Drive", "description": "Enable mounted drive", @@ -50,7 +47,6 @@ "default": false }, "guac_disable_download": { - "$id": "#/properties/guac_disable_download", "type": "boolean", "title": "Disable files download", "description": "Disable files download", @@ -58,7 +54,6 @@ "default": true }, "guac_disable_upload": { - "$id": "#/properties/guac_disable_upload", "type": "boolean", "title": "Disable files upload", "description": "Disable files upload", @@ -66,7 +61,6 @@ "default": true }, "is_exposed_externally": { - "$id": "#/properties/is_exposed_externally", "type": "boolean", "title": "Expose externally", "description": "Is the Guacamole service exposed outside of the vnet", diff --git a/templates/workspace_services/guacamole/user_resources/guacamole-azure-export-reviewvm/template_schema.json b/templates/workspace_services/guacamole/user_resources/guacamole-azure-export-reviewvm/template_schema.json index b49fdf486..6f3fad43f 100644 --- a/templates/workspace_services/guacamole/user_resources/guacamole-azure-export-reviewvm/template_schema.json +++ b/templates/workspace_services/guacamole/user_resources/guacamole-azure-export-reviewvm/template_schema.json @@ -10,7 +10,6 @@ ], "properties": { "os_image": { - "$id": "#/properties/os_image", "type": "string", "title": "Windows image", "description": "Select Windows image to use for VM", @@ -19,7 +18,6 @@ ] }, "vm_size": { - "$id": "#/properties/vm_size", "type": "string", "title": "VM Size", "description": "Select size of VM", @@ -29,7 +27,6 @@ "updateable": true }, "airlock_request_sas_url": { - "$id": "#/properties/airlock_request_sas_url", "type": "string", "title": "Airlock request SAS Token", "description": "SAS Token for airlock request", diff --git a/templates/workspace_services/guacamole/user_resources/guacamole-azure-import-reviewvm/template_schema.json b/templates/workspace_services/guacamole/user_resources/guacamole-azure-import-reviewvm/template_schema.json index 7732c3efe..23829eab5 100644 --- a/templates/workspace_services/guacamole/user_resources/guacamole-azure-import-reviewvm/template_schema.json +++ b/templates/workspace_services/guacamole/user_resources/guacamole-azure-import-reviewvm/template_schema.json @@ -10,7 +10,6 @@ ], "properties": { "os_image": { - "$id": "#/properties/os_image", "type": "string", "title": "Windows image", "description": "Select Windows image to use for VM", @@ -19,7 +18,6 @@ ] }, "vm_size": { - "$id": "#/properties/vm_size", "type": "string", "title": "VM Size", "description": "Select size of VM", @@ -29,7 +27,6 @@ "updateable": true }, "airlock_request_sas_url": { - "$id": "#/properties/airlock_request_sas_url", "type": "string", "title": "Airlock request SAS Token", "description": "SAS Token for airlock request", diff --git a/templates/workspace_services/guacamole/user_resources/guacamole-azure-linuxvm/template_schema.json b/templates/workspace_services/guacamole/user_resources/guacamole-azure-linuxvm/template_schema.json index 7ab390499..41e53ac80 100644 --- a/templates/workspace_services/guacamole/user_resources/guacamole-azure-linuxvm/template_schema.json +++ b/templates/workspace_services/guacamole/user_resources/guacamole-azure-linuxvm/template_schema.json @@ -28,7 +28,6 @@ "updateable": true }, "os_image": { - "$id": "#/properties/os_image", "type": "string", "title": "Linux image", "description": "Select Linux image to use for VM", @@ -44,7 +43,6 @@ "default": "" }, "vm_size": { - "$id": "#/properties/vm_size", "type": "string", "title": "VM Size", "description": "Select size of VM", @@ -58,14 +56,12 @@ "updateable": true }, "shared_storage_access": { - "$id": "#/properties/shared_storage_access", "type": "boolean", "title": "Shared storage", "default": true, "description": "Enable access to shared storage" }, "enable_shutdown_schedule": { - "$id": "#/properties/enable_shutdown_schedule", "type": "boolean", "title": "Enable Shutdown Schedule", "default": false, diff --git a/templates/workspace_services/guacamole/user_resources/guacamole-azure-windowsvm/template_schema.json b/templates/workspace_services/guacamole/user_resources/guacamole-azure-windowsvm/template_schema.json index 82c066cb9..a319bb035 100644 --- a/templates/workspace_services/guacamole/user_resources/guacamole-azure-windowsvm/template_schema.json +++ b/templates/workspace_services/guacamole/user_resources/guacamole-azure-windowsvm/template_schema.json @@ -25,7 +25,6 @@ "updateable": true }, "os_image": { - "$id": "#/properties/os_image", "type": "string", "title": "Windows image", "description": "Select Windows image to use for VM", @@ -42,7 +41,6 @@ "default": "" }, "vm_size": { - "$id": "#/properties/vm_size", "type": "string", "title": "VM Size", "description": "Select size of VM", @@ -56,7 +54,6 @@ "updateable": true }, "shared_storage_access": { - "$id": "#/properties/shared_storage_access", "type": "boolean", "title": "Shared storage", "default": true, @@ -99,7 +96,6 @@ "default": true }, "enable_shutdown_schedule": { - "$id": "#/properties/enable_shutdown_schedule", "type": "boolean", "title": "Enable Shutdown Schedule", "default": false, diff --git a/templates/workspace_services/health-services/template_schema.json b/templates/workspace_services/health-services/template_schema.json index 166d289b6..a48769dcf 100644 --- a/templates/workspace_services/health-services/template_schema.json +++ b/templates/workspace_services/health-services/template_schema.json @@ -21,7 +21,6 @@ "updateable": true }, "deploy_dicom": { - "$id": "#/properties/deploy_dicom", "type": "boolean", "title": "Deploy DICOM", "description": "Deploy DICOM instance", @@ -29,7 +28,6 @@ "default": false }, "deploy_fhir": { - "$id": "#/properties/deploy_fhir", "type": "boolean", "title": "Deploy FHIR", "description": "Deploy FHIR instance", @@ -37,13 +35,11 @@ "default": false }, "workspace_owners_group_id": { - "$id": "#/properties/workspace_owners_group_id", "type": "string", "title": "Workspace Owners Group ID", "description": "Object ID of the workspace owners AAD group" }, "workspace_researchers_group_id": { - "$id": "#/properties/workspace_researchers_group_id", "type": "string", "title": "Workspace Researchers Group ID", "description": "Object ID of the workspace researchers AAD group" diff --git a/templates/workspace_services/mysql/template_schema.json b/templates/workspace_services/mysql/template_schema.json index 7c11e5891..9d35d48b3 100644 --- a/templates/workspace_services/mysql/template_schema.json +++ b/templates/workspace_services/mysql/template_schema.json @@ -7,7 +7,6 @@ "required": [], "properties": { "sql_sku": { - "$id": "#/properties/sql_sku", "type": "string", "title": "MySQL server SKU", "description": "MySQL server SKU", @@ -20,7 +19,6 @@ "default": "B | 4GB 2vCores" }, "storage_mb": { - "$id": "#/properties/storage_mb", "type": "number", "title": "Max storage allowed for a server", "description": "Max storage allowed for a server", @@ -29,7 +27,6 @@ "maximum": 16777216 }, "db_name": { - "$id": "#/properties/db_name", "type": "string", "title": "Database name", "description": "Database name", diff --git a/templates/workspace_services/ohdsi/template_schema.json b/templates/workspace_services/ohdsi/template_schema.json index 400100c17..0794edb11 100644 --- a/templates/workspace_services/ohdsi/template_schema.json +++ b/templates/workspace_services/ohdsi/template_schema.json @@ -28,7 +28,6 @@ "updateable": true }, "address_space": { - "$id": "#/properties/address_space", "type": "string", "title": "Address space", "description": "Address space for PostgreSQL's subnet" diff --git a/templates/workspace_services/openai/template_schema.json b/templates/workspace_services/openai/template_schema.json index 811a13a96..bc0b640ec 100644 --- a/templates/workspace_services/openai/template_schema.json +++ b/templates/workspace_services/openai/template_schema.json @@ -28,7 +28,6 @@ "updateable": true }, "is_exposed_externally": { - "$id": "#/properties/is_exposed_externally", "type": "boolean", "title": "Expose externally", "description": "Should the OpenAI instance be publicly accessible?", @@ -36,7 +35,6 @@ "updateable": true }, "openai_model": { - "$id": "#/properties/openai_model", "type": "string", "title": "OpenAI Model", "description": "Which OpenAI Model should be used? (be mindful of subscription limits)", From e340e9d9fac652b7dd3667879333a38d5217b810 Mon Sep 17 00:00:00 2001 From: James Chapman Date: Mon, 27 Jul 2026 12:22:48 +0000 Subject: [PATCH 15/27] add docs on $id --- docs/tre-workspace-authors/authoring-workspace-templates.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/tre-workspace-authors/authoring-workspace-templates.md b/docs/tre-workspace-authors/authoring-workspace-templates.md index aff6a446d..e314ab0d1 100644 --- a/docs/tre-workspace-authors/authoring-workspace-templates.md +++ b/docs/tre-workspace-authors/authoring-workspace-templates.md @@ -89,6 +89,10 @@ Azure TRE template schemas (`template_schema.json`) use the **JSON Schema Draft Draft 2020-12 is supported by the API schema validation engine and is the recommended JSON Schema version for Azure TRE templates. +> [!NOTE] +> * **`$id` is not required on individual properties or subschemas.** Properties defined under `"properties"` are natively addressable by standard JSON Pointer (e.g. `#/properties/property_name`). +> * In JSON Schema Draft 2020-12, `$id` is strictly reserved for declaring base URIs (e.g. at the root schema level) and cannot contain fragment identifiers (such as `#/properties/...`). If custom plain-name anchors are needed within a subschema, use `$anchor` instead. + ### Template properties When authoring a `template_schema.json` file, you can reference properties from the resource being deployed, or its parent resources. For more information see [Pipeline Template Schema](../tre-templates/pipeline-templates/pipeline-schema.md#substituting-resource-property-values). From d6197dfaca1fd66d823daf44ce512dd8caffac53 Mon Sep 17 00:00:00 2001 From: James Chapman Date: Mon, 27 Jul 2026 13:11:08 +0000 Subject: [PATCH 16/27] update doc fromatting --- docs/tre-workspace-authors/authoring-workspace-templates.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/tre-workspace-authors/authoring-workspace-templates.md b/docs/tre-workspace-authors/authoring-workspace-templates.md index e314ab0d1..8038c48ea 100644 --- a/docs/tre-workspace-authors/authoring-workspace-templates.md +++ b/docs/tre-workspace-authors/authoring-workspace-templates.md @@ -89,9 +89,9 @@ Azure TRE template schemas (`template_schema.json`) use the **JSON Schema Draft Draft 2020-12 is supported by the API schema validation engine and is the recommended JSON Schema version for Azure TRE templates. -> [!NOTE] -> * **`$id` is not required on individual properties or subschemas.** Properties defined under `"properties"` are natively addressable by standard JSON Pointer (e.g. `#/properties/property_name`). -> * In JSON Schema Draft 2020-12, `$id` is strictly reserved for declaring base URIs (e.g. at the root schema level) and cannot contain fragment identifiers (such as `#/properties/...`). If custom plain-name anchors are needed within a subschema, use `$anchor` instead. +!!! note + * **`$id` is not required on individual properties or subschemas.** Properties defined under `"properties"` are natively addressable by standard JSON Pointer (e.g. `#/properties/property_name`). + * In JSON Schema Draft 2020-12, `$id` is strictly reserved for declaring base URIs (e.g. at the root schema level) and cannot contain fragment identifiers (such as `#/properties/...`). If custom plain-name anchors are needed within a subschema, use `$anchor` instead. ### Template properties From 97f297e629181c285877bf17602587936a2672f1 Mon Sep 17 00:00:00 2001 From: James Chapman Date: Mon, 27 Jul 2026 13:31:28 +0000 Subject: [PATCH 17/27] lint --- docs/tre-workspace-authors/authoring-workspace-templates.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/tre-workspace-authors/authoring-workspace-templates.md b/docs/tre-workspace-authors/authoring-workspace-templates.md index 8038c48ea..9b09d5dd4 100644 --- a/docs/tre-workspace-authors/authoring-workspace-templates.md +++ b/docs/tre-workspace-authors/authoring-workspace-templates.md @@ -90,7 +90,7 @@ Azure TRE template schemas (`template_schema.json`) use the **JSON Schema Draft Draft 2020-12 is supported by the API schema validation engine and is the recommended JSON Schema version for Azure TRE templates. !!! note - * **`$id` is not required on individual properties or subschemas.** Properties defined under `"properties"` are natively addressable by standard JSON Pointer (e.g. `#/properties/property_name`). + ***`$id` is not required on individual properties or subschemas.** Properties defined under `"properties"` are natively addressable by standard JSON Pointer (e.g. `#/properties/property_name`). * In JSON Schema Draft 2020-12, `$id` is strictly reserved for declaring base URIs (e.g. at the root schema level) and cannot contain fragment identifiers (such as `#/properties/...`). If custom plain-name anchors are needed within a subschema, use `$anchor` instead. ### Template properties From f4298758d3f4641db2795235171d7f73e8e79839 Mon Sep 17 00:00:00 2001 From: James Chapman <196318169+JC-wk@users.noreply.github.com> Date: Mon, 27 Jul 2026 16:34:44 +0100 Subject: [PATCH 18/27] Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- docs/tre-workspace-authors/authoring-workspace-templates.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/tre-workspace-authors/authoring-workspace-templates.md b/docs/tre-workspace-authors/authoring-workspace-templates.md index 9b09d5dd4..086d4f6a2 100644 --- a/docs/tre-workspace-authors/authoring-workspace-templates.md +++ b/docs/tre-workspace-authors/authoring-workspace-templates.md @@ -90,7 +90,7 @@ Azure TRE template schemas (`template_schema.json`) use the **JSON Schema Draft Draft 2020-12 is supported by the API schema validation engine and is the recommended JSON Schema version for Azure TRE templates. !!! note - ***`$id` is not required on individual properties or subschemas.** Properties defined under `"properties"` are natively addressable by standard JSON Pointer (e.g. `#/properties/property_name`). + **`$id` is not required on individual properties or subschemas.** Properties defined under "properties" are natively addressable by standard JSON Pointer (e.g. `#/properties/property_name`). * In JSON Schema Draft 2020-12, `$id` is strictly reserved for declaring base URIs (e.g. at the root schema level) and cannot contain fragment identifiers (such as `#/properties/...`). If custom plain-name anchors are needed within a subschema, use `$anchor` instead. ### Template properties From fe0c3df64a907a55083a80430002d8d7c24ba401 Mon Sep 17 00:00:00 2001 From: James Chapman Date: Thu, 30 Jul 2026 08:14:08 +0000 Subject: [PATCH 19/27] Bump version to 0.26.1 --- api_app/_version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api_app/_version.py b/api_app/_version.py index 7c4a9591e..025f4c5d0 100644 --- a/api_app/_version.py +++ b/api_app/_version.py @@ -1 +1 @@ -__version__ = "0.26.0" +__version__ = "0.26.1" From 907e52925ea654ea42ff976e971549fae1ad75a1 Mon Sep 17 00:00:00 2001 From: James Chapman Date: Thu, 30 Jul 2026 08:18:24 +0000 Subject: [PATCH 20/27] update docs --- docs/tre-workspace-authors/authoring-workspace-templates.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/tre-workspace-authors/authoring-workspace-templates.md b/docs/tre-workspace-authors/authoring-workspace-templates.md index 086d4f6a2..f808d5f0f 100644 --- a/docs/tre-workspace-authors/authoring-workspace-templates.md +++ b/docs/tre-workspace-authors/authoring-workspace-templates.md @@ -91,7 +91,7 @@ Draft 2020-12 is supported by the API schema validation engine and is the recomm !!! note **`$id` is not required on individual properties or subschemas.** Properties defined under "properties" are natively addressable by standard JSON Pointer (e.g. `#/properties/property_name`). - * In JSON Schema Draft 2020-12, `$id` is strictly reserved for declaring base URIs (e.g. at the root schema level) and cannot contain fragment identifiers (such as `#/properties/...`). If custom plain-name anchors are needed within a subschema, use `$anchor` instead. + * In JSON Schema Draft 2020-12, `$id` is used for establishing the base URI of schema resources (e.g. at the root schema level). Placing `$id` on individual properties or subschemas is generally unnecessary and can alter reference resolution context. If custom plain-name anchors are needed within a subschema, use `$anchor` instead. ### Template properties From 448e9aa9bf4bbb1b104871b3062dc5d2a5a0398f Mon Sep 17 00:00:00 2001 From: James Chapman Date: Thu, 30 Jul 2026 10:10:41 +0000 Subject: [PATCH 21/27] fix schema in docs --- docs/schemas/operation.json | 2 +- docs/schemas/resource-assignment.json | 2 +- docs/schemas/resource.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/schemas/operation.json b/docs/schemas/operation.json index 1fb91a9e5..fa790af85 100644 --- a/docs/schemas/operation.json +++ b/docs/schemas/operation.json @@ -73,7 +73,7 @@ "type": "string", "description": "Event timestamp." }, - "description": { + "message": { "type": "string", "description": "Event message." }, diff --git a/docs/schemas/resource-assignment.json b/docs/schemas/resource-assignment.json index 7fc3a379d..e9f3bc200 100644 --- a/docs/schemas/resource-assignment.json +++ b/docs/schemas/resource-assignment.json @@ -11,7 +11,7 @@ "description": "User id.", "format": "uuid" }, - "ResourceId": { + "resourceId": { "type": "string", "description": "Resource id.", "format": "uuid" diff --git a/docs/schemas/resource.json b/docs/schemas/resource.json index cf29364d7..467738c0f 100644 --- a/docs/schemas/resource.json +++ b/docs/schemas/resource.json @@ -16,7 +16,7 @@ "type": "string", "description": "Resource specification version." }, - "ResourceVersion": { + "resourceVersion": { "type": "string", "description": "Resource version." }, From 9865790f7d8032e497b5bef3ae3b115398cc61ef Mon Sep 17 00:00:00 2001 From: James Chapman Date: Fri, 31 Jul 2026 16:35:47 +0000 Subject: [PATCH 22/27] copilot feedback --- api_app/models/schemas/resource.py | 8 ++++---- api_app/tests_ma/test_models/test_resource.py | 10 ++++++++++ docs/schemas/operation.json | 2 +- docs/schemas/resource.json | 2 +- 4 files changed, 16 insertions(+), 6 deletions(-) diff --git a/api_app/models/schemas/resource.py b/api_app/models/schemas/resource.py index 34d84c9cb..ac3e906cf 100644 --- a/api_app/models/schemas/resource.py +++ b/api_app/models/schemas/resource.py @@ -34,10 +34,10 @@ def get_sample_resource_history(resource_id: str) -> dict: "display_name": "my user resource", "description": "some description", }, - "isEnabled": "true", - "resourceVersion": "1", - "updatedWhen": "", - "user": "" + "isEnabled": True, + "resourceVersion": 1, + "updatedWhen": 1643026046.002206, + "user": {} } diff --git a/api_app/tests_ma/test_models/test_resource.py b/api_app/tests_ma/test_models/test_resource.py index cde5b7f76..c24060724 100644 --- a/api_app/tests_ma/test_models/test_resource.py +++ b/api_app/tests_ma/test_models/test_resource.py @@ -43,3 +43,13 @@ def test_workspace_service_get_resource_request_message_payload_augments_payload message_payload = workspace_service.get_resource_request_message_payload(OPERATION_ID, STEP_ID, RequestAction.Install) assert message_payload["workspaceId"] == workspace_id + + +def test_resource_history_in_list_schema_is_valid(): + from models.schemas.resource import ResourceHistoryInList, get_sample_resource_history + sample_data = { + "resource_history": [get_sample_resource_history("2fdc9fba-726e-4db6-a1b8-9018a2165748")] + } + history_list = ResourceHistoryInList(**sample_data) + assert len(history_list.resource_history) == 1 + assert history_list.resource_history[0].resourceVersion == 1 diff --git a/docs/schemas/operation.json b/docs/schemas/operation.json index fa790af85..4eb0a0803 100644 --- a/docs/schemas/operation.json +++ b/docs/schemas/operation.json @@ -32,7 +32,7 @@ "format": "uuid" }, "resourceVersion": { - "type": "string", + "type": "integer", "description": "Resource version." }, "createdAt": { diff --git a/docs/schemas/resource.json b/docs/schemas/resource.json index 467738c0f..7ad537dfb 100644 --- a/docs/schemas/resource.json +++ b/docs/schemas/resource.json @@ -17,7 +17,7 @@ "description": "Resource specification version." }, "resourceVersion": { - "type": "string", + "type": "integer", "description": "Resource version." }, "title": { From acfe17eec6617772fb143d1e870d1b44fe8f806c Mon Sep 17 00:00:00 2001 From: James Chapman Date: Mon, 10 Aug 2026 11:09:29 +0000 Subject: [PATCH 23/27] bump versions --- templates/shared_services/admin-vm/porter.yaml | 2 +- templates/shared_services/airlock_notifier/porter.yaml | 2 +- templates/shared_services/certs/porter.yaml | 2 +- templates/shared_services/gitea/porter.yaml | 2 +- templates/shared_services/sonatype-nexus-vm/porter.yaml | 2 +- templates/workspace_services/azureml/porter.yaml | 2 +- templates/workspace_services/azuresql/porter.yaml | 2 +- templates/workspace_services/databricks/porter.yaml | 2 +- templates/workspace_services/gitea/porter.yaml | 2 +- templates/workspace_services/guacamole/porter.yaml | 2 +- .../user_resources/guacamole-azure-export-reviewvm/porter.yaml | 2 +- .../user_resources/guacamole-azure-import-reviewvm/porter.yaml | 2 +- .../user_resources/guacamole-azure-linuxvm/porter.yaml | 2 +- .../user_resources/guacamole-azure-windowsvm/porter.yaml | 2 +- templates/workspace_services/health-services/porter.yaml | 2 +- templates/workspace_services/mysql/porter.yaml | 2 +- templates/workspace_services/ohdsi/porter.yaml | 2 +- templates/workspace_services/openai/porter.yaml | 2 +- 18 files changed, 18 insertions(+), 18 deletions(-) diff --git a/templates/shared_services/admin-vm/porter.yaml b/templates/shared_services/admin-vm/porter.yaml index 63353d5bc..ed953f68c 100644 --- a/templates/shared_services/admin-vm/porter.yaml +++ b/templates/shared_services/admin-vm/porter.yaml @@ -1,7 +1,7 @@ --- schemaVersion: 1.0.0 name: tre-shared-service-admin-vm -version: 0.5.5 +version: 0.5.6 description: "An admin vm shared service" dockerfile: Dockerfile.tmpl registry: azuretre diff --git a/templates/shared_services/airlock_notifier/porter.yaml b/templates/shared_services/airlock_notifier/porter.yaml index 9a60dba98..2ccbe5350 100644 --- a/templates/shared_services/airlock_notifier/porter.yaml +++ b/templates/shared_services/airlock_notifier/porter.yaml @@ -1,7 +1,7 @@ --- schemaVersion: 1.0.0 name: tre-shared-service-airlock-notifier -version: 1.0.11 +version: 1.0.12 description: "A shared service notifying on Airlock Operations" registry: azuretre dockerfile: Dockerfile.tmpl diff --git a/templates/shared_services/certs/porter.yaml b/templates/shared_services/certs/porter.yaml index bb61f19c0..496d2649f 100755 --- a/templates/shared_services/certs/porter.yaml +++ b/templates/shared_services/certs/porter.yaml @@ -1,7 +1,7 @@ --- schemaVersion: 1.0.0 name: tre-shared-service-certs -version: 0.7.11 +version: 0.7.12 description: "An Azure TRE shared service to generate certificates for a specified internal domain using Letsencrypt" registry: azuretre dockerfile: Dockerfile.tmpl diff --git a/templates/shared_services/gitea/porter.yaml b/templates/shared_services/gitea/porter.yaml index 700be2a7f..b416ab185 100644 --- a/templates/shared_services/gitea/porter.yaml +++ b/templates/shared_services/gitea/porter.yaml @@ -1,7 +1,7 @@ --- schemaVersion: 1.0.0 name: tre-shared-service-gitea -version: 1.2.3 +version: 1.2.4 description: "A Gitea shared service" dockerfile: Dockerfile.tmpl registry: azuretre diff --git a/templates/shared_services/sonatype-nexus-vm/porter.yaml b/templates/shared_services/sonatype-nexus-vm/porter.yaml index 79f7009b9..9124aa253 100644 --- a/templates/shared_services/sonatype-nexus-vm/porter.yaml +++ b/templates/shared_services/sonatype-nexus-vm/porter.yaml @@ -1,7 +1,7 @@ --- schemaVersion: 1.0.0 name: tre-shared-service-sonatype-nexus -version: 3.10.1 +version: 3.10.2 description: "A Sonatype Nexus shared service" dockerfile: Dockerfile.tmpl registry: azuretre diff --git a/templates/workspace_services/azureml/porter.yaml b/templates/workspace_services/azureml/porter.yaml index 723713cf3..f687ddeb1 100644 --- a/templates/workspace_services/azureml/porter.yaml +++ b/templates/workspace_services/azureml/porter.yaml @@ -1,7 +1,7 @@ --- schemaVersion: 1.0.0 name: tre-service-azureml -version: 1.1.5 +version: 1.1.6 description: "An Azure TRE service for Azure Machine Learning" registry: azuretre dockerfile: Dockerfile.tmpl diff --git a/templates/workspace_services/azuresql/porter.yaml b/templates/workspace_services/azuresql/porter.yaml index 48e969cb9..9a1cfbc75 100644 --- a/templates/workspace_services/azuresql/porter.yaml +++ b/templates/workspace_services/azuresql/porter.yaml @@ -1,7 +1,7 @@ --- schemaVersion: 1.0.0 name: tre-workspace-service-azuresql -version: 1.0.18 +version: 1.0.19 description: "An Azure SQL workspace service" registry: azuretre dockerfile: Dockerfile.tmpl diff --git a/templates/workspace_services/databricks/porter.yaml b/templates/workspace_services/databricks/porter.yaml index 4e913a4e0..1bbbed3d1 100644 --- a/templates/workspace_services/databricks/porter.yaml +++ b/templates/workspace_services/databricks/porter.yaml @@ -1,7 +1,7 @@ --- schemaVersion: 1.0.0 name: tre-service-databricks -version: 1.0.17 +version: 1.0.18 description: "An Azure TRE service for Azure Databricks." registry: azuretre dockerfile: Dockerfile.tmpl diff --git a/templates/workspace_services/gitea/porter.yaml b/templates/workspace_services/gitea/porter.yaml index 39621ab35..cca353b20 100644 --- a/templates/workspace_services/gitea/porter.yaml +++ b/templates/workspace_services/gitea/porter.yaml @@ -1,7 +1,7 @@ --- schemaVersion: 1.0.0 name: tre-workspace-service-gitea -version: 1.3.4 +version: 1.3.5 description: "A Gitea workspace service" dockerfile: Dockerfile.tmpl registry: azuretre diff --git a/templates/workspace_services/guacamole/porter.yaml b/templates/workspace_services/guacamole/porter.yaml index 8f172fe98..125273c4c 100644 --- a/templates/workspace_services/guacamole/porter.yaml +++ b/templates/workspace_services/guacamole/porter.yaml @@ -1,7 +1,7 @@ --- schemaVersion: 1.0.0 name: tre-service-guacamole -version: 0.14.3 +version: 0.14.4 description: "An Azure TRE service for Guacamole" dockerfile: Dockerfile.tmpl registry: azuretre diff --git a/templates/workspace_services/guacamole/user_resources/guacamole-azure-export-reviewvm/porter.yaml b/templates/workspace_services/guacamole/user_resources/guacamole-azure-export-reviewvm/porter.yaml index 2907e7ec5..3c436a9e4 100644 --- a/templates/workspace_services/guacamole/user_resources/guacamole-azure-export-reviewvm/porter.yaml +++ b/templates/workspace_services/guacamole/user_resources/guacamole-azure-export-reviewvm/porter.yaml @@ -1,7 +1,7 @@ --- schemaVersion: 1.0.0 name: tre-service-guacamole-export-reviewvm -version: 2.0.1 +version: 2.0.2 description: "An Azure TRE User Resource Template for reviewing Airlock export requests" dockerfile: Dockerfile.tmpl registry: azuretre diff --git a/templates/workspace_services/guacamole/user_resources/guacamole-azure-import-reviewvm/porter.yaml b/templates/workspace_services/guacamole/user_resources/guacamole-azure-import-reviewvm/porter.yaml index dcfff7300..25ad363d8 100644 --- a/templates/workspace_services/guacamole/user_resources/guacamole-azure-import-reviewvm/porter.yaml +++ b/templates/workspace_services/guacamole/user_resources/guacamole-azure-import-reviewvm/porter.yaml @@ -1,7 +1,7 @@ --- schemaVersion: 1.0.0 name: tre-service-guacamole-import-reviewvm -version: 2.0.1 +version: 2.0.2 description: "An Azure TRE User Resource Template for reviewing Airlock import requests" dockerfile: Dockerfile.tmpl registry: azuretre diff --git a/templates/workspace_services/guacamole/user_resources/guacamole-azure-linuxvm/porter.yaml b/templates/workspace_services/guacamole/user_resources/guacamole-azure-linuxvm/porter.yaml index f95113432..76e2c9ce6 100644 --- a/templates/workspace_services/guacamole/user_resources/guacamole-azure-linuxvm/porter.yaml +++ b/templates/workspace_services/guacamole/user_resources/guacamole-azure-linuxvm/porter.yaml @@ -1,7 +1,7 @@ --- schemaVersion: 1.0.0 name: tre-service-guacamole-linuxvm -version: 1.4.4 +version: 1.4.5 description: "An Azure TRE User Resource Template for Guacamole (Linux)" dockerfile: Dockerfile.tmpl registry: azuretre diff --git a/templates/workspace_services/guacamole/user_resources/guacamole-azure-windowsvm/porter.yaml b/templates/workspace_services/guacamole/user_resources/guacamole-azure-windowsvm/porter.yaml index e7ebb8242..ea0135d36 100644 --- a/templates/workspace_services/guacamole/user_resources/guacamole-azure-windowsvm/porter.yaml +++ b/templates/workspace_services/guacamole/user_resources/guacamole-azure-windowsvm/porter.yaml @@ -1,7 +1,7 @@ --- schemaVersion: 1.0.0 name: tre-service-guacamole-windowsvm -version: 3.0.1 +version: 3.0.2 description: "An Azure TRE User Resource Template for Guacamole (Windows 11 or Windows Server 2025)" dockerfile: Dockerfile.tmpl registry: azuretre diff --git a/templates/workspace_services/health-services/porter.yaml b/templates/workspace_services/health-services/porter.yaml index c59b50f62..d88268058 100644 --- a/templates/workspace_services/health-services/porter.yaml +++ b/templates/workspace_services/health-services/porter.yaml @@ -1,7 +1,7 @@ --- schemaVersion: 1.0.0 name: tre-workspace-service-health -version: 0.3.6 +version: 0.3.7 description: "An Azure Data Health Services workspace service" registry: azuretre dockerfile: Dockerfile.tmpl diff --git a/templates/workspace_services/mysql/porter.yaml b/templates/workspace_services/mysql/porter.yaml index fb18c7bf9..80c049d92 100644 --- a/templates/workspace_services/mysql/porter.yaml +++ b/templates/workspace_services/mysql/porter.yaml @@ -1,7 +1,7 @@ --- schemaVersion: 1.0.0 name: tre-workspace-service-mysql -version: 1.0.13 +version: 1.0.14 description: "A MySQL workspace service" registry: azuretre dockerfile: Dockerfile.tmpl diff --git a/templates/workspace_services/ohdsi/porter.yaml b/templates/workspace_services/ohdsi/porter.yaml index 7c9aa6caa..f955d0528 100644 --- a/templates/workspace_services/ohdsi/porter.yaml +++ b/templates/workspace_services/ohdsi/porter.yaml @@ -1,7 +1,7 @@ --- schemaVersion: 1.0.0 name: tre-workspace-service-ohdsi -version: 0.3.8 +version: 0.3.9 description: "An OHDSI workspace service" registry: azuretre dockerfile: Dockerfile.tmpl diff --git a/templates/workspace_services/openai/porter.yaml b/templates/workspace_services/openai/porter.yaml index f5d2a8383..f66e1d575 100644 --- a/templates/workspace_services/openai/porter.yaml +++ b/templates/workspace_services/openai/porter.yaml @@ -1,7 +1,7 @@ --- schemaVersion: 1.0.0 name: tre-workspace-service-openai -version: 1.0.9 +version: 1.0.10 description: "An OpenAI workspace service" registry: azuretre dockerfile: Dockerfile.tmpl From 064007fe780050f7286cabec15c1be7223aa6cdd Mon Sep 17 00:00:00 2001 From: James Chapman <196318169+JC-wk@users.noreply.github.com> Date: Mon, 17 Aug 2026 14:13:27 +0100 Subject: [PATCH 24/27] Enhance CHANGELOG with JSON Schema update Update JSON Schema version to Draft 2020-12. --- CHANGELOG.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bda89f88c..9190d9b1b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,9 @@ **BREAKING CHANGES** ENHANCEMENTS: +* Update JSON Schema version to Draft 2020-12 ([#5005](https://github.com/microsoft/AzureTRE/pull/5005)) + +BUG FIXES: ## (0.29.0) (August 14, 2026) **BREAKING CHANGES** @@ -39,7 +42,6 @@ BUG FIXES: * Replace deprecated yaspell with codespell and add pre-commit hook installer to devcontainer. ([#4953](https://github.com/microsoft/AzureTRE/issues/4953)) * Fix Guacamole Windows VM image selections by aligning schema enums/defaults with supported image options in Windows and review VM templates. ([#4963](https://github.com/microsoft/AzureTRE/issues/4963)) * Remove deprecated `soft_delete_enabled` setting from `azurerm_recovery_services_vault` in base workspace template. ([#4967](https://github.com/microsoft/AzureTRE/issues/4967)) -* Update JSON Schema version to Draft 2020-12 ([#5005](https://github.com/microsoft/AzureTRE/pull/5005)) * Pin MKDocs to v1 to prevent incompatible upgrade. ([#5009](https://github.com/microsoft/AzureTRE/issues/5009)) COMPONENTS: From 3b6babe47ef06345fcd9cc34c928473db0a5f6e4 Mon Sep 17 00:00:00 2001 From: James Chapman Date: Fri, 21 Aug 2026 15:40:59 +0000 Subject: [PATCH 25/27] Bump Porter template versions --- templates/shared_services/admin-vm/porter.yaml | 2 +- templates/shared_services/airlock_notifier/porter.yaml | 2 +- templates/shared_services/certs/porter.yaml | 2 +- templates/shared_services/cyclecloud/porter.yaml | 2 +- templates/shared_services/databricks-auth/porter.yaml | 2 +- templates/shared_services/firewall/porter.yaml | 2 +- templates/shared_services/gitea/porter.yaml | 2 +- templates/shared_services/sonatype-nexus-vm/porter.yaml | 2 +- templates/workspace_services/azureml/porter.yaml | 2 +- .../azureml/user_resources/aml_compute/porter.yaml | 2 +- templates/workspace_services/azuresql/porter.yaml | 2 +- templates/workspace_services/databricks/porter.yaml | 2 +- templates/workspace_services/gitea/porter.yaml | 2 +- templates/workspace_services/guacamole/porter.yaml | 2 +- .../user_resources/guacamole-azure-export-reviewvm/porter.yaml | 2 +- .../user_resources/guacamole-azure-import-reviewvm/porter.yaml | 2 +- .../user_resources/guacamole-azure-linuxvm/porter.yaml | 2 +- .../user_resources/guacamole-azure-windowsvm/porter.yaml | 2 +- templates/workspace_services/health-services/porter.yaml | 2 +- templates/workspace_services/mysql/porter.yaml | 2 +- templates/workspace_services/ohdsi/porter.yaml | 2 +- templates/workspace_services/openai/porter.yaml | 2 +- templates/workspaces/airlock-import-review/porter.yaml | 2 +- templates/workspaces/base/porter.yaml | 2 +- templates/workspaces/unrestricted/porter.yaml | 2 +- 25 files changed, 25 insertions(+), 25 deletions(-) diff --git a/templates/shared_services/admin-vm/porter.yaml b/templates/shared_services/admin-vm/porter.yaml index 11f47f897..c808ff486 100644 --- a/templates/shared_services/admin-vm/porter.yaml +++ b/templates/shared_services/admin-vm/porter.yaml @@ -1,7 +1,7 @@ --- schemaVersion: 1.0.0 name: tre-shared-service-admin-vm -version: 0.5.6 +version: 0.5.7 description: "An admin vm shared service" dockerfile: Dockerfile.tmpl registry: azuretre diff --git a/templates/shared_services/airlock_notifier/porter.yaml b/templates/shared_services/airlock_notifier/porter.yaml index cf708af7b..87274084b 100644 --- a/templates/shared_services/airlock_notifier/porter.yaml +++ b/templates/shared_services/airlock_notifier/porter.yaml @@ -1,7 +1,7 @@ --- schemaVersion: 1.0.0 name: tre-shared-service-airlock-notifier -version: 1.0.12 +version: 1.0.13 description: "A shared service notifying on Airlock Operations" registry: azuretre dockerfile: Dockerfile.tmpl diff --git a/templates/shared_services/certs/porter.yaml b/templates/shared_services/certs/porter.yaml index e9bcd6d10..2ce29f568 100755 --- a/templates/shared_services/certs/porter.yaml +++ b/templates/shared_services/certs/porter.yaml @@ -1,7 +1,7 @@ --- schemaVersion: 1.0.0 name: tre-shared-service-certs -version: 0.7.12 +version: 0.7.13 description: "An Azure TRE shared service to generate certificates for a specified internal domain using Letsencrypt" registry: azuretre dockerfile: Dockerfile.tmpl diff --git a/templates/shared_services/cyclecloud/porter.yaml b/templates/shared_services/cyclecloud/porter.yaml index e7f7e8e7e..ab2321294 100644 --- a/templates/shared_services/cyclecloud/porter.yaml +++ b/templates/shared_services/cyclecloud/porter.yaml @@ -1,7 +1,7 @@ --- schemaVersion: 1.0.0 name: tre-shared-service-cyclecloud -version: 0.7.6 +version: 0.7.7 description: "An Azure TRE Shared Service Template for Azure Cyclecloud" registry: azuretre dockerfile: Dockerfile.tmpl diff --git a/templates/shared_services/databricks-auth/porter.yaml b/templates/shared_services/databricks-auth/porter.yaml index eecdce71b..126e710e6 100644 --- a/templates/shared_services/databricks-auth/porter.yaml +++ b/templates/shared_services/databricks-auth/porter.yaml @@ -1,7 +1,7 @@ --- schemaVersion: 1.0.0 name: tre-shared-service-databricks-private-auth -version: 0.1.15 +version: 0.1.16 description: "An Azure TRE shared service for Azure Databricks authentication." registry: azuretre dockerfile: Dockerfile.tmpl diff --git a/templates/shared_services/firewall/porter.yaml b/templates/shared_services/firewall/porter.yaml index 699d0e6d8..e581d736a 100644 --- a/templates/shared_services/firewall/porter.yaml +++ b/templates/shared_services/firewall/porter.yaml @@ -1,7 +1,7 @@ --- schemaVersion: 1.0.0 name: tre-shared-service-firewall -version: 1.6.2 +version: 1.6.3 description: "An Azure TRE Firewall shared service" dockerfile: Dockerfile.tmpl registry: azuretre diff --git a/templates/shared_services/gitea/porter.yaml b/templates/shared_services/gitea/porter.yaml index 5a28cc0b1..00d301cb7 100644 --- a/templates/shared_services/gitea/porter.yaml +++ b/templates/shared_services/gitea/porter.yaml @@ -1,7 +1,7 @@ --- schemaVersion: 1.0.0 name: tre-shared-service-gitea -version: 1.2.4 +version: 1.2.5 description: "A Gitea shared service" dockerfile: Dockerfile.tmpl registry: azuretre diff --git a/templates/shared_services/sonatype-nexus-vm/porter.yaml b/templates/shared_services/sonatype-nexus-vm/porter.yaml index 974ad4e44..a9657919d 100644 --- a/templates/shared_services/sonatype-nexus-vm/porter.yaml +++ b/templates/shared_services/sonatype-nexus-vm/porter.yaml @@ -1,7 +1,7 @@ --- schemaVersion: 1.0.0 name: tre-shared-service-sonatype-nexus -version: 3.10.2 +version: 3.10.3 description: "A Sonatype Nexus shared service" dockerfile: Dockerfile.tmpl registry: azuretre diff --git a/templates/workspace_services/azureml/porter.yaml b/templates/workspace_services/azureml/porter.yaml index e57858caa..6caa491fe 100644 --- a/templates/workspace_services/azureml/porter.yaml +++ b/templates/workspace_services/azureml/porter.yaml @@ -1,7 +1,7 @@ --- schemaVersion: 1.0.0 name: tre-service-azureml -version: 1.1.6 +version: 1.1.7 description: "An Azure TRE service for Azure Machine Learning" registry: azuretre dockerfile: Dockerfile.tmpl diff --git a/templates/workspace_services/azureml/user_resources/aml_compute/porter.yaml b/templates/workspace_services/azureml/user_resources/aml_compute/porter.yaml index e766e13b0..5753d54aa 100644 --- a/templates/workspace_services/azureml/user_resources/aml_compute/porter.yaml +++ b/templates/workspace_services/azureml/user_resources/aml_compute/porter.yaml @@ -1,7 +1,7 @@ --- schemaVersion: 1.0.0 name: tre-user-resource-aml-compute-instance -version: 0.5.13 +version: 0.5.14 description: "Azure Machine Learning Compute Instance" registry: azuretre dockerfile: Dockerfile.tmpl diff --git a/templates/workspace_services/azuresql/porter.yaml b/templates/workspace_services/azuresql/porter.yaml index 268853475..df370b64f 100644 --- a/templates/workspace_services/azuresql/porter.yaml +++ b/templates/workspace_services/azuresql/porter.yaml @@ -1,7 +1,7 @@ --- schemaVersion: 1.0.0 name: tre-workspace-service-azuresql -version: 1.0.19 +version: 1.0.20 description: "An Azure SQL workspace service" registry: azuretre dockerfile: Dockerfile.tmpl diff --git a/templates/workspace_services/databricks/porter.yaml b/templates/workspace_services/databricks/porter.yaml index 9cef35d4b..cecd9d952 100644 --- a/templates/workspace_services/databricks/porter.yaml +++ b/templates/workspace_services/databricks/porter.yaml @@ -1,7 +1,7 @@ --- schemaVersion: 1.0.0 name: tre-service-databricks -version: 1.0.18 +version: 1.0.19 description: "An Azure TRE service for Azure Databricks." registry: azuretre dockerfile: Dockerfile.tmpl diff --git a/templates/workspace_services/gitea/porter.yaml b/templates/workspace_services/gitea/porter.yaml index 14d71b646..129d9845a 100644 --- a/templates/workspace_services/gitea/porter.yaml +++ b/templates/workspace_services/gitea/porter.yaml @@ -1,7 +1,7 @@ --- schemaVersion: 1.0.0 name: tre-workspace-service-gitea -version: 1.3.5 +version: 1.3.6 description: "A Gitea workspace service" dockerfile: Dockerfile.tmpl registry: azuretre diff --git a/templates/workspace_services/guacamole/porter.yaml b/templates/workspace_services/guacamole/porter.yaml index 44bd959c9..315a61499 100644 --- a/templates/workspace_services/guacamole/porter.yaml +++ b/templates/workspace_services/guacamole/porter.yaml @@ -1,7 +1,7 @@ --- schemaVersion: 1.0.0 name: tre-service-guacamole -version: 0.14.4 +version: 0.14.5 description: "An Azure TRE service for Guacamole" dockerfile: Dockerfile.tmpl registry: azuretre diff --git a/templates/workspace_services/guacamole/user_resources/guacamole-azure-export-reviewvm/porter.yaml b/templates/workspace_services/guacamole/user_resources/guacamole-azure-export-reviewvm/porter.yaml index a81080dad..7752f9220 100644 --- a/templates/workspace_services/guacamole/user_resources/guacamole-azure-export-reviewvm/porter.yaml +++ b/templates/workspace_services/guacamole/user_resources/guacamole-azure-export-reviewvm/porter.yaml @@ -1,7 +1,7 @@ --- schemaVersion: 1.0.0 name: tre-service-guacamole-export-reviewvm -version: 2.0.2 +version: 2.0.3 description: "An Azure TRE User Resource Template for reviewing Airlock export requests" dockerfile: Dockerfile.tmpl registry: azuretre diff --git a/templates/workspace_services/guacamole/user_resources/guacamole-azure-import-reviewvm/porter.yaml b/templates/workspace_services/guacamole/user_resources/guacamole-azure-import-reviewvm/porter.yaml index 1f300e47d..56f3d4211 100644 --- a/templates/workspace_services/guacamole/user_resources/guacamole-azure-import-reviewvm/porter.yaml +++ b/templates/workspace_services/guacamole/user_resources/guacamole-azure-import-reviewvm/porter.yaml @@ -1,7 +1,7 @@ --- schemaVersion: 1.0.0 name: tre-service-guacamole-import-reviewvm -version: 2.0.2 +version: 2.0.3 description: "An Azure TRE User Resource Template for reviewing Airlock import requests" dockerfile: Dockerfile.tmpl registry: azuretre diff --git a/templates/workspace_services/guacamole/user_resources/guacamole-azure-linuxvm/porter.yaml b/templates/workspace_services/guacamole/user_resources/guacamole-azure-linuxvm/porter.yaml index 54f58b2d7..e40f336d9 100644 --- a/templates/workspace_services/guacamole/user_resources/guacamole-azure-linuxvm/porter.yaml +++ b/templates/workspace_services/guacamole/user_resources/guacamole-azure-linuxvm/porter.yaml @@ -1,7 +1,7 @@ --- schemaVersion: 1.0.0 name: tre-service-guacamole-linuxvm -version: 1.4.5 +version: 1.4.6 description: "An Azure TRE User Resource Template for Guacamole (Linux)" dockerfile: Dockerfile.tmpl registry: azuretre diff --git a/templates/workspace_services/guacamole/user_resources/guacamole-azure-windowsvm/porter.yaml b/templates/workspace_services/guacamole/user_resources/guacamole-azure-windowsvm/porter.yaml index dae717002..e4fa79c88 100644 --- a/templates/workspace_services/guacamole/user_resources/guacamole-azure-windowsvm/porter.yaml +++ b/templates/workspace_services/guacamole/user_resources/guacamole-azure-windowsvm/porter.yaml @@ -1,7 +1,7 @@ --- schemaVersion: 1.0.0 name: tre-service-guacamole-windowsvm -version: 3.0.2 +version: 3.0.3 description: "An Azure TRE User Resource Template for Guacamole (Windows 11 or Windows Server 2025)" dockerfile: Dockerfile.tmpl registry: azuretre diff --git a/templates/workspace_services/health-services/porter.yaml b/templates/workspace_services/health-services/porter.yaml index c68dae6aa..3724596fc 100644 --- a/templates/workspace_services/health-services/porter.yaml +++ b/templates/workspace_services/health-services/porter.yaml @@ -1,7 +1,7 @@ --- schemaVersion: 1.0.0 name: tre-workspace-service-health -version: 0.3.7 +version: 0.3.8 description: "An Azure Data Health Services workspace service" registry: azuretre dockerfile: Dockerfile.tmpl diff --git a/templates/workspace_services/mysql/porter.yaml b/templates/workspace_services/mysql/porter.yaml index d347c1017..cc39df963 100644 --- a/templates/workspace_services/mysql/porter.yaml +++ b/templates/workspace_services/mysql/porter.yaml @@ -1,7 +1,7 @@ --- schemaVersion: 1.0.0 name: tre-workspace-service-mysql -version: 1.0.14 +version: 1.0.15 description: "A MySQL workspace service" registry: azuretre dockerfile: Dockerfile.tmpl diff --git a/templates/workspace_services/ohdsi/porter.yaml b/templates/workspace_services/ohdsi/porter.yaml index 106e3f337..0d2d9b851 100644 --- a/templates/workspace_services/ohdsi/porter.yaml +++ b/templates/workspace_services/ohdsi/porter.yaml @@ -1,7 +1,7 @@ --- schemaVersion: 1.0.0 name: tre-workspace-service-ohdsi -version: 0.3.9 +version: 0.3.10 description: "An OHDSI workspace service" registry: azuretre dockerfile: Dockerfile.tmpl diff --git a/templates/workspace_services/openai/porter.yaml b/templates/workspace_services/openai/porter.yaml index d6be6a40d..0fc2de425 100644 --- a/templates/workspace_services/openai/porter.yaml +++ b/templates/workspace_services/openai/porter.yaml @@ -1,7 +1,7 @@ --- schemaVersion: 1.0.0 name: tre-workspace-service-openai -version: 1.0.10 +version: 1.0.11 description: "An OpenAI workspace service" registry: azuretre dockerfile: Dockerfile.tmpl diff --git a/templates/workspaces/airlock-import-review/porter.yaml b/templates/workspaces/airlock-import-review/porter.yaml index 6acc2e9d7..07f1c99a2 100644 --- a/templates/workspaces/airlock-import-review/porter.yaml +++ b/templates/workspaces/airlock-import-review/porter.yaml @@ -1,7 +1,7 @@ --- schemaVersion: 1.0.0 name: tre-workspace-airlock-import-review -version: 0.16.1 +version: 0.16.2 description: "A workspace to do Airlock Data Import Reviews for Azure TRE" dockerfile: Dockerfile.tmpl registry: azuretre diff --git a/templates/workspaces/base/porter.yaml b/templates/workspaces/base/porter.yaml index 67770d997..8aa6beed4 100644 --- a/templates/workspaces/base/porter.yaml +++ b/templates/workspaces/base/porter.yaml @@ -1,7 +1,7 @@ --- schemaVersion: 1.0.0 name: tre-workspace-base -version: 2.10.1 +version: 2.10.2 description: "A base Azure TRE workspace" dockerfile: Dockerfile.tmpl registry: azuretre diff --git a/templates/workspaces/unrestricted/porter.yaml b/templates/workspaces/unrestricted/porter.yaml index fb144924f..66631e37b 100644 --- a/templates/workspaces/unrestricted/porter.yaml +++ b/templates/workspaces/unrestricted/porter.yaml @@ -1,7 +1,7 @@ --- schemaVersion: 1.0.0 name: tre-workspace-unrestricted -version: 0.14.1 +version: 0.14.2 description: "A base Azure TRE workspace" dockerfile: Dockerfile.tmpl registry: azuretre From b11922e110326b08714d0cd62f452256f5843bda Mon Sep 17 00:00:00 2001 From: James Chapman Date: Mon, 24 Aug 2026 09:18:36 +0000 Subject: [PATCH 26/27] Clarify that only a subset of JSON schema is supported not the full thing --- api_app/db/repositories/resource_templates.py | 4 ++ api_app/models/domain/resource_template.py | 8 +++- .../test_resource_templates_repository.py | 38 +++++++++++++++++++ .../authoring-workspace-templates.md | 6 +-- 4 files changed, 52 insertions(+), 4 deletions(-) diff --git a/api_app/db/repositories/resource_templates.py b/api_app/db/repositories/resource_templates.py index 36ac905b9..a65c9ebec 100644 --- a/api_app/db/repositories/resource_templates.py +++ b/api_app/db/repositories/resource_templates.py @@ -132,6 +132,10 @@ async def create_template(self, template_input: ResourceTemplateInCreate, resour "customActions": template_input.customActions } + for schema_key, template_field in (("$schema", "schema_uri"), ("$id", "schema_id"), ("$defs", "defs")): + if schema_key in template_input.json_schema: + template[template_field] = template_input.json_schema[schema_key] + if "uiSchema" in template_input.json_schema: template["uiSchema"] = template_input.json_schema["uiSchema"] diff --git a/api_app/models/domain/resource_template.py b/api_app/models/domain/resource_template.py index 2b31a5d3a..a6e39d0e6 100644 --- a/api_app/models/domain/resource_template.py +++ b/api_app/models/domain/resource_template.py @@ -35,7 +35,7 @@ def _serialize(self) -> dict: _strip_none_recursive(data) return data - type: Optional[str] = Field(default=None, title="Property type") + type: Optional[Union[str, List[str]]] = Field(default=None, title="Property type") title: str = Field(default="", title="Property description") description: Optional[str] = Field(default=None, title="Property description") default: Any = Field(default=None, title="Default value for the property") @@ -91,6 +91,9 @@ class ResourceTemplate(AzureTREModel): def _serialize(self, handler: Any, info: Any) -> dict: data = handler(self) _strip_none_recursive(data) # covers allOf and other plain-dict fields missed by exclude_none + for field_name, schema_key in (("schema_uri", "$schema"), ("schema_id", "$id"), ("defs", "$defs")): + if field_name in data: + data[schema_key] = data.pop(field_name) return data id: str @@ -101,6 +104,9 @@ def _serialize(self, handler: Any, info: Any) -> dict: resourceType: ResourceType = Field(title="Type of resource this template is for (workspace/service)") current: bool = Field(title="Is this the current version of this template") type: str = "object" + schema_uri: Optional[str] = Field(default=None, alias="$schema") + schema_id: Optional[str] = Field(default=None, alias="$id") + defs: Optional[dict] = Field(default=None, alias="$defs") required: List[str] = Field(title="List of properties which must be provided") authorizedRoles: Optional[List[str]] = Field(default_factory=list, title="If not empty, the user is required to have one of these roles to install the template") properties: Dict[str, Property] = Field(title="Template properties") diff --git a/api_app/tests_ma/test_db/test_repositories/test_resource_templates_repository.py b/api_app/tests_ma/test_db/test_repositories/test_resource_templates_repository.py index 970b4721e..fbe186116 100644 --- a/api_app/tests_ma/test_db/test_repositories/test_resource_templates_repository.py +++ b/api_app/tests_ma/test_db/test_repositories/test_resource_templates_repository.py @@ -74,6 +74,38 @@ async def test_create_workspace_template_succeeds_without_required(uuid_mock, sa assert expected_resource_template == returned_template +@patch('db.repositories.resource_templates.ResourceTemplateRepository.save_item') +@patch('uuid.uuid4') +async def test_create_workspace_template_preserves_json_schema_metadata(uuid_mock, save_item_mock, resource_template_repo): + uuid_mock.return_value = "1234" + input_workspace_template = WorkspaceTemplateInCreate( + name="schema-metadata-template", + version="0.0.1", + current=True, + json_schema={ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "https://example.com/schema-metadata-template", + "$defs": {"nullable_string": {"type": ["string", "null"]}}, + "title": "Schema metadata template", + "description": "A template using Draft 2020-12 metadata", + "properties": {"value": {"type": ["string", "null"]}}, + }, + customActions=[], + ) + + returned_template = await resource_template_repo.create_template(input_workspace_template, ResourceType.Workspace) + + assert returned_template.schema_uri == input_workspace_template.json_schema["$schema"] + assert returned_template.schema_id == input_workspace_template.json_schema["$id"] + assert returned_template.defs == input_workspace_template.json_schema["$defs"] + assert returned_template.properties["value"].type == ["string", "null"] + serialized_template = returned_template.model_dump() + assert serialized_template["$schema"] == input_workspace_template.json_schema["$schema"] + assert serialized_template["$id"] == input_workspace_template.json_schema["$id"] + assert serialized_template["$defs"] == input_workspace_template.json_schema["$defs"] + save_item_mock.assert_called_once_with(returned_template) + + @patch('db.repositories.resource_templates.ResourceTemplateRepository.query') async def test_get_by_name_and_version_queries_db(query_mock, resource_template_repo): expected_query = 'SELECT * FROM c WHERE c.resourceType = @resourceType AND c.name = @name AND c.version = @version' @@ -190,6 +222,8 @@ async def test_create_workspace_template_item_calls_create_item_with_the_correct description=input_workspace_template.json_schema["description"], version=input_workspace_template.version, resourceType=ResourceType.Workspace, + schema_uri=input_workspace_template.json_schema["$schema"], + schema_id=input_workspace_template.json_schema["$id"], properties=input_workspace_template.json_schema["properties"], allOf=input_workspace_template.json_schema["allOf"], customActions=input_workspace_template.customActions, @@ -213,6 +247,8 @@ async def test_create_item_created_with_the_expected_type(uuid_mock, save_item_m description=input_workspace_template.json_schema["description"], version=input_workspace_template.version, resourceType=expected_type, + schema_uri=input_workspace_template.json_schema["$schema"], + schema_id=input_workspace_template.json_schema["$id"], properties=input_workspace_template.json_schema["properties"], allOf=input_workspace_template.json_schema["allOf"], customActions=input_workspace_template.customActions, @@ -243,6 +279,8 @@ async def test_create_item_with_pipeline_succeeds(uuid_mock, save_item_mock, res description=input_user_resource_template.json_schema["description"], version=input_user_resource_template.version, resourceType=expected_type, + schema_uri=input_user_resource_template.json_schema["$schema"], + schema_id=input_user_resource_template.json_schema["$id"], properties=input_user_resource_template.json_schema["properties"], customActions=input_user_resource_template.customActions, required=input_user_resource_template.json_schema["required"], diff --git a/docs/tre-workspace-authors/authoring-workspace-templates.md b/docs/tre-workspace-authors/authoring-workspace-templates.md index f808d5f0f..898e65496 100644 --- a/docs/tre-workspace-authors/authoring-workspace-templates.md +++ b/docs/tre-workspace-authors/authoring-workspace-templates.md @@ -75,11 +75,11 @@ Similarly to `tre_id`, `workspace_id` is used in the resource names of the works All the values for the required parameters will be provided by the deployment runner. Any **custom parameters** are picked up by Azure TRE API and will be queried from the user deploying the workspace bundle. Custom parameters should also be defined in the `template_schema.json` file at the root of the bundle. -This file follows the [JSON schema standard](https://json-schema.org/) Draft 2020-12 (`https://json-schema.org/draft/2020-12/schema`) and can be used by a user interface to generate a UI for the user to input the parameters. +This file follows the [JSON schema standard](https://json-schema.org/) Draft 2020-12 (`https://json-schema.org/draft/2020-12/schema`) for the subset supported by Azure TRE and can be used by a user interface to generate a UI for the user to input the parameters. ### JSON Schema Version Standard -Azure TRE template schemas (`template_schema.json`) use the **JSON Schema Draft 2020-12** specification: +Azure TRE template schemas (`template_schema.json`) use the **JSON Schema Draft 2020-12** dialect for the keywords supported by the template registration and validation APIs: ```json { @@ -87,7 +87,7 @@ Azure TRE template schemas (`template_schema.json`) use the **JSON Schema Draft } ``` -Draft 2020-12 is supported by the API schema validation engine and is the recommended JSON Schema version for Azure TRE templates. +The API preserves the root `$schema`, `$id`, and `$defs` keywords during registration. Other Draft 2020-12 keywords should be used only where supported by the template model and validation engine. !!! note **`$id` is not required on individual properties or subschemas.** Properties defined under "properties" are natively addressable by standard JSON Pointer (e.g. `#/properties/property_name`). From 640575ace698ddc36ae7f0d436f56343a2e7bd39 Mon Sep 17 00:00:00 2001 From: James Chapman Date: Mon, 24 Aug 2026 13:45:44 +0000 Subject: [PATCH 27/27] fix tests --- .../test_shared_service_templates_repository.py | 2 ++ .../test_user_resource_templates_repository.py | 2 ++ 2 files changed, 4 insertions(+) diff --git a/api_app/tests_ma/test_db/test_repositories/test_shared_service_templates_repository.py b/api_app/tests_ma/test_db/test_repositories/test_shared_service_templates_repository.py index 72cd247a3..4c169b91f 100644 --- a/api_app/tests_ma/test_db/test_repositories/test_shared_service_templates_repository.py +++ b/api_app/tests_ma/test_db/test_repositories/test_shared_service_templates_repository.py @@ -35,6 +35,8 @@ async def test_create_shared_service_template_item_calls_create_item_with_the_co actions=input_shared_service_template.customActions, required=input_shared_service_template.json_schema["required"], current=input_shared_service_template.current, + schema_uri=input_shared_service_template.json_schema["$schema"], + schema_id=input_shared_service_template.json_schema["$id"], ) save_item_mock.assert_called_once_with(expected_resource_template) assert expected_resource_template == returned_template diff --git a/api_app/tests_ma/test_db/test_repositories/test_user_resource_templates_repository.py b/api_app/tests_ma/test_db/test_repositories/test_user_resource_templates_repository.py index 8ab518ca5..09ca2c198 100644 --- a/api_app/tests_ma/test_db/test_repositories/test_user_resource_templates_repository.py +++ b/api_app/tests_ma/test_db/test_repositories/test_user_resource_templates_repository.py @@ -113,6 +113,8 @@ async def test_create_user_resource_template_item_calls_create_item_with_the_cor customActions=input_user_resource_template.customActions, required=input_user_resource_template.json_schema["required"], current=input_user_resource_template.current, + schema_uri=input_user_resource_template.json_schema["$schema"], + schema_id=input_user_resource_template.json_schema["$id"], parentWorkspaceService="parent_service_template_name" ) save_item_mock.assert_called_once_with(expected_resource_template)