From 7be040b52a9fec16189d0b173a5bd0c1b1e64ebd Mon Sep 17 00:00:00 2001 From: Tamir Kamara <26870601+tamirkamara@users.noreply.github.com> Date: Thu, 8 Feb 2024 17:50:41 +0200 Subject: [PATCH 01/79] Add permissions to pr_bot and flag_external_pr workflows (#3843) * Add permissions block * add permissions for pr bot --- .github/workflows/flag_external_pr.yml | 2 ++ .github/workflows/pr_comment_bot.yml | 7 +++++++ 2 files changed, 9 insertions(+) diff --git a/.github/workflows/flag_external_pr.yml b/.github/workflows/flag_external_pr.yml index 2319410c13..8e1ac68996 100644 --- a/.github/workflows/flag_external_pr.yml +++ b/.github/workflows/flag_external_pr.yml @@ -10,6 +10,8 @@ jobs: check_author: name: Check PR author runs-on: ubuntu-latest + permissions: + pull-requests: write steps: # Ensure we have the script file for the github-script action to use - name: Checkout diff --git a/.github/workflows/pr_comment_bot.yml b/.github/workflows/pr_comment_bot.yml index 99fe8e4ff1..06e7824a6a 100644 --- a/.github/workflows/pr_comment_bot.yml +++ b/.github/workflows/pr_comment_bot.yml @@ -18,6 +18,9 @@ jobs: # - the commenting user has write permissions (i.e. is OWNER or COLLABORATOR) if: ${{ github.event.issue.pull_request }} runs-on: ubuntu-latest + permissions: + pull-requests: write + checks: write outputs: command: ${{ steps.check_command.outputs.command }} prRef: ${{ steps.check_command.outputs.prRef }} @@ -68,6 +71,8 @@ jobs: needs: [pr_comment] if: ${{ needs.pr_comment.outputs.command == 'test-destroy-env' }} runs-on: ubuntu-latest + permissions: + pull-requests: write environment: CICD name: Destroy PR env steps: @@ -102,6 +107,8 @@ jobs: needs: [pr_comment] if: ${{ needs.pr_comment.outputs.command == 'test-destroy-env' && needs.pr_comment.outputs.branchRefId != '' }} runs-on: ubuntu-latest + permissions: + pull-requests: write environment: CICD name: Destroy branch env steps: From d080e11e3a4e604612a8ee663f136d9983f9be70 Mon Sep 17 00:00:00 2001 From: Tamir Kamara <26870601+tamirkamara@users.noreply.github.com> Date: Thu, 8 Feb 2024 18:33:44 +0200 Subject: [PATCH 02/79] Update permissions for 'checks' (#3844) update permissions for checks --- .github/workflows/deploy_tre_reusable.yml | 10 ++++++++-- .github/workflows/pr_comment_bot.yml | 3 ++- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/.github/workflows/deploy_tre_reusable.yml b/.github/workflows/deploy_tre_reusable.yml index dc38f22bff..5f57bbc9f4 100644 --- a/.github/workflows/deploy_tre_reusable.yml +++ b/.github/workflows/deploy_tre_reusable.yml @@ -99,6 +99,9 @@ jobs: deploy_management: name: Deploy Management runs-on: ubuntu-latest + permissions: + checks: write + contents: read environment: ${{ inputs.environmentName }} steps: - name: Show inputs @@ -173,7 +176,7 @@ jobs: - name: Report check status start if: inputs.prHeadSha != '' - uses: LouisBrunner/checks-action@v1.6.0 + uses: LouisBrunner/checks-action@v2.0.0 with: token: ${{ secrets.GITHUB_TOKEN }} sha: ${{ inputs.prHeadSha }} @@ -806,6 +809,9 @@ jobs: name: Summary needs: [e2e_tests_smoke, e2e_tests_custom] runs-on: ubuntu-latest + permissions: + checks: write + contents: read if: always() environment: ${{ inputs.environmentName }} steps: @@ -816,7 +822,7 @@ jobs: # If prHeadSha is specified then explicity mark the checks for that SHA - name: Report check status if: inputs.prHeadSha != '' - uses: LouisBrunner/checks-action@v1.6.0 + uses: LouisBrunner/checks-action@v2.0.0 with: token: ${{ secrets.GITHUB_TOKEN }} # the name must be identical to the one received by the real job diff --git a/.github/workflows/pr_comment_bot.yml b/.github/workflows/pr_comment_bot.yml index 06e7824a6a..bf9efe3a22 100644 --- a/.github/workflows/pr_comment_bot.yml +++ b/.github/workflows/pr_comment_bot.yml @@ -21,6 +21,7 @@ jobs: permissions: pull-requests: write checks: write + contents: read outputs: command: ${{ steps.check_command.outputs.command }} prRef: ${{ steps.check_command.outputs.prRef }} @@ -58,7 +59,7 @@ jobs: # and will have to send it "manually" - name: Bypass E2E check-runs status if: ${{ steps.check_command.outputs.command == 'test-force-approve' }} - uses: LouisBrunner/checks-action@v1.6.0 + uses: LouisBrunner/checks-action@v2.0.0 with: token: ${{ secrets.GITHUB_TOKEN }} # the name must be identical to the one received by the real job From fab7bc3a0cc08045773356c014c083c48f45348c Mon Sep 17 00:00:00 2001 From: Tamir Kamara <26870601+tamirkamara@users.noreply.github.com> Date: Thu, 8 Feb 2024 20:13:48 +0200 Subject: [PATCH 03/79] Add permissions to parent workflows (#3845) --- .github/workflows/deploy_tre.yml | 2 ++ .github/workflows/deploy_tre_branch.yml | 2 ++ .github/workflows/pr_comment_bot.yml | 2 ++ 3 files changed, 6 insertions(+) diff --git a/.github/workflows/deploy_tre.yml b/.github/workflows/deploy_tre.yml index 7c12cecd98..8dde45a2f8 100644 --- a/.github/workflows/deploy_tre.yml +++ b/.github/workflows/deploy_tre.yml @@ -26,6 +26,8 @@ jobs: name: "Deploy main" if: github.ref == 'refs/heads/main' uses: ./.github/workflows/deploy_tre_reusable.yml + permissions: + checks: write with: ciGitRef: ${{ github.ref }} e2eTestsCustomSelector: >- diff --git a/.github/workflows/deploy_tre_branch.yml b/.github/workflows/deploy_tre_branch.yml index a7d171b5c2..c1a931daa9 100644 --- a/.github/workflows/deploy_tre_branch.yml +++ b/.github/workflows/deploy_tre_branch.yml @@ -58,6 +58,8 @@ jobs: if: ${{ github.ref != 'refs/heads/main' }} needs: [prepare-not-main] uses: ./.github/workflows/deploy_tre_reusable.yml + permissions: + checks: write with: ciGitRef: ${{ github.ref }} prHeadSha: ${{ github.sha }} diff --git a/.github/workflows/pr_comment_bot.yml b/.github/workflows/pr_comment_bot.yml index bf9efe3a22..a46fa3250c 100644 --- a/.github/workflows/pr_comment_bot.yml +++ b/.github/workflows/pr_comment_bot.yml @@ -150,6 +150,8 @@ jobs: needs.pr_comment.outputs.command == 'run-tests-shared-services' name: Deploy PR uses: ./.github/workflows/deploy_tre_reusable.yml + permissions: + checks: write with: prRef: ${{ needs.pr_comment.outputs.prRef }} prHeadSha: ${{ needs.pr_comment.outputs.prHeadSha }} From 3835e5ad89209d55c131eaa8e6b4211fbcc6c9ff Mon Sep 17 00:00:00 2001 From: Tamir Kamara <26870601+tamirkamara@users.noreply.github.com> Date: Thu, 8 Feb 2024 20:20:13 +0200 Subject: [PATCH 04/79] More workflow permissions (#3846) more permissions --- .github/workflows/deploy_tre.yml | 2 ++ .github/workflows/deploy_tre_branch.yml | 2 ++ .github/workflows/pr_comment_bot.yml | 2 ++ 3 files changed, 6 insertions(+) diff --git a/.github/workflows/deploy_tre.yml b/.github/workflows/deploy_tre.yml index 8dde45a2f8..bddea6979f 100644 --- a/.github/workflows/deploy_tre.yml +++ b/.github/workflows/deploy_tre.yml @@ -28,6 +28,8 @@ jobs: uses: ./.github/workflows/deploy_tre_reusable.yml permissions: checks: write + contents: read + pull-requests: write with: ciGitRef: ${{ github.ref }} e2eTestsCustomSelector: >- diff --git a/.github/workflows/deploy_tre_branch.yml b/.github/workflows/deploy_tre_branch.yml index c1a931daa9..a6b65f9196 100644 --- a/.github/workflows/deploy_tre_branch.yml +++ b/.github/workflows/deploy_tre_branch.yml @@ -60,6 +60,8 @@ jobs: uses: ./.github/workflows/deploy_tre_reusable.yml permissions: checks: write + contents: read + pull-requests: write with: ciGitRef: ${{ github.ref }} prHeadSha: ${{ github.sha }} diff --git a/.github/workflows/pr_comment_bot.yml b/.github/workflows/pr_comment_bot.yml index a46fa3250c..40457ed99e 100644 --- a/.github/workflows/pr_comment_bot.yml +++ b/.github/workflows/pr_comment_bot.yml @@ -152,6 +152,8 @@ jobs: uses: ./.github/workflows/deploy_tre_reusable.yml permissions: checks: write + contents: read + pull-requests: write with: prRef: ${{ needs.pr_comment.outputs.prRef }} prHeadSha: ${{ needs.pr_comment.outputs.prHeadSha }} From e8da262b9d6e62babf5d27a693e98d642fa50832 Mon Sep 17 00:00:00 2001 From: Yahya Date: Mon, 12 Feb 2024 13:27:13 +0000 Subject: [PATCH 05/79] =?UTF-8?q?fixing=20react=20router=20dom=20version?= =?UTF-8?q?=20and=20switching=20to=20absolute=20routing=20whe=E2=80=A6=20(?= =?UTF-8?q?#3841)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 1 + ui/app/package.json | 4 ++-- ui/app/src/components/shared/airlock/Airlock.tsx | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index efdc4cf764..0200e05e3a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,7 @@ BUG FIXES: * Fix issue with workspace menu not working correctly([#3819](https://github.com/microsoft/AzureTRE/issues/3819)) * Fix issue with connect button showing when no uri([#3820](https://github.com/microsoft/AzureTRE/issues/3820)) * Fix user resource upgrade validation: use the parent_service_template_name instead of the parent_resource_id. ([#3824](https://github.com/microsoft/AzureTRE/issues/3824)) +* Airlock: Creating an import/export request causes a routing error ([#3830](https://github.com/microsoft/AzureTRE/issues/3830)) COMPONENTS: diff --git a/ui/app/package.json b/ui/app/package.json index e451a92237..459f721e8d 100644 --- a/ui/app/package.json +++ b/ui/app/package.json @@ -1,6 +1,6 @@ { "name": "tre-ui", - "version": "0.5.19", + "version": "0.5.20", "private": true, "dependencies": { "@azure/msal-browser": "^2.35.0", @@ -24,7 +24,7 @@ "react-dom": "^18.2.0", "react-markdown": "^8.0.3", "react-redux": "^8.0.4", - "react-router-dom": "6", + "react-router-dom": "6.21.1", "remark-gfm": "^3.0.1", "typescript": "^5.1.6", "web-vitals": "^3.3.0" diff --git a/ui/app/src/components/shared/airlock/Airlock.tsx b/ui/app/src/components/shared/airlock/Airlock.tsx index bc716826e5..89e3f3709f 100644 --- a/ui/app/src/components/shared/airlock/Airlock.tsx +++ b/ui/app/src/components/shared/airlock/Airlock.tsx @@ -255,7 +255,7 @@ export const Airlock: React.FunctionComponent = () => { const handleNewRequest = async (newRequest: AirlockRequest) => { await getAirlockRequests(); - navigate(newRequest.id); + navigate(`/workspaces/${newRequest.workspaceId}/requests/${newRequest.id}`); }; const quickFilters: ICommandBarItemProps[] = [ From f15c0bc196570dea68341268eff7f84ad3494c00 Mon Sep 17 00:00:00 2001 From: Tamir Kamara <26870601+tamirkamara@users.noreply.github.com> Date: Thu, 15 Feb 2024 10:41:47 +0200 Subject: [PATCH 06/79] Update CodeQL actions (#3851) --- .github/workflows/codeql-analysis.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 98d285e5aa..176b3b6a39 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -42,12 +42,12 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: persist-credentials: false - name: Initialize CodeQL - uses: github/codeql-action/init@v2 + uses: github/codeql-action/init@v3 with: languages: ${{ matrix.language }} @@ -57,6 +57,6 @@ jobs: run: mvn package - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v2 + uses: github/codeql-action/analyze@v3 with: category: "/language:${{matrix.language}}" From 1e48253081f1bc7ed596385afe0927d2d413ff0a Mon Sep 17 00:00:00 2001 From: Tamir Kamara <26870601+tamirkamara@users.noreply.github.com> Date: Tue, 20 Feb 2024 09:11:54 +0000 Subject: [PATCH 07/79] Delete InnerEye from workflows --- .github/workflows/deploy_tre_reusable.yml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/.github/workflows/deploy_tre_reusable.yml b/.github/workflows/deploy_tre_reusable.yml index 5f57bbc9f4..71105916be 100644 --- a/.github/workflows/deploy_tre_reusable.yml +++ b/.github/workflows/deploy_tre_reusable.yml @@ -385,8 +385,6 @@ jobs: BUNDLE_DIR: "./templates/workspace_services/guacamole"} - {BUNDLE_TYPE: "workspace_service", BUNDLE_DIR: "./templates/workspace_services/azureml"} - - {BUNDLE_TYPE: "workspace_service", - BUNDLE_DIR: "./templates/workspace_services/innereye"} - {BUNDLE_TYPE: "workspace_service", BUNDLE_DIR: "./templates/workspace_services/gitea"} - {BUNDLE_TYPE: "workspace_service", @@ -546,8 +544,6 @@ jobs: BUNDLE_DIR: "./templates/workspace_services/guacamole"} - {BUNDLE_TYPE: "workspace_service", BUNDLE_DIR: "./templates/workspace_services/azureml"} - - {BUNDLE_TYPE: "workspace_service", - BUNDLE_DIR: "./templates/workspace_services/innereye"} - {BUNDLE_TYPE: "workspace_service", BUNDLE_DIR: "./templates/workspace_services/gitea"} - {BUNDLE_TYPE: "workspace_service", From b40e4e74a928638217fcff8bfcfa80edc534bccb Mon Sep 17 00:00:00 2001 From: Tamir Kamara <26870601+tamirkamara@users.noreply.github.com> Date: Tue, 20 Feb 2024 19:37:47 +0200 Subject: [PATCH 08/79] Update important dependencies (#3852) * update dependencies * Remove InnerEye from E2Es --- api_app/_version.py | 2 +- api_app/requirements.txt | 2 +- cli/requirements.txt | 2 +- cli/setup.py | 4 ++-- e2e_tests/resources/strings.py | 1 - e2e_tests/test_workspace_service_templates.py | 1 - e2e_tests/test_workspace_services.py | 1 - resource_processor/_version.py | 2 +- resource_processor/vmss_porter/requirements.txt | 2 +- 9 files changed, 7 insertions(+), 10 deletions(-) diff --git a/api_app/_version.py b/api_app/_version.py index b0d7306ae4..30e65e30d0 100644 --- a/api_app/_version.py +++ b/api_app/_version.py @@ -1 +1 @@ -__version__ = "0.18.2" +__version__ = "0.18.3" diff --git a/api_app/requirements.txt b/api_app/requirements.txt index 55397c4e82..8860a0e1dc 100644 --- a/api_app/requirements.txt +++ b/api_app/requirements.txt @@ -1,4 +1,4 @@ -aiohttp==3.9.0 +aiohttp==3.9.3 azure-core==1.29.5 azure-cosmos==4.5.1 azure-eventgrid==4.15.0 diff --git a/cli/requirements.txt b/cli/requirements.txt index c25a123056..4bf5824a44 100644 --- a/cli/requirements.txt +++ b/cli/requirements.txt @@ -8,4 +8,4 @@ pygments==2.16.1 PyJWT==2.8.0 azure-cli-core==2.50.0 azure-identity==1.14.1 -aiohttp==3.9.0 +aiohttp==3.9.3 diff --git a/cli/setup.py b/cli/setup.py index 600b4cf7cc..7f90f36c88 100644 --- a/cli/setup.py +++ b/cli/setup.py @@ -4,7 +4,7 @@ from setuptools import setup PROJECT = 'azure-tre-cli' -VERSION = '0.2.0' +VERSION = '0.2.1' try: long_description = open('README.md', 'rt').read() @@ -49,7 +49,7 @@ "PyJWT==2.8.0", "azure-cli-core==2.50.0", "azure-identity==1.14.1", - "aiohttp==3.9.0" + "aiohttp==3.9.3" ], namespace_packages=[], diff --git a/e2e_tests/resources/strings.py b/e2e_tests/resources/strings.py index 833302a42f..ce06b588d5 100644 --- a/e2e_tests/resources/strings.py +++ b/e2e_tests/resources/strings.py @@ -14,7 +14,6 @@ AIRLOCK_IMPORT_REVIEW_WORKSPACE = "tre-workspace-airlock-import-review" AZUREML_SERVICE = "tre-service-azureml" -INNEREYE_SERVICE = "tre-service-innereye" GUACAMOLE_SERVICE = "tre-service-guacamole" GITEA_SERVICE = "tre-workspace-service-gitea" MLFLOW_SERVICE = "tre-service-mlflow" diff --git a/e2e_tests/test_workspace_service_templates.py b/e2e_tests/test_workspace_service_templates.py index 87c8319419..34545d9af1 100644 --- a/e2e_tests/test_workspace_service_templates.py +++ b/e2e_tests/test_workspace_service_templates.py @@ -13,7 +13,6 @@ workspace_service_templates = [ (strings.AZUREML_SERVICE), (strings.GUACAMOLE_SERVICE), - (strings.INNEREYE_SERVICE), (strings.GITEA_SERVICE) ] diff --git a/e2e_tests/test_workspace_services.py b/e2e_tests/test_workspace_services.py index df3f1d51d0..31ac5a0b14 100644 --- a/e2e_tests/test_workspace_services.py +++ b/e2e_tests/test_workspace_services.py @@ -9,7 +9,6 @@ workspace_services = [ strings.AZUREML_SERVICE, - # strings.INNEREYE_SERVICE, strings.GITEA_SERVICE, strings.MLFLOW_SERVICE, strings.MYSQL_SERVICE, diff --git a/resource_processor/_version.py b/resource_processor/_version.py index deded3247f..732155f8df 100644 --- a/resource_processor/_version.py +++ b/resource_processor/_version.py @@ -1 +1 @@ -__version__ = "0.8.2" +__version__ = "0.8.3" diff --git a/resource_processor/vmss_porter/requirements.txt b/resource_processor/vmss_porter/requirements.txt index 602596d82a..74f4b1f54c 100644 --- a/resource_processor/vmss_porter/requirements.txt +++ b/resource_processor/vmss_porter/requirements.txt @@ -1,4 +1,4 @@ -aiohttp==3.9.0 +aiohttp==3.9.3 azure-cli-core==2.50.0 azure-identity==1.14.1 azure-monitor-opentelemetry==1.1.1 From ab3997298022bb51c23d766da465312152d0d4fa Mon Sep 17 00:00:00 2001 From: Marcus Robinson Date: Tue, 27 Feb 2024 14:20:26 +0000 Subject: [PATCH 09/79] Add report check status to Test Results (#3856) Add check status. --- .github/workflows/test_results.yml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/.github/workflows/test_results.yml b/.github/workflows/test_results.yml index 8b790c065f..1a9bcd8187 100644 --- a/.github/workflows/test_results.yml +++ b/.github/workflows/test_results.yml @@ -59,3 +59,18 @@ jobs: Check the artifacts for details." exit 1 fi + + # For PR builds triggered from comment builds, the GITHUB_REF is set to main + # so the checks aren't automatically associated with the PR + # If prHeadSha is specified then explicity mark the checks for that SHA + - name: Report check status + if: github.event.workflow_run.head_sha != '' + uses: LouisBrunner/checks-action@v2.0.0 + with: + token: ${{ secrets.GITHUB_TOKEN }} + # the name must be identical to the one received by the real job + sha: ${{ github.event.workflow_run.head_sha }} + name: "Test Results" + status: "completed" + conclusion: ${{ github.event.workflow_run.conclusion }} + details_url: "https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}" From c3bc7797061b03f1258265125fd2955ab33e9fb6 Mon Sep 17 00:00:00 2001 From: nasaldrops Date: Tue, 27 Feb 2024 14:23:58 +0000 Subject: [PATCH 10/79] Fix registration of templates with no required or authorizedRoles defined. (#3849) --- CHANGELOG.md | 1 + api_app/_version.py | 2 +- api_app/db/repositories/resource_templates.py | 4 +- .../test_resource_templates_repository.py | 41 +++++++++++++++++++ 4 files changed, 45 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0200e05e3a..5bf835d88a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,7 @@ BUG FIXES: * Fix issue with connect button showing when no uri([#3820](https://github.com/microsoft/AzureTRE/issues/3820)) * Fix user resource upgrade validation: use the parent_service_template_name instead of the parent_resource_id. ([#3824](https://github.com/microsoft/AzureTRE/issues/3824)) * 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)) COMPONENTS: diff --git a/api_app/_version.py b/api_app/_version.py index 30e65e30d0..e61f7a55d6 100644 --- a/api_app/_version.py +++ b/api_app/_version.py @@ -1 +1 @@ -__version__ = "0.18.3" +__version__ = "0.18.4" diff --git a/api_app/db/repositories/resource_templates.py b/api_app/db/repositories/resource_templates.py index 288b096883..66674e7cf0 100644 --- a/api_app/db/repositories/resource_templates.py +++ b/api_app/db/repositories/resource_templates.py @@ -112,8 +112,8 @@ async def create_template(self, template_input: ResourceTemplateInCreate, resour "version": template_input.version, "resourceType": resource_type, "current": template_input.current, - "required": template_input.json_schema["required"], - "authorizedRoles": template_input.json_schema["authorizedRoles"] if "authorizedRoles" in template_input.json_schema else [], + "required": template_input.json_schema.get("required", []), + "authorizedRoles": template_input.json_schema.get("authorizedRoles", []), "properties": template_input.json_schema["properties"], "customActions": template_input.customActions } 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 d007326323..813c1b7471 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 @@ -7,6 +7,7 @@ from db.errors import EntityDoesNotExist, InvalidInput from models.domain.resource import ResourceType from models.domain.resource_template import ResourceTemplate +from models.schemas.workspace_template import WorkspaceTemplateInCreate pytestmark = pytest.mark.asyncio @@ -33,6 +34,46 @@ def sample_resource_template_as_dict(name: str, version: str = "1.0", resource_t ).dict() +@patch('db.repositories.resource_templates.ResourceTemplateRepository.save_item') +@patch('uuid.uuid4') +async def test_create_workspace_template_succeeds_without_required(uuid_mock, save_item_mock, resource_template_repo): + uuid_mock.return_value = "1234" + expected_type = ResourceType.Workspace + input_workspace_template = WorkspaceTemplateInCreate( + name="my-tre-workspace", + version="0.0.1", + current=True, + json_schema={ + "title": "My Workspace Template", + "description": "This is a test workspace template schema.", + "properties": { + "updateable_property": { + "type": "string", + "title": "Test updateable property", + "updateable": True, + }, + }, + }, + customActions=[], + ) + returned_template = await resource_template_repo.create_template(input_workspace_template, expected_type) + expected_resource_template = ResourceTemplate( + id="1234", + name=input_workspace_template.name, + title=input_workspace_template.json_schema["title"], + description=input_workspace_template.json_schema["description"], + version=input_workspace_template.version, + resourceType=expected_type, + properties=input_workspace_template.json_schema["properties"], + customActions=input_workspace_template.customActions, + required=[], + authorizedRoles=[], + current=input_workspace_template.current + ) + save_item_mock.assert_called_once_with(expected_resource_template) + assert expected_resource_template == 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 = "workspace" AND c.name = "test" AND c.version = "1.0"' From 21dbd2404ce3bd374ac94aa10dba23ff08357698 Mon Sep 17 00:00:00 2001 From: Marcus Robinson Date: Wed, 28 Feb 2024 13:22:54 +0000 Subject: [PATCH 11/79] Add network rule set for Service Bus namespace (#3858) --- CHANGELOG.md | 1 + core/terraform/migrate.sh | 9 ++++++ core/terraform/servicebus.tf | 42 +++++++++++-------------- core/version.txt | 2 +- devops/scripts/setup_local_debugging.sh | 22 +++++++++++-- 5 files changed, 48 insertions(+), 28 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5bf835d88a..c5024fd286 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,7 @@ BUG FIXES: * Fix user resource upgrade validation: use the parent_service_template_name instead of the parent_resource_id. ([#3824](https://github.com/microsoft/AzureTRE/issues/3824)) * 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)) COMPONENTS: diff --git a/core/terraform/migrate.sh b/core/terraform/migrate.sh index 761d780fd3..d6c12dc3a0 100755 --- a/core/terraform/migrate.sh +++ b/core/terraform/migrate.sh @@ -217,4 +217,13 @@ if [ "${state_store_serverless}" == "false" ]; then export TF_VAR_is_cosmos_defined_throughput fi +# prep for migration of azurerm_servicebus_namespace_network_rule_set https://github.com/microsoft/AzureTRE/pull/3858 +# as described https://github.com/hashicorp/terraform-provider-azurerm/issues/23954 +state_store_servicebus_network_rule_set=$(echo "${terraform_show_json}" \ + | jq 'select(.values.root_module.resources != null) | .values.root_module.resources[] | select(.address=="azurerm_servicebus_namespace_network_rule_set.servicebus_network_rule_set") | .values.id') +if [ -n "${state_store_servicebus_network_rule_set}" ]; then + echo "Removing state of azurerm_servicebus_namespace_network_rule_set" + terraform state rm azurerm_servicebus_namespace_network_rule_set.servicebus_network_rule_set +fi + echo "*** Migration is done. ***" diff --git a/core/terraform/servicebus.tf b/core/terraform/servicebus.tf index 67afcf0b81..afeff8e140 100644 --- a/core/terraform/servicebus.tf +++ b/core/terraform/servicebus.tf @@ -6,6 +6,24 @@ resource "azurerm_servicebus_namespace" "sb" { capacity = "1" tags = local.tre_core_tags + # Block public access + # See https://docs.microsoft.com/azure/service-bus-messaging/service-bus-service-endpoints + network_rule_set { + ip_rules = var.enable_local_debugging ? [local.myip] : null + + # Allows the Eventgrid to access the SB + trusted_services_allowed = true + + # We must enable the Airlock events subnet to access the SB, as the Eventgrid topics can't send messages over PE + # https://docs.microsoft.com/en-us/azure/event-grid/consume-private-endpoints + default_action = "Deny" + public_network_access_enabled = true + network_rules { + subnet_id = module.network.airlock_events_subnet_id + ignore_missing_vnet_service_endpoint = false + } + } + lifecycle { ignore_changes = [tags] } } @@ -73,30 +91,6 @@ resource "azurerm_private_endpoint" "sbpe" { ] } -# Block public access -# See https://docs.microsoft.com/azure/service-bus-messaging/service-bus-service-endpoints -resource "azurerm_servicebus_namespace_network_rule_set" "servicebus_network_rule_set" { - namespace_id = azurerm_servicebus_namespace.sb.id - ip_rules = var.enable_local_debugging ? [local.myip] : null - - - # We must enable the Airlock events subnet to access the SB, as the Eventgrid topics can't send messages over PE - # https://docs.microsoft.com/en-us/azure/event-grid/consume-private-endpoints - default_action = "Deny" - public_network_access_enabled = true - network_rules { - subnet_id = module.network.airlock_events_subnet_id - ignore_missing_vnet_service_endpoint = false - } - - # Allows the Eventgrid to access the SB - trusted_services_allowed = true - - depends_on = [ - module.network - ] -} - resource "azurerm_monitor_diagnostic_setting" "sb" { name = "diagnostics-${azurerm_servicebus_namespace.sb.name}" target_resource_id = azurerm_servicebus_namespace.sb.id diff --git a/core/version.txt b/core/version.txt index f8c6ac7fea..50533e307d 100644 --- a/core/version.txt +++ b/core/version.txt @@ -1 +1 @@ -__version__ = "0.9.5" +__version__ = "0.9.6" diff --git a/devops/scripts/setup_local_debugging.sh b/devops/scripts/setup_local_debugging.sh index f0a8b6c6ed..704910bb51 100755 --- a/devops/scripts/setup_local_debugging.sh +++ b/devops/scripts/setup_local_debugging.sh @@ -41,11 +41,17 @@ az cosmosdb update \ --ip-range-filter "${IPADDR}" echo "Adding local IP Address to ${SERVICE_BUS_NAMESPACE}." -az servicebus namespace network-rule add \ +if az servicebus namespace network-rule-set list \ --resource-group "${RESOURCE_GROUP_NAME}" \ --namespace-name "${SERVICE_BUS_NAMESPACE}" \ - --ip-address "${IPADDR}" \ - --action Allow + -o json | grep -q "${IPADDR}" ; then + echo "IP Address ${IPADDR} already exists in ${SERVICE_BUS_NAMESPACE}. Skipping..." +else + az servicebus namespace network-rule-set ip-rule add \ + --resource-group "${RESOURCE_GROUP_NAME}" \ + --namespace-name "${SERVICE_BUS_NAMESPACE}" \ + --ip-rule ip-address="${IPADDR}" action=Allow +fi echo "Adding local IP Address to Event Grid Topics." az eventgrid topic update \ @@ -99,6 +105,12 @@ az role assignment create \ --assignee "${LOGGED_IN_OBJECT_ID}" \ --scope "${EVENT_GRID_AIRLOCK_NOTIFICATION_TOPIC_RESOURCE_ID}" +# For end to E2E add Storage Blob Data Contributor role to the logged in user +az role assignment create \ + --role "Storage Blob Data Contributor" \ + --assignee "${LOGGED_IN_OBJECT_ID}" \ + --scope "/subscriptions/${AZURE_SUBSCRIPTION_ID}/resourceGroups/${RESOURCE_GROUP_NAME}/providers/Microsoft.Storage/storageAccounts/stalimex${TRE_ID}" + if [[ -z ${ARM_CLIENT_ID:-} ]]; then # Configure SP for local resource processor debugging (Porter can't use local creds) @@ -138,6 +150,8 @@ sed -i '/ARM_CLIENT_SECRET/d' "${private_env_path}" sed -i '/AAD_TENANT_ID/d' "${private_env_path}" sed -i '/APPLICATION_ADMIN_CLIENT_ID/d' "${private_env_path}" sed -i '/APPLICATION_ADMIN_CLIENT_SECRET/d' "${private_env_path}" +sed -i '/TEST_WORKSPACE_APP_ID/d' "${private_env_path}" +sed -i '/TEST_WORKSPACE_APP_SECRET/d' "${private_env_path}" # Append them to the TRE file so that the Resource Processor can use them tee -a "${private_env_path}" < Date: Wed, 28 Feb 2024 17:55:03 +0000 Subject: [PATCH 12/79] Fix argument quoting in second ACR job step in 'Deploy TRE Reusable' GitHub Action (#3861) Fix argument quoting in second ACR job step in 'Deploy TRE Reusable' github action --- .github/workflows/deploy_tre_reusable.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/deploy_tre_reusable.yml b/.github/workflows/deploy_tre_reusable.yml index 71105916be..31d9e03b39 100644 --- a/.github/workflows/deploy_tre_reusable.yml +++ b/.github/workflows/deploy_tre_reusable.yml @@ -253,10 +253,10 @@ jobs: run: | # shellcheck disable=SC2034,SC2015,SC2125 for i in {1..3}; do - az acr login --name "${{ secrets.CI_CACHE_ACR_NAME }}" && ec=0 && break || ec=\$? && sleep 10 + az acr login --name "${{ secrets.CI_CACHE_ACR_NAME }}" && ec=0 && break || ec="$?" && sleep 10 done # shellcheck disable=SC2242 - (exit \$ec) + (exit "$ec") - name: Push cached devcontainer run: docker image push ${{ env.CI_CACHE_ACR_URI }}/tredev:${{ inputs.DEVCONTAINER_TAG }} From b2caab3b6e18e696abe751d3d7606677b968dc5f Mon Sep 17 00:00:00 2001 From: Jonny Rylands Date: Thu, 29 Feb 2024 15:30:02 +0000 Subject: [PATCH 13/79] Destroy TRE script unbound variable fix (#3864) --- devops/scripts/destroy_env_no_terraform.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/devops/scripts/destroy_env_no_terraform.sh b/devops/scripts/destroy_env_no_terraform.sh index a6e64b8292..d120860c75 100755 --- a/devops/scripts/destroy_env_no_terraform.sh +++ b/devops/scripts/destroy_env_no_terraform.sh @@ -114,13 +114,13 @@ if [ "${keyvault}" != "0" ]; then keys=$(az keyvault key list --vault-name "${keyvault_name}" -o json | jq -r '.[].id') for key_id in ${keys}; do - echo "Deleting ${secret_id}" + echo "Deleting ${key_id}" az keyvault key delete --id "${key_id}" done certificates=$(az keyvault certificate list --vault-name "${keyvault_name}" -o json | jq -r '.[].id') for certificate_id in ${certificates}; do - echo "Deleting ${secret_id}" + echo "Deleting ${certificate_id}" az keyvault certificate delete --id "${certificate_id}" done From e8d2f89272852903a376f54d2f969a57b65a8618 Mon Sep 17 00:00:00 2001 From: Marcus Robinson Date: Fri, 1 Mar 2024 16:32:32 +0000 Subject: [PATCH 14/79] Update Docker dependency update schedule (#3868) --- .github/dependabot.yml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 5135c1a5f9..3234546e6c 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -55,3 +55,12 @@ updates: - dependency-name: "*" update-types: ["version-update:semver-patch"] open-pull-requests-limit: 0 + + - package-ecosystem: "docker" + directory: "/" + schedule: + interval: "monthly" + ignore: + - dependency-name: "*" + update-types: ["version-update:semver-patch"] + open-pull-requests-limit: 0 From ddddbf6e3e8d13db477f70dc2ca8048dd12c563a Mon Sep 17 00:00:00 2001 From: Marcus Robinson Date: Tue, 5 Mar 2024 17:55:52 +0000 Subject: [PATCH 15/79] Update packages for February Security Updates (#3866) --- .devcontainer/Dockerfile | 4 +- airlock_processor/_version.py | 2 +- airlock_processor/requirements.txt | 2 +- api_app/_version.py | 2 +- api_app/core/config.py | 6 +- api_app/requirements.txt | 10 +- cli/requirements.txt | 4 +- cli/setup.py | 6 +- e2e_tests/config.py | 6 +- e2e_tests/requirements.txt | 2 +- resource_processor/_version.py | 2 +- .../vmss_porter/requirements.txt | 6 +- ui/app/package.json | 7 +- ui/app/yarn.lock | 1444 +++++++++-------- 14 files changed, 790 insertions(+), 713 deletions(-) diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index f22f81360f..a6d7a953ca 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -37,7 +37,7 @@ RUN apt-get update && apt-get install -y ca-certificates curl gnupg lsb-release && curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg \ && echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" \ | tee /etc/apt/sources.list.d/docker.list > /dev/null \ - && apt-get update && apt-get install -y docker-ce="5:23.0.3-1~debian.11~bullseye" docker-ce-cli="5:23.0.3-1~debian.11~bullseye" containerd.io="1.6.20-1" docker-buildx-plugin --no-install-recommends \ + && apt-get update && apt-get install -y docker-ce="5:24.0.0-1~debian.11~bullseye" docker-ce-cli="5:24.0.0-1~debian.11~bullseye" docker-compose-plugin="2.21.0-1~debian.11~bullseye" containerd.io="1.6.24-1" docker-buildx-plugin --no-install-recommends \ && apt-get clean -y && rm -rf /var/lib/apt/lists/* # Install Certbot @@ -75,7 +75,7 @@ COPY ["airlock_processor/requirements.txt", "/tmp/pip-tmp/airlock_processor/"] RUN pip3 --disable-pip-version-check --no-cache-dir install -r /tmp/pip-tmp/requirements.txt # Install azure-cli -ARG AZURE_CLI_VERSION=2.50.0-1~bullseye +ARG AZURE_CLI_VERSION=2.57.0-1~bullseye COPY .devcontainer/scripts/azure-cli.sh /tmp/ RUN export AZURE_CLI_VERSION=${AZURE_CLI_VERSION} \ && /tmp/azure-cli.sh diff --git a/airlock_processor/_version.py b/airlock_processor/_version.py index 49e0fc1e09..a5f830a2c0 100644 --- a/airlock_processor/_version.py +++ b/airlock_processor/_version.py @@ -1 +1 @@ -__version__ = "0.7.0" +__version__ = "0.7.1" diff --git a/airlock_processor/requirements.txt b/airlock_processor/requirements.txt index 1e61c58c14..f27bc566bd 100644 --- a/airlock_processor/requirements.txt +++ b/airlock_processor/requirements.txt @@ -1,5 +1,5 @@ # Do not include azure-functions-worker as it may conflict with the Azure Functions platform -azure-core==1.29.5 +azure-core==1.30.0 azure-functions==1.17.0 azure-storage-blob==12.19.0 azure-identity==1.14.1 diff --git a/api_app/_version.py b/api_app/_version.py index e61f7a55d6..391a39001a 100644 --- a/api_app/_version.py +++ b/api_app/_version.py @@ -1 +1 @@ -__version__ = "0.18.4" +__version__ = "0.18.5" diff --git a/api_app/core/config.py b/api_app/core/config.py index aa84020783..95394d3229 100644 --- a/api_app/core/config.py +++ b/api_app/core/config.py @@ -2,7 +2,11 @@ from starlette.config import Config from _version import __version__ -config = Config(".env") +try: + config = Config('.env') +# Workaround needed until FastAPI uses Starlette >= 3.7.1 +except FileNotFoundError: + config = Config() # API settings API_PREFIX = "/api" diff --git a/api_app/requirements.txt b/api_app/requirements.txt index 8860a0e1dc..afe27aad1c 100644 --- a/api_app/requirements.txt +++ b/api_app/requirements.txt @@ -1,5 +1,5 @@ aiohttp==3.9.3 -azure-core==1.29.5 +azure-core==1.30.0 azure-cosmos==4.5.1 azure-eventgrid==4.15.0 azure-identity==1.14.1 @@ -7,15 +7,15 @@ azure-mgmt-compute==30.3.0 azure-mgmt-cosmosdb==9.3.0 azure-mgmt-costmanagement==4.0.1 azure-mgmt-resource==23.0.1 -azure-monitor-opentelemetry==1.1.1 +azure-monitor-opentelemetry==1.2.0 azure-servicebus==7.11.3 azure-storage-blob==12.19.0 -fastapi==0.104.0 +fastapi==0.110.0 fastapi-utils==0.2.1 gunicorn==21.2.0 jsonschema[format_nongpl]==4.19.1 -msal==1.22.0 -opentelemetry.instrumentation.logging==0.43b0 +msal==1.26.0 +opentelemetry.instrumentation.logging==0.44b0 pandas==2.0.3 PyJWT==2.8.0 pytz==2022.7 diff --git a/cli/requirements.txt b/cli/requirements.txt index 4bf5824a44..3960c64435 100644 --- a/cli/requirements.txt +++ b/cli/requirements.txt @@ -1,11 +1,11 @@ # if you update this file, update the install_requires in setup.py as well click==8.1.3 httpx~=0.23.0 -msal==1.22.0 +msal==1.26.0 jmespath==1.0.1 tabulate==0.9.0 pygments==2.16.1 PyJWT==2.8.0 -azure-cli-core==2.50.0 +azure-cli-core==2.57.0 azure-identity==1.14.1 aiohttp==3.9.3 diff --git a/cli/setup.py b/cli/setup.py index 7f90f36c88..c9bab6e678 100644 --- a/cli/setup.py +++ b/cli/setup.py @@ -4,7 +4,7 @@ from setuptools import setup PROJECT = 'azure-tre-cli' -VERSION = '0.2.1' +VERSION = '0.2.2' try: long_description = open('README.md', 'rt').read() @@ -42,12 +42,12 @@ install_requires=[ "click==8.1.3", "httpx==0.25.0", - "msal==1.22.0", + "msal==1.26.0", "jmespath==1.0.1", "tabulate==0.9.0", "pygments==2.16.1", "PyJWT==2.8.0", - "azure-cli-core==2.50.0", + "azure-cli-core==2.57.0", "azure-identity==1.14.1", "aiohttp==3.9.3" ], diff --git a/e2e_tests/config.py b/e2e_tests/config.py index 82c6663ebd..cd43a78181 100644 --- a/e2e_tests/config.py +++ b/e2e_tests/config.py @@ -1,7 +1,11 @@ from starlette.config import Config -config = Config(".env") +try: + config = Config('.env') +# Workaround needed until FastAPI uses Starlette >= 3.7.1 +except FileNotFoundError: + config = Config() # Resource Info RESOURCE_LOCATION: str = config("RESOURCE_LOCATION", default="") diff --git a/e2e_tests/requirements.txt b/e2e_tests/requirements.txt index 5610785cba..7587b0d58a 100644 --- a/e2e_tests/requirements.txt +++ b/e2e_tests/requirements.txt @@ -2,7 +2,7 @@ httpx==0.25.0 pytest==7.4.3 pytest-asyncio==0.21.1 -starlette==0.27.0 +starlette==0.36.3 pytest-timeout==2.2.0 pytest-xdist==3.3.1 backoff==2.2.1 diff --git a/resource_processor/_version.py b/resource_processor/_version.py index 732155f8df..fa3ddd8c5a 100644 --- a/resource_processor/_version.py +++ b/resource_processor/_version.py @@ -1 +1 @@ -__version__ = "0.8.3" +__version__ = "0.8.4" diff --git a/resource_processor/vmss_porter/requirements.txt b/resource_processor/vmss_porter/requirements.txt index 74f4b1f54c..649ef718b8 100644 --- a/resource_processor/vmss_porter/requirements.txt +++ b/resource_processor/vmss_porter/requirements.txt @@ -1,6 +1,6 @@ aiohttp==3.9.3 -azure-cli-core==2.50.0 +azure-cli-core==2.57.0 azure-identity==1.14.1 -azure-monitor-opentelemetry==1.1.1 +azure-monitor-opentelemetry==1.2.0 azure-servicebus==7.11.3 -opentelemetry.instrumentation.logging==0.43b0 +opentelemetry.instrumentation.logging==0.44b0 diff --git a/ui/app/package.json b/ui/app/package.json index 459f721e8d..259dd9fcb9 100644 --- a/ui/app/package.json +++ b/ui/app/package.json @@ -1,6 +1,6 @@ { "name": "tre-ui", - "version": "0.5.20", + "version": "0.5.21", "private": true, "dependencies": { "@azure/msal-browser": "^2.35.0", @@ -26,7 +26,7 @@ "react-redux": "^8.0.4", "react-router-dom": "6.21.1", "remark-gfm": "^3.0.1", - "typescript": "^5.1.6", + "typescript": "^5.3.3", "web-vitals": "^3.3.0" }, "devDependencies": { @@ -61,6 +61,7 @@ ] }, "resolutions": { - "nth-check": "^2.0.1" + "nth-check": "^2.0.1", + "node-sass/**/ip": "^2.0.1" } } diff --git a/ui/app/yarn.lock b/ui/app/yarn.lock index 7321622a3c..e95e023cc8 100644 --- a/ui/app/yarn.lock +++ b/ui/app/yarn.lock @@ -8,9 +8,9 @@ integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== "@adobe/css-tools@^4.3.2": - version "4.3.2" - resolved "https://registry.yarnpkg.com/@adobe/css-tools/-/css-tools-4.3.2.tgz#a6abc715fb6884851fca9dad37fc34739a04fd11" - integrity sha512-DA5a1C0gD/pLOvhv33YMrbf2FK3oUzwNl9oOJqE4XVjuEtt6XIakRcsd7eLiOSPkp1kTRQGICTA8cKra/vFbjw== + version "4.3.3" + resolved "https://registry.yarnpkg.com/@adobe/css-tools/-/css-tools-4.3.3.tgz#90749bde8b89cd41764224f5aac29cd4138f75ff" + integrity sha512-rE0Pygv0sEZ4vBWHlAgJLGDU7Pm8xoO6p3wsEceb7GYAjScrOHpEo8KK/eVkAcnSM+slAEtXjA2JpdjLp4fJQQ== "@alloc/quick-lru@^5.2.0": version "5.2.0" @@ -51,7 +51,7 @@ resolved "https://registry.yarnpkg.com/@azure/msal-react/-/msal-react-1.5.12.tgz#d0a74161977bca6ffc30bb9177f7f9f5314aa5b8" integrity sha512-waz8wFWVSLn3g8033uK6byGF29w3Lpg5gzuTKEJyBaAgoed3p09nuMYZRLgqFdXeAazpw/YthLdKRNN9DlMrQA== -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.0", "@babel/code-frame@^7.22.13", "@babel/code-frame@^7.23.5", "@babel/code-frame@^7.8.3": +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.0", "@babel/code-frame@^7.23.5", "@babel/code-frame@^7.8.3": version "7.23.5" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.23.5.tgz#9009b69a8c602293476ad598ff53e4562e15c244" integrity sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA== @@ -59,26 +59,26 @@ "@babel/highlight" "^7.23.4" chalk "^2.4.2" -"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.23.3", "@babel/compat-data@^7.23.5": +"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.23.5": version "7.23.5" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.23.5.tgz#ffb878728bb6bdcb6f4510aa51b1be9afb8cfd98" integrity sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw== "@babel/core@^7.1.0", "@babel/core@^7.11.1", "@babel/core@^7.12.3", "@babel/core@^7.16.0", "@babel/core@^7.23.7", "@babel/core@^7.7.2", "@babel/core@^7.8.0": - version "7.23.7" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.7.tgz#4d8016e06a14b5f92530a13ed0561730b5c6483f" - integrity sha512-+UpDgowcmqe36d4NwqvKsyPMlOLNGMsfMmQ5WGCu+siCe3t3dfe9njrzGfdN4qq+bcNUt0+Vw6haRxBOycs4dw== + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.24.0.tgz#56cbda6b185ae9d9bed369816a8f4423c5f2ff1b" + integrity sha512-fQfkg0Gjkza3nf0c7/w6Xf34BW4YvzNfACRLmmb7XRLa6XHdR+K9AlJlxneFfWYf6uhOzuzZVTjF/8KfndZANw== dependencies: "@ampproject/remapping" "^2.2.0" "@babel/code-frame" "^7.23.5" "@babel/generator" "^7.23.6" "@babel/helper-compilation-targets" "^7.23.6" "@babel/helper-module-transforms" "^7.23.3" - "@babel/helpers" "^7.23.7" - "@babel/parser" "^7.23.6" - "@babel/template" "^7.22.15" - "@babel/traverse" "^7.23.7" - "@babel/types" "^7.23.6" + "@babel/helpers" "^7.24.0" + "@babel/parser" "^7.24.0" + "@babel/template" "^7.24.0" + "@babel/traverse" "^7.24.0" + "@babel/types" "^7.24.0" convert-source-map "^2.0.0" debug "^4.1.0" gensync "^1.0.0-beta.2" @@ -86,9 +86,9 @@ semver "^6.3.1" "@babel/eslint-parser@^7.16.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.23.3.tgz#7bf0db1c53b54da0c8a12627373554a0828479ca" - integrity sha512-9bTuNlyx7oSstodm1cR1bECj4fkiknsDa1YniISkJemMY3DGhJNYBECbe6QD/q54mp2J8VO66jW3/7uP//iFCw== + version "7.23.10" + resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.23.10.tgz#2d4164842d6db798873b40e0c4238827084667a2" + integrity sha512-3wSYDPZVnhseRnxRJH6ZVTNknBz76AEnyC+AYYhasjP3Yy23qz0ERR7Fcd2SHmYuSFJ2kY9gaaDd3vyqU09eSw== dependencies: "@nicolo-ribaudo/eslint-scope-5-internals" "5.1.1-v1" eslint-visitor-keys "^2.1.0" @@ -129,10 +129,10 @@ lru-cache "^5.1.1" semver "^6.3.1" -"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.21.0", "@babel/helper-create-class-features-plugin@^7.22.15", "@babel/helper-create-class-features-plugin@^7.23.6", "@babel/helper-create-class-features-plugin@^7.23.7": - version "7.23.7" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.7.tgz#b2e6826e0e20d337143655198b79d58fdc9bd43d" - integrity sha512-xCoqR/8+BoNnXOY7RVSgv6X+o7pmT5q1d+gGcRlXYkI+9B31glE4jeejhKVpA04O1AtzOt7OSQ6VYKP5FcRl9g== +"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.21.0", "@babel/helper-create-class-features-plugin@^7.22.15", "@babel/helper-create-class-features-plugin@^7.23.6", "@babel/helper-create-class-features-plugin@^7.24.0": + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.0.tgz#fc7554141bdbfa2d17f7b4b80153b9b090e5d158" + integrity sha512-QAH+vfvts51BCsNZ2PhY6HAggnlS6omLLFTsIpeqZk/MmJ6cW7tgz5yRv0fMJThcr6FmbMrENh1RgrWPTYA76g== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" "@babel/helper-environment-visitor" "^7.22.20" @@ -153,10 +153,10 @@ regexpu-core "^5.3.1" semver "^6.3.1" -"@babel/helper-define-polyfill-provider@^0.4.4": - version "0.4.4" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.4.tgz#64df615451cb30e94b59a9696022cffac9a10088" - integrity sha512-QcJMILQCu2jm5TFPGA3lCpJJTeEP+mqeXooG/NZbg/h5FTFi6V0+99ahlRsW8/kRLyb24LZVCCiclDedhLKcBA== +"@babel/helper-define-polyfill-provider@^0.5.0": + version "0.5.0" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.5.0.tgz#465805b7361f461e86c680f1de21eaf88c25901b" + integrity sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q== dependencies: "@babel/helper-compilation-targets" "^7.22.6" "@babel/helper-plugin-utils" "^7.22.5" @@ -216,10 +216,10 @@ dependencies: "@babel/types" "^7.22.5" -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295" - integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.24.0", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz#945681931a52f15ce879fd5b86ce2dae6d3d7f2a" + integrity sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w== "@babel/helper-remap-async-to-generator@^7.22.20": version "7.22.20" @@ -284,14 +284,14 @@ "@babel/template" "^7.22.15" "@babel/types" "^7.22.19" -"@babel/helpers@^7.23.7": - version "7.23.8" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.8.tgz#fc6b2d65b16847fd50adddbd4232c76378959e34" - integrity sha512-KDqYz4PiOWvDFrdHLPhKtCThtIcKVy6avWD2oG4GEvyQ+XDZwHD4YQd+H2vNMnq2rkdxsDkU82T+Vk8U/WXHRQ== +"@babel/helpers@^7.24.0": + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.24.0.tgz#a3dd462b41769c95db8091e49cfe019389a9409b" + integrity sha512-ulDZdc0Aj5uLc5nETsa7EPx2L7rM0YJM8r7ck7U73AXi7qOV44IHHRAYZHY6iU1rr3C5N4NtTmMRUJP6kwCWeA== dependencies: - "@babel/template" "^7.22.15" - "@babel/traverse" "^7.23.7" - "@babel/types" "^7.23.6" + "@babel/template" "^7.24.0" + "@babel/traverse" "^7.24.0" + "@babel/types" "^7.24.0" "@babel/highlight@^7.23.4": version "7.23.4" @@ -302,10 +302,10 @@ chalk "^2.4.2" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.22.15", "@babel/parser@^7.23.6": - version "7.23.6" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.6.tgz#ba1c9e512bda72a47e285ae42aff9d2a635a9e3b" - integrity sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ== +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.24.0": + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.0.tgz#26a3d1ff49031c53a97d03b604375f028746a9ac" + integrity sha512-QuP/FxEAzMSjXygs8v4N9dvdXzEHN4W1oF3PxuWAtPo08UdM17u89RDMgjLn/mlc56iM0HlLmVkO/wgR+rDgHg== "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.23.3": version "7.23.3" @@ -340,13 +340,13 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-proposal-decorators@^7.16.4": - version "7.23.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.23.7.tgz#1d827902cbd3d9054e54fb2f2056cdd1eaa0e368" - integrity sha512-b1s5JyeMvqj7d9m9KhJNHKc18gEJiSyVzVX3bwbiPalQBQpuvfPh6lA9F7Kk/dWH0TIiXRpB9yicwijY6buPng== + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.24.0.tgz#845b42189e7441faa60a37682de1038eae97c382" + integrity sha512-LiT1RqZWeij7X+wGxCoYh3/3b8nVOX6/7BZ9wiQgAIyjoeQWdROaodJCgT+dwtbjHaz0r7bEbHJzjSbVfcOyjQ== dependencies: - "@babel/helper-create-class-features-plugin" "^7.23.7" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-decorators" "^7.23.3" + "@babel/helper-create-class-features-plugin" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.0" + "@babel/plugin-syntax-decorators" "^7.24.0" "@babel/plugin-proposal-nullish-coalescing-operator@^7.16.0": version "7.18.6" @@ -424,12 +424,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-decorators@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.23.3.tgz#a1d351d6c25bfdcf2e16f99b039101bc0ffcb0ca" - integrity sha512-cf7Niq4/+/juY67E0PbgH0TDhLQ5J7zS8C/Q5FFx+DWyrRa9sUQdTXkjqKu8zGvuqr7vw1muKiukseihU+PJDA== +"@babel/plugin-syntax-decorators@^7.24.0": + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.24.0.tgz#7a15e20aeaf412469c53ed0d5666f31a1fc41215" + integrity sha512-MXW3pQCu9gUiVGzqkGqsgiINDVYXoAnrY8FYF/rmb+OfufNF0zHMpHPN4ulRrinxYT8Vk/aZJxYqOKsDECjKAw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-syntax-dynamic-import@^7.8.3": version "7.8.3" @@ -565,10 +565,10 @@ dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-async-generator-functions@^7.23.7": - version "7.23.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.7.tgz#3aa0b4f2fa3788b5226ef9346cf6d16ec61f99cd" - integrity sha512-PdxEpL71bJp1byMG0va5gwQcXHxuEYC/BgI/e88mGTtohbZN28O5Yit0Plkkm/dBzCF/BxmbNcses1RH1T+urA== +"@babel/plugin-transform-async-generator-functions@^7.23.9": + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.9.tgz#9adaeb66fc9634a586c5df139c6240d41ed801ce" + integrity sha512-8Q3veQEDGe14dTYuwagbRtwxQDnytyg1JFu4/HwEMETeofocrB0U0ejBJIXoeG/t2oXZ8kzCyI0ZZfbT80VFNQ== dependencies: "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-plugin-utils" "^7.22.5" @@ -755,10 +755,10 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-simple-access" "^7.22.5" -"@babel/plugin-transform-modules-systemjs@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.3.tgz#fa7e62248931cb15b9404f8052581c302dd9de81" - integrity sha512-ZxyKGTkF9xT9YJuKQRo19ewf3pXpopuYQd8cDXqNzc3mUNbOME0RKMoZxviQk74hwzfQsEe66dE92MaZbdHKNQ== +"@babel/plugin-transform-modules-systemjs@^7.23.9": + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.9.tgz#105d3ed46e4a21d257f83a2f9e2ee4203ceda6be" + integrity sha512-KDlPRM6sLo4o1FkiSlXoAa8edLXFsKKIda779fbLrvmeuc3itnjCtaO6RrtoaANsIJANj+Vk1zqbZIMhkCAHVw== dependencies: "@babel/helper-hoist-variables" "^7.22.5" "@babel/helper-module-transforms" "^7.23.3" @@ -804,14 +804,14 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-transform-object-rest-spread@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.23.4.tgz#2b9c2d26bf62710460bdc0d1730d4f1048361b83" - integrity sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g== +"@babel/plugin-transform-object-rest-spread@^7.24.0": + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.0.tgz#7b836ad0088fdded2420ce96d4e1d3ed78b71df1" + integrity sha512-y/yKMm7buHpFFXfxVFS4Vk1ToRJDilIa6fKRioB9Vjichv58TDGXTvqV0dN7plobAmTW5eSEGXDngE+Mm+uO+w== dependencies: - "@babel/compat-data" "^7.23.3" - "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/compat-data" "^7.23.5" + "@babel/helper-compilation-targets" "^7.23.6" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-syntax-object-rest-spread" "^7.8.3" "@babel/plugin-transform-parameters" "^7.23.3" @@ -928,15 +928,15 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-runtime@^7.16.4": - version "7.23.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.23.7.tgz#52bbd20054855beb9deae3bee9ceb05289c343e6" - integrity sha512-fa0hnfmiXc9fq/weK34MUV0drz2pOL/vfKWvN7Qw127hiUPabFCUMgAbYWcchRzMJit4o5ARsK/s+5h0249pLw== + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.24.0.tgz#e308fe27d08b74027d42547081eefaf4f2ffbcc9" + integrity sha512-zc0GA5IitLKJrSfXlXmp8KDqLrnGECK7YRfQBmEKg1NmBOQ7e+KuclBEKJgzifQeUYLdNiAw4B4bjyvzWVLiSA== dependencies: "@babel/helper-module-imports" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - babel-plugin-polyfill-corejs2 "^0.4.7" - babel-plugin-polyfill-corejs3 "^0.8.7" - babel-plugin-polyfill-regenerator "^0.5.4" + "@babel/helper-plugin-utils" "^7.24.0" + babel-plugin-polyfill-corejs2 "^0.4.8" + babel-plugin-polyfill-corejs3 "^0.9.0" + babel-plugin-polyfill-regenerator "^0.5.5" semver "^6.3.1" "@babel/plugin-transform-shorthand-properties@^7.23.3": @@ -1017,13 +1017,13 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/preset-env@^7.11.0", "@babel/preset-env@^7.12.1", "@babel/preset-env@^7.16.4": - version "7.23.8" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.23.8.tgz#7d6f8171ea7c221ecd28059e65ad37c20e441e3e" - integrity sha512-lFlpmkApLkEP6woIKprO6DO60RImpatTQKtz4sUcDjVcK8M8mQ4sZsuxaTMNOZf0sqAq/ReYW1ZBHnOQwKpLWA== + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.24.0.tgz#11536a7f4b977294f0bdfad780f01a8ac8e183fc" + integrity sha512-ZxPEzV9IgvGn73iK0E6VB9/95Nd7aMFpbE0l8KQFDG70cOV9IxRP7Y2FUPmlK0v6ImlLqYX50iuZ3ZTVhOF2lA== dependencies: "@babel/compat-data" "^7.23.5" "@babel/helper-compilation-targets" "^7.23.6" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/helper-validator-option" "^7.23.5" "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.23.3" "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.23.3" @@ -1048,7 +1048,7 @@ "@babel/plugin-syntax-top-level-await" "^7.14.5" "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" "@babel/plugin-transform-arrow-functions" "^7.23.3" - "@babel/plugin-transform-async-generator-functions" "^7.23.7" + "@babel/plugin-transform-async-generator-functions" "^7.23.9" "@babel/plugin-transform-async-to-generator" "^7.23.3" "@babel/plugin-transform-block-scoped-functions" "^7.23.3" "@babel/plugin-transform-block-scoping" "^7.23.4" @@ -1070,13 +1070,13 @@ "@babel/plugin-transform-member-expression-literals" "^7.23.3" "@babel/plugin-transform-modules-amd" "^7.23.3" "@babel/plugin-transform-modules-commonjs" "^7.23.3" - "@babel/plugin-transform-modules-systemjs" "^7.23.3" + "@babel/plugin-transform-modules-systemjs" "^7.23.9" "@babel/plugin-transform-modules-umd" "^7.23.3" "@babel/plugin-transform-named-capturing-groups-regex" "^7.22.5" "@babel/plugin-transform-new-target" "^7.23.3" "@babel/plugin-transform-nullish-coalescing-operator" "^7.23.4" "@babel/plugin-transform-numeric-separator" "^7.23.4" - "@babel/plugin-transform-object-rest-spread" "^7.23.4" + "@babel/plugin-transform-object-rest-spread" "^7.24.0" "@babel/plugin-transform-object-super" "^7.23.3" "@babel/plugin-transform-optional-catch-binding" "^7.23.4" "@babel/plugin-transform-optional-chaining" "^7.23.4" @@ -1096,9 +1096,9 @@ "@babel/plugin-transform-unicode-regex" "^7.23.3" "@babel/plugin-transform-unicode-sets-regex" "^7.23.3" "@babel/preset-modules" "0.1.6-no-external-plugins" - babel-plugin-polyfill-corejs2 "^0.4.7" - babel-plugin-polyfill-corejs3 "^0.8.7" - babel-plugin-polyfill-regenerator "^0.5.4" + babel-plugin-polyfill-corejs2 "^0.4.8" + babel-plugin-polyfill-corejs3 "^0.9.0" + babel-plugin-polyfill-regenerator "^0.5.5" core-js-compat "^3.31.0" semver "^6.3.1" @@ -1140,33 +1140,33 @@ integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== "@babel/runtime-corejs3@^7.10.2": - version "7.23.8" - resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.23.8.tgz#b8aa3d47570bdd08fed77fdfd69542118af0df26" - integrity sha512-2ZzmcDugdm0/YQKFVYsXiwUN7USPX8PM7cytpb4PFl87fM+qYPSvTZX//8tyeJB1j0YDmafBJEbl5f8NfLyuKw== + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.24.0.tgz#34243e29e369a762dd2a356fee65c3767973828a" + integrity sha512-HxiRMOncx3ly6f3fcZ1GVKf+/EROcI9qwPgmij8Czqy6Okm/0T37T4y2ZIlLUuEUFjtM7NRsfdCO8Y3tAiJZew== dependencies: core-js-pure "^3.30.2" regenerator-runtime "^0.14.0" "@babel/runtime@^7.10.2", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.5", "@babel/runtime@^7.16.3", "@babel/runtime@^7.23.2", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2": - version "7.23.8" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.8.tgz#8ee6fe1ac47add7122902f257b8ddf55c898f650" - integrity sha512-Y7KbAP984rn1VGMbGqKmBLio9V7y5Je9GvU4rQPCPinCyNfUcToxIXl06d59URp/F3LwinvODxab5N/G6qggkw== + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.0.tgz#584c450063ffda59697021430cb47101b085951e" + integrity sha512-Chk32uHMg6TnQdvw2e9IlqPpFX/6NLuK0Ys2PqLb7/gL5uFn9mXvK715FGLlOLQrcO4qIkNHkvPGktzzXexsFw== dependencies: regenerator-runtime "^0.14.0" -"@babel/template@^7.22.15", "@babel/template@^7.3.3": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.15.tgz#09576efc3830f0430f4548ef971dde1350ef2f38" - integrity sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w== +"@babel/template@^7.22.15", "@babel/template@^7.24.0", "@babel/template@^7.3.3": + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.24.0.tgz#c6a524aa93a4a05d66aaf31654258fae69d87d50" + integrity sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA== dependencies: - "@babel/code-frame" "^7.22.13" - "@babel/parser" "^7.22.15" - "@babel/types" "^7.22.15" + "@babel/code-frame" "^7.23.5" + "@babel/parser" "^7.24.0" + "@babel/types" "^7.24.0" -"@babel/traverse@^7.23.7", "@babel/traverse@^7.7.2": - version "7.23.7" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.7.tgz#9a7bf285c928cb99b5ead19c3b1ce5b310c9c305" - integrity sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg== +"@babel/traverse@^7.24.0", "@babel/traverse@^7.7.2": + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.24.0.tgz#4a408fbf364ff73135c714a2ab46a5eab2831b1e" + integrity sha512-HfuJlI8qq3dEDmNU5ChzzpZRWq+oxCZQyMzIMEqLho+AQnhMnKQUzH6ydo3RBl/YjPCuk68Y6s0Gx0AeyULiWw== dependencies: "@babel/code-frame" "^7.23.5" "@babel/generator" "^7.23.6" @@ -1174,15 +1174,15 @@ "@babel/helper-function-name" "^7.23.0" "@babel/helper-hoist-variables" "^7.22.5" "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.23.6" - "@babel/types" "^7.23.6" + "@babel/parser" "^7.24.0" + "@babel/types" "^7.24.0" debug "^4.3.1" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.12.6", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.4", "@babel/types@^7.23.6", "@babel/types@^7.3.3", "@babel/types@^7.4.4": - version "7.23.6" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.6.tgz#be33fdb151e1f5a56877d704492c240fc71c7ccd" - integrity sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg== +"@babel/types@^7.0.0", "@babel/types@^7.12.6", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.4", "@babel/types@^7.23.6", "@babel/types@^7.24.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.24.0.tgz#3b951f435a92e7333eba05b7566fd297960ea1bf" + integrity sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w== dependencies: "@babel/helper-string-parser" "^7.23.4" "@babel/helper-validator-identifier" "^7.22.20" @@ -1331,92 +1331,92 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@8.56.0": - version "8.56.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.56.0.tgz#ef20350fec605a7f7035a01764731b2de0f3782b" - integrity sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A== +"@eslint/js@8.57.0": + version "8.57.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.0.tgz#a5417ae8427873f1dd08b70b3574b453e67b5f7f" + integrity sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g== -"@fluentui/date-time-utilities@^8.5.15": - version "8.5.15" - resolved "https://registry.yarnpkg.com/@fluentui/date-time-utilities/-/date-time-utilities-8.5.15.tgz#0bd445a0aa1208d44fe922bde2c69544e39a74ed" - integrity sha512-offoCjjSTlREPps/2JJeFCxjfhTf1ULoEeKT6D3P02Uerr7HYvYyrIjkv555QCqn+xjrq3GBF5oU2SMglrroUw== +"@fluentui/date-time-utilities@^8.5.16": + version "8.5.16" + resolved "https://registry.yarnpkg.com/@fluentui/date-time-utilities/-/date-time-utilities-8.5.16.tgz#cd8177baaaee57d147b30d621f453b68f502aae0" + integrity sha512-l+mLfJ2VhdHjBpELLLPDaWgT7GMLynm2aqR7SttbEb6Jh7hc/7ck1MWm93RTb3gYVHYai8SENqimNcvIxHt/zg== dependencies: - "@fluentui/set-version" "^8.2.13" + "@fluentui/set-version" "^8.2.14" tslib "^2.1.0" -"@fluentui/dom-utilities@^2.2.13": - version "2.2.13" - resolved "https://registry.yarnpkg.com/@fluentui/dom-utilities/-/dom-utilities-2.2.13.tgz#2dc3d2dab59a44b1bbc0597a81fe7d94a1670f4d" - integrity sha512-mIb1njyLp1sIwZsokHCfqbdgbA1YRHO/BQ5NwIrNH44sp6hWo1d3Ytu2FoQebPU+caIniAXIsTzpa1AsfeOPgQ== +"@fluentui/dom-utilities@^2.2.14": + version "2.2.14" + resolved "https://registry.yarnpkg.com/@fluentui/dom-utilities/-/dom-utilities-2.2.14.tgz#3df0435e428d5e289b957425178749a94c545ea9" + integrity sha512-+4DVm5sNfJh+l8fM+7ylpOkGNZkNr4X1z1uKQPzRJ1PRhlnvc6vLpWNNicGwpjTbgufSrVtGKXwP5sf++r81lg== dependencies: - "@fluentui/set-version" "^8.2.13" + "@fluentui/set-version" "^8.2.14" tslib "^2.1.0" -"@fluentui/font-icons-mdl2@^8.5.29": - version "8.5.29" - resolved "https://registry.yarnpkg.com/@fluentui/font-icons-mdl2/-/font-icons-mdl2-8.5.29.tgz#086b3e308967423b0c7ec0bf70b104294dfedb9e" - integrity sha512-mhsA5umhJbxRmuzoCJAdHLOyitm8Cu1ZCytTP6yaFd/7JNBEJpItlJw0uXqwhVRxP9crIboMsahJu898A9+7Ag== +"@fluentui/font-icons-mdl2@^8.5.32": + version "8.5.32" + resolved "https://registry.yarnpkg.com/@fluentui/font-icons-mdl2/-/font-icons-mdl2-8.5.32.tgz#5560fa74da3455a9da8e283637adb1d5464d2bd9" + integrity sha512-PCZMijJlDQ5Zy8oNb80vUD6I4ORiR03qFgDT8o08mAGu+KzQO96q4jm0rzPRQuI9CO7pDD/6naOo8UVrmhZ2Aw== dependencies: - "@fluentui/set-version" "^8.2.13" - "@fluentui/style-utilities" "^8.10.0" - "@fluentui/utilities" "^8.13.22" + "@fluentui/set-version" "^8.2.14" + "@fluentui/style-utilities" "^8.10.3" + "@fluentui/utilities" "^8.13.24" tslib "^2.1.0" -"@fluentui/foundation-legacy@^8.2.49": - version "8.2.49" - resolved "https://registry.yarnpkg.com/@fluentui/foundation-legacy/-/foundation-legacy-8.2.49.tgz#11712b32e7d7cad3bdaf9ea4dbc836a744ddbf0c" - integrity sha512-slUxpgL0rBW4S/IY+Jz0i5vY/62sBycFuq9gat0RXNT331MU/GXkQm6hzQRkyVXGg7LdsJeewlkFaHYhyQV37A== +"@fluentui/foundation-legacy@^8.2.52": + version "8.2.52" + resolved "https://registry.yarnpkg.com/@fluentui/foundation-legacy/-/foundation-legacy-8.2.52.tgz#e73f54596b183c6f62755a179adda19065c2c3dd" + integrity sha512-tHCD0m58Zja7wN1FTsvj4Gaj0B22xOhRTpyDzyvxRfjFGYPpR2Jgx/y/KRB3JTOX5EfJHAVzInyWZBeN5IfsVA== dependencies: - "@fluentui/merge-styles" "^8.5.14" - "@fluentui/set-version" "^8.2.13" - "@fluentui/style-utilities" "^8.10.0" - "@fluentui/utilities" "^8.13.22" + "@fluentui/merge-styles" "^8.5.15" + "@fluentui/set-version" "^8.2.14" + "@fluentui/style-utilities" "^8.10.3" + "@fluentui/utilities" "^8.13.24" tslib "^2.1.0" -"@fluentui/keyboard-key@^0.4.13": - version "0.4.13" - resolved "https://registry.yarnpkg.com/@fluentui/keyboard-key/-/keyboard-key-0.4.13.tgz#e40adfea8ef87bc5441bab62cbf611ed4d3d082a" - integrity sha512-T00hJwg1ez3SWT+MmyvjsPMcQNg+MrGArQSg0ezMZwiEzOo3n0TC4TuecOyoMlMpJHtm52Y8a3KlE9klZKl35g== +"@fluentui/keyboard-key@^0.4.14": + version "0.4.14" + resolved "https://registry.yarnpkg.com/@fluentui/keyboard-key/-/keyboard-key-0.4.14.tgz#858eb9599a29534363ebf5f4a79413a57e4477b5" + integrity sha512-XzZHcyFEM20H23h3i15UpkHi2AhRBriXPGAHq0Jm98TKFppXehedjjEFuUsh+CyU5JKBhDalWp8TAQ1ArpNzow== dependencies: tslib "^2.1.0" -"@fluentui/merge-styles@^8.5.14": - version "8.5.14" - resolved "https://registry.yarnpkg.com/@fluentui/merge-styles/-/merge-styles-8.5.14.tgz#9ce69cde884275ade2de75365bb0334afbb5a19e" - integrity sha512-OrFEizI56NwO7C9zpEx04WYfrqPmPCWXNtNlXaCd3VW7/MNPQm2wpYqOF2b3xlP5Tnzn6/+w+XR2ym0vLIdM6g== +"@fluentui/merge-styles@^8.5.15": + version "8.5.15" + resolved "https://registry.yarnpkg.com/@fluentui/merge-styles/-/merge-styles-8.5.15.tgz#8327b5ff264a9cd1a2d6a6fd780071914d30edb5" + integrity sha512-4CdKwo4k1Un2QLulpSVIz/KMgLNBMgin4NPyapmKDMVuO1OOxJUqfocubRGNO5x9mKgAMMYwBKGO9i0uxMMpJw== dependencies: - "@fluentui/set-version" "^8.2.13" + "@fluentui/set-version" "^8.2.14" tslib "^2.1.0" "@fluentui/react-file-type-icons@^8.7.9": - version "8.11.0" - resolved "https://registry.yarnpkg.com/@fluentui/react-file-type-icons/-/react-file-type-icons-8.11.0.tgz#b2b7d17f2572cae0110100e3b126460695f76d51" - integrity sha512-ggENOnWEJj7AyrEx9faDTjAebOwh0WBes1fsqv/WarKSCd6IuFuL5E1QOEx4icklsiUn5WH8zqcwoeDMrde5jw== + version "8.11.3" + resolved "https://registry.yarnpkg.com/@fluentui/react-file-type-icons/-/react-file-type-icons-8.11.3.tgz#1a976653a28a7e0a0e327863d21d81b8728cfcce" + integrity sha512-WA4Y8GSwMJSPGE8SrXwJTNXr2Zhd1gnbnFWzTCqPt0qhEcJKjcapnvUJA3GgVFULYnQN83N5pen2HoZy70ZSWA== dependencies: - "@fluentui/set-version" "^8.2.13" - "@fluentui/style-utilities" "^8.10.0" + "@fluentui/set-version" "^8.2.14" + "@fluentui/style-utilities" "^8.10.3" tslib "^2.1.0" -"@fluentui/react-focus@^8.8.36": - version "8.8.36" - resolved "https://registry.yarnpkg.com/@fluentui/react-focus/-/react-focus-8.8.36.tgz#208363d341e258da026e15767886f46db3279a99" - integrity sha512-PZ3xO7+n4peIgYNWPieGvyjSMtE4f6k4OjwBCuobV2wHzFcTNECTcFzfO3Mr3JOdfT7/7VzWBv65/jJUO05n2Q== +"@fluentui/react-focus@^8.8.40": + version "8.8.40" + resolved "https://registry.yarnpkg.com/@fluentui/react-focus/-/react-focus-8.8.40.tgz#2124a848673b2f35c5d8aac1360cc3eb45431ade" + integrity sha512-ha0CbLv5EIbjYCtQky6LVZObxOeMfhixrgrzfXm3Ta2eGs1NyZRDm1VeM6acOolWB/8QiN/CbdGckjALli8L2g== dependencies: - "@fluentui/keyboard-key" "^0.4.13" - "@fluentui/merge-styles" "^8.5.14" - "@fluentui/set-version" "^8.2.13" - "@fluentui/style-utilities" "^8.10.0" - "@fluentui/utilities" "^8.13.22" + "@fluentui/keyboard-key" "^0.4.14" + "@fluentui/merge-styles" "^8.5.15" + "@fluentui/set-version" "^8.2.14" + "@fluentui/style-utilities" "^8.10.3" + "@fluentui/utilities" "^8.13.24" tslib "^2.1.0" -"@fluentui/react-hooks@^8.6.34": - version "8.6.34" - resolved "https://registry.yarnpkg.com/@fluentui/react-hooks/-/react-hooks-8.6.34.tgz#8f7acc1305c1f36409689d549345ad1606d8886e" - integrity sha512-FtfvsOHuNz4JfmACAUpJKyh/62i14s5K8lk4GGoe4soETyaKAlmYX9HbBOrFi9FkKk6scrFytLCViQ8sR15bDA== +"@fluentui/react-hooks@^8.6.36": + version "8.6.36" + resolved "https://registry.yarnpkg.com/@fluentui/react-hooks/-/react-hooks-8.6.36.tgz#d10b3ba289e38c489c238dd4f76b8fe2c469b81a" + integrity sha512-kI0Z4Q4xHUs4SOmmI5n5OH5fPckqMSCovTRpiuxzCO2TNzLmfC861+nqf4Ygw/ChqNm2gWNZZfUADfnNAEsq+Q== dependencies: - "@fluentui/react-window-provider" "^2.2.17" - "@fluentui/set-version" "^8.2.13" - "@fluentui/utilities" "^8.13.22" + "@fluentui/react-window-provider" "^2.2.18" + "@fluentui/set-version" "^8.2.14" + "@fluentui/utilities" "^8.13.24" tslib "^2.1.0" "@fluentui/react-portal-compat-context@^9.0.11": @@ -1426,71 +1426,71 @@ dependencies: "@swc/helpers" "^0.5.1" -"@fluentui/react-window-provider@^2.2.17": - version "2.2.17" - resolved "https://registry.yarnpkg.com/@fluentui/react-window-provider/-/react-window-provider-2.2.17.tgz#2d27517b927e67ee0863da1cf1b70e621ae0d3fd" - integrity sha512-MFaeF/hJGoXiJXjkRZ41IQmYyEnU3uCyNtoaT6YlzAE3KAMV4SvGzcSXVbgx1ZPMXMSnAJt12qX02F5XEBusbA== +"@fluentui/react-window-provider@^2.2.18": + version "2.2.18" + resolved "https://registry.yarnpkg.com/@fluentui/react-window-provider/-/react-window-provider-2.2.18.tgz#8881f1f5f5d70010d60f54965a7c6c917e3e0f39" + integrity sha512-nBKqxd0P8NmIR0qzFvka1urE2LVbUm6cse1I1T7TcOVNYa5jDf5BrO06+JRZfwbn00IJqOnIVoP0qONqceypWQ== dependencies: - "@fluentui/set-version" "^8.2.13" + "@fluentui/set-version" "^8.2.14" tslib "^2.1.0" "@fluentui/react@^8.114.1": - version "8.114.1" - resolved "https://registry.yarnpkg.com/@fluentui/react/-/react-8.114.1.tgz#bdc02d2c3bfd1482ea9317f9066206dae0255b73" - integrity sha512-Ul3UROH/bPDPy7dSjpcWmvma2raLNXCTgQrqbZ4obwAC3CsW0jMuk+aLbK0N4y/DzHhwy/nI7VOyQAA6NA5BOg== - dependencies: - "@fluentui/date-time-utilities" "^8.5.15" - "@fluentui/font-icons-mdl2" "^8.5.29" - "@fluentui/foundation-legacy" "^8.2.49" - "@fluentui/merge-styles" "^8.5.14" - "@fluentui/react-focus" "^8.8.36" - "@fluentui/react-hooks" "^8.6.34" + version "8.115.6" + resolved "https://registry.yarnpkg.com/@fluentui/react/-/react-8.115.6.tgz#59ff8f2455e93bc08cb87742ba04c36306c675f7" + integrity sha512-lao6u6AfA9uE+jWsmmRriCYXlQ9IU3W2jlapJiOJGyQvF9JGdVCyKDi2w4dIvsJyhA4ucfcKqg+9EgyrgbWcNg== + dependencies: + "@fluentui/date-time-utilities" "^8.5.16" + "@fluentui/font-icons-mdl2" "^8.5.32" + "@fluentui/foundation-legacy" "^8.2.52" + "@fluentui/merge-styles" "^8.5.15" + "@fluentui/react-focus" "^8.8.40" + "@fluentui/react-hooks" "^8.6.36" "@fluentui/react-portal-compat-context" "^9.0.11" - "@fluentui/react-window-provider" "^2.2.17" - "@fluentui/set-version" "^8.2.13" - "@fluentui/style-utilities" "^8.10.0" - "@fluentui/theme" "^2.6.39" - "@fluentui/utilities" "^8.13.22" + "@fluentui/react-window-provider" "^2.2.18" + "@fluentui/set-version" "^8.2.14" + "@fluentui/style-utilities" "^8.10.3" + "@fluentui/theme" "^2.6.41" + "@fluentui/utilities" "^8.13.24" "@microsoft/load-themed-styles" "^1.10.26" tslib "^2.1.0" -"@fluentui/set-version@^8.2.13": - version "8.2.13" - resolved "https://registry.yarnpkg.com/@fluentui/set-version/-/set-version-8.2.13.tgz#27b3123e12e2bd3043a6f6c9ce6ee4add001a5ae" - integrity sha512-xzfxKGNP/N8/hWayv32Jt6EhP7XOe0myFb2R15ll2xUnLypdLVj85y3nfu4EJb+jsTvev8uHEiz540KcZ+6EOg== +"@fluentui/set-version@^8.2.14": + version "8.2.14" + resolved "https://registry.yarnpkg.com/@fluentui/set-version/-/set-version-8.2.14.tgz#e5e63e77e1016a910b8495dfa37505bdbe91059e" + integrity sha512-f/QWJnSeyfAjGAqq57yjMb6a5ejPlwfzdExPmzFBuEOuupi8hHbV8Yno12XJcTW4I0KXEQGw+PUaM1aOf/j7jw== dependencies: tslib "^2.1.0" -"@fluentui/style-utilities@^8.10.0": - version "8.10.0" - resolved "https://registry.yarnpkg.com/@fluentui/style-utilities/-/style-utilities-8.10.0.tgz#5067c1e988cbed7daee1e711d7d5daf304b66f87" - integrity sha512-hyUdlUVdpg/0Db3kS0DtGXoafXnRFH2aM3cE50+/BEjs/SB4wGnkh+xpSq6dd0zGTmOOHaAfxqQYPa664sk/sw== +"@fluentui/style-utilities@^8.10.3": + version "8.10.3" + resolved "https://registry.yarnpkg.com/@fluentui/style-utilities/-/style-utilities-8.10.3.tgz#3defa4653b6685f9fdfcc157a2357cf192c7da0b" + integrity sha512-pyO9BGkwIxXaIMVT6ma98GIZAgTjGc0LZ5iUai9GLIrFLQWnIKnS//hgUx8qG4AecUeqZ26Wb0e+Ale9NyPQCQ== dependencies: - "@fluentui/merge-styles" "^8.5.14" - "@fluentui/set-version" "^8.2.13" - "@fluentui/theme" "^2.6.39" - "@fluentui/utilities" "^8.13.22" + "@fluentui/merge-styles" "^8.5.15" + "@fluentui/set-version" "^8.2.14" + "@fluentui/theme" "^2.6.41" + "@fluentui/utilities" "^8.13.24" "@microsoft/load-themed-styles" "^1.10.26" tslib "^2.1.0" -"@fluentui/theme@^2.6.39": - version "2.6.39" - resolved "https://registry.yarnpkg.com/@fluentui/theme/-/theme-2.6.39.tgz#196f9be9ec940ca94771505916372b8af70e92f1" - integrity sha512-6mglwir7G5GnKJVyQ6TbAVw0qj5oyeYJVI3fs/CZNFF6rD8j0btXMFfqs4Aec5GTKZ+CE6WSac59ok3irFCZzg== +"@fluentui/theme@^2.6.41": + version "2.6.41" + resolved "https://registry.yarnpkg.com/@fluentui/theme/-/theme-2.6.41.tgz#ab73cad6c0895b024c4f94d6f66945c8a91cb3bc" + integrity sha512-h9RguEzqzJ0+59ys5Kkp7JtsjhDUxBLmQunu5rpHp5Mp788OtEjI/n1a9FIcOAL/priPSQwXN7RbuDpeP7+aSw== dependencies: - "@fluentui/merge-styles" "^8.5.14" - "@fluentui/set-version" "^8.2.13" - "@fluentui/utilities" "^8.13.22" + "@fluentui/merge-styles" "^8.5.15" + "@fluentui/set-version" "^8.2.14" + "@fluentui/utilities" "^8.13.24" tslib "^2.1.0" -"@fluentui/utilities@^8.13.22": - version "8.13.22" - resolved "https://registry.yarnpkg.com/@fluentui/utilities/-/utilities-8.13.22.tgz#0126978eb2002c85082c6d07f441143f5739abaa" - integrity sha512-iYVtMOl8DGrXl6Wke/ft1S31VeegW2aNLpPdF/iqanv/zejm4Z7JDrGpXDf4wjEQKzlK/XNDjBiQssM6MUsKAQ== +"@fluentui/utilities@^8.13.24": + version "8.13.24" + resolved "https://registry.yarnpkg.com/@fluentui/utilities/-/utilities-8.13.24.tgz#0f093889e88be817bd7f7c6a096d563063f7e3c8" + integrity sha512-/jo6hWCzTGCx06l2baAMwsjjBZ/dyMouls53uNaQLUGUUhUwXh/DcDDXMqLRJB3MaH9zvgfvRw61iKmm2s9fIA== dependencies: - "@fluentui/dom-utilities" "^2.2.13" - "@fluentui/merge-styles" "^8.5.14" - "@fluentui/set-version" "^8.2.13" + "@fluentui/dom-utilities" "^2.2.14" + "@fluentui/merge-styles" "^8.5.15" + "@fluentui/set-version" "^8.2.14" tslib "^2.1.0" "@gar/promisify@^1.0.1", "@gar/promisify@^1.1.3": @@ -1498,13 +1498,13 @@ resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6" integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== -"@humanwhocodes/config-array@^0.11.13": - version "0.11.13" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.13.tgz#075dc9684f40a531d9b26b0822153c1e832ee297" - integrity sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ== +"@humanwhocodes/config-array@^0.11.14": + version "0.11.14" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.14.tgz#d78e481a039f7566ecc9660b4ea7fe6b1fec442b" + integrity sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg== dependencies: - "@humanwhocodes/object-schema" "^2.0.1" - debug "^4.1.1" + "@humanwhocodes/object-schema" "^2.0.2" + debug "^4.3.1" minimatch "^3.0.5" "@humanwhocodes/module-importer@^1.0.1": @@ -1512,10 +1512,10 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== -"@humanwhocodes/object-schema@^2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz#e5211452df060fa8522b55c7b3c0c4d1981cb044" - integrity sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw== +"@humanwhocodes/object-schema@^2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz#d9fae00a2d5cb40f92cfe64b47ad749fbc38f917" + integrity sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw== "@isaacs/cliui@^8.0.2": version "8.0.2" @@ -1793,23 +1793,23 @@ chalk "^4.0.0" "@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": - version "0.3.3" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" - integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== + version "0.3.4" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.4.tgz#9b18145d26cf33d08576cf4c7665b28554480ed7" + integrity sha512-Oud2QPM5dHviZNn4y/WhhYKSXksv+1xLEIsNrAbGcFzUN3ubqWRFT5gwPchNc5NuzILOU4tPBDTZ4VwhL8Y7cw== dependencies: "@jridgewell/set-array" "^1.0.1" "@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/trace-mapping" "^0.3.9" "@jridgewell/resolve-uri@^3.1.0": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" - integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== + version "3.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" + integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== "@jridgewell/set-array@^1.0.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" - integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== + version "1.2.1" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" + integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== "@jridgewell/source-map@^0.3.3": version "0.3.5" @@ -1825,9 +1825,9 @@ integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.20", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.20" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz#72e45707cf240fa6b081d0366f8265b0cd10197f" - integrity sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q== + version "0.3.23" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.23.tgz#afc96847f3f07841477f303eed687707a5aacd80" + integrity sha512-9/4foRoUKp8s96tSkh8DlAAc5A0Ty8vLXld+l9gjKKY6ckwI8G15f0hskGmuLZu78ZlGa1vtsfOa+lnB4vG6Jg== dependencies: "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" @@ -1999,9 +1999,9 @@ picomatch "^2.2.2" "@rushstack/eslint-patch@^1.1.0": - version "1.6.1" - resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.6.1.tgz#9ab8f811930d7af3e3d549183a50884f9eb83f36" - integrity sha512-UY+FGM/2jjMkzQLn8pxcHGMaVLh9aEitG3zY2CiY7XHdLiz3bZOwa6oDxNqEMv7zZkV+cj5DOdz0cQ1BP5Hjgw== + version "1.7.2" + resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.7.2.tgz#2d4260033e199b3032a08b41348ac10de21c47e9" + integrity sha512-RbhOOTCNoCrbfkRyoXODZp75MlpiHMgbE5MEBZAnnnLyQNgrigEj4p0lzsMDyc1zVsJDLrivB58tgg3emX0eEA== "@sinclair/typebox@^0.24.1": version "0.24.51" @@ -2141,9 +2141,9 @@ loader-utils "^2.0.0" "@swc/helpers@^0.5.1": - version "0.5.3" - resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.3.tgz#98c6da1e196f5f08f977658b80d6bd941b5f294f" - integrity sha512-FaruWX6KdudYloq1AHD/4nU+UsMTdNE8CKyrseXWEcgjDAbvkwJg2QGPAnfIJLIWsjZOSPLOAykK6fuYp4vp4A== + version "0.5.6" + resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.6.tgz#d16d8566b7aea2bef90d059757e2d77f48224160" + integrity sha512-aYX01Ke9hunpoCexYAgQucEpARGQ5w/cqHFrIR+e9gdKb1QWTsVJuTJ2ozQzIAxLyRQe/m+2RqzkyOOGiMKRQA== dependencies: tslib "^2.4.0" @@ -2176,9 +2176,9 @@ pretty-format "^27.0.2" "@testing-library/jest-dom@^6.2.0": - version "6.2.0" - resolved "https://registry.yarnpkg.com/@testing-library/jest-dom/-/jest-dom-6.2.0.tgz#b572bd5cd6b29314487bac7ba393188e4987b4f7" - integrity sha512-+BVQlJ9cmEn5RDMUS8c2+TU6giLvzaHZ8sU/x0Jj7fk+6/46wPdwlgOPcpxS17CjcanBi/3VmGMqVr2rmbUmNw== + version "6.4.2" + resolved "https://registry.yarnpkg.com/@testing-library/jest-dom/-/jest-dom-6.4.2.tgz#38949f6b63722900e2d75ba3c6d9bf8cffb3300e" + integrity sha512-CzqH0AFymEMG48CpzXFriYYkOjk6ZGPCLMhW9e9jg3KMCn5OfJecF8GtGW7yGfR/IgCe3SX8BSwjdzI6BBbZLw== dependencies: "@adobe/css-tools" "^4.3.2" "@babel/runtime" "^7.9.2" @@ -2190,9 +2190,9 @@ redent "^3.0.0" "@testing-library/react@^14.0.0": - version "14.1.2" - resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-14.1.2.tgz#a2b9e9ee87721ec9ed2d7cfc51cc04e474537c32" - integrity sha512-z4p7DVBTPjKM5qDZ0t5ZjzkpSNb+fZy1u6bzO7kk8oeGagpPCAtgh4cx1syrfp7a+QWkM021jGqjJaxJJnXAZg== + version "14.2.1" + resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-14.2.1.tgz#bf69aa3f71c36133349976a4a2da3687561d8310" + integrity sha512-sGdjws32ai5TLerhvzThYFbpnF9XtL65Cjf+gB0Dhr29BGqK+mAeN7SURSdu+eqgET4ANcWoC7FQpkaiGvBr+A== dependencies: "@babel/runtime" "^7.12.5" "@testing-library/dom" "^9.0.0" @@ -2307,14 +2307,14 @@ "@types/estree" "*" "@types/eslint@*", "@types/eslint@^7.29.0 || ^8.4.1": - version "8.56.1" - resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.56.1.tgz#988cabb39c973e9200f35fdbb29d17992965bb08" - integrity sha512-18PLWRzhy9glDQp3+wOgfLYRWlhgX0azxgJ63rdpoUHyrC9z0f5CkFburjQx4uD7ZCruw85ZtMt6K+L+R8fLJQ== + version "8.56.5" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.56.5.tgz#94b88cab77588fcecdd0771a6d576fa1c0af9d02" + integrity sha512-u5/YPJHo1tvkSF2CE0USEkxon82Z5DBy2xR+qfyYNszpX9qcs4sT6uq2kBbj4BXY1+DBGDPnrhMZV3pKWGNukw== dependencies: "@types/estree" "*" "@types/json-schema" "*" -"@types/estree@*", "@types/estree@^1.0.0": +"@types/estree@*", "@types/estree@^1.0.5": version "1.0.5" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== @@ -2325,9 +2325,9 @@ integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== "@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.33": - version "4.17.41" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.41.tgz#5077defa630c2e8d28aa9ffc2c01c157c305bef6" - integrity sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA== + version "4.17.43" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.43.tgz#10d8444be560cb789c4735aea5eac6e5af45df54" + integrity sha512-oaYtiBirUOPQGSWNGPWnzyAFJ0BP3cwvN4oWZQY+zUBwpVIGsKUkpBpSztp74drYcjavs7SKFZ4DX1V2QeN8rg== dependencies: "@types/node" "*" "@types/qs" "*" @@ -2352,9 +2352,9 @@ "@types/node" "*" "@types/hast@^2.0.0": - version "2.3.9" - resolved "https://registry.yarnpkg.com/@types/hast/-/hast-2.3.9.tgz#a9a1b5bbce46e8a1312e977364bacabc8e93d2cf" - integrity sha512-pTHyNlaMD/oKJmS+ZZUyFUcsZeBZpC0lmGquw98CqRVNgAdJZJeD7GoeLiT6Xbx5rU9VCjSt0RwEvDgzh4obFw== + version "2.3.10" + resolved "https://registry.yarnpkg.com/@types/hast/-/hast-2.3.10.tgz#5c9d9e0b304bbb8879b857225c5ebab2d81d7643" + integrity sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw== dependencies: "@types/unist" "^2" @@ -2403,9 +2403,9 @@ "@types/istanbul-lib-report" "*" "@types/jest@^29.5.0": - version "29.5.11" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.5.11.tgz#0c13aa0da7d0929f078ab080ae5d4ced80fa2f2c" - integrity sha512-S2mHmYIVe13vrm6q4kN6fLYYAka15ALQki/vgDC3mIukEOx8WJlv0kQPM+d4w8Gp6u0uSdKND04IlTXBv0rwnQ== + version "29.5.12" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.5.12.tgz#7f7dc6eb4cf246d2474ed78744b05d06ce025544" + integrity sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw== dependencies: expect "^29.0.0" pretty-format "^29.0.0" @@ -2455,9 +2455,9 @@ "@types/node" "*" "@types/node@*", "@types/node@^20.4.2": - version "20.10.7" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.10.7.tgz#40fe8faf25418a75de9fe68a8775546732a3a901" - integrity sha512-fRbIKb8C/Y2lXxB5eVMj4IU7xpdox0Lh8bUPEdtLysaylsml1hOOx1+STloRs/B9nf7C6kPRmmg/V7aQW7usNg== + version "20.11.24" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.24.tgz#cc207511104694e84e9fb17f9a0c4c42d4517792" + integrity sha512-Kza43ewS3xoLgCEpQrsT+xRo/EJej1y0kVYGiLFE1NEODXGzTfwiC6tXTLMQskn1X4/Rjlh0MQUvx9W+L9long== dependencies: undici-types "~5.26.4" @@ -2487,9 +2487,9 @@ integrity sha512-hroOstUScF6zhIi+5+x0dzqrHA1EJi+Irri6b1fxolMTqqHIV/Cg77EtnQcZqZCu8hR3mX2BzIxN4/GzI68Kfw== "@types/qs@*": - version "6.9.11" - resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.11.tgz#208d8a30bc507bd82e03ada29e4732ea46a6bbda" - integrity sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ== + version "6.9.12" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.12.tgz#afa96b383a3a6fdc859453a1892d41b607fc7756" + integrity sha512-bZcOkJ6uWrL0Qb2NAWKa7TBU+mJHPzhx9jjLL1KHF+XpzEcR7EXHvjbHlGtR/IsP1vyPrehuS6XqkmaePy//mg== "@types/range-parser@*": version "1.2.7" @@ -2497,16 +2497,16 @@ integrity sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ== "@types/react-dom@^18.0.0", "@types/react-dom@^18.2.6": - version "18.2.18" - resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.2.18.tgz#16946e6cd43971256d874bc3d0a72074bb8571dd" - integrity sha512-TJxDm6OfAX2KJWJdMEVTwWke5Sc/E/RlnPGvGfS0W7+6ocy2xhDVQVh/KvC2Uf7kACs+gDytdusDSdWfWkaNzw== + version "18.2.19" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.2.19.tgz#b84b7c30c635a6c26c6a6dfbb599b2da9788be58" + integrity sha512-aZvQL6uUbIJpjZk4U8JZGbau9KDeAwMfmhyWorxgBkqDIEf6ROjRozcmPIicqsUwPUjbkDfHKgGee1Lq65APcA== dependencies: "@types/react" "*" "@types/react@*", "@types/react@^18.0.25": - version "18.2.47" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.47.tgz#85074b27ab563df01fbc3f68dc64bf7050b0af40" - integrity sha512-xquNkkOirwyCgoClNk85BjP+aqnIS+ckAJ8i37gAbDs14jfW/J23f2GItAf33oiUPQnqNMALiFeoM9Y5mbjpVQ== + version "18.2.61" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.61.tgz#5607308495037436779939ec0348a5816c08799d" + integrity sha512-NURTN0qNnJa7O/k4XUkEW2yfygA+NxS0V5h1+kp9jPwhzZy95q3ADoGMP0+JypMhrZBTTgjKAUlTctde1zzeQA== dependencies: "@types/prop-types" "*" "@types/scheduler" "*" @@ -2530,9 +2530,9 @@ integrity sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A== "@types/semver@^7.3.12": - version "7.5.6" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.6.tgz#c65b2bfce1bec346582c07724e3f8c1017a20339" - integrity sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A== + version "7.5.8" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.8.tgz#8268a8c57a3e4abd25c165ecd36237db7948a55e" + integrity sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ== "@types/send@*": version "0.17.4" @@ -3081,13 +3081,13 @@ aria-query@^5.0.0, aria-query@^5.3.0: dependencies: dequal "^2.0.3" -array-buffer-byte-length@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz#fabe8bc193fea865f317fe7807085ee0dee5aead" - integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A== +array-buffer-byte-length@^1.0.0, array-buffer-byte-length@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz#1e5583ec16763540a27ae52eed99ff899223568f" + integrity sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg== dependencies: - call-bind "^1.0.2" - is-array-buffer "^3.0.1" + call-bind "^1.0.5" + is-array-buffer "^3.0.4" array-flatten@1.1.1: version "1.1.1" @@ -3110,16 +3110,27 @@ array-union@^2.1.0: resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== -array.prototype.findlastindex@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz#b37598438f97b579166940814e2c0493a4f50207" - integrity sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA== +array.prototype.filter@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array.prototype.filter/-/array.prototype.filter-1.0.3.tgz#423771edeb417ff5914111fff4277ea0624c0d0e" + integrity sha512-VizNcj/RGJiUyQBgzwxzE5oHdeuXY5hSbbmKMlphj1cy1Vl7Pn2asCGbSrru6hSQjmCzqTBPVWAF/whmEOVHbw== dependencies: call-bind "^1.0.2" define-properties "^1.2.0" es-abstract "^1.22.1" - es-shim-unscopables "^1.0.0" - get-intrinsic "^1.2.1" + es-array-method-boxes-properly "^1.0.0" + is-string "^1.0.7" + +array.prototype.findlastindex@^1.2.3: + version "1.2.4" + resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.4.tgz#d1c50f0b3a9da191981ff8942a0aedd82794404f" + integrity sha512-hzvSHUshSpCflDR1QMUBLHGHP1VIEBegT4pix9H/Z92Xw3ySoy6c2qh7lJWTJnRJ8JCZ9bJNCgTyYaJGcJu6xQ== + dependencies: + call-bind "^1.0.5" + define-properties "^1.2.1" + es-abstract "^1.22.3" + es-errors "^1.3.0" + es-shim-unscopables "^1.0.2" array.prototype.flat@^1.3.1, array.prototype.flat@^1.3.2: version "1.3.2" @@ -3153,27 +3164,28 @@ array.prototype.reduce@^1.0.6: is-string "^1.0.7" array.prototype.tosorted@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.2.tgz#620eff7442503d66c799d95503f82b475745cefd" - integrity sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg== + version "1.1.3" + resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.3.tgz#c8c89348337e51b8a3c48a9227f9ce93ceedcba8" + integrity sha512-/DdH4TiTmOKzyQbp/eadcCVexiCb36xJg7HshYOYJnNZFDj33GEv0P7GxsynpShhq4OLYJzbGcBDkLsDt7MnNg== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - es-shim-unscopables "^1.0.0" - get-intrinsic "^1.2.1" + call-bind "^1.0.5" + define-properties "^1.2.1" + es-abstract "^1.22.3" + es-errors "^1.1.0" + es-shim-unscopables "^1.0.2" -arraybuffer.prototype.slice@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz#98bd561953e3e74bb34938e77647179dfe6e9f12" - integrity sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw== +arraybuffer.prototype.slice@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz#097972f4255e41bc3425e37dc3f6421cf9aefde6" + integrity sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A== dependencies: - array-buffer-byte-length "^1.0.0" - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - get-intrinsic "^1.2.1" - is-array-buffer "^3.0.2" + array-buffer-byte-length "^1.0.1" + call-bind "^1.0.5" + define-properties "^1.2.1" + es-abstract "^1.22.3" + es-errors "^1.2.1" + get-intrinsic "^1.2.3" + is-array-buffer "^3.0.4" is-shared-array-buffer "^1.0.2" arrify@^1.0.1: @@ -3219,21 +3231,23 @@ at-least-node@^1.0.0: integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== autoprefixer@^10.4.13: - version "10.4.16" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.16.tgz#fad1411024d8670880bdece3970aa72e3572feb8" - integrity sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ== + version "10.4.17" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.17.tgz#35cd5695cbbe82f536a50fa025d561b01fdec8be" + integrity sha512-/cpVNRLSfhOtcGflT13P2794gVSgmPgTR+erw5ifnMLZb0UnSlkK4tquLmkd3BhA+nLo5tX8Cu0upUsGKvKbmg== dependencies: - browserslist "^4.21.10" - caniuse-lite "^1.0.30001538" - fraction.js "^4.3.6" + browserslist "^4.22.2" + caniuse-lite "^1.0.30001578" + fraction.js "^4.3.7" normalize-range "^0.1.2" picocolors "^1.0.0" postcss-value-parser "^4.2.0" -available-typed-arrays@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" - integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== +available-typed-arrays@^1.0.6, available-typed-arrays@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" + integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== + dependencies: + possible-typed-array-names "^1.0.0" axe-core@=4.7.0: version "4.7.0" @@ -3306,29 +3320,29 @@ babel-plugin-named-asset-import@^0.3.8: resolved "https://registry.yarnpkg.com/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.8.tgz#6b7fa43c59229685368683c28bc9734f24524cc2" integrity sha512-WXiAc++qo7XcJ1ZnTYGtLxmBCVbddAml3CEXgWaBzNzLNoxtQ8AiGEFDMOhot9XjTCQbvP5E77Fj9Gk924f00Q== -babel-plugin-polyfill-corejs2@^0.4.7: - version "0.4.7" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.7.tgz#679d1b94bf3360f7682e11f2cb2708828a24fe8c" - integrity sha512-LidDk/tEGDfuHW2DWh/Hgo4rmnw3cduK6ZkOI1NPFceSK3n/yAGeOsNT7FLnSGHkXj3RHGSEVkN3FsCTY6w2CQ== +babel-plugin-polyfill-corejs2@^0.4.8: + version "0.4.8" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.8.tgz#dbcc3c8ca758a290d47c3c6a490d59429b0d2269" + integrity sha512-OtIuQfafSzpo/LhnJaykc0R/MMnuLSSVjVYy9mHArIZ9qTCSZ6TpWCuEKZYVoN//t8HqBNScHrOtCrIK5IaGLg== dependencies: "@babel/compat-data" "^7.22.6" - "@babel/helper-define-polyfill-provider" "^0.4.4" + "@babel/helper-define-polyfill-provider" "^0.5.0" semver "^6.3.1" -babel-plugin-polyfill-corejs3@^0.8.7: - version "0.8.7" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.7.tgz#941855aa7fdaac06ed24c730a93450d2b2b76d04" - integrity sha512-KyDvZYxAzkC0Aj2dAPyDzi2Ym15e5JKZSK+maI7NAwSqofvuFglbSsxE7wUOvTg9oFVnHMzVzBKcqEb4PJgtOA== +babel-plugin-polyfill-corejs3@^0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.9.0.tgz#9eea32349d94556c2ad3ab9b82ebb27d4bf04a81" + integrity sha512-7nZPG1uzK2Ymhy/NbaOWTg3uibM2BmGASS4vHS4szRZAIR8R6GwA/xAujpdrXU5iyklrimWnLWU+BLF9suPTqg== dependencies: - "@babel/helper-define-polyfill-provider" "^0.4.4" - core-js-compat "^3.33.1" + "@babel/helper-define-polyfill-provider" "^0.5.0" + core-js-compat "^3.34.0" -babel-plugin-polyfill-regenerator@^0.5.4: - version "0.5.4" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.4.tgz#c6fc8eab610d3a11eb475391e52584bacfc020f4" - integrity sha512-S/x2iOCvDaCASLYsOOgWOq4bCfKYVqvO/uxjkaYyZ3rVsVE3CeAI/c84NpyuBBymEgNvHgjEot3a9/Z/kXvqsg== +babel-plugin-polyfill-regenerator@^0.5.5: + version "0.5.5" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.5.tgz#8b0c8fc6434239e5d7b8a9d1f832bb2b0310f06a" + integrity sha512-OJGYZlhLqBh2DDHeqAxWB1XIvr49CxiJ2gIt61/PU55CQK4Z58OzMqjDe1zwQdQk+rBYsRc+1rJmdajM3gimHg== dependencies: - "@babel/helper-define-polyfill-provider" "^0.4.4" + "@babel/helper-define-polyfill-provider" "^0.5.0" babel-plugin-transform-react-remove-prop-types@^0.4.24: version "0.4.24" @@ -3424,13 +3438,13 @@ bluebird@^3.7.2: resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== -body-parser@1.20.1: - version "1.20.1" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.1.tgz#b1812a8912c195cd371a3ee5e66faa2338a5c668" - integrity sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw== +body-parser@1.20.2: + version "1.20.2" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.2.tgz#6feb0e21c4724d06de7ff38da36dad4f57a747fd" + integrity sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA== dependencies: bytes "3.1.2" - content-type "~1.0.4" + content-type "~1.0.5" debug "2.6.9" depd "2.0.0" destroy "1.2.0" @@ -3438,7 +3452,7 @@ body-parser@1.20.1: iconv-lite "0.4.24" on-finished "2.4.1" qs "6.11.0" - raw-body "2.5.1" + raw-body "2.5.2" type-is "~1.6.18" unpipe "1.0.0" @@ -3482,13 +3496,13 @@ browser-process-hrtime@^1.0.0: resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== -browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.18.1, browserslist@^4.21.10, browserslist@^4.21.4, browserslist@^4.22.2: - version "4.22.2" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.2.tgz#704c4943072bd81ea18997f3bd2180e89c77874b" - integrity sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A== +browserslist@^4.0.0, browserslist@^4.18.1, browserslist@^4.21.10, browserslist@^4.21.4, browserslist@^4.22.2, browserslist@^4.22.3: + version "4.23.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.0.tgz#8f3acc2bbe73af7213399430890f86c63a5674ab" + integrity sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ== dependencies: - caniuse-lite "^1.0.30001565" - electron-to-chromium "^1.4.601" + caniuse-lite "^1.0.30001587" + electron-to-chromium "^1.4.668" node-releases "^2.0.14" update-browserslist-db "^1.0.13" @@ -3567,14 +3581,16 @@ cacache@^16.1.0: tar "^6.1.11" unique-filename "^2.0.0" -call-bind@^1.0.0, call-bind@^1.0.2, call-bind@^1.0.4, call-bind@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.5.tgz#6fa2b7845ce0ea49bf4d8b9ef64727a2c2e2e513" - integrity sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ== +call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6, call-bind@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" + integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" function-bind "^1.1.2" - get-intrinsic "^1.2.1" - set-function-length "^1.1.1" + get-intrinsic "^1.2.4" + set-function-length "^1.2.1" callsites@^3.0.0: version "3.1.0" @@ -3623,10 +3639,10 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001538, caniuse-lite@^1.0.30001565: - version "1.0.30001576" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001576.tgz#893be772cf8ee6056d6c1e2d07df365b9ec0a5c4" - integrity sha512-ff5BdakGe2P3SQsMsiqmt1Lc8221NR1VzHj5jXN5vBny9A6fpze94HiVV/n7XRosOlsShJcvMv5mdnpjOGCEgg== +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001578, caniuse-lite@^1.0.30001587: + version "1.0.30001591" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001591.tgz#16745e50263edc9f395895a7cd468b9f3767cf33" + integrity sha512-PCzRMei/vXjJyL5mJtzNiUCKP59dm8Apqc3PH8gJkMnMXZGox93RbE76jHsmLwmIo6/3nsYIpJtx0O7u5PqFuQ== case-sensitive-paths-webpack-plugin@^2.4.0: version "2.4.0" @@ -3684,9 +3700,9 @@ check-types@^11.2.3: integrity sha512-+67P1GkJRaxQD6PKK0Et9DhwQB+vGg3PM5+aavopCpZT1lj9jeqfvpgTLAWErNj8qApkkmXlu/Ug74kmhagkXg== chokidar@^3.4.2, chokidar@^3.5.3: - version "3.5.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" - integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + version "3.6.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" + integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== dependencies: anymatch "~3.1.2" braces "~3.0.2" @@ -3919,7 +3935,7 @@ content-disposition@0.5.4: dependencies: safe-buffer "5.2.1" -content-type@~1.0.4: +content-type@~1.0.4, content-type@~1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== @@ -3944,22 +3960,22 @@ cookie@0.5.0: resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== -core-js-compat@^3.31.0, core-js-compat@^3.33.1: - version "3.35.0" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.35.0.tgz#c149a3d1ab51e743bc1da61e39cb51f461a41873" - integrity sha512-5blwFAddknKeNgsjBzilkdQ0+YK8L1PfqPYq40NOYMYFSS38qj+hpTcLLWwpIwA2A5bje/x5jmVn2tzUMg9IVw== +core-js-compat@^3.31.0, core-js-compat@^3.34.0: + version "3.36.0" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.36.0.tgz#087679119bc2fdbdefad0d45d8e5d307d45ba190" + integrity sha512-iV9Pd/PsgjNWBXeq8XRtWVSgz2tKAfhfvBs7qxYty+RlRd+OCksaWmOnc4JKrTc1cToXL1N0s3l/vwlxPtdElw== dependencies: - browserslist "^4.22.2" + browserslist "^4.22.3" core-js-pure@^3.23.3, core-js-pure@^3.30.2, core-js-pure@^3.6.5: - version "3.35.0" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.35.0.tgz#4660033304a050215ae82e476bd2513a419fbb34" - integrity sha512-f+eRYmkou59uh7BPcyJ8MC76DiGhspj1KMxVIcF24tzP8NA9HVa1uC7BTW2tgx7E1QVCzDzsgp7kArrzhlz8Ew== + version "3.36.0" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.36.0.tgz#ffb34330b14e594d6a9835cf5843b4123f1d95db" + integrity sha512-cN28qmhRNgbMZZMc/RFu5w8pK9VJzpb2rJVR/lHuZJKwmXnoWOpXmMkxqBB514igkp1Hu8WGROsiOAzUcKdHOQ== core-js@^3.19.2: - version "3.35.0" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.35.0.tgz#58e651688484f83c34196ca13f099574ee53d6b4" - integrity sha512-ntakECeqg81KqMueeGJ79Q5ZgQNR+6eaE8sxGCx62zMbAIj65q+uYvatToew3m6eAGdU4gNZwpZ34NMe4GYswg== + version "3.36.0" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.36.0.tgz#e752fa0b0b462a0787d56e9d73f80b0f7c0dde68" + integrity sha512-mt7+TUBbTFg5+GngsAxeKBTl5/VS0guFeJacYge9OmHb+m058UwwIm41SE9T4Den7ClatV57B6TYTuJ0CX1MAw== core-util-is@~1.0.0: version "1.0.3" @@ -4022,18 +4038,18 @@ css-has-pseudo@^3.0.4: postcss-selector-parser "^6.0.9" css-loader@^6.5.1: - version "6.8.1" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-6.8.1.tgz#0f8f52699f60f5e679eab4ec0fcd68b8e8a50a88" - integrity sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g== + version "6.10.0" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-6.10.0.tgz#7c172b270ec7b833951b52c348861206b184a4b7" + integrity sha512-LTSA/jWbwdMlk+rhmElbDR2vbtQoTBPr7fkJE+mxrHj+7ru0hUmHafDRzWIjIHTwpitWVaqY2/UWGRca3yUgRw== dependencies: icss-utils "^5.1.0" - postcss "^8.4.21" + postcss "^8.4.33" postcss-modules-extract-imports "^3.0.0" - postcss-modules-local-by-default "^4.0.3" - postcss-modules-scope "^3.0.0" + postcss-modules-local-by-default "^4.0.4" + postcss-modules-scope "^3.1.1" postcss-modules-values "^4.0.0" postcss-value-parser "^4.2.0" - semver "^7.3.8" + semver "^7.5.4" css-minimizer-webpack-plugin@^3.2.0: version "3.4.1" @@ -4110,9 +4126,9 @@ css.escape@^1.5.1: integrity sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg== cssdb@^7.1.0: - version "7.10.0" - resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-7.10.0.tgz#08816db7b793f088263e8f61dfe8d7f11a3459f2" - integrity sha512-yGZ5tmA57gWh/uvdQBHs45wwFY0IBh3ypABk5sEubPBPSzXzkNgsWReqx7gdx6uhC+QoFBe+V8JwBB9/hQ6cIA== + version "7.11.1" + resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-7.11.1.tgz#491841b281d337d7e5332e43b282429dd241b377" + integrity sha512-F0nEoX/Rv8ENTHsjMPGHd9opdjGfXkgRBafSUGnQKPzGZFB7Lm0BbT10x21TMOCrKLbVsJ0NoCDMk6AfKqw8/A== cssesc@^3.0.0: version "3.0.0" @@ -4303,14 +4319,14 @@ default-gateway@^6.0.3: dependencies: execa "^5.0.0" -define-data-property@^1.0.1, define-data-property@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.1.tgz#c35f7cd0ab09883480d12ac5cb213715587800b3" - integrity sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ== +define-data-property@^1.0.1, define-data-property@^1.1.2, define-data-property@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" + integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== dependencies: - get-intrinsic "^1.2.1" + es-define-property "^1.0.0" + es-errors "^1.3.0" gopd "^1.0.1" - has-property-descriptors "^1.0.0" define-lazy-prop@^2.0.0: version "2.0.0" @@ -4390,9 +4406,9 @@ diff-sequences@^29.6.3: integrity sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q== diff@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-5.1.0.tgz#bc52d298c5ea8df9194800224445ed43ffc87e40" - integrity sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw== + version "5.2.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-5.2.0.tgz#26ded047cd1179b78b9537d5ef725503ce1ae531" + integrity sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A== dir-glob@^3.0.1: version "3.0.1" @@ -4542,10 +4558,10 @@ ejs@^3.1.6: dependencies: jake "^10.8.5" -electron-to-chromium@^1.4.601: - version "1.4.625" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.625.tgz#a9a1d18ee911f9074a9c42d9e84b1c79b29f4059" - integrity sha512-DENMhh3MFgaPDoXWrVIqSPInQoLImywfCwrSmVl3cf9QHzoZSiutHwGaB/Ql3VkqcQV30rzgdM+BjKqBAJxo5Q== +electron-to-chromium@^1.4.668: + version "1.4.687" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.687.tgz#8b80da91848c13a90802f840c7de96c8558fef52" + integrity sha512-Ic85cOuXSP6h7KM0AIJ2hpJ98Bo4hyTUjc4yjMbkvD+8yTxEhfK9+8exT2KKYsSjnCn2tGsKVSZwE7ZgTORQCw== emittery@^0.10.2: version "0.10.2" @@ -4585,9 +4601,9 @@ encoding@^0.1.12, encoding@^0.1.13: iconv-lite "^0.6.2" enhanced-resolve@^5.15.0: - version "5.15.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz#1af946c7d93603eb88e9896cee4904dc012e9c35" - integrity sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg== + version "5.15.1" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.15.1.tgz#384391e025f099e67b4b00bfd7f0906a408214e1" + integrity sha512-3d3JRbwsCLJsYgvb6NuWEG44jjPSOMuS73L/6+7BZuoKm3W+qXnSoIYVHi8dG7Qcg4inAY4jbzkZ7MnskePeDg== dependencies: graceful-fs "^4.2.4" tapable "^2.2.0" @@ -4621,56 +4637,70 @@ error-stack-parser@^2.0.6: dependencies: stackframe "^1.3.4" -es-abstract@^1.17.2, es-abstract@^1.22.1: - version "1.22.3" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.3.tgz#48e79f5573198de6dee3589195727f4f74bc4f32" - integrity sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA== - dependencies: - array-buffer-byte-length "^1.0.0" - arraybuffer.prototype.slice "^1.0.2" - available-typed-arrays "^1.0.5" - call-bind "^1.0.5" - es-set-tostringtag "^2.0.1" +es-abstract@^1.17.2, es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.22.4: + version "1.22.5" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.5.tgz#1417df4e97cc55f09bf7e58d1e614bc61cb8df46" + integrity sha512-oW69R+4q2wG+Hc3KZePPZxOiisRIqfKBVo/HLx94QcJeWGU/8sZhCvc829rd1kS366vlJbzBfXf9yWwf0+Ko7w== + dependencies: + array-buffer-byte-length "^1.0.1" + arraybuffer.prototype.slice "^1.0.3" + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" + es-define-property "^1.0.0" + es-errors "^1.3.0" + es-set-tostringtag "^2.0.3" es-to-primitive "^1.2.1" function.prototype.name "^1.1.6" - get-intrinsic "^1.2.2" - get-symbol-description "^1.0.0" + get-intrinsic "^1.2.4" + get-symbol-description "^1.0.2" globalthis "^1.0.3" gopd "^1.0.1" - has-property-descriptors "^1.0.0" - has-proto "^1.0.1" + has-property-descriptors "^1.0.2" + has-proto "^1.0.3" has-symbols "^1.0.3" - hasown "^2.0.0" - internal-slot "^1.0.5" - is-array-buffer "^3.0.2" + hasown "^2.0.1" + internal-slot "^1.0.7" + is-array-buffer "^3.0.4" is-callable "^1.2.7" - is-negative-zero "^2.0.2" + is-negative-zero "^2.0.3" is-regex "^1.1.4" - is-shared-array-buffer "^1.0.2" + is-shared-array-buffer "^1.0.3" is-string "^1.0.7" - is-typed-array "^1.1.12" + is-typed-array "^1.1.13" is-weakref "^1.0.2" object-inspect "^1.13.1" object-keys "^1.1.1" - object.assign "^4.1.4" - regexp.prototype.flags "^1.5.1" - safe-array-concat "^1.0.1" - safe-regex-test "^1.0.0" + object.assign "^4.1.5" + regexp.prototype.flags "^1.5.2" + safe-array-concat "^1.1.0" + safe-regex-test "^1.0.3" string.prototype.trim "^1.2.8" string.prototype.trimend "^1.0.7" string.prototype.trimstart "^1.0.7" - typed-array-buffer "^1.0.0" - typed-array-byte-length "^1.0.0" - typed-array-byte-offset "^1.0.0" - typed-array-length "^1.0.4" + typed-array-buffer "^1.0.2" + typed-array-byte-length "^1.0.1" + typed-array-byte-offset "^1.0.2" + typed-array-length "^1.0.5" unbox-primitive "^1.0.2" - which-typed-array "^1.1.13" + which-typed-array "^1.1.14" es-array-method-boxes-properly@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e" integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== +es-define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" + integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== + dependencies: + get-intrinsic "^1.2.4" + +es-errors@^1.0.0, es-errors@^1.1.0, es-errors@^1.2.1, es-errors@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== + es-get-iterator@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/es-get-iterator/-/es-get-iterator-1.1.3.tgz#3ef87523c5d464d41084b2c3c9c214f1199763d6" @@ -4687,40 +4717,41 @@ es-get-iterator@^1.1.3: stop-iteration-iterator "^1.0.0" es-iterator-helpers@^1.0.12, es-iterator-helpers@^1.0.15: - version "1.0.15" - resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.0.15.tgz#bd81d275ac766431d19305923707c3efd9f1ae40" - integrity sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g== + version "1.0.17" + resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.0.17.tgz#123d1315780df15b34eb181022da43e734388bb8" + integrity sha512-lh7BsUqelv4KUbR5a/ZTaGGIMLCjPGPqJ6q+Oq24YP0RdyptX1uzm4vvaqzk7Zx3bpl/76YLTTDj9L7uYQ92oQ== dependencies: asynciterator.prototype "^1.0.0" - call-bind "^1.0.2" + call-bind "^1.0.7" define-properties "^1.2.1" - es-abstract "^1.22.1" - es-set-tostringtag "^2.0.1" - function-bind "^1.1.1" - get-intrinsic "^1.2.1" + es-abstract "^1.22.4" + es-errors "^1.3.0" + es-set-tostringtag "^2.0.2" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" globalthis "^1.0.3" - has-property-descriptors "^1.0.0" + has-property-descriptors "^1.0.2" has-proto "^1.0.1" has-symbols "^1.0.3" - internal-slot "^1.0.5" + internal-slot "^1.0.7" iterator.prototype "^1.1.2" - safe-array-concat "^1.0.1" + safe-array-concat "^1.1.0" es-module-lexer@^1.2.1: version "1.4.1" resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.4.1.tgz#41ea21b43908fe6a287ffcbe4300f790555331f5" integrity sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w== -es-set-tostringtag@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz#11f7cc9f63376930a5f20be4915834f4bc74f9c9" - integrity sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q== +es-set-tostringtag@^2.0.2, es-set-tostringtag@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz#8bb60f0a440c2e4281962428438d58545af39777" + integrity sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ== dependencies: - get-intrinsic "^1.2.2" - has-tostringtag "^1.0.0" - hasown "^2.0.0" + get-intrinsic "^1.2.4" + has-tostringtag "^1.0.2" + hasown "^2.0.1" -es-shim-unscopables@^1.0.0: +es-shim-unscopables@^1.0.0, es-shim-unscopables@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz#1f6942e71ecc7835ed1c8a83006d8771a63a3763" integrity sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw== @@ -4737,9 +4768,9 @@ es-to-primitive@^1.2.1: is-symbol "^1.0.2" escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + version "3.1.2" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27" + integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA== escape-html@~1.0.3: version "1.0.3" @@ -4819,9 +4850,9 @@ eslint-import-resolver-node@^0.3.9: resolve "^1.22.4" eslint-module-utils@^2.8.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz#e439fee65fc33f6bba630ff621efc38ec0375c49" - integrity sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw== + version "2.8.1" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz#52f2404300c3bd33deece9d7372fb337cc1d7c34" + integrity sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q== dependencies: debug "^3.2.7" @@ -4957,15 +4988,15 @@ eslint-webpack-plugin@^3.1.1: schema-utils "^4.0.0" eslint@^8.3.0: - version "8.56.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.56.0.tgz#4957ce8da409dc0809f99ab07a1b94832ab74b15" - integrity sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ== + version "8.57.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.57.0.tgz#c786a6fd0e0b68941aaf624596fb987089195668" + integrity sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ== dependencies: "@eslint-community/eslint-utils" "^4.2.0" "@eslint-community/regexpp" "^4.6.1" "@eslint/eslintrc" "^2.1.4" - "@eslint/js" "8.56.0" - "@humanwhocodes/config-array" "^0.11.13" + "@eslint/js" "8.57.0" + "@humanwhocodes/config-array" "^0.11.14" "@humanwhocodes/module-importer" "^1.0.1" "@nodelib/fs.walk" "^1.2.8" "@ungap/structured-clone" "^1.2.0" @@ -5110,13 +5141,13 @@ expect@^29.0.0: jest-util "^29.7.0" express@^4.17.3: - version "4.18.2" - resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59" - integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ== + version "4.18.3" + resolved "https://registry.yarnpkg.com/express/-/express-4.18.3.tgz#6870746f3ff904dee1819b82e4b51509afffb0d4" + integrity sha512-6VyCijWQ+9O7WuVMTRBTl+cjNNIzD5cY5mQ1WM8r/LEkI2u8EYpOotESNwzNlyCn3g+dmjKYI6BmNneSr/FSRw== dependencies: accepts "~1.3.8" array-flatten "1.1.1" - body-parser "1.20.1" + body-parser "1.20.2" content-disposition "0.5.4" content-type "~1.0.4" cookie "0.5.0" @@ -5178,9 +5209,9 @@ fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== fastq@^1.6.0: - version "1.16.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.16.0.tgz#83b9a9375692db77a822df081edb6a9cf6839320" - integrity sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA== + version "1.17.1" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.17.1.tgz#2a523f07a4e7b1e81a42b91b8bf2254107753b47" + integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w== dependencies: reusify "^1.0.4" @@ -5287,14 +5318,14 @@ flat-cache@^3.0.4: rimraf "^3.0.2" flatted@^3.2.9: - version "3.2.9" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.9.tgz#7eb4c67ca1ba34232ca9d2d93e9886e611ad7daf" - integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ== + version "3.3.1" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.1.tgz#21db470729a6734d4997002f439cb308987f567a" + integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw== follow-redirects@^1.0.0: - version "1.15.4" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.4.tgz#cdc7d308bf6493126b17ea2191ea0ccf3e535adf" - integrity sha512-Cr4D/5wlrb0z9dgERpUL3LrmPKVDsETIJhaCMeDfuFYcqa5bldGV6wBsAN6X/vxlXQtFBMrXdXxdL8CbDTGniw== + version "1.15.5" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.5.tgz#54d4d6d062c0fa7d9d17feb008461550e3ba8020" + integrity sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw== for-each@^0.3.3: version "0.3.3" @@ -5344,7 +5375,7 @@ forwarded@0.2.0: resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== -fraction.js@^4.3.6: +fraction.js@^4.3.7: version "4.3.7" resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.3.7.tgz#06ca0085157e42fda7f9e726e79fefc4068840f7" integrity sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew== @@ -5395,7 +5426,7 @@ fsevents@^2.3.2, fsevents@~2.3.2: resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== -function-bind@^1.1.1, function-bind@^1.1.2: +function-bind@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== @@ -5446,11 +5477,12 @@ get-caller-file@^2.0.5: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.2.tgz#281b7622971123e1ef4b3c90fd7539306da93f3b" - integrity sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA== +get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" + integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== dependencies: + es-errors "^1.3.0" function-bind "^1.1.2" has-proto "^1.0.1" has-symbols "^1.0.3" @@ -5476,13 +5508,14 @@ get-stream@^6.0.0: resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== -get-symbol-description@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" - integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== +get-symbol-description@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.2.tgz#533744d5aa20aca4e079c8e5daf7fd44202821f5" + integrity sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg== dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.1" + call-bind "^1.0.5" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" @@ -5659,39 +5692,39 @@ has-flag@^4.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-property-descriptors@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz#52ba30b6c5ec87fd89fa574bc1c39125c6f65340" - integrity sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg== +has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.1, has-property-descriptors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" + integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== dependencies: - get-intrinsic "^1.2.2" + es-define-property "^1.0.0" -has-proto@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" - integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== +has-proto@^1.0.1, has-proto@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd" + integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== has-symbols@^1.0.1, has-symbols@^1.0.2, has-symbols@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== -has-tostringtag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" - integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== +has-tostringtag@^1.0.0, has-tostringtag@^1.0.1, has-tostringtag@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" + integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== dependencies: - has-symbols "^1.0.2" + has-symbols "^1.0.3" has-unicode@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== -hasown@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.0.tgz#f4c513d454a57b7c7e1650778de226b11700546c" - integrity sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA== +hasown@^2.0.0, hasown@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.1.tgz#26f48f039de2c0f8d3356c223fb8d50253519faa" + integrity sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA== dependencies: function-bind "^1.1.2" @@ -5916,9 +5949,9 @@ identity-obj-proxy@^3.0.0: harmony-reflect "^1.4.6" ignore@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.0.tgz#67418ae40d34d6999c95ff56016759c718c82f78" - integrity sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg== + version "5.3.1" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef" + integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== immer@^9.0.21, immer@^9.0.7: version "9.0.21" @@ -5984,19 +6017,27 @@ inline-style-parser@0.1.1: resolved "https://registry.yarnpkg.com/inline-style-parser/-/inline-style-parser-0.1.1.tgz#ec8a3b429274e9c0a1f1c4ffa9453a7fef72cea1" integrity sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q== -internal-slot@^1.0.4, internal-slot@^1.0.5: - version "1.0.6" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.6.tgz#37e756098c4911c5e912b8edbf71ed3aa116f930" - integrity sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg== +internal-slot@^1.0.4, internal-slot@^1.0.5, internal-slot@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.7.tgz#c06dcca3ed874249881007b0a5523b172a190802" + integrity sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g== dependencies: - get-intrinsic "^1.2.2" + es-errors "^1.3.0" hasown "^2.0.0" side-channel "^1.0.4" -ip@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.0.tgz#4cf4ab182fee2314c75ede1276f8c80b479936da" - integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ== +ip-address@^9.0.5: + version "9.0.5" + resolved "https://registry.yarnpkg.com/ip-address/-/ip-address-9.0.5.tgz#117a960819b08780c3bd1f14ef3c1cc1d3f3ea5a" + integrity sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g== + dependencies: + jsbn "1.1.0" + sprintf-js "^1.1.3" + +ip@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.1.tgz#e8f3595d33a3ea66490204234b77636965307105" + integrity sha512-lJUL9imLTNi1ZfXT+DU6rBBdbiKGBuay9B6xGSPVjUeQwaH1RIGqef8RZkUtHioLmSNpPR5M4HVKJGm1j8FWVQ== ipaddr.js@1.9.1: version "1.9.1" @@ -6016,14 +6057,13 @@ is-arguments@^1.1.1: call-bind "^1.0.2" has-tostringtag "^1.0.0" -is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe" - integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w== +is-array-buffer@^3.0.2, is-array-buffer@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.4.tgz#7a1f92b3d61edd2bc65d24f130530ea93d7fae98" + integrity sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw== dependencies: call-bind "^1.0.2" - get-intrinsic "^1.2.0" - is-typed-array "^1.1.10" + get-intrinsic "^1.2.1" is-arrayish@^0.2.1: version "0.2.1" @@ -6139,10 +6179,10 @@ is-module@^1.0.0: resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" integrity sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g== -is-negative-zero@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" - integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== +is-negative-zero@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.3.tgz#ced903a027aca6381b777a5743069d7376a49747" + integrity sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw== is-number-object@^1.0.4: version "1.0.7" @@ -6209,12 +6249,12 @@ is-set@^2.0.1, is-set@^2.0.2: resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.2.tgz#90755fa4c2562dc1c5d4024760d6119b94ca18ec" integrity sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g== -is-shared-array-buffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" - integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== +is-shared-array-buffer@^1.0.2, is-shared-array-buffer@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz#1237f1cba059cdb62431d378dcc37d9680181688" + integrity sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg== dependencies: - call-bind "^1.0.2" + call-bind "^1.0.7" is-stream@^2.0.0: version "2.0.1" @@ -6235,12 +6275,12 @@ is-symbol@^1.0.2, is-symbol@^1.0.3: dependencies: has-symbols "^1.0.2" -is-typed-array@^1.1.10, is-typed-array@^1.1.12, is-typed-array@^1.1.9: - version "1.1.12" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.12.tgz#d0bab5686ef4a76f7a73097b95470ab199c57d4a" - integrity sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg== +is-typed-array@^1.1.13: + version "1.1.13" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.13.tgz#d6c5ca56df62334959322d7d7dd1cca50debe229" + integrity sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw== dependencies: - which-typed-array "^1.1.11" + which-typed-array "^1.1.14" is-typedarray@^1.0.0: version "1.0.0" @@ -6324,9 +6364,9 @@ istanbul-lib-source-maps@^4.0.0: source-map "^0.6.1" istanbul-reports@^3.1.3: - version "3.1.6" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.6.tgz#2544bcab4768154281a2f0870471902704ccaa1a" - integrity sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg== + version "3.1.7" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.7.tgz#daed12b9e1dca518e15c056e1e537e741280fa0b" + integrity sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g== dependencies: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" @@ -6925,6 +6965,11 @@ js-yaml@^4.1.0: dependencies: argparse "^2.0.1" +jsbn@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-1.1.0.tgz#b01307cb29b618a1ed26ec79e911f803c4da0040" + integrity sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A== + jsdom@^16.6.0: version "16.7.0" resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.7.0.tgz#918ae71965424b197c819f8183a754e18977b710" @@ -7133,9 +7178,9 @@ lilconfig@^2.0.3, lilconfig@^2.1.0: integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ== lilconfig@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-3.0.0.tgz#f8067feb033b5b74dab4602a5f5029420be749bc" - integrity sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g== + version "3.1.1" + resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-3.1.1.tgz#9d8a246fa753106cfc205fd2d77042faca56e5e3" + integrity sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ== lines-and-columns@^1.1.6: version "1.2.4" @@ -7257,9 +7302,9 @@ lru-cache@^7.7.1: integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA== "lru-cache@^9.1.1 || ^10.0.0": - version "10.1.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.1.0.tgz#2098d41c2dc56500e6c88584aa656c84de7d0484" - integrity sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag== + version "10.2.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.0.tgz#0bd445ca57363465900f4d1f9bd8db343a4d95c3" + integrity sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q== lz-string@^1.4.4, lz-string@^1.5.0: version "1.5.0" @@ -7860,11 +7905,12 @@ min-indent@^1.0.0: integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== mini-css-extract-plugin@^2.4.5: - version "2.7.6" - resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.6.tgz#282a3d38863fddcd2e0c220aaed5b90bc156564d" - integrity sha512-Qk7HcgaPkGG6eD77mLvZS1nmxlao3j+9PkrT9Uc7HAE1id3F41+DdBRYRYkbyfNRGzm8/YWtzhw7nVPmwhqTQw== + version "2.8.1" + resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.8.1.tgz#75245f3f30ce3a56dbdd478084df6fe475f02dc7" + integrity sha512-/1HDlyFRxWIZPI1ZpgqlZ8jMw/1Dp/dl3P0L1jtZ+zVcHqwPhGwaJwKL00WVgfnBy6PWCde9W65or7IIETImuA== dependencies: schema-utils "^4.0.0" + tapable "^2.2.1" minimalistic-assert@^1.0.0: version "1.0.1" @@ -8212,25 +8258,25 @@ object-hash@^3.0.0: resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-3.0.0.tgz#73f97f753e7baffc0e2cc9d6e079079744ac82e9" integrity sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw== -object-inspect@^1.13.1, object-inspect@^1.9.0: +object-inspect@^1.13.1: version "1.13.1" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== object-is@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" - integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== + version "1.1.6" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.6.tgz#1a6a53aed2dd8f7e6775ff870bea58545956ab07" + integrity sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q== dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" + call-bind "^1.0.7" + define-properties "^1.2.1" object-keys@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== -object.assign@^4.1.4: +object.assign@^4.1.4, object.assign@^4.1.5: version "4.1.5" resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.5.tgz#3a833f9ab7fdb80fc9e8d2300c803d216d8fdbb0" integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== @@ -8270,14 +8316,15 @@ object.getownpropertydescriptors@^2.1.0: safe-array-concat "^1.0.0" object.groupby@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.1.tgz#d41d9f3c8d6c778d9cbac86b4ee9f5af103152ee" - integrity sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ== + version "1.0.2" + resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.2.tgz#494800ff5bab78fd0eff2835ec859066e00192ec" + integrity sha512-bzBq58S+x+uo0VjurFT0UktpKHOZmv4/xePiOA1nbB9pMqpGK7rUPNgf+1YC+7mE+0HzhTMqNUuCqvKhj6FnBw== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - get-intrinsic "^1.2.1" + array.prototype.filter "^1.0.3" + call-bind "^1.0.5" + define-properties "^1.2.1" + es-abstract "^1.22.3" + es-errors "^1.0.0" object.hasown@^1.1.2: version "1.1.3" @@ -8545,6 +8592,11 @@ pkg-up@^3.1.0: dependencies: find-up "^3.0.0" +possible-typed-array-names@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz#89bb63c6fada2c3e90adc4a647beeeb39cc7bf8f" + integrity sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q== + postcss-attribute-case-insensitive@^5.0.2: version "5.0.2" resolved "https://registry.yarnpkg.com/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-5.0.2.tgz#03d761b24afc04c09e757e92ff53716ae8ea2741" @@ -8821,19 +8873,19 @@ postcss-modules-extract-imports@^3.0.0: resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz#cda1f047c0ae80c97dbe28c3e76a43b88025741d" integrity sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw== -postcss-modules-local-by-default@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz#b08eb4f083050708998ba2c6061b50c2870ca524" - integrity sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA== +postcss-modules-local-by-default@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.4.tgz#7cbed92abd312b94aaea85b68226d3dec39a14e6" + integrity sha512-L4QzMnOdVwRm1Qb8m4x8jsZzKAaPAgrUF1r/hjDR2Xj7R+8Zsf97jAlSQzWtKx5YNiNGN8QxmPFIc/sh+RQl+Q== dependencies: icss-utils "^5.0.0" postcss-selector-parser "^6.0.2" postcss-value-parser "^4.1.0" -postcss-modules-scope@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.1.0.tgz#fbfddfda93a31f310f1d152c2bb4d3f3c5592ee0" - integrity sha512-SaIbK8XW+MZbd0xHPf7kdfA/3eOt7vxJ72IRecn3EzuZVLr1r0orzf0MX/pN8m+NMDoo6X/SQd8oeKqGZd8PXg== +postcss-modules-scope@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.1.1.tgz#32cfab55e84887c079a19bbb215e721d683ef134" + integrity sha512-uZgqzdTleelWjzJY+Fhti6F3C9iF1JR/dODLs/JDefozYcKTBCdD8BIl6nNPbTbcLnGrk56hzwZC2DaGNvYjzA== dependencies: postcss-selector-parser "^6.0.4" @@ -9088,10 +9140,10 @@ postcss@^7.0.35: picocolors "^0.2.1" source-map "^0.6.1" -postcss@^8.3.5, postcss@^8.4.21, postcss@^8.4.23, postcss@^8.4.4: - version "8.4.33" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.33.tgz#1378e859c9f69bf6f638b990a0212f43e2aaa742" - integrity sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg== +postcss@^8.3.5, postcss@^8.4.23, postcss@^8.4.33, postcss@^8.4.4: + version "8.4.35" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.35.tgz#60997775689ce09011edf083a549cea44aabe2f7" + integrity sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA== dependencies: nanoid "^3.3.7" picocolors "^1.0.0" @@ -9201,9 +9253,9 @@ prop-types@^15.0.0, prop-types@^15.7.2, prop-types@^15.8.1: react-is "^16.13.1" property-information@^6.0.0: - version "6.4.0" - resolved "https://registry.yarnpkg.com/property-information/-/property-information-6.4.0.tgz#6bc4c618b0c2d68b3bb8b552cbb97f8e300a0f82" - integrity sha512-9t5qARVofg2xQqKtytzt+lZ4d1Qvj8t5B8fEwXK6qOfgRLgH/b13QlgEyDh033NOS31nXeFbYv7CLUDG1CeifQ== + version "6.4.1" + resolved "https://registry.yarnpkg.com/property-information/-/property-information-6.4.1.tgz#de8b79a7415fd2107dfbe65758bb2cc9dfcf60ac" + integrity sha512-OHYtXfu5aI2sS2LWFSN5rgJjrQ4pCy8i1jubJLe2QvMF8JJ++HXTUIVWFLfXJoaOfvYYjk2SN8J2wFUWIGXT4w== proxy-addr@~2.0.7: version "2.0.7" @@ -9269,10 +9321,10 @@ range-parser@^1.2.1, range-parser@~1.2.1: resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== -raw-body@2.5.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" - integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== +raw-body@2.5.2: + version "2.5.2" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" + integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== dependencies: bytes "3.1.2" http-errors "2.0.0" @@ -9392,7 +9444,7 @@ react-refresh@^0.11.0: resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.11.0.tgz#77198b944733f0f1f1a90e791de4541f9f074046" integrity sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A== -react-router-dom@6: +react-router-dom@6.21.1: version "6.21.1" resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-6.21.1.tgz#58b459d2fe1841388c95bb068f85128c45e27349" integrity sha512-QCNrtjtDPwHDO+AO21MJd7yIcr41UetYt5jzaB9Y1UYaPTCnVuJq6S748g1dE11OQlCFIQg+RtAA1SEZIyiBeA== @@ -9552,14 +9604,15 @@ redux@^4.2.1: "@babel/runtime" "^7.9.2" reflect.getprototypeof@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.4.tgz#aaccbf41aca3821b87bb71d9dcbc7ad0ba50a3f3" - integrity sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw== + version "1.0.5" + resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.5.tgz#e0bd28b597518f16edaf9c0e292c631eb13e0674" + integrity sha512-62wgfC8dJWrmxv44CA36pLDnP6KKl3Vhxb7PL+8+qrrFMMoJij4vgiMP8zV4O8+CBMXY1mHxI5fITGHXFHVmQQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - get-intrinsic "^1.2.1" + call-bind "^1.0.5" + define-properties "^1.2.1" + es-abstract "^1.22.3" + es-errors "^1.0.0" + get-intrinsic "^1.2.3" globalthis "^1.0.3" which-builtin-type "^1.1.3" @@ -9597,14 +9650,15 @@ regex-parser@^2.2.11: resolved "https://registry.yarnpkg.com/regex-parser/-/regex-parser-2.3.0.tgz#4bb61461b1a19b8b913f3960364bb57887f920ee" integrity sha512-TVILVSz2jY5D47F4mA4MppkBrafEaiUWJO/TcZHEIuI13AqoZMkK1WMA4Om1YkYbTx+9Ki1/tSUXbceyr9saRg== -regexp.prototype.flags@^1.5.0, regexp.prototype.flags@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz#90ce989138db209f81492edd734183ce99f9677e" - integrity sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg== +regexp.prototype.flags@^1.5.0, regexp.prototype.flags@^1.5.1, regexp.prototype.flags@^1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz#138f644a3350f981a858c44f6bb1a61ff59be334" + integrity sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - set-function-name "^2.0.0" + call-bind "^1.0.6" + define-properties "^1.2.1" + es-errors "^1.3.0" + set-function-name "^2.0.1" regexpu-core@^5.3.1: version "5.3.2" @@ -9794,13 +9848,13 @@ sade@^1.7.3: dependencies: mri "^1.1.0" -safe-array-concat@^1.0.0, safe-array-concat@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.0.1.tgz#91686a63ce3adbea14d61b14c99572a8ff84754c" - integrity sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q== +safe-array-concat@^1.0.0, safe-array-concat@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.0.tgz#8d0cae9cb806d6d1c06e08ab13d847293ebe0692" + integrity sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg== dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.2.1" + call-bind "^1.0.5" + get-intrinsic "^1.2.2" has-symbols "^1.0.3" isarray "^2.0.5" @@ -9814,13 +9868,13 @@ safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.1.0, safe-buffer@~5.2.0: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== -safe-regex-test@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" - integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== +safe-regex-test@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.3.tgz#a5b4c0f06e0ab50ea2c395c14d8371232924c377" + integrity sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw== dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.3" + call-bind "^1.0.6" + es-errors "^1.3.0" is-regex "^1.1.4" "safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": @@ -9938,10 +9992,10 @@ semver@^6.0.0, semver@^6.3.0, semver@^6.3.1: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8, semver@^7.5.3: - version "7.5.4" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" - integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== +semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.5.3, semver@^7.5.4: + version "7.6.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" + integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== dependencies: lru-cache "^6.0.0" @@ -10006,24 +10060,27 @@ set-blocking@^2.0.0: resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== -set-function-length@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.1.1.tgz#4bc39fafb0307224a33e106a7d35ca1218d659ed" - integrity sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ== +set-function-length@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.1.tgz#47cc5945f2c771e2cf261c6737cf9684a2a5e425" + integrity sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g== dependencies: - define-data-property "^1.1.1" - get-intrinsic "^1.2.1" + define-data-property "^1.1.2" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.3" gopd "^1.0.1" - has-property-descriptors "^1.0.0" + has-property-descriptors "^1.0.1" set-function-name@^2.0.0, set-function-name@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.1.tgz#12ce38b7954310b9f61faa12701620a0c882793a" - integrity sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA== + version "2.0.2" + resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.2.tgz#16a705c5a0dc2f5e638ca96d8a8cd4e1c2b90985" + integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ== dependencies: - define-data-property "^1.0.1" + define-data-property "^1.1.4" + es-errors "^1.3.0" functions-have-names "^1.2.3" - has-property-descriptors "^1.0.0" + has-property-descriptors "^1.0.2" setprototypeof@1.1.0: version "1.1.0" @@ -10053,13 +10110,14 @@ shell-quote@^1.7.3, shell-quote@^1.8.1: integrity sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA== side-channel@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + version "1.0.5" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.5.tgz#9a84546599b48909fb6af1211708d23b1946221b" + integrity sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ== dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.0" + call-bind "^1.0.6" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" + object-inspect "^1.13.1" signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: version "3.0.7" @@ -10119,11 +10177,11 @@ socks-proxy-agent@^7.0.0: socks "^2.6.2" socks@^2.6.2: - version "2.7.1" - resolved "https://registry.yarnpkg.com/socks/-/socks-2.7.1.tgz#d8e651247178fde79c0663043e07240196857d55" - integrity sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ== + version "2.8.1" + resolved "https://registry.yarnpkg.com/socks/-/socks-2.8.1.tgz#22c7d9dd7882649043cba0eafb49ae144e3457af" + integrity sha512-B6w7tkwNid7ToxjZ08rQMT8M9BJAf8DKx8Ft4NivzH0zBUfd6jldGcisJn/RLgxcX3FPNDdNQCUEMMT79b+oCQ== dependencies: - ip "^2.0.0" + ip-address "^9.0.5" smart-buffer "^4.2.0" source-list-map@^2.0.0, source-list-map@^2.0.1: @@ -10189,9 +10247,9 @@ spdx-correct@^3.0.0: spdx-license-ids "^3.0.0" spdx-exceptions@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" - integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== + version "2.5.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz#5d607d27fc806f66d7b64a766650fa890f04ed66" + integrity sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w== spdx-expression-parse@^3.0.0: version "3.0.1" @@ -10202,9 +10260,9 @@ spdx-expression-parse@^3.0.0: spdx-license-ids "^3.0.0" spdx-license-ids@^3.0.0: - version "3.0.16" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz#a14f64e0954f6e25cc6587bd4f392522db0d998f" - integrity sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw== + version "3.0.17" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.17.tgz#887da8aa73218e51a1d917502d79863161a93f9c" + integrity sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg== spdy-transport@^3.0.0: version "3.0.0" @@ -10229,6 +10287,11 @@ spdy@^4.0.2: select-hose "^2.0.0" spdy-transport "^3.0.0" +sprintf-js@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.3.tgz#4914b903a2f8b685d17fdf78a70e917e872e444a" + integrity sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA== + sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" @@ -10447,9 +10510,9 @@ strip-json-comments@^3.1.1: integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== style-loader@^3.3.1: - version "3.3.3" - resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-3.3.3.tgz#bba8daac19930169c0c9c96706749a597ae3acff" - integrity sha512-53BiGLXAcll9maCYtZi2RCQZKa8NQQai5C4horqKyRmHj9H7QmcUyucrH+4KW/gBQbXM2AsB0axoEcFZPlfPcw== + version "3.3.4" + resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-3.3.4.tgz#f30f786c36db03a45cbd55b6a70d930c479090e7" + integrity sha512-0WqXzrsMTyb8yjZJHDqwmnwRJvhALK9LfRtRc6B4UTWe8AijYLZYZ9thuJTZc2VfQWINADW/j+LiJnfy2RoC1w== style-to-object@^0.4.0: version "0.4.4" @@ -10588,7 +10651,7 @@ tapable@^1.0.0: resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== -tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0: +tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0, tapable@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== @@ -10628,7 +10691,7 @@ terminal-link@^2.0.0: ansi-escapes "^4.2.1" supports-hyperlinks "^2.0.0" -terser-webpack-plugin@^5.2.5, terser-webpack-plugin@^5.3.7: +terser-webpack-plugin@^5.2.5, terser-webpack-plugin@^5.3.10: version "5.3.10" resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz#904f4c9193c6fd2a03f693a2150c62a92f40d199" integrity sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w== @@ -10640,9 +10703,9 @@ terser-webpack-plugin@^5.2.5, terser-webpack-plugin@^5.3.7: terser "^5.26.0" terser@^5.0.0, terser@^5.10.0, terser@^5.26.0: - version "5.26.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.26.0.tgz#ee9f05d929f4189a9c28a0feb889d96d50126fe1" - integrity sha512-dytTGoE2oHgbNV9nTzgBEPaqAWvcJNl66VZ0BkJqlvp71IjO8CxdBx/ykCNb47cLnCmCvRZ6ZR0tLkqvZCdVBQ== + version "5.28.1" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.28.1.tgz#bf00f7537fd3a798c352c2d67d67d65c915d1b28" + integrity sha512-wM+bZp54v/E9eRRGXb5ZFDvinrJIOaTapx3WUokyVGZu5ucVCK55zEgGd5Dl2fSr3jUo5sDiERErUWLY6QPFyA== dependencies: "@jridgewell/source-map" "^0.3.3" acorn "^8.8.2" @@ -10744,9 +10807,9 @@ trim-newlines@^3.0.0: integrity sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw== trough@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/trough/-/trough-2.1.0.tgz#0f7b511a4fde65a46f18477ab38849b22c554876" - integrity sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g== + version "2.2.0" + resolved "https://registry.yarnpkg.com/trough/-/trough-2.2.0.tgz#94a60bd6bd375c152c1df911a4b11d5b0256f50f" + integrity sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw== "true-case-path@^2.2.1": version "2.2.1" @@ -10847,44 +10910,49 @@ type-is@~1.6.18: media-typer "0.3.0" mime-types "~2.1.24" -typed-array-buffer@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz#18de3e7ed7974b0a729d3feecb94338d1472cd60" - integrity sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw== +typed-array-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz#1867c5d83b20fcb5ccf32649e5e2fc7424474ff3" + integrity sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ== dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.2.1" - is-typed-array "^1.1.10" + call-bind "^1.0.7" + es-errors "^1.3.0" + is-typed-array "^1.1.13" -typed-array-byte-length@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz#d787a24a995711611fb2b87a4052799517b230d0" - integrity sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA== +typed-array-byte-length@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz#d92972d3cff99a3fa2e765a28fcdc0f1d89dec67" + integrity sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw== dependencies: - call-bind "^1.0.2" + call-bind "^1.0.7" for-each "^0.3.3" - has-proto "^1.0.1" - is-typed-array "^1.1.10" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" -typed-array-byte-offset@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz#cbbe89b51fdef9cd6aaf07ad4707340abbc4ea0b" - integrity sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg== +typed-array-byte-offset@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz#f9ec1acb9259f395093e4567eb3c28a580d02063" + integrity sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA== dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" for-each "^0.3.3" - has-proto "^1.0.1" - is-typed-array "^1.1.10" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" -typed-array-length@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" - integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== +typed-array-length@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.5.tgz#57d44da160296d8663fd63180a1802ebf25905d5" + integrity sha512-yMi0PlwuznKHxKmcpoOdeLwxBoVPkqZxd7q2FgMkmD3bNwvF5VW0+UlUQ1k1vmktTu4Yu13Q0RIxEP8+B+wloA== dependencies: - call-bind "^1.0.2" + call-bind "^1.0.7" for-each "^0.3.3" - is-typed-array "^1.1.9" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" + possible-typed-array-names "^1.0.0" typedarray-to-buffer@^3.1.5: version "3.1.5" @@ -10893,7 +10961,7 @@ typedarray-to-buffer@^3.1.5: dependencies: is-typedarray "^1.0.0" -typescript@^5.1.6: +typescript@^5.3.3: version "5.3.3" resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.3.3.tgz#b3ce6ba258e72e6305ba66f5c9b452aaee3ffe37" integrity sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw== @@ -11232,9 +11300,9 @@ wbuf@^1.1.0, wbuf@^1.7.3: minimalistic-assert "^1.0.0" web-vitals@^3.3.0: - version "3.5.1" - resolved "https://registry.yarnpkg.com/web-vitals/-/web-vitals-3.5.1.tgz#af7a9dc60708b81007922ab55a23d963676ba30a" - integrity sha512-xQ9lvIpfLxUj0eSmT79ZjRoU5wIRfIr7pNukL7ZE4EcWZSmfZQqOlhuAGfkVa3EFmzPHZhWhXfm2i5ys+THVPg== + version "3.5.2" + resolved "https://registry.yarnpkg.com/web-vitals/-/web-vitals-3.5.2.tgz#5bb58461bbc173c3f00c2ddff8bfe6e680999ca9" + integrity sha512-c0rhqNcHXRkY/ogGDJQxZ9Im9D19hDihbzSQJrsioex+KnFgmMzBiy57Z1EjkhX/+OjyBpclDCzz2ITtjokFmg== webidl-conversions@^4.0.2: version "4.0.2" @@ -11328,18 +11396,18 @@ webpack-sources@^3.2.3: integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== webpack@^5.64.4: - version "5.89.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.89.0.tgz#56b8bf9a34356e93a6625770006490bf3a7f32dc" - integrity sha512-qyfIC10pOr70V+jkmud8tMfajraGCZMBWJtrmuBymQKCrLTRejBI8STDp1MCyZu/QTdZSeacCQYpYNQVOzX5kw== + version "5.90.3" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.90.3.tgz#37b8f74d3ded061ba789bb22b31e82eed75bd9ac" + integrity sha512-h6uDYlWCctQRuXBs1oYpVe6sFcWedl0dpcVaTf/YF67J9bKvwJajFulMVSYKHrksMB3I/pIagRzDxwxkebuzKA== dependencies: "@types/eslint-scope" "^3.7.3" - "@types/estree" "^1.0.0" + "@types/estree" "^1.0.5" "@webassemblyjs/ast" "^1.11.5" "@webassemblyjs/wasm-edit" "^1.11.5" "@webassemblyjs/wasm-parser" "^1.11.5" acorn "^8.7.1" acorn-import-assertions "^1.9.0" - browserslist "^4.14.5" + browserslist "^4.21.10" chrome-trace-event "^1.0.2" enhanced-resolve "^5.15.0" es-module-lexer "^1.2.1" @@ -11353,7 +11421,7 @@ webpack@^5.64.4: neo-async "^2.6.2" schema-utils "^3.2.0" tapable "^2.1.1" - terser-webpack-plugin "^5.3.7" + terser-webpack-plugin "^5.3.10" watchpack "^2.4.0" webpack-sources "^3.2.3" @@ -11445,16 +11513,16 @@ which-collection@^1.0.1: is-weakmap "^2.0.1" is-weakset "^2.0.1" -which-typed-array@^1.1.11, which-typed-array@^1.1.13, which-typed-array@^1.1.9: - version "1.1.13" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.13.tgz#870cd5be06ddb616f504e7b039c4c24898184d36" - integrity sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow== +which-typed-array@^1.1.13, which-typed-array@^1.1.14, which-typed-array@^1.1.9: + version "1.1.14" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.14.tgz#1f78a111aee1e131ca66164d8bdc3ab062c95a06" + integrity sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg== dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.4" + available-typed-arrays "^1.0.6" + call-bind "^1.0.5" for-each "^0.3.3" gopd "^1.0.1" - has-tostringtag "^1.0.0" + has-tostringtag "^1.0.1" which@^1.3.1: version "1.3.1" @@ -11725,9 +11793,9 @@ yaml@^1.10.0, yaml@^1.10.2, yaml@^1.7.2: integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== yaml@^2.3.4: - version "2.3.4" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.4.tgz#53fc1d514be80aabf386dc6001eb29bf3b7523b2" - integrity sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA== + version "2.4.0" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.4.0.tgz#2376db1083d157f4b3a452995803dbcf43b08140" + integrity sha512-j9iR8g+/t0lArF4V6NE/QCfT+CO7iLqrXAHZbJdo+LfjqP1vR8Fg5bSiaq6Q2lOD1AUEVrEVIgABvBFYojJVYQ== yargs-parser@^20.2.2, yargs-parser@^20.2.3: version "20.2.9" From 8cd68b5e83471d9405233773d98cd9a83f311eb9 Mon Sep 17 00:00:00 2001 From: Tim Allen Date: Wed, 3 Apr 2024 16:18:41 +0100 Subject: [PATCH 16/79] Update Azure MySQL Server to Flexible Server (#3892) * Initial Commit * Update SQL SKU variables * add in sql_sku to template * "updateable": true * ignore zone * update to azurerm_mysql_flexible_database * add password * update sku list * update user login details for mysql * update changelog * doc updates and version updates * resolving comments --- CHANGELOG.md | 1 + docs/tre-templates/shared-services/gitea.md | 4 ++ .../tre-templates/workspace-services/gitea.md | 4 ++ .../tre-templates/workspace-services/mysql.md | 22 ++++++++++ .../shared_services/gitea/parameters.json | 6 +++ templates/shared_services/gitea/porter.yaml | 8 +++- .../gitea/template_schema.json | 13 ++++++ .../gitea/terraform/gitea-webapp.tf | 6 +-- .../shared_services/gitea/terraform/locals.tf | 5 +++ .../shared_services/gitea/terraform/mysql.tf | 42 ++++++++---------- .../gitea/terraform/variables.tf | 4 ++ .../workspace_services/gitea/parameters.json | 6 +++ .../workspace_services/gitea/porter.yaml | 8 +++- .../gitea/template_schema.json | 13 ++++++ .../gitea/terraform/gitea-webapp.tf | 6 +-- .../gitea/terraform/locals.tf | 5 +++ .../gitea/terraform/mysql.tf | 42 ++++++++---------- .../gitea/terraform/variables.tf | 3 ++ .../workspace_services/gitea/version.txt | 2 +- .../workspace_services/mysql/porter.yaml | 27 +++++++++--- .../mysql/template_schema.json | 13 +++--- .../mysql/terraform/locals.tf | 7 ++- .../mysql/terraform/mysql.tf | 44 ++++++++----------- .../mysql/terraform/outputs.tf | 2 +- 24 files changed, 193 insertions(+), 100 deletions(-) create mode 100644 docs/tre-templates/workspace-services/mysql.md diff --git a/CHANGELOG.md b/CHANGELOG.md index c5024fd286..cbf85f721f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,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)) COMPONENTS: diff --git a/docs/tre-templates/shared-services/gitea.md b/docs/tre-templates/shared-services/gitea.md index b846d042b2..173611a5ae 100644 --- a/docs/tre-templates/shared-services/gitea.md +++ b/docs/tre-templates/shared-services/gitea.md @@ -47,3 +47,7 @@ Gitea needs to be able to access the following resource outside the Azure TRE VN | AzureActiveDirectory | Authorize the signed in user against Azure Active Directory. | | AzureContainerRegistry | Pull the Gitea container image, as it is located in Azure Container Registry. | | (www.)github.com | Allows Gitea to mirror any repo on GitHub | + +## Upgrading to version 1.0.0 + +Migrating existing Gitea services to the major version 1.0.0 is not currently supported. This is due to the breaking change in the Terraform to migrate from the deprecated mysql_server to the new mysql_flexible_server. diff --git a/docs/tre-templates/workspace-services/gitea.md b/docs/tre-templates/workspace-services/gitea.md index b62b9778aa..054e21bd67 100644 --- a/docs/tre-templates/workspace-services/gitea.md +++ b/docs/tre-templates/workspace-services/gitea.md @@ -24,3 +24,7 @@ The Gitea worskpace service opens outbound access to: 3. Click sign in with OpenID button and sign in with the same credentials used to access the workspace. 4. Once succesfully signed in choose a username. 5. Navigate to the user settings and under the account tab set a password for your account( `https:///user/settings/account` ). This username and passowrd should be used to authenticate against Gitea when carrying out git operations. + +## Upgrading to version 1.0.0 + +Migrating existing Gitea services to the major version 1.0.0 is not currently supported. This is due to the breaking change in the Terraform to migrate from the deprecated mysql_server to the new mysql_flexible_server. \ No newline at end of file diff --git a/docs/tre-templates/workspace-services/mysql.md b/docs/tre-templates/workspace-services/mysql.md new file mode 100644 index 0000000000..8d000135fc --- /dev/null +++ b/docs/tre-templates/workspace-services/mysql.md @@ -0,0 +1,22 @@ +# MySQL Workspace Service + +See: [MySQL Azure](https://learn.microsoft.com/en-GB/azure/mysql/) + +## Prerequisites + +- [A base workspace deployed](../workspaces/base.md) + +- The MySQL workspace service container image needs building and pushing: + + `make workspace_service_bundle BUNDLE=mysql` + +## Authenticating to MySQL + +1. Navigate to the MySQL workspace service using the `Mysql fqdn` from the details tab. +2. Using the Password found in Key Vault and the Username `mysqladmin` +3. Connect to the MySQL server on a VM with the following command shown below + `mysql -h [fqdn] -u [username] -p [password]` + +## Upgrading to version 1.0.0 + +Migrating existing MySQL services to the major version 1.0.0 is not currently supported. This is due to the breaking change in the Terraform to migrate from the deprecated mysql_server to the new mysql_flexible_server. \ No newline at end of file diff --git a/templates/shared_services/gitea/parameters.json b/templates/shared_services/gitea/parameters.json index 71aebc5306..22a4df7f1d 100755 --- a/templates/shared_services/gitea/parameters.json +++ b/templates/shared_services/gitea/parameters.json @@ -45,6 +45,12 @@ "source": { "env": "ARM_ENVIRONMENT" } + }, + { + "name": "sql_sku", + "source": { + "env": "SQL_SKU" + } } ] } diff --git a/templates/shared_services/gitea/porter.yaml b/templates/shared_services/gitea/porter.yaml index 0133a6d015..e6c2fc70b8 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: 0.6.10 +version: 1.0.1 description: "A Gitea shared service" dockerfile: Dockerfile.tmpl registry: azuretre @@ -51,6 +51,9 @@ parameters: env: ARM_ENVIRONMENT type: string default: "public" + - name: sql_sku + type: string + default: "B | 4GB 2vCores" mixins: - terraform: @@ -89,6 +92,7 @@ install: mgmt_resource_group_name: ${ bundle.parameters.tfstate_resource_group_name } acr_name: ${ bundle.parameters.mgmt_acr_name } arm_environment: ${ bundle.parameters.arm_environment } + sql_sku: ${ bundle.parameters.sql_sku } backendConfig: resource_group_name: ${ bundle.parameters.tfstate_resource_group_name } storage_account_name: ${ bundle.parameters.tfstate_storage_account_name } @@ -109,6 +113,7 @@ upgrade: mgmt_resource_group_name: ${ bundle.parameters.tfstate_resource_group_name } acr_name: ${ bundle.parameters.mgmt_acr_name } arm_environment: ${ bundle.parameters.arm_environment } + sql_sku: ${ bundle.parameters.sql_sku } backendConfig: resource_group_name: ${ bundle.parameters.tfstate_resource_group_name } storage_account_name: ${ bundle.parameters.tfstate_storage_account_name } @@ -129,6 +134,7 @@ uninstall: mgmt_resource_group_name: ${ bundle.parameters.tfstate_resource_group_name } acr_name: ${ bundle.parameters.mgmt_acr_name } arm_environment: ${ bundle.parameters.arm_environment } + sql_sku: ${ bundle.parameters.sql_sku } backendConfig: resource_group_name: ${ bundle.parameters.tfstate_resource_group_name } storage_account_name: ${ bundle.parameters.tfstate_storage_account_name } diff --git a/templates/shared_services/gitea/template_schema.json b/templates/shared_services/gitea/template_schema.json index 145f8fe57e..463a6715f0 100644 --- a/templates/shared_services/gitea/template_schema.json +++ b/templates/shared_services/gitea/template_schema.json @@ -27,6 +27,19 @@ "default": "The Gitea shared service is used for mirroring external Git repositories. For instructions on how to create Git mirrors see [https://docs.gitea.com/usage/repo-mirror](https://docs.gitea.com/usage/repo-mirror).", "updateable": true }, + "sql_sku": { + "$id": "#/properties/sql_sku", + "type": "string", + "title": "MySQL server SKU", + "description": "MySQL server SKU", + "updateable": true, + "enum": [ + "B | 4GB 2vCores", + "GP | 8GB 2vCores", + "BC | 16GB 2vCores" + ], + "default": "B | 4GB 2vCores" + }, "is_exposed_externally": { "$id": "#/properties/is_exposed_externally", "type": "boolean", diff --git a/templates/shared_services/gitea/terraform/gitea-webapp.tf b/templates/shared_services/gitea/terraform/gitea-webapp.tf index f755033e2f..0fb5918777 100644 --- a/templates/shared_services/gitea/terraform/gitea-webapp.tf +++ b/templates/shared_services/gitea/terraform/gitea-webapp.tf @@ -46,9 +46,9 @@ resource "azurerm_linux_web_app" "gitea" { GITEA__database__SSL_MODE = "true" GITEA__database__DB_TYPE = "mysql" - GITEA__database__HOST = azurerm_mysql_server.gitea.fqdn - GITEA__database__NAME = azurerm_mysql_database.gitea.name - GITEA__database__USER = "${azurerm_mysql_server.gitea.administrator_login}@${azurerm_mysql_server.gitea.fqdn}" + GITEA__database__HOST = azurerm_mysql_flexible_server.gitea.fqdn + GITEA__database__NAME = azurerm_mysql_flexible_database.gitea.name + GITEA__database__USER = azurerm_mysql_flexible_server.gitea.administrator_login GITEA__database__PASSWD = "@Microsoft.KeyVault(SecretUri=${azurerm_key_vault_secret.db_password.id})" } diff --git a/templates/shared_services/gitea/terraform/locals.tf b/templates/shared_services/gitea/terraform/locals.tf index d5cc148fcf..5322583f29 100644 --- a/templates/shared_services/gitea/terraform/locals.tf +++ b/templates/shared_services/gitea/terraform/locals.tf @@ -6,6 +6,11 @@ locals { keyvault_name = "kv-${var.tre_id}" version = replace(replace(replace(data.local_file.version.content, "__version__ = \"", ""), "\"", ""), "\n", "") gitea_allowed_fqdns_list = distinct(compact(split(",", replace(var.gitea_allowed_fqdns, " ", "")))) + sql_sku = { + "B | 4GB 2vCores" = { value = "B_Standard_B2s" }, + "GP | 8GB 2vCores" = { value = "GP_Standard_D2ds_v4" }, + "BC | 16GB 2vCores" = { value = "MO_Standard_E2ds_v4" } + } tre_shared_service_tags = { tre_id = var.tre_id tre_shared_service_id = var.tre_resource_id diff --git a/templates/shared_services/gitea/terraform/mysql.tf b/templates/shared_services/gitea/terraform/mysql.tf index 42bea9c4ff..33d4a0fe9f 100644 --- a/templates/shared_services/gitea/terraform/mysql.tf +++ b/templates/shared_services/gitea/terraform/mysql.tf @@ -6,31 +6,25 @@ resource "random_password" "password" { min_special = 2 } -resource "azurerm_mysql_server" "gitea" { - name = "mysql-${var.tre_id}" - resource_group_name = local.core_resource_group_name - location = data.azurerm_resource_group.rg.location - administrator_login = "mysqladmin" - administrator_login_password = random_password.password.result - sku_name = "GP_Gen5_2" - storage_mb = 5120 - version = "8.0" - auto_grow_enabled = true - backup_retention_days = 7 - geo_redundant_backup_enabled = false - infrastructure_encryption_enabled = false - public_network_access_enabled = false - ssl_enforcement_enabled = true - ssl_minimal_tls_version_enforced = "TLS1_2" - tags = local.tre_shared_service_tags +resource "azurerm_mysql_flexible_server" "gitea" { + name = "mysql-${var.tre_id}" + resource_group_name = local.core_resource_group_name + location = data.azurerm_resource_group.rg.location + administrator_login = "mysqladmin" + administrator_password = random_password.password.result + sku_name = local.sql_sku[var.sql_sku].value + version = "8.0.21" + backup_retention_days = 7 + geo_redundant_backup_enabled = false + tags = local.tre_shared_service_tags - lifecycle { ignore_changes = [tags, threat_detection_policy] } + lifecycle { ignore_changes = [tags, zone] } } -resource "azurerm_mysql_database" "gitea" { +resource "azurerm_mysql_flexible_database" "gitea" { name = "gitea" resource_group_name = local.core_resource_group_name - server_name = azurerm_mysql_server.gitea.name + server_name = azurerm_mysql_flexible_server.gitea.name charset = "utf8" collation = "utf8_unicode_ci" } @@ -41,15 +35,15 @@ moved { } resource "azurerm_private_endpoint" "private_endpoint" { - name = "pe-${azurerm_mysql_server.gitea.name}" + name = "pe-${azurerm_mysql_flexible_server.gitea.name}" location = data.azurerm_resource_group.rg.location resource_group_name = local.core_resource_group_name subnet_id = data.azurerm_subnet.shared.id tags = local.tre_shared_service_tags private_service_connection { - private_connection_resource_id = azurerm_mysql_server.gitea.id - name = "psc-${azurerm_mysql_server.gitea.name}" + private_connection_resource_id = azurerm_mysql_flexible_server.gitea.id + name = "psc-${azurerm_mysql_flexible_server.gitea.name}" subresource_names = ["mysqlServer"] is_manual_connection = false } @@ -63,7 +57,7 @@ resource "azurerm_private_endpoint" "private_endpoint" { } resource "azurerm_key_vault_secret" "db_password" { - name = "${azurerm_mysql_server.gitea.name}-administrator-password" + name = "${azurerm_mysql_flexible_server.gitea.name}-administrator-password" value = random_password.password.result key_vault_id = data.azurerm_key_vault.keyvault.id tags = local.tre_shared_service_tags diff --git a/templates/shared_services/gitea/terraform/variables.tf b/templates/shared_services/gitea/terraform/variables.tf index a71d12ee5b..d0bf6da91d 100644 --- a/templates/shared_services/gitea/terraform/variables.tf +++ b/templates/shared_services/gitea/terraform/variables.tf @@ -33,3 +33,7 @@ variable "acr_name" { variable "arm_environment" { type = string } + +variable "sql_sku" { + type = string +} diff --git a/templates/workspace_services/gitea/parameters.json b/templates/workspace_services/gitea/parameters.json index 446a3685f4..811e0a5f3b 100755 --- a/templates/workspace_services/gitea/parameters.json +++ b/templates/workspace_services/gitea/parameters.json @@ -63,6 +63,12 @@ "source": { "env": "ARM_ENVIRONMENT" } + }, + { + "name": "sql_sku", + "source": { + "env": "SQL_SKU" + } } ] } diff --git a/templates/workspace_services/gitea/porter.yaml b/templates/workspace_services/gitea/porter.yaml index a56ed459a3..6c5f739872 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: 0.8.7 +version: 1.0.1 description: "A Gitea workspace service" dockerfile: Dockerfile.tmpl registry: azuretre @@ -60,6 +60,9 @@ parameters: env: ARM_ENVIRONMENT type: string default: "public" + - name: sql_sku + type: string + default: "B | 4GB 2vCores" - name: aad_authority_url type: string default: "https://login.microsoftonline.com" @@ -102,6 +105,7 @@ install: mgmt_resource_group_name: ${ bundle.parameters.mgmt_resource_group_name } aad_authority_url: ${ bundle.parameters.aad_authority_url } arm_environment: ${ bundle.parameters.arm_environment } + sql_sku: ${ bundle.parameters.sql_sku } backendConfig: resource_group_name: ${ bundle.parameters.tfstate_resource_group_name } storage_account_name: ${ bundle.parameters.tfstate_storage_account_name } @@ -124,6 +128,7 @@ upgrade: mgmt_resource_group_name: ${ bundle.parameters.mgmt_resource_group_name } aad_authority_url: ${ bundle.parameters.aad_authority_url } arm_environment: ${ bundle.parameters.arm_environment } + sql_sku: ${ bundle.parameters.sql_sku } backendConfig: resource_group_name: ${ bundle.parameters.tfstate_resource_group_name } storage_account_name: ${ bundle.parameters.tfstate_storage_account_name } @@ -146,6 +151,7 @@ uninstall: mgmt_resource_group_name: ${ bundle.parameters.mgmt_resource_group_name } aad_authority_url: ${ bundle.parameters.aad_authority_url } arm_environment: ${ bundle.parameters.arm_environment } + sql_sku: ${ bundle.parameters.sql_sku } backendConfig: resource_group_name: ${ bundle.parameters.tfstate_resource_group_name } storage_account_name: ${ bundle.parameters.tfstate_storage_account_name } diff --git a/templates/workspace_services/gitea/template_schema.json b/templates/workspace_services/gitea/template_schema.json index d9f10c1d8d..ef53192e76 100644 --- a/templates/workspace_services/gitea/template_schema.json +++ b/templates/workspace_services/gitea/template_schema.json @@ -27,6 +27,19 @@ "description": "Long form description of the workspace service, in markdown syntax", "default": "Gitea is a lightweight DevOps platform. Features include code hosting, code review, CI/CD, project management and package management. Documentation can be found here: [https://docs.gitea.com/](https://docs.gitea.com/).", "updateable": true + }, + "sql_sku": { + "$id": "#/properties/sql_sku", + "type": "string", + "title": "MySQL server SKU", + "description": "MySQL server SKU", + "updateable": true, + "enum": [ + "B | 4GB 2vCores", + "GP | 8GB 2vCores", + "BC | 16GB 2vCores" + ], + "default": "B | 4GB 2vCores" }, "is_exposed_externally": { "$id": "#/properties/is_exposed_externally", diff --git a/templates/workspace_services/gitea/terraform/gitea-webapp.tf b/templates/workspace_services/gitea/terraform/gitea-webapp.tf index 92c0b68ac8..c354a0ac84 100644 --- a/templates/workspace_services/gitea/terraform/gitea-webapp.tf +++ b/templates/workspace_services/gitea/terraform/gitea-webapp.tf @@ -56,9 +56,9 @@ resource "azurerm_linux_web_app" "gitea" { GITEA__service__SHOW_REGISTRATION_BUTTON = false GITEA__database__SSL_MODE = "true" GITEA__database__DB_TYPE = "mysql" - GITEA__database__HOST = azurerm_mysql_server.gitea.fqdn - GITEA__database__NAME = azurerm_mysql_database.gitea.name - GITEA__database__USER = "${azurerm_mysql_server.gitea.administrator_login}@${azurerm_mysql_server.gitea.fqdn}" + GITEA__database__HOST = azurerm_mysql_flexible_server.gitea.fqdn + GITEA__database__NAME = azurerm_mysql_flexible_database.gitea.name + GITEA__database__USER = azurerm_mysql_flexible_server.gitea.administrator_login GITEA__database__PASSWD = "@Microsoft.KeyVault(SecretUri=${azurerm_key_vault_secret.db_password.id})" } diff --git a/templates/workspace_services/gitea/terraform/locals.tf b/templates/workspace_services/gitea/terraform/locals.tf index 57122a09d3..f37c1e270a 100644 --- a/templates/workspace_services/gitea/terraform/locals.tf +++ b/templates/workspace_services/gitea/terraform/locals.tf @@ -8,6 +8,11 @@ locals { core_resource_group_name = "rg-${var.tre_id}" keyvault_name = lower("kv-${substr(local.workspace_resource_name_suffix, -20, -1)}") version = replace(replace(replace(data.local_file.version.content, "__version__ = \"", ""), "\"", ""), "\n", "") + sql_sku = { + "B | 4GB 2vCores" = { value = "B_Standard_B2s" }, + "GP | 8GB 2vCores" = { value = "GP_Standard_D2ds_v4" }, + "BC | 16GB 2vCores" = { value = "MO_Standard_E2ds_v4" } + } workspace_service_tags = { tre_id = var.tre_id tre_workspace_id = var.workspace_id diff --git a/templates/workspace_services/gitea/terraform/mysql.tf b/templates/workspace_services/gitea/terraform/mysql.tf index ddd855edf4..ce03f835c7 100644 --- a/templates/workspace_services/gitea/terraform/mysql.tf +++ b/templates/workspace_services/gitea/terraform/mysql.tf @@ -6,31 +6,25 @@ resource "random_password" "password" { min_special = 2 } -resource "azurerm_mysql_server" "gitea" { - name = "mysql-${local.service_resource_name_suffix}" - resource_group_name = data.azurerm_resource_group.ws.name - location = data.azurerm_resource_group.ws.location - administrator_login = "mysqladmin" - administrator_login_password = random_password.password.result - sku_name = "GP_Gen5_2" - storage_mb = 5120 - version = "8.0" - auto_grow_enabled = true - backup_retention_days = 7 - geo_redundant_backup_enabled = false - infrastructure_encryption_enabled = false - public_network_access_enabled = false - ssl_enforcement_enabled = true - ssl_minimal_tls_version_enforced = "TLS1_2" - tags = local.workspace_service_tags +resource "azurerm_mysql_flexible_server" "gitea" { + name = "mysql-${local.service_resource_name_suffix}" + resource_group_name = data.azurerm_resource_group.ws.name + location = data.azurerm_resource_group.ws.location + administrator_login = "mysqladmin" + administrator_password = random_password.password.result + sku_name = local.sql_sku[var.sql_sku].value + version = "8.0.21" + backup_retention_days = 7 + geo_redundant_backup_enabled = false + tags = local.workspace_service_tags - lifecycle { ignore_changes = [tags] } + lifecycle { ignore_changes = [tags, zone] } } -resource "azurerm_mysql_database" "gitea" { +resource "azurerm_mysql_flexible_database" "gitea" { name = "gitea" resource_group_name = data.azurerm_resource_group.ws.name - server_name = azurerm_mysql_server.gitea.name + server_name = azurerm_mysql_flexible_server.gitea.name charset = "utf8" collation = "utf8_unicode_ci" } @@ -41,15 +35,15 @@ moved { } resource "azurerm_private_endpoint" "private_endpoint" { - name = "pe-${azurerm_mysql_server.gitea.name}" + name = "pe-${azurerm_mysql_flexible_server.gitea.name}" location = data.azurerm_resource_group.ws.location resource_group_name = data.azurerm_resource_group.ws.name subnet_id = data.azurerm_subnet.services.id tags = local.workspace_service_tags private_service_connection { - private_connection_resource_id = azurerm_mysql_server.gitea.id - name = "psc-${azurerm_mysql_server.gitea.name}" + private_connection_resource_id = azurerm_mysql_flexible_server.gitea.id + name = "psc-${azurerm_mysql_flexible_server.gitea.name}" subresource_names = ["mysqlServer"] is_manual_connection = false } @@ -63,7 +57,7 @@ resource "azurerm_private_endpoint" "private_endpoint" { } resource "azurerm_key_vault_secret" "db_password" { - name = "${azurerm_mysql_server.gitea.name}-administrator-password" + name = "${azurerm_mysql_flexible_server.gitea.name}-administrator-password" value = random_password.password.result key_vault_id = data.azurerm_key_vault.ws.id tags = local.workspace_service_tags diff --git a/templates/workspace_services/gitea/terraform/variables.tf b/templates/workspace_services/gitea/terraform/variables.tf index 105bb3e014..181a27045e 100644 --- a/templates/workspace_services/gitea/terraform/variables.tf +++ b/templates/workspace_services/gitea/terraform/variables.tf @@ -24,3 +24,6 @@ variable "gitea_storage_limit" { variable "arm_environment" { type = string } +variable "sql_sku" { + type = string +} diff --git a/templates/workspace_services/gitea/version.txt b/templates/workspace_services/gitea/version.txt index 906d362f7d..43c4ab0058 100644 --- a/templates/workspace_services/gitea/version.txt +++ b/templates/workspace_services/gitea/version.txt @@ -1 +1 @@ -__version__ = "0.6.0" +__version__ = "0.6.1" diff --git a/templates/workspace_services/mysql/porter.yaml b/templates/workspace_services/mysql/porter.yaml index fd665488b8..7f7baccfe1 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: 0.4.5 +version: 1.0.1 description: "A MySQL workspace service" registry: azuretre dockerfile: Dockerfile.tmpl @@ -47,7 +47,7 @@ parameters: default: "public" - name: sql_sku type: string - default: "GP | 5GB 2vCores" + default: "B | 4GB 2vCores" - name: storage_mb type: integer default: 5120 @@ -65,6 +65,7 @@ outputs: type: string applyTo: - install + - upgrade install: - terraform: @@ -85,11 +86,23 @@ install: outputs: - name: mysql_fqdn upgrade: - - exec: - description: "Upgrade shared service" - command: echo - arguments: - - "This shared service does not implement upgrade action" + - terraform: + description: "Upgrade MySQL workspace service" + vars: + workspace_id: ${ bundle.parameters.workspace_id } + tre_id: ${ bundle.parameters.tre_id } + tre_resource_id: ${ bundle.parameters.id } + sql_sku: ${ bundle.parameters.sql_sku } + storage_mb: ${ bundle.parameters.storage_mb } + db_name: ${ bundle.parameters.db_name } + arm_environment: ${ bundle.parameters.arm_environment } + backendConfig: + resource_group_name: ${ bundle.parameters.tfstate_resource_group_name } + storage_account_name: ${ bundle.parameters.tfstate_storage_account_name } + container_name: ${ bundle.parameters.tfstate_container_name } + key: tre-workspace-service-mysql-${ bundle.parameters.id } + outputs: + - name: mysql_fqdn uninstall: - terraform: description: "Tear down MySQL workspace service" diff --git a/templates/workspace_services/mysql/template_schema.json b/templates/workspace_services/mysql/template_schema.json index 5513e5f115..d0cafd2bf9 100644 --- a/templates/workspace_services/mysql/template_schema.json +++ b/templates/workspace_services/mysql/template_schema.json @@ -11,13 +11,13 @@ "type": "string", "title": "MySQL server SKU", "description": "MySQL server SKU", + "updateable": true, "enum": [ - "GP | 5GB 2vCores", - "GP | 5GB 4vCores", - "GP | 5GB 6vCores", - "GP | 5GB 8vCores" + "B | 4GB 2vCores", + "GP | 8GB 2vCores", + "BC | 16GB 2vCores" ], - "default": "GP | 5GB 2vCores" + "default": "B | 4GB 2vCores" }, "storage_mb": { "$id": "#/properties/storage_mb", @@ -30,7 +30,8 @@ "$id": "#/properties/db_name", "type": "string", "title": "Database name", - "description": "Database name" + "description": "Database name", + "default": "tredb" } } } diff --git a/templates/workspace_services/mysql/terraform/locals.tf b/templates/workspace_services/mysql/terraform/locals.tf index d666bfa202..296c0b93e7 100644 --- a/templates/workspace_services/mysql/terraform/locals.tf +++ b/templates/workspace_services/mysql/terraform/locals.tf @@ -6,10 +6,9 @@ locals { keyvault_name = lower("kv-${substr(local.workspace_resource_name_suffix, -20, -1)}") core_resource_group_name = "rg-${var.tre_id}" sql_sku = { - "GP | 5GB 2vCores" = { value = "GP_Gen5_2" }, - "GP | 5GB 4vCores" = { value = "GP_Gen5_4" }, - "GP | 5GB 6vCores" = { value = "GP_Gen5_6" }, - "GP | 5GB 8vCores" = { value = "GP_Gen5_8" } + "B | 4GB 2vCores" = { value = "B_Standard_B2s" }, + "GP | 8GB 2vCores" = { value = "GP_Standard_D2ds_v4" }, + "BC | 16GB 2vCores" = { value = "MO_Standard_E2ds_v4" } } workspace_service_tags = { tre_id = var.tre_id diff --git a/templates/workspace_services/mysql/terraform/mysql.tf b/templates/workspace_services/mysql/terraform/mysql.tf index 9c0f387392..09d188e2eb 100644 --- a/templates/workspace_services/mysql/terraform/mysql.tf +++ b/templates/workspace_services/mysql/terraform/mysql.tf @@ -6,45 +6,39 @@ resource "random_password" "password" { min_special = 2 } -resource "azurerm_mysql_server" "mysql" { - name = "mysql-${local.service_resource_name_suffix}" - resource_group_name = data.azurerm_resource_group.ws.name - location = data.azurerm_resource_group.ws.location - administrator_login = "mysqladmin" - administrator_login_password = random_password.password.result - sku_name = local.sql_sku[var.sql_sku].value - storage_mb = var.storage_mb - version = "8.0" - auto_grow_enabled = true - backup_retention_days = 7 - geo_redundant_backup_enabled = false - infrastructure_encryption_enabled = false - public_network_access_enabled = false - ssl_enforcement_enabled = true - ssl_minimal_tls_version_enforced = "TLS1_2" - tags = local.workspace_service_tags - - lifecycle { ignore_changes = [tags] } +resource "azurerm_mysql_flexible_server" "mysql" { + name = "mysql-${local.service_resource_name_suffix}" + resource_group_name = data.azurerm_resource_group.ws.name + location = data.azurerm_resource_group.ws.location + administrator_login = "mysqladmin" + administrator_password = random_password.password.result + sku_name = local.sql_sku[var.sql_sku].value + version = "8.0.21" + backup_retention_days = 7 + geo_redundant_backup_enabled = false + tags = local.workspace_service_tags + + lifecycle { ignore_changes = [tags, zone] } } -resource "azurerm_mysql_database" "db" { +resource "azurerm_mysql_flexible_database" "db" { name = var.db_name resource_group_name = data.azurerm_resource_group.ws.name - server_name = azurerm_mysql_server.mysql.name + server_name = azurerm_mysql_flexible_server.mysql.name charset = "utf8" collation = "utf8_unicode_ci" } resource "azurerm_private_endpoint" "mysql_private_endpoint" { - name = "pe-${azurerm_mysql_server.mysql.name}" + name = "pe-${azurerm_mysql_flexible_server.mysql.name}" location = data.azurerm_resource_group.ws.location resource_group_name = data.azurerm_resource_group.ws.name subnet_id = data.azurerm_subnet.services.id tags = local.workspace_service_tags private_service_connection { - private_connection_resource_id = azurerm_mysql_server.mysql.id - name = "psc-${azurerm_mysql_server.mysql.name}" + private_connection_resource_id = azurerm_mysql_flexible_server.mysql.id + name = "psc-${azurerm_mysql_flexible_server.mysql.name}" subresource_names = ["mysqlServer"] is_manual_connection = false } @@ -58,7 +52,7 @@ resource "azurerm_private_endpoint" "mysql_private_endpoint" { } resource "azurerm_key_vault_secret" "db_password" { - name = "${azurerm_mysql_server.mysql.name}-administrator-password" + name = "${azurerm_mysql_flexible_server.mysql.name}-administrator-password" value = random_password.password.result key_vault_id = data.azurerm_key_vault.ws.id tags = local.workspace_service_tags diff --git a/templates/workspace_services/mysql/terraform/outputs.tf b/templates/workspace_services/mysql/terraform/outputs.tf index 824c5705ab..4b6aaa7fe0 100644 --- a/templates/workspace_services/mysql/terraform/outputs.tf +++ b/templates/workspace_services/mysql/terraform/outputs.tf @@ -1,3 +1,3 @@ output "mysql_fqdn" { - value = azurerm_mysql_server.mysql.fqdn + value = azurerm_mysql_flexible_server.mysql.fqdn } From 4f79ddb1f112698dafd9cc00145630cf4fe8051e Mon Sep 17 00:00:00 2001 From: Tim Allen Date: Thu, 4 Apr 2024 11:35:56 +0100 Subject: [PATCH 17/79] Firewall Policy Rule Fix (#3894) * add in dependencies to all of the route table associations * update fw version * update CHANGELOG.md --- CHANGELOG.md | 1 + .../shared_services/firewall/porter.yaml | 2 +- .../firewall/terraform/routetable.tf | 37 +++++++++++++++++++ 3 files changed, 39 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index cbf85f721f..17cd376908 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,7 @@ BUG FIXES: * 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)) +* Fix issue with firewall failing to deploy on a new TRE deploy ([#3775](https://github.com/microsoft/AzureTRE/issues/3775)) COMPONENTS: diff --git a/templates/shared_services/firewall/porter.yaml b/templates/shared_services/firewall/porter.yaml index e15ce6cc0b..fa65582077 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.1.6 +version: 1.1.7 description: "An Azure TRE Firewall shared service" dockerfile: Dockerfile.tmpl registry: azuretre diff --git a/templates/shared_services/firewall/terraform/routetable.tf b/templates/shared_services/firewall/terraform/routetable.tf index d5b82072f6..77aa64e15e 100644 --- a/templates/shared_services/firewall/terraform/routetable.tf +++ b/templates/shared_services/firewall/terraform/routetable.tf @@ -18,6 +18,13 @@ resource "azurerm_route_table" "rt" { resource "azurerm_subnet_route_table_association" "rt_shared_subnet_association" { subnet_id = data.azurerm_subnet.shared.id route_table_id = azurerm_route_table.rt.id + + depends_on = [ + azurerm_firewall.fw, + azurerm_firewall_policy_rule_collection_group.core, + azurerm_firewall_policy_rule_collection_group.dynamic_network, + azurerm_firewall_policy_rule_collection_group.dynamic_application + ] } resource "azurerm_subnet_route_table_association" "rt_resource_processor_subnet_association" { @@ -28,25 +35,55 @@ resource "azurerm_subnet_route_table_association" "rt_resource_processor_subnet_ depends_on = [ azurerm_firewall.fw, azurerm_firewall_policy_rule_collection_group.core, + azurerm_firewall_policy_rule_collection_group.dynamic_network, + azurerm_firewall_policy_rule_collection_group.dynamic_application ] } resource "azurerm_subnet_route_table_association" "rt_web_app_subnet_association" { subnet_id = data.azurerm_subnet.web_app.id route_table_id = azurerm_route_table.rt.id + + depends_on = [ + azurerm_firewall.fw, + azurerm_firewall_policy_rule_collection_group.core, + azurerm_firewall_policy_rule_collection_group.dynamic_network, + azurerm_firewall_policy_rule_collection_group.dynamic_application + ] } resource "azurerm_subnet_route_table_association" "rt_airlock_processor_subnet_association" { subnet_id = data.azurerm_subnet.airlock_processor.id route_table_id = azurerm_route_table.rt.id + + depends_on = [ + azurerm_firewall.fw, + azurerm_firewall_policy_rule_collection_group.core, + azurerm_firewall_policy_rule_collection_group.dynamic_network, + azurerm_firewall_policy_rule_collection_group.dynamic_application + ] } resource "azurerm_subnet_route_table_association" "rt_airlock_storage_subnet_association" { subnet_id = data.azurerm_subnet.airlock_storage.id route_table_id = azurerm_route_table.rt.id + + depends_on = [ + azurerm_firewall.fw, + azurerm_firewall_policy_rule_collection_group.core, + azurerm_firewall_policy_rule_collection_group.dynamic_network, + azurerm_firewall_policy_rule_collection_group.dynamic_application + ] } resource "azurerm_subnet_route_table_association" "rt_airlock_events_subnet_association" { subnet_id = data.azurerm_subnet.airlock_events.id route_table_id = azurerm_route_table.rt.id + + depends_on = [ + azurerm_firewall.fw, + azurerm_firewall_policy_rule_collection_group.core, + azurerm_firewall_policy_rule_collection_group.dynamic_network, + azurerm_firewall_policy_rule_collection_group.dynamic_application + ] } From 086be3308dfeadb61c3a086082da6bd7612bc5a9 Mon Sep 17 00:00:00 2001 From: Tim Allen Date: Thu, 4 Apr 2024 15:55:36 +0100 Subject: [PATCH 18/79] Prep For Release v0.17.0 (#3896) * update CHANGELOG.md * remove trailing space * Firewall Policy Rule Fix (#3894) * add in dependencies to all of the route table associations * update fw version * update CHANGELOG.md * update CHANGELOG.md * Firewall Policy Rule Fix (#3894) * add in dependencies to all of the route table associations * update fw version * update CHANGELOG.md * update CHANGELOG.md * update fw version --- CHANGELOG.md | 43 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 17cd376908..61bac4fa19 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,10 +1,21 @@ -## 0.17.0 (Unreleased) +## 0.18.0 (Unreleased) **BREAKING CHANGES & MIGRATIONS**: FEATURES: +ENHANCEMENTS: + +BUG FIXES: + +COMPONENTS: + +## 0.17.0 + +**BREAKING CHANGES & MIGRATIONS**: +* Update terraform MySQL resources to MySQL Flexible resources to fix depricating recources. ([#3892](https://github.com/microsoft/AzureTRE/pull/3892)) - Migration to new version of Gitea and MySQL, needs to be carried out manually, details to be included in a later release. + ENHANCEMENTS: * Switch from OpenCensus to OpenTelemetry for logging ([#3762](https://github.com/microsoft/AzureTRE/pull/3762)) * Extend PowerShell auto start script to start core VMs ([#3811](https://github.com/microsoft/AzureTRE/issues/3811)) @@ -23,6 +34,36 @@ BUG FIXES: * Fix issue with firewall failing to deploy on a new TRE deploy ([#3775](https://github.com/microsoft/AzureTRE/issues/3775)) COMPONENTS: +| name | version | +| ----- | ----- | +| devops | 0.5.1 | +| core | 0.9.6 | +| ui | 0.5.21 | +| tre-service-guacamole-linuxvm | 0.6.9 | +| tre-service-guacamole-import-reviewvm | 0.2.8 | +| tre-service-guacamole-export-reviewvm | 0.1.8 | +| tre-service-guacamole-windowsvm | 0.7.9 | +| tre-service-guacamole | 0.10.6 | +| tre-service-databricks | 1.0.3 | +| tre-service-mlflow | 0.7.7 | +| tre-service-innereye | 0.6.4 | +| tre-workspace-service-ohdsi | 0.2.4 | +| tre-workspace-service-gitea | 1.0.1 | +| tre-workspace-service-mysql | 1.0.1 | +| tre-user-resource-aml-compute-instance | 0.5.7 | +| tre-service-azureml | 0.8.10 | +| tre-workspace-service-health | 0.2.5 | +| tre-workspace-airlock-import-review | 0.12.16 | +| tre-workspace-unrestricted | 0.11.4 | +| tre-workspace-base | 1.5.3 | +| tre-shared-service-cyclecloud | 0.5.5 | +| tre-shared-service-databricks-private-auth | 0.1.5 | +| tre-shared-service-sonatype-nexus | 2.8.13 | +| tre-shared-service-admin-vm | 0.4.3 | +| tre-shared-service-firewall | 1.1.7 | +| tre-shared-service-gitea | 1.0.1 | +| tre-shared-service-certs | 0.5.1 | +| tre-shared-service-airlock-notifier | 0.9.0 | ## 0.16.0 (December 1, 2023) From de141651ad9fb9f58e7b78e383edf263eaa549d1 Mon Sep 17 00:00:00 2001 From: Tim Allen Date: Fri, 5 Apr 2024 12:42:03 +0100 Subject: [PATCH 19/79] Documentation Pipeline Fix (#3898) add in permissions to pipeline --- .github/workflows/build_docs.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build_docs.yml b/.github/workflows/build_docs.yml index 8cbfc132a7..b41c381973 100644 --- a/.github/workflows/build_docs.yml +++ b/.github/workflows/build_docs.yml @@ -6,7 +6,7 @@ on: types: [published] push: paths: - - 'docs/**' + - "docs/**" - mkdocs.yml branches: - main @@ -14,6 +14,8 @@ jobs: deploy: name: Deploy Documentation runs-on: ubuntu-latest + permissions: + contents: write steps: - name: Checkout main uses: actions/checkout@v3 @@ -27,7 +29,7 @@ jobs: run: | pip install -r docs/requirements.txt - name: Configure Git User - # Required by mike for the commit it does to the gh-pages branch + # Required by mike for the commit it does to the gh-pages branch run: | git config user.name "ci-docs" git config user.email "ci-docs@dummy.com" From ea63ebfaf4e838cf85988cd2cf53109a1acc35cd Mon Sep 17 00:00:00 2001 From: Tim Allen Date: Tue, 9 Apr 2024 06:37:40 +0100 Subject: [PATCH 20/79] Feature/GitHub actions update (#3897) * Update clean_validation_envs.yml * azure login (#19) Co-authored-by: Wojciech <57405495+thewbuk@users.noreply.github.com> * GitHub actions update (#22) * azure login * reset cron * update action versions --------- Co-authored-by: wojciechcloudkubed <159798789+wojciechcloudkubed@users.noreply.github.com> * change conclusion action * add in teams --------- Co-authored-by: wojciechcloudkubed <159798789+wojciechcloudkubed@users.noreply.github.com> --- .../devcontainer_run_command/action.yml | 2 +- .github/workflows/build_docker_images.yml | 32 ++++++------- .github/workflows/build_docs.yml | 4 +- .../workflows/build_validation_develop.yml | 4 +- .github/workflows/clean_validation_envs.yml | 4 +- .github/workflows/cli-package.yml | 4 +- .github/workflows/deploy_tre_reusable.yml | 45 ++++++++++--------- .github/workflows/flag_external_pr.yml | 4 +- .github/workflows/lets_encrypt.yml | 4 +- .github/workflows/pr_comment_bot.yml | 12 ++--- 10 files changed, 59 insertions(+), 56 deletions(-) diff --git a/.github/actions/devcontainer_run_command/action.yml b/.github/actions/devcontainer_run_command/action.yml index f403c60083..d39dada904 100644 --- a/.github/actions/devcontainer_run_command/action.yml +++ b/.github/actions/devcontainer_run_command/action.yml @@ -132,7 +132,7 @@ runs: echo "AZURE_ENVIRONMENT=$azure_env" >> $GITHUB_ENV - name: Azure Login - uses: azure/login@v1 + uses: azure/login@v2 if: contains(inputs.COMMAND, 'bootstrap') != true with: creds: ${{ inputs.AZURE_CREDENTIALS }} diff --git a/.github/workflows/build_docker_images.yml b/.github/workflows/build_docker_images.yml index 32511b64bc..f43117e608 100644 --- a/.github/workflows/build_docker_images.yml +++ b/.github/workflows/build_docker_images.yml @@ -21,18 +21,18 @@ jobs: steps: - name: Upload Event File # this step is required to publish test results from forks - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: Event File path: ${{ github.event_path }} - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: persist-credentials: false - name: Filter changes - uses: dorny/paths-filter@v2 + uses: dorny/paths-filter@v3 id: filter with: filters: | @@ -93,7 +93,7 @@ jobs: - name: Set up Docker Buildx id: buildx - uses: docker/setup-buildx-action@v2 + uses: docker/setup-buildx-action@v3 # Unit Tests are executed by calling the 'test-results' target in the # Dockerfile's. Test runner exit codes must be swallowed (and kept) so we @@ -105,7 +105,7 @@ jobs: if: | (steps.filter.outputs.api == 'true' || github.event_name == 'workflow_dispatch') - uses: docker/build-push-action@v4 + uses: docker/build-push-action@v5 with: context: ./api_app/ file: ./api_app/Dockerfile @@ -116,7 +116,7 @@ jobs: - name: "Check pytest failure file existence" id: check_api_test_result - uses: andstor/file-existence-action@v2 + uses: andstor/file-existence-action@v3 with: files: "test-results/pytest_api_unit_failed" @@ -125,7 +125,7 @@ jobs: (steps.filter.outputs.api == 'true' || github.event_name == 'workflow_dispatch') && steps.check_api_test_result.outputs.files_exists == 'false' - uses: docker/build-push-action@v4 + uses: docker/build-push-action@v5 with: context: ./api_app/ file: ./api_app/Dockerfile @@ -136,7 +136,7 @@ jobs: if: | (steps.filter.outputs.resource_processor == 'true' || github.event_name == 'workflow_dispatch') - uses: docker/build-push-action@v4 + uses: docker/build-push-action@v5 with: context: ./resource_processor file: ./resource_processor/vmss_porter/Dockerfile @@ -147,7 +147,7 @@ jobs: if: | (steps.filter.outputs.guacamole_server == 'true' || github.event_name == 'workflow_dispatch') - uses: docker/build-push-action@v4 + uses: docker/build-push-action@v5 with: context: ./templates/workspace_services/guacamole/guacamole-server file: ./templates/workspace_services/guacamole/guacamole-server/docker/Dockerfile @@ -158,7 +158,7 @@ jobs: - name: "Check maven failure file existence" id: check_maven_test_result - uses: andstor/file-existence-action@v2 + uses: andstor/file-existence-action@v3 with: files: "test-results/guacamole_package_failed" @@ -167,7 +167,7 @@ jobs: (steps.filter.outputs.guacamole_server == 'true' || github.event_name == 'workflow_dispatch') && steps.check_maven_test_result.outputs.files_exists == 'false' - uses: docker/build-push-action@v4 + uses: docker/build-push-action@v5 with: context: ./templates/workspace_services/guacamole/guacamole-server file: ./templates/workspace_services/guacamole/guacamole-server/docker/Dockerfile @@ -178,7 +178,7 @@ jobs: if: | (steps.filter.outputs.gitea == 'true' || github.event_name == 'workflow_dispatch') - uses: docker/build-push-action@v4 + uses: docker/build-push-action@v5 with: context: ./templates/shared_services/gitea/docker file: ./templates/shared_services/gitea/docker/Dockerfile @@ -195,7 +195,7 @@ jobs: if: | (steps.filter.outputs.airlock_processor == 'true' || github.event_name == 'workflow_dispatch') - uses: docker/build-push-action@v4 + uses: docker/build-push-action@v5 with: context: ./airlock_processor/ file: ./airlock_processor/Dockerfile @@ -206,7 +206,7 @@ jobs: - name: "Check pytest failure file existence" id: check_airlock_processor_test_result - uses: andstor/file-existence-action@v2 + uses: andstor/file-existence-action@v3 with: files: "test-results/pytest_airlock_processor_unit_failed" @@ -215,7 +215,7 @@ jobs: (steps.filter.outputs.airlock_processor == 'true' || github.event_name == 'workflow_dispatch') && steps.check_airlock_processor_test_result.outputs.files_exists == 'false' - uses: docker/build-push-action@v4 + uses: docker/build-push-action@v5 with: context: ./airlock_processor/ file: ./airlock_processor/Dockerfile @@ -224,7 +224,7 @@ jobs: - name: Upload Unit Test Results if: always() - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: test-results path: test-results diff --git a/.github/workflows/build_docs.yml b/.github/workflows/build_docs.yml index b41c381973..042f52ddf3 100644 --- a/.github/workflows/build_docs.yml +++ b/.github/workflows/build_docs.yml @@ -18,11 +18,11 @@ jobs: contents: write steps: - name: Checkout main - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: fetch-depth: 0 persist-credentials: true - - uses: actions/setup-python@v4 + - uses: actions/setup-python@v5 with: python-version: 3.x - name: Install Dependencies diff --git a/.github/workflows/build_validation_develop.yml b/.github/workflows/build_validation_develop.yml index b1f1b563bc..cd93a8cd48 100644 --- a/.github/workflows/build_validation_develop.yml +++ b/.github/workflows/build_validation_develop.yml @@ -19,14 +19,14 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout code - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: # Full git history is needed to get a proper list of # changed files within `super-linter` fetch-depth: 0 persist-credentials: false - - uses: dorny/paths-filter@v2 + - uses: dorny/paths-filter@v3 id: filter with: filters: | diff --git a/.github/workflows/clean_validation_envs.yml b/.github/workflows/clean_validation_envs.yml index c027224cb7..e5d5a38700 100644 --- a/.github/workflows/clean_validation_envs.yml +++ b/.github/workflows/clean_validation_envs.yml @@ -14,14 +14,14 @@ jobs: environment: CICD timeout-minutes: 30 steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: # This is CRITICAL since we're making decisions based on branch existence fetch-depth: 0 persist-credentials: false - name: Azure Login - uses: azure/login@v1 + uses: azure/login@v2 with: creds: ${{ secrets.AZURE_CREDENTIALS }} environment: ${{ (secrets.AZURE_ENVIRONMENT != '' && secrets.AZURE_ENVIRONMENT) || 'AzureCloud' }} diff --git a/.github/workflows/cli-package.yml b/.github/workflows/cli-package.yml index 862057d824..ee05e2c9ba 100644 --- a/.github/workflows/cli-package.yml +++ b/.github/workflows/cli-package.yml @@ -21,7 +21,7 @@ jobs: steps: - name: Checkout (GitHub) - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Build and run dev container task uses: ./.github/actions/devcontainer_run_command @@ -50,7 +50,7 @@ jobs: AZURE_ENVIRONMENT: ${{ secrets.AZURE_ENVIRONMENT }} - name: Upload Wheel as artifact - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: tre-cli path: dist/tre-*.whl diff --git a/.github/workflows/deploy_tre_reusable.yml b/.github/workflows/deploy_tre_reusable.yml index 31d9e03b39..9a2f986f97 100644 --- a/.github/workflows/deploy_tre_reusable.yml +++ b/.github/workflows/deploy_tre_reusable.yml @@ -185,7 +185,7 @@ jobs: details_url: "https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}" - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: persist-credentials: false # if the following values are missing (i.e. not triggered via comment workflow) @@ -193,10 +193,10 @@ jobs: ref: ${{ inputs.prRef }} - name: Set up Docker BuildKit - uses: docker/setup-buildx-action@v2 + uses: docker/setup-buildx-action@v3 - name: Azure Login - uses: azure/login@v1 + uses: azure/login@v2 with: creds: ${{ secrets.AZURE_CREDENTIALS }} environment: ${{ (vars.AZURE_ENVIRONMENT != '' && vars.AZURE_ENVIRONMENT) || 'AzureCloud' }} @@ -274,7 +274,7 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: persist-credentials: false # if the following values are missing (i.e. not triggered via comment workflow) @@ -298,7 +298,7 @@ jobs: environment: ${{ inputs.environmentName }} steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: persist-credentials: false # if the following values are missing (i.e. not triggered via comment workflow) @@ -322,7 +322,7 @@ jobs: environment: ${{ inputs.environmentName }} steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: persist-credentials: false # if the following values are missing (i.e. not triggered via comment workflow) @@ -408,7 +408,7 @@ jobs: environment: ${{ inputs.environmentName }} steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: persist-credentials: false # if the following values are missing (i.e. not triggered via comment workflow) @@ -454,7 +454,7 @@ jobs: environment: ${{ inputs.environmentName }} steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: persist-credentials: false # if the following values are missing (i.e. not triggered via comment workflow) @@ -500,7 +500,7 @@ jobs: environment: ${{ inputs.environmentName }} steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: persist-credentials: false # if the following values are missing (i.e. not triggered via comment workflow) @@ -560,7 +560,7 @@ jobs: environment: ${{ inputs.environmentName }} steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: persist-credentials: false # if the following values are missing (i.e. not triggered via comment workflow) @@ -609,7 +609,7 @@ jobs: environment: ${{ inputs.environmentName }} steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: persist-credentials: false # if the following values are missing (i.e. not triggered via comment workflow) @@ -643,7 +643,7 @@ jobs: environment: ${{ inputs.environmentName }} steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: persist-credentials: false # if the following values are missing (i.e. not triggered via comment workflow) @@ -692,7 +692,7 @@ jobs: environment: ${{ inputs.environmentName }} steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: persist-credentials: false # if the following values are missing (i.e. not triggered via comment workflow) @@ -723,7 +723,7 @@ jobs: timeout-minutes: 10 steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: persist-credentials: false # if the following values are missing (i.e. not triggered via comment workflow) @@ -752,7 +752,7 @@ jobs: - name: Upload Test Results if: always() - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: E2E Test (Smoke) Results path: "./e2e_tests/pytest_e2e_smoke.xml" @@ -766,7 +766,7 @@ jobs: timeout-minutes: 300 steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: persist-credentials: false # if the following values are missing (i.e. not triggered via comment workflow) @@ -796,7 +796,7 @@ jobs: - name: Upload Test Results if: always() - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: E2E Test Results path: "./e2e_tests/pytest_e2e_custom.xml" @@ -811,8 +811,11 @@ jobs: if: always() environment: ${{ inputs.environmentName }} steps: - - uses: technote-space/workflow-conclusion-action@v3 - + # - uses: technote-space/workflow-conclusion-action@v3 (removed due to archived repo and deprecated node.js version) + - uses: im-open/workflow-conclusion@v2.2.2 + id: conclusion + with: + github-token: ${{ secrets.GITHUB_TOKEN }} # For PR builds triggered from comment builds, the GITHUB_REF is set to main # so the checks aren't automatically associated with the PR # If prHeadSha is specified then explicity mark the checks for that SHA @@ -845,12 +848,12 @@ jobs: timezone: Europe/Zurich - name: Download Artifacts - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: path: artifacts - name: Publish E2E Test Results - uses: EnricoMi/publish-unit-test-result-action@v2 + uses: EnricoMi/publish-unit-test-result-action@v2.16.1 with: junit_files: "artifacts/**/*.xml" check_name: "E2E Test Results" diff --git a/.github/workflows/flag_external_pr.yml b/.github/workflows/flag_external_pr.yml index 8e1ac68996..45206688ad 100644 --- a/.github/workflows/flag_external_pr.yml +++ b/.github/workflows/flag_external_pr.yml @@ -15,13 +15,13 @@ jobs: steps: # Ensure we have the script file for the github-script action to use - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: persist-credentials: false - id: check_command name: Check for a command using GitHub script - uses: actions/github-script@v6 + uses: actions/github-script@v7 with: result-encoding: string script: | diff --git a/.github/workflows/lets_encrypt.yml b/.github/workflows/lets_encrypt.yml index 768ca0619a..d0f00e1dd0 100644 --- a/.github/workflows/lets_encrypt.yml +++ b/.github/workflows/lets_encrypt.yml @@ -23,12 +23,12 @@ jobs: environment: CICD steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: persist-credentials: false - name: Install Terraform - uses: hashicorp/setup-terraform@v2 + uses: hashicorp/setup-terraform@v3 with: terraform_version: 1.2.9 terraform_wrapper: false diff --git a/.github/workflows/pr_comment_bot.yml b/.github/workflows/pr_comment_bot.yml index 40457ed99e..cfc14dc739 100644 --- a/.github/workflows/pr_comment_bot.yml +++ b/.github/workflows/pr_comment_bot.yml @@ -32,14 +32,14 @@ jobs: steps: # Ensure we have the script file for the github-script action to use - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: persist-credentials: false # Determine whether the comment is a command - id: check_command name: Check for a command using GitHub script - uses: actions/github-script@v6 + uses: actions/github-script@v7 with: script: | const script = require('./.github/scripts/build.js') @@ -79,13 +79,13 @@ jobs: steps: # Ensure we have the script files - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: persist-credentials: false # Perform az login for destroy env script to be able to run - name: Azure Login - uses: azure/login@v1 + uses: azure/login@v2 with: creds: ${{ secrets.AZURE_CREDENTIALS }} environment: ${{ (vars.AZURE_ENVIRONMENT != '' && vars.AZURE_ENVIRONMENT) || 'AzureCloud' }} @@ -115,13 +115,13 @@ jobs: steps: # Ensure we have the script files - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: persist-credentials: false # Perform az login for destroy env script to be able to run - name: Azure Login - uses: azure/login@v1 + uses: azure/login@v2 with: creds: ${{ secrets.AZURE_CREDENTIALS }} environment: ${{ (vars.AZURE_ENVIRONMENT != '' && vars.AZURE_ENVIRONMENT) || 'AzureCloud' }} From 47c81826b5a4902fbf01d86004c422e7bfecd42f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 9 Apr 2024 19:39:14 +0300 Subject: [PATCH 21/79] Bump the npm_and_yarn group in /ui/app with 3 updates (#3891) * Bump the npm_and_yarn group in /ui/app with 3 updates Bumps the npm_and_yarn group in /ui/app with 3 updates: [express](https://github.com/expressjs/express), [follow-redirects](https://github.com/follow-redirects/follow-redirects) and [webpack-dev-middleware](https://github.com/webpack/webpack-dev-middleware). Updates `express` from 4.18.3 to 4.19.2 - [Release notes](https://github.com/expressjs/express/releases) - [Changelog](https://github.com/expressjs/express/blob/master/History.md) - [Commits](https://github.com/expressjs/express/compare/4.18.3...4.19.2) Updates `follow-redirects` from 1.15.5 to 1.15.6 - [Release notes](https://github.com/follow-redirects/follow-redirects/releases) - [Commits](https://github.com/follow-redirects/follow-redirects/compare/v1.15.5...v1.15.6) Updates `webpack-dev-middleware` from 5.3.3 to 5.3.4 - [Release notes](https://github.com/webpack/webpack-dev-middleware/releases) - [Changelog](https://github.com/webpack/webpack-dev-middleware/blob/v5.3.4/CHANGELOG.md) - [Commits](https://github.com/webpack/webpack-dev-middleware/compare/v5.3.3...v5.3.4) --- updated-dependencies: - dependency-name: express dependency-type: indirect dependency-group: npm_and_yarn-security-group - dependency-name: follow-redirects dependency-type: indirect dependency-group: npm_and_yarn-security-group - dependency-name: webpack-dev-middleware dependency-type: indirect dependency-group: npm_and_yarn-security-group ... Signed-off-by: dependabot[bot] * update ui version --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Tim Allen --- ui/app/package.json | 2 +- ui/app/yarn.lock | 28 ++++++++++++++-------------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/ui/app/package.json b/ui/app/package.json index 259dd9fcb9..5d5966da33 100644 --- a/ui/app/package.json +++ b/ui/app/package.json @@ -1,6 +1,6 @@ { "name": "tre-ui", - "version": "0.5.21", + "version": "0.5.22", "private": true, "dependencies": { "@azure/msal-browser": "^2.35.0", diff --git a/ui/app/yarn.lock b/ui/app/yarn.lock index e95e023cc8..98157cef4c 100644 --- a/ui/app/yarn.lock +++ b/ui/app/yarn.lock @@ -3955,10 +3955,10 @@ cookie-signature@1.0.6: resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== -cookie@0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" - integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== +cookie@0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.6.0.tgz#2798b04b071b0ecbff0dbb62a505a8efa4e19051" + integrity sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw== core-js-compat@^3.31.0, core-js-compat@^3.34.0: version "3.36.0" @@ -5141,16 +5141,16 @@ expect@^29.0.0: jest-util "^29.7.0" express@^4.17.3: - version "4.18.3" - resolved "https://registry.yarnpkg.com/express/-/express-4.18.3.tgz#6870746f3ff904dee1819b82e4b51509afffb0d4" - integrity sha512-6VyCijWQ+9O7WuVMTRBTl+cjNNIzD5cY5mQ1WM8r/LEkI2u8EYpOotESNwzNlyCn3g+dmjKYI6BmNneSr/FSRw== + version "4.19.2" + resolved "https://registry.yarnpkg.com/express/-/express-4.19.2.tgz#e25437827a3aa7f2a827bc8171bbbb664a356465" + integrity sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q== dependencies: accepts "~1.3.8" array-flatten "1.1.1" body-parser "1.20.2" content-disposition "0.5.4" content-type "~1.0.4" - cookie "0.5.0" + cookie "0.6.0" cookie-signature "1.0.6" debug "2.6.9" depd "2.0.0" @@ -5323,9 +5323,9 @@ flatted@^3.2.9: integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw== follow-redirects@^1.0.0: - version "1.15.5" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.5.tgz#54d4d6d062c0fa7d9d17feb008461550e3ba8020" - integrity sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw== + version "1.15.6" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.6.tgz#7f815c0cda4249c74ff09e95ef97c23b5fd0399b" + integrity sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA== for-each@^0.3.3: version "0.3.3" @@ -11320,9 +11320,9 @@ webidl-conversions@^6.1.0: integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== webpack-dev-middleware@^5.3.1: - version "5.3.3" - resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz#efae67c2793908e7311f1d9b06f2a08dcc97e51f" - integrity sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA== + version "5.3.4" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz#eb7b39281cbce10e104eb2b8bf2b63fce49a3517" + integrity sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q== dependencies: colorette "^2.0.10" memfs "^3.4.3" From bc2f233216727f2586c7e79cdd4ca0a12d4dfbbe Mon Sep 17 00:00:00 2001 From: wojciechcloudkubed <159798789+wojciechcloudkubed@users.noreply.github.com> Date: Thu, 11 Apr 2024 09:50:09 +0100 Subject: [PATCH 22/79] Update "Azure AD" references to "Microsoft Entra ID" (#3873) * rename Azure AD to Microsoft Entra Workforce ID * update Azure Active Directory to Microsoft Entra Workforce ID * replace * update version * change stale version * update from stale * update version * update readme * Microsoft Entra Workforce ID -> Microsoft Entra ID * AAD -> Microsoft Entra ID * Delete .devcontainer/devcontainer.json * Revert "Delete .devcontainer/devcontainer.json" This reverts commit 5dd6d5c2656c5304bf4adf6bb38e1a20735bbc8a. * revert code changes * remove double names * update version * go back version * api update version * revert for linting * revert test linting * fix linting * roll back linting * increase line length * fix linting * fix formatting * fix lintin 3 * update urls * update aad urls --------- Co-authored-by: Tim Allen --- README.md | 2 +- api_app/.env.sample | 4 +- api_app/_version.py | 2 +- core/version.txt | 2 +- docs/azure-tre-overview/airlock.md | 2 +- docs/azure-tre-overview/architecture.md | 2 +- .../tre-resources-breakdown.md | 8 ++-- docs/index.md | 2 +- docs/tre-admins/auth.md | 42 +++++++++---------- docs/tre-admins/environment-variables.md | 6 +-- docs/tre-admins/identities/api.md | 8 ++-- .../identities/application_admin.md | 12 +++--- docs/tre-admins/identities/auth-manual.md | 2 +- docs/tre-admins/identities/client.md | 6 +-- docs/tre-admins/identities/test-account.md | 6 +-- docs/tre-admins/identities/workspace.md | 8 ++-- .../setup-instructions/ad-tenant-choices.md | 8 ++-- .../cicd-pre-deployment-steps.md | 4 +- .../installing-base-workspace.md | 2 +- .../setup-instructions/prerequisites.md | 2 +- .../setup-instructions/setup-auth-entities.md | 6 +-- .../ui-install-base-workspace.md | 2 +- .../setup-instructions/workflows.md | 2 +- docs/tre-developers/api.md | 2 +- docs/tre-developers/ui.md | 6 +-- docs/tre-templates/shared-services/gitea.md | 2 +- docs/tre-templates/shared-services/nexus.md | 2 +- .../tre-templates/workspace-services/gitea.md | 2 +- .../authoring-workspace-templates.md | 4 +- .../local-development/local-development.md | 2 +- e2e_tests/.env.sample | 2 +- .../airlock-import-review/.env.sample | 4 +- templates/workspaces/base/.env.sample | 4 +- templates/workspaces/unrestricted/.env.sample | 4 +- ui/README.md | 2 +- 35 files changed, 88 insertions(+), 88 deletions(-) diff --git a/README.md b/README.md index 4bcb9bcc3e..2fbbb0b2b5 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,7 @@ Core features include: - Self-service provisioning of research tooling for research teams - Package and repository mirroring - PyPi, R-CRAN, Apt and more. - Extensible architecture - build your own service templates as required -- Azure Active Directory integration +- Microsoft Entra ID integration - Airlock - import and export - Cost reporting - Ready to workspace templates including: diff --git a/api_app/.env.sample b/api_app/.env.sample index acc5a0056f..0cf370e342 100644 --- a/api_app/.env.sample +++ b/api_app/.env.sample @@ -4,7 +4,7 @@ # LOGGING_LEVEL can be set to DEBUG, INFO, WARNING, ERROR or CRITICAL LOGGING_LEVEL="INFO" -# OAUTH information - client ids etc. for the AAD Apps +# OAUTH information - client ids etc. for the Microsoft Entra ID Apps # ---------------------------------------------------- # The AppId for the API service principal (TRE API) API_CLIENT_ID=__CHANGE_ME__ @@ -12,7 +12,7 @@ API_CLIENT_ID=__CHANGE_ME__ API_CLIENT_SECRET=__CHANGE_ME__ # The AppId for the Swagger service principal (TRE Swagger UI) SWAGGER_UI_CLIENT_ID=__CHANGE_ME__ -# The Azure AD tenant +# The Microsoft Entra Workforce tenant AAD_TENANT_ID=__CHANGE_ME__ # API parameters diff --git a/api_app/_version.py b/api_app/_version.py index 391a39001a..bcea63d014 100644 --- a/api_app/_version.py +++ b/api_app/_version.py @@ -1 +1 @@ -__version__ = "0.18.5" +__version__ = "0.18.6" diff --git a/core/version.txt b/core/version.txt index 50533e307d..f5b77301f5 100644 --- a/core/version.txt +++ b/core/version.txt @@ -1 +1 @@ -__version__ = "0.9.6" +__version__ = "0.9.7" diff --git a/docs/azure-tre-overview/airlock.md b/docs/azure-tre-overview/airlock.md index 791b024e71..91b50ee77c 100644 --- a/docs/azure-tre-overview/airlock.md +++ b/docs/azure-tre-overview/airlock.md @@ -117,7 +117,7 @@ Whenever the airlock process changes to a state of **Draft**, **Submitted**, **A When the state changes to `In-progress` the Workspace Owner (Airlock Manager) gets notified. > * The Notification mechanism is also data-driven, allowing an organization to extend the notifications behavior. The mechanism is exemplified with a Logic App determining the notifications logic. -> * Notifications will work with All TRE users being AAD users (guests or not), with email defined – if not, notifications will not be sent. +> * Notifications will work with All TRE users being Microsoft Entra ID users (guests or not), with email defined – if not, notifications will not be sent. ## Architecture diff --git a/docs/azure-tre-overview/architecture.md b/docs/azure-tre-overview/architecture.md index 89abf8f147..33a18718b3 100644 --- a/docs/azure-tre-overview/architecture.md +++ b/docs/azure-tre-overview/architecture.md @@ -8,7 +8,7 @@ All traffic has to be explicitly allowed by the Application Gateway or the Firew [![Architecture overview](../assets/archtecture-overview.png)](../assets/archtecture-overview.png) -The Azure resources outside the network boundries of the Azure TRE are Azure Active Directory, Microsoft Graph and TRE Management. TRE Management are resources used during deployment. +The Azure resources outside the network boundries of the Azure TRE are Microsoft Entra ID, Microsoft Graph and TRE Management. TRE Management are resources used during deployment. The Azure TRE core plane consists of two groups of components: diff --git a/docs/azure-tre-overview/tre-resources-breakdown.md b/docs/azure-tre-overview/tre-resources-breakdown.md index cb2272a6bb..b4f6a329e9 100644 --- a/docs/azure-tre-overview/tre-resources-breakdown.md +++ b/docs/azure-tre-overview/tre-resources-breakdown.md @@ -36,10 +36,10 @@ Once an Azure TRE has been [provisioned](../../tre-admins/setup-instructions/pre | fw-dsk-{TRE_ID} | Azure Firewall | [Azure TRE Firewall](../networking) restricts external outbound traffic from all TRE resources | [Azure Firewall](https://docs.microsoft.com/en-us/azure/firewall/overview) | kv-{TRE_ID} | Azure Key Vault | Management of TRE secrets & certificates | [Azure Key Vault](https://docs.microsoft.com/en-us/azure/key-vault/general/overview) | log-{TRE_ID} | Log Analytics Workspace | Azure Monitor Logs store for all TRE resources | [Log Analytics](https://docs.microsoft.com/en-us/azure/azure-monitor/logs/data-platform-logs#log-analytics-workspaces) -| id-agw-{TRE_ID} | Managed Identity | User-managed identity for TRE Application Gateway | [Managed Identities](https://docs.microsoft.com/en-us/azure/active-directory/managed-identities-azure-resources/overview) -| id-api-{TRE_ID} | Managed Identity | User-managed identity for TRE API App Service | [Managed Identities](https://docs.microsoft.com/en-us/azure/active-directory/managed-identities-azure-resources/overview) -| id-gitea-{TRE_ID} | Managed Identity | User-managed identity for TRE Gitea App Service | [Managed Identities](https://docs.microsoft.com/en-us/azure/active-directory/managed-identities-azure-resources/overview) -| id-vmss-{TRE_ID} | Managed Identity | User-managed identity for TRE Resource Processer (VMSS) | [Managed Identities](https://docs.microsoft.com/en-us/azure/active-directory/managed-identities-azure-resources/overview) +| id-agw-{TRE_ID} | Managed Identity | User-managed identity for TRE Application Gateway | [Managed Identities](https://learn.microsoft.com/en-us/entra/identity/managed-identities-azure-resources/overview) +| id-api-{TRE_ID} | Managed Identity | User-managed identity for TRE API App Service | [Managed Identities](https://learn.microsoft.com/en-us/entra/identity/managed-identities-azure-resources/overview) +| id-gitea-{TRE_ID} | Managed Identity | User-managed identity for TRE Gitea App Service | [Managed Identities](https://learn.microsoft.com/en-us/entra/identity/managed-identities-azure-resources/overview) +| id-vmss-{TRE_ID} | Managed Identity | User-managed identity for TRE Resource Processer (VMSS) | [Managed Identities](https://learn.microsoft.com/en-us/entra/identity/managed-identities-azure-resources/overview) | sb-{TRE_ID} | Service Bus Namespace | Messaging for TRE API | [Service Bus](https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-messaging-overview) | stappinsights{TRE_ID} | Storage Account | Storage for TRE Application Insights telemetry logs | [Storage Blobs](https://docs.microsoft.com/en-us/azure/storage/blobs/storage-blobs-overview) | stg{TRE_ID} | Storage Account | Files shares for TRE services such as Gitea, Nexus | [Storage Files](https://docs.microsoft.com/en-us/azure/storage/files/storage-files-introduction) diff --git a/docs/index.md b/docs/index.md index 5398470069..daa36b31fb 100644 --- a/docs/index.md +++ b/docs/index.md @@ -20,7 +20,7 @@ Core features include: - Self-service for research teams – research tooling creation and administration - Package and repository mirroring - Extensible architecture - build your own service templates as required -- Azure Active Directory integration +- Microsoft Entra ID integration - Airlock - Cost reporting - Ready to workspace templates including: diff --git a/docs/tre-admins/auth.md b/docs/tre-admins/auth.md index ffbad4846a..3cff5e5a90 100644 --- a/docs/tre-admins/auth.md +++ b/docs/tre-admins/auth.md @@ -1,21 +1,21 @@ # Introduction to Authentication and Authorization -[Azure Active Directory (AAD)](https://docs.microsoft.com/en-us/azure/active-directory/fundamentals/active-directory-whatis) is the backbone of Authentication and Authorization in the Trusted Research Environment. AAD holds the identities of all the TRE/workspace users, including administrators, and connects the identities with applications which define the permissions for each user role. +[Microsoft Entra ID](https://learn.microsoft.com/en-us/entra/fundamentals/whatis) is the backbone of Authentication and Authorization in the Trusted Research Environment. Microsoft Entra ID holds the identities of all the TRE/workspace users, including administrators, and connects the identities with applications which define the permissions for each user role. -It is common that the Azure Administrator is not necessarily the Azure Active Directory Administrator. Due to this, this step may have to be carried out by a different individual/team. We have automated this into a simple command, but should you wish, you can run these steps manually. +It is common that the Azure Administrator is not necessarily the Microsoft Entra ID Administrator. Due to this, this step may have to be carried out by a different individual/team. We have automated this into a simple command, but should you wish, you can run these steps manually. This page describes the automated Auth setup for TRE. ## Pre-requisites -The automation utilises a `make` command, which reads a few environment variables and creates the AAD assets. The following values are needed to be in place before you run the creation process. (`/config.yaml`) +The automation utilises a `make` command, which reads a few environment variables and creates the Microsoft Entra ID assets. The following values are needed to be in place before you run the creation process. (`/config.yaml`) | Key | Description | | ----------- | ----------- | |TRE_ID|This is used to build up the name of the identities| -|AAD_TENANT_ID|The tenant id of where your AAD identities will be placed. This can be different to the tenant where your Azure resources are created.| -| LOCATION | Where your Azure assets will be provisioned (eg. westeurope). This is used to add a redirect URI from the Swagger UI to the API Application. -|AUTO_WORKSPACE_APP_REGISTRATION| Default of `false`. Setting this to true grants the `Application.ReadWrite.All` and `Directory.Read.All` permission to the *Application Admin* identity. This identity is used to manage other AAD applications that it owns, e.g. Workspaces. If you do not set this, the identity will have `Application.ReadWrite.OwnedBy`. Further information can be found [here](./identities/application_admin.md). -|AUTO_WORKSPACE_GROUP_CREATION| Default of `false`. Setting this to true grants the `Group.ReadWrite.All` permission to the *Application Admin* identity. This identity can then create security groups aligned to each applciation role. Active Directory licencing implications need to be considered as Group assignment is a [premium feature](https://docs.microsoft.com/en-us/azure/architecture/multitenant-identity/app-roles#roles-using-azure-ad-app-roles). +|AAD_TENANT_ID|The tenant id of where your Microsoft Entra ID identities will be placed. This can be different to the tenant where your Azure resources are created.| +| LOCATION | Where your Azure assets will be provisioned (eg. westeurope). This is used to add a redirect URI from the Swagger UI to the API Application.| +|AUTO_WORKSPACE_APP_REGISTRATION| Default of `false`. Setting this to true grants the `Application.ReadWrite.All` and `Directory.Read.All` permission to the *Application Admin* identity. This identity is used to manage other Microsoft Entra ID applications that it owns, e.g. Workspaces. If you do not set this, the identity will have `Application.ReadWrite.OwnedBy`. Further information can be found [here](./identities/application_admin.md).| +|AUTO_WORKSPACE_GROUP_CREATION| Default of `false`. Setting this to true grants the `Group.ReadWrite.All` permission to the *Application Admin* identity. This identity can then create security groups aligned to each applciation role. Microsoft Entra ID licencing implications need to be considered as Group assignment is a [premium feature](https://docs.microsoft.com/en-us/azure/architecture/multitenant-identity/app-roles#roles-using-azure-ad-app-roles).| ## Create Authentication assets You can build all of the Identity assets by running the following at the command line @@ -28,8 +28,8 @@ The contents of your authentication section in `config.yaml` file should contain | Variable | Description | | -------- | ----------- | - | `APPLICATION_ADMIN_CLIENT_ID`| This client will administer AAD Applications for TRE | - | `APPLICATION_ADMIN_CLIENT_SECRET`| This client will administer AAD Applications for TRE | + | `APPLICATION_ADMIN_CLIENT_ID`| This client will administer Microsoft Entra ID Applications for TRE | + | `APPLICATION_ADMIN_CLIENT_SECRET`| This client will administer Microsoft Entra ID Applications for TRE | | `TEST_ACCOUNT_CLIENT_ID`| This will be created by default, but can be disabled by editing `/devops/scripts/create_aad_assets.sh`. This is the user that will run the tests for you | | `TEST_ACCOUNT_CLIENT_SECRET` | This will be created by default, but can be disabled by editing `/devops/scripts/create_aad_assets.sh`. This is the user that will run the tests for you | | `API_CLIENT_ID` | API application (client) ID. | @@ -38,16 +38,16 @@ The contents of your authentication section in `config.yaml` file should contain | `WORKSPACE_API_CLIENT_ID` | Each workspace is secured behind it's own AD Application| | `WORKSPACE_API_CLIENT_SECRET` | Each workspace is secured behind it's own AD Application. This is the secret for that application.| -### Using a separate Azure Active Directory tenant +### Using a separate Microsoft Entra ID tenant !!! caution - This section is only relevant it you are setting up a separate Azure Active Directory tenant for use. - This is only recommended for development environments when you don't have the required permissions to register applications in Azure Active Directory. - Using a separate Azure Active Directory tenant will prevent you from using certain Azure Active Directory integrated services. - For production deployments, work with your Azure Active Directory administrator to perform the required registration + This section is only relevant it you are setting up a separate Microsoft Entra ID tenant for use. + This is only recommended for development environments when you don't have the required permissions to register applications in Microsoft Entra ID. + Using a separate Microsoft Entra ID tenant will prevent you from using certain Microsoft Entra ID integrated services. + For production deployments, work with your Microsoft Entra ID administrator to perform the required registration -1. Create an Azure Active Directory tenant - To create a new Azure Active Directory tenant, [follow the steps here](https://docs.microsoft.com/en-us/azure/active-directory/develop/quickstart-create-new-tenant) +1. Create an Microsoft Entra ID tenant + To create a new Microsoft Entra ID tenant, [follow the steps here](https://learn.microsoft.com/en-us/entra/identity-platform/quickstart-create-new-tenant) 1. Follow the steps outlined above. `make auth` should logon to the correct tenant. Make sure you logon back to the correct tenant before running `make all`. @@ -56,23 +56,23 @@ The contents of your authentication section in `config.yaml` file should contain App registrations (represented by service principals) define the various access permissions to the TRE system. There are a total of five main Applications of interest. -| AAD Application | Description | +| Microsoft Entra ID Application | Description | | ----------- | ----------- | | TRE API application | This is the main application and used to secure access to the [TRE API](../tre-developers/api.md). | | TRE UX | This is the client application that will authenticate to the TRE/Workspace APIs. | -| Application Admin | There are times when workspace services need to update the AAD Application. For example, Guacamole needs to add a redirect URI to the Workspace AAD Application. This identity is used to manage AAD Applications. +| Application Admin | There are times when workspace services need to update the Microsoft Entra ID Application. For example, Guacamole needs to add a redirect URI to the Workspace Microsoft Entra ID Application. This identity is used to manage Microsoft Entra ID Applications. | | Automation App | This application is created so that you can run the tests or any CI/CD capability without the need to divulge a user password. This is particularly important if your tenant is MFA enabled. | | Workspace API | Typically you would have an application securing one or more workspaces that are created by TRE. | -Some of the applications require **admin consent** to allow them to validate users against the AAD. Check the Microsoft Docs on [Configure the admin consent workflow](https://docs.microsoft.com/en-us/azure/active-directory/manage-apps/configure-admin-consent-workflow) on how to request admin consent and handle admin consent requests. +Some of the applications require **admin consent** to allow them to validate users against the Microsoft Entra ID. Check the Microsoft Docs on [Configure the admin consent workflow](https://learn.microsoft.com/en-us/entra/identity/enterprise-apps/configure-admin-consent-workflow) on how to request admin consent and handle admin consent requests. -We strongly recommend that you use `make auth` to create the AAD assets as this has been tested extensively. Should you wish to create these manually via the [Azure Portal](https://docs.microsoft.com/azure/active-directory/develop/quickstart-register-app); more information can be found [here](./identities/auth-manual.md). +We strongly recommend that you use `make auth` to create the Microsoft Entra ID assets as this has been tested extensively. Should you wish to create these manually via the [Azure Portal](https://learn.microsoft.com/en-gb/entra/identity-platform/quickstart-register-app); more information can be found [here](./identities/auth-manual.md). ### Enabling users For a user to gain access to the system, they have to: -1. Have an identity in Azure AD +1. Have an identity in Microsoft Entra ID 1. Be linked with an app registration and assigned a role When these requirements are met, the user can sign-in using their credentials and use their privileges to use the API, login to workspace environment etc. based on their specific roles. diff --git a/docs/tre-admins/environment-variables.md b/docs/tre-admins/environment-variables.md index 0b56fd92b2..815251cd84 100644 --- a/docs/tre-admins/environment-variables.md +++ b/docs/tre-admins/environment-variables.md @@ -15,7 +15,7 @@ | `ARM_SUBSCRIPTION_ID` | *Optional for manual deployment. If not specified the `az cli` selected subscription will be used.* The Azure subscription ID for all resources. | | `ARM_CLIENT_ID` | *Optional for manual deployment without logged-in credentials.* The client whose azure identity will be used to deploy the solution. | | `ARM_CLIENT_SECRET` | *Optional for manual deployment without logged-in credentials.* The password of the client defined in `ARM_CLIENT_ID`. | -| `ARM_TENANT_ID` | *Optional for manual deployment. If not specified the `az cli` selected subscription will be used.* The AAD tenant of the client defined in `ARM_CLIENT_ID`. | +| `ARM_TENANT_ID` | *Optional for manual deployment. If not specified the `az cli` selected subscription will be used.* The Microsoft Entra ID tenant of the client defined in `ARM_CLIENT_ID`. | ## For Azure TRE instance in `/config.yaml` @@ -43,8 +43,8 @@ | Variable | Description | | -------- | ----------- | - | `APPLICATION_ADMIN_CLIENT_ID`| This client will administer AAD Applications for TRE | - | `APPLICATION_ADMIN_CLIENT_SECRET`| This client will administer AAD Applications for TRE | + | `APPLICATION_ADMIN_CLIENT_ID`| This client will administer Microsoft Entra ID Applications for TRE | + | `APPLICATION_ADMIN_CLIENT_SECRET`| This client will administer Microsoft Entra ID Applications for TRE | | `TEST_ACCOUNT_CLIENT_ID`| This will be created by default, but can be disabled by editing `/devops/scripts/create_aad_assets.sh`. This is the user that will run the tests for you | | `TEST_ACCOUNT_CLIENT_SECRET` | This will be created by default, but can be disabled by editing `/devops/scripts/create_aad_assets.sh`. This is the user that will run the tests for you | | `API_CLIENT_ID` | API application (client) ID. | diff --git a/docs/tre-admins/identities/api.md b/docs/tre-admins/identities/api.md index 36aeec5bc3..7dbff00b5c 100644 --- a/docs/tre-admins/identities/api.md +++ b/docs/tre-admins/identities/api.md @@ -1,10 +1,10 @@ # The API Identity ## Name -The API Identity is typically called ` API` within the AAD Portal. +The API Identity is typically called ` API` within the Microsoft Entra ID Portal. ## Purpose -This identity's credentials are stored in the `core` Key Vault and mandatory for the running of the Trusted Research Environment (TRE). It is required for the API Application, hosted in Azure App Service, to authenticate to Azure Active Directory and authorize the various operations. +This identity's credentials are stored in the `core` Key Vault and mandatory for the running of the Trusted Research Environment (TRE). It is required for the API Application, hosted in Azure App Service, to authenticate to Microsoft Entra ID and authorize the various operations. ## Application Roles @@ -49,7 +49,7 @@ Below is a sample where `TRE_ID` has value `mytre`: | -------- | ----------- | | `--name` | The prefix of the name of the app registrations. `TRE` will give you `TRE API`. | | `--tre-url` | Used to construct auth redirection URLs for the UI and Swagger app. Use the values of the [environment variables](../environment-variables.md) `TRE_ID` and `LOCATION` in the URL. Reply URL for the localhost, `http://localhost:8000/api/docs/oauth2-redirect`, will be added by default. | -| `--admin-consent` | Grants admin consent for the app registrations. This is required for them to function properly, but requires AAD admin privileges. | +| `--admin-consent` | Grants admin consent for the app registrations. This is required for them to function properly, but requires Microsoft Entra ID admin privileges. | | `--automation-clientid` | This is an optional parameter but will grant TREAdmin permission to the Service Principal of the Automation Admin.| | `--reset-password` | Optional, default is 0. When run in a headless fashion, 1 is passed in to always reset the password. | @@ -60,7 +60,7 @@ Below is a sample where `TRE_ID` has value `mytre`: You can create an automation account which will aid your development flow, if you don't want to do this you can omit the `--automation-clientid` switch. -You can run the script without the `--admin-consent` and ask your admin to grant consent. If you don't have permissions and just want to create a development environment then skip this step and see the steps in the "Using a separate Azure Active Directory tenant) below. +You can run the script without the `--admin-consent` and ask your admin to grant consent. If you don't have permissions and just want to create a development environment then skip this step and see the steps in the "Using a separate Microsoft Entra ID tenant) below. ## Environment Variables | Variable | Description | Location | diff --git a/docs/tre-admins/identities/application_admin.md b/docs/tre-admins/identities/application_admin.md index f64fcdd2d4..f685b67b60 100644 --- a/docs/tre-admins/identities/application_admin.md +++ b/docs/tre-admins/identities/application_admin.md @@ -1,7 +1,7 @@ # The Application Administrator Identity ## Purpose -This identity's credentials are stored in the core key vault and are used when you wish to update AAD Applications. For instance, when you add Guacamole as a Workspace Service, you would need to add the URI of the Guacamole Service as a Redirect URI to the Workspace App to complete the login flow. +This identity's credentials are stored in the core key vault and are used when you wish to update Microsoft Entra ID Applications. For instance, when you add Guacamole as a Workspace Service, you would need to add the URI of the Guacamole Service as a Redirect URI to the Workspace App to complete the login flow. ## Application Roles This application does not have any roles defined. @@ -9,10 +9,10 @@ This application does not have any roles defined. ## Microsoft Graph Permissions | Name | Type* | Admin consent required | TRE usage | | --- | -- | -----| --------- | -| Application.ReadWrite.OwnedBy | Application | Yes | This user has `Application.ReadWrite.OwnedBy` as a minimum permission for it to function. If the tenant is managed by a customer administrator, then this user must be added to the **Owners** of every workspace that is created. This will allow TRE to manage the AAD Application. This will be a manual process for the Tenant Admin. | -| Application.ReadWrite.All | Application | Yes | This permission is required to create workspace applications and administer any applications in the tenant. This is needed if the AAD Administrator has delegated AAD administrative operations to the TRE. There will be no need for the Tenant Admin to manually create workspace applications in the Tenant. | -| Directory.Read.All | Application | Yes | This permission is required to read User details from Azure Active Directory. This is needed if the AAD Administrator has delegated AAD administrative operations to the TRE. | -| Group.ReadWrite.All | Application | Yes | This permission is required to create and update Azure AD groups. This is requried if Azure AD groups are to be created automatically by the TRE. | +| Application.ReadWrite.OwnedBy | Application | Yes | This user has `Application.ReadWrite.OwnedBy` as a minimum permission for it to function. If the tenant is managed by a customer administrator, then this user must be added to the **Owners** of every workspace that is created. This will allow TRE to manage the Microsoft Entra ID Application. This will be a manual process for the Tenant Admin. | +| Application.ReadWrite.All | Application | Yes | This permission is required to create workspace applications and administer any applications in the tenant. This is needed if the Microsoft Entra ID Administrator has delegated Microsoft Entra ID administrative operations to the TRE. There will be no need for the Tenant Admin to manually create workspace applications in the Tenant. | +| Directory.Read.All | Application | Yes | This permission is required to read User details from Microsoft Entra ID. This is needed if the Microsoft Entra ID Administrator has delegated Microsoft Entra ID administrative operations to the TRE. | +| Group.ReadWrite.All | Application | Yes | This permission is required to create and update Microsoft Entra ID groups. This is requried if Microsoft Entra ID groups are to be created automatically by the TRE. | '*' See the difference between [delegated and application permission](https://docs.microsoft.com/graph/auth/auth-concepts#delegated-and-application-permissions) types. See [Microsoft Graph permissions reference](https://docs.microsoft.com/graph/permissions-reference) for more details. @@ -28,7 +28,7 @@ This user is currently only used from the Porter bundles hosted on the Resource | Argument | Description | | -------- | ----------- | | `--name` | This is used to put a friendly name to the Application that can be seen in the portal. It is typical to use the name of your TRE instance. | -| `--admin-consent` | If you have the appropriate permission to grant admin consent, then pass in this argument. If you do not, you will have to ask an AAD Admin to consent after you have created the identity. Consent is required for this permission. | +| `--admin-consent` | If you have the appropriate permission to grant admin consent, then pass in this argument. If you do not, you will have to ask an Microsoft Entra ID Admin to consent after you have created the identity. Consent is required for this permission. | | `--application-permission` | This is a comma seperated list of the permissions that need to be assigned. For exampler `Application.ReadWrite.All,Directory.Read.All,Group.ReadWrite.All` | | `--reset-password` | Optional, default is 0. When run in a headless fashion, 1 is passed in to always reset the password. | diff --git a/docs/tre-admins/identities/auth-manual.md b/docs/tre-admins/identities/auth-manual.md index bc55df319f..7c09eca3b9 100644 --- a/docs/tre-admins/identities/auth-manual.md +++ b/docs/tre-admins/identities/auth-manual.md @@ -1,4 +1,4 @@ -# Manually creating AAD identities +# Manually creating Microsoft Entra ID identities This guide is here if you wanted to create these Application Registrations manually. diff --git a/docs/tre-admins/identities/client.md b/docs/tre-admins/identities/client.md index 60e5ef9732..725d3ec3f2 100644 --- a/docs/tre-admins/identities/client.md +++ b/docs/tre-admins/identities/client.md @@ -1,7 +1,7 @@ # TRE Client UX ## Name -The Client Identity is typically called ` UX` within the AAD Portal. +The Client Identity is typically called ` UX` within the Microsoft Entra ID Portal. ## Purpose This identity is used by any public facing client application so that user impersonation can occur to the Core API and any Workspace Applications. @@ -38,9 +38,9 @@ Example on how to run the script: | -------- | ----------- | | `--name` | The prefix of the name of the app registrations. `TRE` will give you `TRE API`. | | `--tre-url` | Used to construct auth redirection URLs for the UI and Swagger app. Use the values of the [environment variables](../environment-variables.md) `TRE_ID` and `LOCATION` in the URL. Reply URL for the localhost, `http://localhost:8000/api/docs/oauth2-redirect`, will be added by default. | -| `--admin-consent` | Grants admin consent for the app registrations. This is required for them to function properly, but requires AAD admin privileges. | +| `--admin-consent` | Grants admin consent for the app registrations. This is required for them to function properly, but requires Microsoft Entra ID admin privileges. | | `--automation-clientid` | This is an optional parameter but will create an application with test users with permission to use the `TRE API` and `TRE Swagger UI` | -| `--reset-password` | Optional, default is 0. This flag has no relevance when creating the UX as there is no password for the AAD Application. | +| `--reset-password` | Optional, default is 0. This flag has no relevance when creating the UX as there is no password for the Microsoft Entra ID Application. | ## Redirect URLs diff --git a/docs/tre-admins/identities/test-account.md b/docs/tre-admins/identities/test-account.md index c913885730..c06a71f412 100644 --- a/docs/tre-admins/identities/test-account.md +++ b/docs/tre-admins/identities/test-account.md @@ -1,7 +1,7 @@ # TRE Automation Admin Application ## Name -The Automation Application is typically called ` Automation Admin` within the AAD Portal. +The Automation Application is typically called ` Automation Admin` within the Microsoft Entra ID Portal. ## Purpose This application is used to authorize end-to-end test scenarios. @@ -48,10 +48,10 @@ Example on how to run the script: ### Create this application from the portal (optional) -To create an application registration for automation, open the Azure Active Directory tenant for your TRE in the portal and navigate to "App Registrations". +To create an application registration for automation, open the Microsoft Entra ID tenant for your TRE in the portal and navigate to "App Registrations". Click "New registration" as shown in the image below. -![Screenshot of Azure portal showing "New registration" in Azure Active Directory](../../assets/tre-automation-new-app-registration.png) +![Screenshot of Azure portal showing "New registration" in Microsoft Entra ID](../../assets/tre-automation-new-app-registration.png) Enter a name for the application registration and click "Register". diff --git a/docs/tre-admins/identities/workspace.md b/docs/tre-admins/identities/workspace.md index 6f28293bd6..8bc5b1989a 100644 --- a/docs/tre-admins/identities/workspace.md +++ b/docs/tre-admins/identities/workspace.md @@ -25,7 +25,7 @@ This identity should only be used by the API Application. ## How to create There are two mechanisms for creating Workspace Applications -- Manually by your AAD Tenant Admin (default) +- Manually by your Microsoft Entra ID Tenant Admin (default) - Automatically by TRE. Please see this [guide](./application_admin.md) if you wish this to be automatic. !!! caution @@ -46,9 +46,9 @@ Example on how to run the script: | -------- | ----------- | | `--name` | The name of the application. This will be suffixed with 'API' by the script. | | `--ux-clientid` | This value is one of the outputs when you first ran the script. It is mandatory if you use admin-consent. | -| `--admin-consent` | Grants admin consent for the app registrations. This is required for them to function properly, but requires AAD admin privileges. | +| `--admin-consent` | Grants admin consent for the app registrations. This is required for them to function properly, but requires Microsoft Entra ID admin privileges. | | `--automation-clientid` | This is an optional parameter but will grant the Automation App (created in step 1) permission to the new workspace app. | -| `--application-admin-clientid` | This is a required parameter , and should be a client id that will be added to the Owners of the AAD Application so that it can be administered within TRE. | +| `--application-admin-clientid` | This is a required parameter , and should be a client id that will be added to the Owners of the Microsoft Entra ID Application so that it can be administered within TRE. | | `--reset-password` | Optional, default is 0. When run in a headless fashion, 1 is passed in to always reset the password. | @@ -64,4 +64,4 @@ If you do not wish to grant the Automation App permission to your workspace, jus |WORKSPACE_API_CLIENT_SECRET|The client secret|`./config.yaml`| ## Comments -When the Workspace AAD app is registered by running `make auth`, the `Workspace Scope Id` is the same as the Client Id. When the Workspace AAD app is created by the base workspace, the `Workspace Scope Id` will be in this format `api://_ws_` +When the Workspace Microsoft Entra ID app is registered by running `make auth`, the `Workspace Scope Id` is the same as the Client Id. When the Workspace Microsoft Entra ID app is created by the base workspace, the `Workspace Scope Id` will be in this format `api://_ws_` diff --git a/docs/tre-admins/setup-instructions/ad-tenant-choices.md b/docs/tre-admins/setup-instructions/ad-tenant-choices.md index 50eef29d25..94b600a08b 100644 --- a/docs/tre-admins/setup-instructions/ad-tenant-choices.md +++ b/docs/tre-admins/setup-instructions/ad-tenant-choices.md @@ -1,4 +1,4 @@ -# Azure Active Directory Tenant Choices +# Microsoft Entra ID Tenant Choices ## Dedicated Tenant for TRE @@ -10,13 +10,13 @@ Users from your corporate tenant can be guested into this new TRE tenant. ## Corporate Tenant -It is possible to use your corporate tenant for TRE. This does have the advantage of only managing a single tenant, but your AAD Tenant Admin must be aware of what TRE brings to your organization and must be prepared to carry out some admin tasks, like creating an AAD Application every time a new Workspace is created. +It is possible to use your corporate tenant for TRE. This does have the advantage of only managing a single tenant, but your Microsoft Entra ID Tenant Admin must be aware of what TRE brings to your organization and must be prepared to carry out some admin tasks, like creating an Microsoft Entra ID Application every time a new Workspace is created. [![TRE Tenant](../../assets/corp-tenant.png)](../../assets/corp-tenant.png) -## Create Dedicated Azure Active Directory Tenant +## Create Dedicated Microsoft Entra ID Tenant -Follow [this guide](https://learn.microsoft.com/en-us/azure/active-directory/fundamentals/active-directory-access-create-new-tenant) to create new dedicated tenant. +Follow [this guide](https://learn.microsoft.com/en-us/entra/fundamentals/create-new-tenant) to create new dedicated tenant. ## Next steps diff --git a/docs/tre-admins/setup-instructions/cicd-pre-deployment-steps.md b/docs/tre-admins/setup-instructions/cicd-pre-deployment-steps.md index d089d1967d..07a231ef0b 100644 --- a/docs/tre-admins/setup-instructions/cicd-pre-deployment-steps.md +++ b/docs/tre-admins/setup-instructions/cicd-pre-deployment-steps.md @@ -92,8 +92,8 @@ In a previous [Setup Auth configuration](./setup-auth-entities.md) step authenti | Secret Name | Description | | -------- | ----------- | | `AAD_TENANT_ID` | Tenant id against which auth is performed. | - | `APPLICATION_ADMIN_CLIENT_ID`| This client will administer AAD Applications for TRE | - | `APPLICATION_ADMIN_CLIENT_SECRET`| This client will administer AAD Applications for TRE | + | `APPLICATION_ADMIN_CLIENT_ID`| This client will administer Microsoft Entra ID Applications for TRE | + | `APPLICATION_ADMIN_CLIENT_SECRET`| This client will administer Microsoft Entra ID Applications for TRE | | `TEST_ACCOUNT_CLIENT_ID`| This will be created by default, but can be disabled by editing `/devops/scripts/create_aad_assets.sh`. This is the user that will run the tests for you | | `TEST_ACCOUNT_CLIENT_SECRET` | This will be created by default, but can be disabled by editing `/devops/scripts/create_aad_assets.sh`. This is the user that will run the tests for you | | `API_CLIENT_ID` | API application (client) ID. | diff --git a/docs/tre-admins/setup-instructions/installing-base-workspace.md b/docs/tre-admins/setup-instructions/installing-base-workspace.md index 01a9350b3f..25caddc50c 100644 --- a/docs/tre-admins/setup-instructions/installing-base-workspace.md +++ b/docs/tre-admins/setup-instructions/installing-base-workspace.md @@ -29,7 +29,7 @@ As explained in the [auth guide](../auth.md), every workspace has a correspondin ``` !!! caution - If you're using a separate tenant for AAD app registrations to the one where you've deployed the TRE infrastructure resources, ensure you've signed into that tenant in the `az cli` before running the above command. See **Using a separate Azure Active Directory tenant** in [Setup Auth configuration](setup-auth-entities.md) for more details. + If you're using a separate tenant for Microsoft Entra ID app registrations to the one where you've deployed the TRE infrastructure resources, ensure you've signed into that tenant in the `az cli` before running the above command. See **Using a separate Microsoft Entra ID tenant** in [Setup Auth configuration](setup-auth-entities.md) for more details. Running the script will report `workspace_api_client_id` and `workspace_api_client_secret` for the generated app. Add these under the authenrication section in `/config.yaml` so that automated testing will work. You also need to use `workspace_api_client_id` in the POST body below. diff --git a/docs/tre-admins/setup-instructions/prerequisites.md b/docs/tre-admins/setup-instructions/prerequisites.md index b4ac864188..78b6dbd47e 100644 --- a/docs/tre-admins/setup-instructions/prerequisites.md +++ b/docs/tre-admins/setup-instructions/prerequisites.md @@ -3,7 +3,7 @@ To deploy an Azure TRE instance, the following assets and tools are required: * [Azure subscription](https://azure.microsoft.com) -* [Azure Active Directory (AAD)](https://docs.microsoft.com/azure/active-directory/fundamentals/active-directory-whatis) tenant in which you can create application registrations +* [Microsoft Entra ID](https://learn.microsoft.com/en-gb/entra/fundamentals/whatis) tenant in which you can create application registrations * Git client such as [Git](https://git-scm.com/) or [GitHub Desktop](https://desktop.github.com/) * [Docker Desktop](https://www.docker.com/products/docker-desktop) diff --git a/docs/tre-admins/setup-instructions/setup-auth-entities.md b/docs/tre-admins/setup-instructions/setup-auth-entities.md index dc4f91b91b..c1616c83cb 100644 --- a/docs/tre-admins/setup-instructions/setup-auth-entities.md +++ b/docs/tre-admins/setup-instructions/setup-auth-entities.md @@ -19,9 +19,9 @@ Next, you will set the configuration variables for the specific Azure TRE instan The rest of the variables can have their default values. -1. Decide on a name for your `tre_id` ID for the Azure TRE instance. The value will be used in various Azure resources and AAD application names. It **needs to be globally unique and less than 12 characters in length**. Use **only** lowercase alphanumerics. Choose wisely! +1. Decide on a name for your `tre_id` ID for the Azure TRE instance. The value will be used in various Azure resources and Microsoft Entra ID application names. It **needs to be globally unique and less than 12 characters in length**. Use **only** lowercase alphanumerics. Choose wisely! 1. Once you have decided on which AD Tenant paradigm, then you should be able to set `aad_tenant_id` in the authentication section in your `config.yaml` file. -1. Your AAD Tenant Admin can now use the terminal window in Visual Studio Code to execute the following script from within the development container to create all the AAD Applications that are used for TRE. The details of the script are covered in the [auth document](../auth.md). +1. Your Microsoft Entra ID Tenant Admin can now use the terminal window in Visual Studio Code to execute the following script from within the development container to create all the Microsoft Entra ID Applications that are used for TRE. The details of the script are covered in the [auth document](../auth.md). ```bash make auth @@ -33,7 +33,7 @@ Next, you will set the configuration variables for the specific Azure TRE instan In case you have several subscriptions and would like to change your default subscription use `az account set --subscription ` !!! note - The full functionality of the script requires directory admin privileges. You may need to contact your friendly Azure Active Directory admin to complete this step. The app registrations can be created manually in Azure Portal too. For more information, see [Authentication and authorization](../auth.md). + The full functionality of the script requires directory admin privileges. You may need to contact your friendly Microsoft Entra ID admin to complete this step. The app registrations can be created manually in Azure Portal too. For more information, see [Authentication and authorization](../auth.md). All other variables can have their default values for now. diff --git a/docs/tre-admins/setup-instructions/ui-install-base-workspace.md b/docs/tre-admins/setup-instructions/ui-install-base-workspace.md index 46d067ab13..25b4e2c213 100644 --- a/docs/tre-admins/setup-instructions/ui-install-base-workspace.md +++ b/docs/tre-admins/setup-instructions/ui-install-base-workspace.md @@ -57,7 +57,7 @@ As explained in the [auth guide](../auth.md), every workspace has a correspondin ``` !!! caution - If you're using a separate tenant for AAD app registrations to the one where you've deployed the TRE infrastructure resources, ensure you've signed into that tenant in the `az cli` before running the above command. See **Using a separate Azure Active Directory tenant** in [Setup Auth configuration](./setup-auth-entities.md) for more details. + If you're using a separate tenant for Microsoft Entra ID app registrations to the one where you've deployed the TRE infrastructure resources, ensure you've signed into that tenant in the `az cli` before running the above command. See **Using a separate Microsoft Entra ID tenant** in [Setup Auth configuration](./setup-auth-entities.md) for more details. Running the script will report `WORKSPACE_API_CLIENT_ID` and `WORKSPACE_API_CLIENT_SECRET` for the generated app. Set these under authentication section in `config.yaml` so that automated testing will work. You also need to use `WORKSPACE_API_CLIENT_ID` and `WORKSPACE_API_CLIENT_SECRET` in the form. diff --git a/docs/tre-admins/setup-instructions/workflows.md b/docs/tre-admins/setup-instructions/workflows.md index 28db90d053..a432e90463 100644 --- a/docs/tre-admins/setup-instructions/workflows.md +++ b/docs/tre-admins/setup-instructions/workflows.md @@ -74,7 +74,7 @@ Configure the TRE API and Swagger UI repository secrets |
Secret name
| Description | | ----------- | ----------- | -| `AAD_TENANT_ID` | The tenant ID of the Azure AD. | +| `AAD_TENANT_ID` | The tenant ID of the Microsoft Entra ID. | | `SWAGGER_UI_CLIENT_ID` | The application (client) ID of the TRE Swagger UI app. | | `API_CLIENT_ID` | The application (client) ID of the TRE API app. | | `API_CLIENT_SECRET` | The application password (client secret) of the TRE API app. | diff --git a/docs/tre-developers/api.md b/docs/tre-developers/api.md index e35e0cd83d..06c2195aa6 100644 --- a/docs/tre-developers/api.md +++ b/docs/tre-developers/api.md @@ -144,7 +144,7 @@ make auth ``` Alternatively, in Azure Portal you can add the redirect URL to the App Registration. -Under AAD, find App Registrations, and find the App Registration with the ID shown in the error message. +Under Microsoft Entra ID, find App Registrations, and find the App Registration with the ID shown in the error message. There, go to Redirect URL and add the URL given to you by the error message (it will have a form of `https://${TRE_ID}.westeurope.cloudapp.azure.com/api/docs/oauth2-redirect`). diff --git a/docs/tre-developers/ui.md b/docs/tre-developers/ui.md index 433985875f..e9b4a04441 100644 --- a/docs/tre-developers/ui.md +++ b/docs/tre-developers/ui.md @@ -8,7 +8,7 @@ The UI is built upon several popular web frameworks: - Typescript - React Router v6 for client side routing - Fluent UI [Fluent UI Docs](https://developer.microsoft.com/en-us/fluentui#/controls/web) -- MSAL v2: AAD authentication [msal-react docs](https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/dev/lib/msal-react) +- MSAL v2: Microsoft Entra ID authentication [msal-react docs](https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/dev/lib/msal-react) ### Folder structure @@ -27,7 +27,7 @@ ui ### AuthN + AuthZ For further details on the auth setup, see [Auth](../tre-admins/auth.md). -As stated above, AAD is used for Authentication and Authorization. There are 3 AAD apps involved here: +As stated above, Microsoft Entra ID is used for Authentication and Authorization. There are 3 Microsoft Entra ID apps involved here: - **TRE UX**. This is the app that the user authenticates against. Once authenticated, the client will request an access token for the `TRE Api`. - **TRE Api**. In the access token response from this app we get the user's role membership for TRE-level roles (`TREAdmin` / `TREUser`). Based on these role memberships, aspects of the UI will be made available. If the user is in a `TREAdmin` role, they will see buttons to create workspaces for instance. When the user navigates into a Workspace, the client will request an access token for that `Workspace App`. @@ -39,7 +39,7 @@ From this access token we can find the Workspace-level roles the user is in (`Wo ### React Contexts The React Context API is a clean way to handle a limited amount of global state, and is used for a few scenarios in this project: - TRE Roles Context: A context provides details of the base TRE roles a user is in, which can be consumed anywhere throughout the app -- Workspace Context: Tracks the currently selected Workspace, and the roles the user is in for that Workspace. This context is used for nested components to be able to authenticate against the correct AAD App via `workspaceCtx.workspaceApplicationIdURI`. +- Workspace Context: Tracks the currently selected Workspace, and the roles the user is in for that Workspace. This context is used for nested components to be able to authenticate against the correct Microsoft Entra ID App via `workspaceCtx.workspaceApplicationIdURI`. - Create Form Context: A context to control the Create / Update form behaviour. - Notifications Context: Tracks all the in-progress operations currently running. For each operation, the Notifications panel also uses this context to broadcast Component 'actions' which are subscribed to by downstream components. This way, a resource component does not have to track it's own changes, and can be 'told' by the Notifications Context whether it should refresh / lock etc. diff --git a/docs/tre-templates/shared-services/gitea.md b/docs/tre-templates/shared-services/gitea.md index 173611a5ae..d15a69f02b 100644 --- a/docs/tre-templates/shared-services/gitea.md +++ b/docs/tre-templates/shared-services/gitea.md @@ -44,7 +44,7 @@ Gitea needs to be able to access the following resource outside the Azure TRE VN | Service Tag / Destination | Justification | | --- | --- | -| AzureActiveDirectory | Authorize the signed in user against Azure Active Directory. | +| AzureActiveDirectory | Authorize the signed in user against Microsoft Entra ID. | | AzureContainerRegistry | Pull the Gitea container image, as it is located in Azure Container Registry. | | (www.)github.com | Allows Gitea to mirror any repo on GitHub | diff --git a/docs/tre-templates/shared-services/nexus.md b/docs/tre-templates/shared-services/nexus.md index 2a9e437a10..5869ae9693 100644 --- a/docs/tre-templates/shared-services/nexus.md +++ b/docs/tre-templates/shared-services/nexus.md @@ -63,7 +63,7 @@ Nexus Shared Service requires access to resources outside of the Azure TRE VNET. | Service Tag / Destination | Justification | | --- | --- | -| AzureActiveDirectory | Authorize the signed in user against Azure Active Directory. | +| AzureActiveDirectory | Authorize the signed in user against Microsoft Entra ID. | | AzureContainerRegistry | Pull the Nexus container image, as it is located in Azure Container Registry. | | pypi.org, *.pypi.org | Enables Nexus to "proxy" python packages to use inside of workspaces. | | repo.anaconda.com | Enables Nexus to "proxy" conda packages to use inside of workspaces. | diff --git a/docs/tre-templates/workspace-services/gitea.md b/docs/tre-templates/workspace-services/gitea.md index 054e21bd67..9725cbb711 100644 --- a/docs/tre-templates/workspace-services/gitea.md +++ b/docs/tre-templates/workspace-services/gitea.md @@ -7,7 +7,7 @@ See: [https://gitea.io/](https://gitea.io) The Gitea worskpace service opens outbound access to: - AzureActiveDirectory -- Azure AD CDN - `https://aadcdn.msftauth.net` +- Microsoft Entra ID CDN - `https://aadcdn.msftauth.net` ## Prerequisites diff --git a/docs/tre-workspace-authors/authoring-workspace-templates.md b/docs/tre-workspace-authors/authoring-workspace-templates.md index d40105515f..76aa356cbd 100644 --- a/docs/tre-workspace-authors/authoring-workspace-templates.md +++ b/docs/tre-workspace-authors/authoring-workspace-templates.md @@ -27,9 +27,9 @@ The manifest of a workspace bundle is the `porter.yaml` file (see [Author Bundle A workspace bundle requires the following [credentials](https://porter.sh/author-bundles/#credentials) to provision resources in Azure: -* [Azure tenant ID](https://docs.microsoft.com/en-us/azure/active-directory/fundamentals/active-directory-how-to-find-tenant) +* [Azure tenant ID](https://learn.microsoft.com/en-us/entra/fundamentals/how-to-find-tenant) * Azure subscription ID -* The client ID of a [service principal](https://docs.microsoft.com/en-us/azure/active-directory/develop/app-objects-and-service-principals) with privileges to provision resources +* The client ID of a [service principal](https://learn.microsoft.com/en-us/entra/identity-platform/app-objects-and-service-principals?tabs=browser) with privileges to provision resources * The client secret (password) of a service principal The credentials are provided as environment variables by the deployment runner. The bundle author must use the following environment variable names: diff --git a/docs/using-tre/local-development/local-development.md b/docs/using-tre/local-development/local-development.md index 2bda151098..4db16e676b 100644 --- a/docs/using-tre/local-development/local-development.md +++ b/docs/using-tre/local-development/local-development.md @@ -9,7 +9,7 @@ This guide will cover how to setup local development environment to add custom t To deploy an Azure TRE instance, the following assets and tools are required: * [Azure subscription](https://azure.microsoft.com) -* [Azure Active Directory (AAD)](https://docs.microsoft.com/azure/active-directory/fundamentals/active-directory-whatis) tenant in which you can create application registrations +* [Microsoft Entra ID](https://learn.microsoft.com/en-gb/entra/fundamentals/whatis) tenant in which you can create application registrations * Git client such as [Git](https://git-scm.com/) or [GitHub Desktop](https://desktop.github.com/) * [Docker Desktop](https://www.docker.com/products/docker-desktop) diff --git a/e2e_tests/.env.sample b/e2e_tests/.env.sample index 96d5a61628..504651cfda 100644 --- a/e2e_tests/.env.sample +++ b/e2e_tests/.env.sample @@ -18,7 +18,7 @@ TEST_WORKSPACE_APP_SECRET= WORKSPACE_APP_SERVICE_PLAN_SKU="P1v2" TEST_WORKSPACE_ID= -TEST_AAD_WORKSPACE_ID=ID of pre-created AAD workspace> +TEST_AAD_WORKSPACE_ID=ID of pre-created Microsoft Entra ID workspace> # Run tests sequentially. Change this value if you want to run tests in parallel locally E2E_TESTS_NUMBER_PROCESSES=1 diff --git a/templates/workspaces/airlock-import-review/.env.sample b/templates/workspaces/airlock-import-review/.env.sample index 68d0a40652..c89893b33f 100644 --- a/templates/workspaces/airlock-import-review/.env.sample +++ b/templates/workspaces/airlock-import-review/.env.sample @@ -4,14 +4,14 @@ ARM_TENANT_ID="__CHANGE_ME__" ARM_SUBSCRIPTION_ID="__CHANGE_ME__" AUTH_TENANT_ID="__CHANGE_ME__" -# These are passed in if Terraform will create the Workspace AAD Application +# These are passed in if Terraform will create the Workspace Microsoft Entra ID Application REGISTER_AAD_APPLICATION=true CREATE_AAD_GROUPS=true AUTH_CLIENT_ID="__CHANGE_ME__" AUTH_CLIENT_SECRET="__CHANGE_ME__" WORKSPACE_OWNER_OBJECT_ID="__CHANGE_ME__" -# These are passed in if you register the Workspace AAD Application before hand +# These are passed in if you register the Workspace Microsoft Entra ID Application before hand # REGISTER_AAD_APPLICATION=false # CLIENT_ID="__CHANGE_ME__" # CLIENT_SECRET="__CHANGE_ME__" diff --git a/templates/workspaces/base/.env.sample b/templates/workspaces/base/.env.sample index df96d05cc7..40de3a637f 100644 --- a/templates/workspaces/base/.env.sample +++ b/templates/workspaces/base/.env.sample @@ -4,14 +4,14 @@ ARM_TENANT_ID="__CHANGE_ME__" ARM_SUBSCRIPTION_ID="__CHANGE_ME__" AUTH_TENANT_ID="__CHANGE_ME__" -# These are passed in if Terraform will create the Workspace AAD Application +# These are passed in if Terraform will create the Workspace Microsoft Entra ID Application REGISTER_AAD_APPLICATION=true CREATE_AAD_GROUPS=true AUTH_CLIENT_ID="__CHANGE_ME__" AUTH_CLIENT_SECRET="__CHANGE_ME__" WORKSPACE_OWNER_OBJECT_ID="__CHANGE_ME__" -# These are passed in if you register the Workspace AAD Application before hand +# These are passed in if you register the Workspace Microsoft Entra ID Application before hand # REGISTER_AAD_APPLICATION=false # CLIENT_ID="__CHANGE_ME__" # CLIENT_SECRET="__CHANGE_ME__" diff --git a/templates/workspaces/unrestricted/.env.sample b/templates/workspaces/unrestricted/.env.sample index ba25f23336..42b235effd 100644 --- a/templates/workspaces/unrestricted/.env.sample +++ b/templates/workspaces/unrestricted/.env.sample @@ -4,14 +4,14 @@ ARM_TENANT_ID="__CHANGE_ME__" ARM_SUBSCRIPTION_ID="__CHANGE_ME__" AUTH_TENANT_ID="__CHANGE_ME__" -# These are passed in if Terraform will create the Workspace AAD Application +# These are passed in if Terraform will create the Workspace Microsoft Entra ID Application REGISTER_AAD_APPLICATION=true CREATE_AAD_GROUPS=true AUTH_CLIENT_ID="__CHANGE_ME__" AUTH_CLIENT_SECRET="__CHANGE_ME__" WORKSPACE_OWNER_OBJECT_ID="__CHANGE_ME__" -# These are passed in if you register the Workspace AAD Application before hand +# These are passed in if you register the Workspace Microsoft Entra ID Application before hand # REGISTER_AAD_APPLICATION=false # CLIENT_ID="__CHANGE_ME__" # CLIENT_SECRET="__CHANGE_ME__" diff --git a/ui/README.md b/ui/README.md index 9ec30ef5ba..b605e4bc71 100644 --- a/ui/README.md +++ b/ui/README.md @@ -7,7 +7,7 @@ The UI was built using Create React App and Microsoft Fluent UI. Further details ## Run the UI - Ensure `deploy_ui=false` is not set in your `./config.yaml` file - In the root of the repo, run `make tre-deploy`. This will provision the necessary resources in Azure, build and deploy the UI to Azure blob storage, behind the App Gateway used for the API. The deployment process will also create the necessary `config.json`, using the `config.source.json` as a template. -- In Azure AD, locate the TRE Client Apps app (possibly called Swagger App). In the Authentication section add reply URIs for: +- In Microsoft Entra ID, locate the TRE Client Apps app (possibly called Swagger App). In the Authentication section add reply URIs for: - `http://localhost:3000` (if wanting to run locally) - Your deployed App Url - `https://{TRE_ID}.{LOCATION}.cloudapp.azure.com`. From cb59c99233575b096207e6afc288af9da7ee0256 Mon Sep 17 00:00:00 2001 From: Tim Allen Date: Fri, 12 Apr 2024 09:01:26 +0100 Subject: [PATCH 23/79] Update Resource processor Ubuntu Image (#3902) * Update clean_validation_envs.yml * update * update BRANCH_LAST_ACTIVITY_IN_HOURS_FOR_STOP: 8 * update core resource processor image * remove clean env * update version * update changelog --- CHANGELOG.md | 1 + core/terraform/resource_processor/vmss_porter/main.tf | 4 ++-- core/version.txt | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 61bac4fa19..6e6a83a377 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ FEATURES: ENHANCEMENTS: BUG FIXES: +* Update to Resource Processor Image, now using Ubuntu 22.04 (jammy). Part of ([#3523](https://github.com/microsoft/AzureTRE/issues/3523)) COMPONENTS: diff --git a/core/terraform/resource_processor/vmss_porter/main.tf b/core/terraform/resource_processor/vmss_porter/main.tf index a9599527d2..a361a42faa 100644 --- a/core/terraform/resource_processor/vmss_porter/main.tf +++ b/core/terraform/resource_processor/vmss_porter/main.tf @@ -107,8 +107,8 @@ resource "azurerm_linux_virtual_machine_scale_set" "vm_linux" { source_image_reference { publisher = "Canonical" - offer = "UbuntuServer" - sku = "18.04-LTS" + offer = "0001-com-ubuntu-server-jammy" + sku = "22_04-lts" version = "latest" } diff --git a/core/version.txt b/core/version.txt index f5b77301f5..a25765c3e1 100644 --- a/core/version.txt +++ b/core/version.txt @@ -1 +1 @@ -__version__ = "0.9.7" +__version__ = "0.9.8" From ada56a6308cf86ef0a7aefc30b4b010e56c2d6eb Mon Sep 17 00:00:00 2001 From: danny-cooke-icl <138700430+danny-cooke-icl@users.noreply.github.com> Date: Mon, 15 Apr 2024 12:38:06 +0100 Subject: [PATCH 24/79] Update config.py --- api_app/core/config.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api_app/core/config.py b/api_app/core/config.py index aa84020783..bab2ee3b36 100644 --- a/api_app/core/config.py +++ b/api_app/core/config.py @@ -65,6 +65,6 @@ API_AUDIENCE: str = config("API_AUDIENCE", default=API_CLIENT_ID) -AIRLOCK_SAS_TOKEN_EXPIRY_PERIOD_IN_HOURS: int = config("AIRLOCK_SAS_TOKEN_EXPIRY_PERIOD_IN_HOURS", default=1) +AIRLOCK_SAS_TOKEN_EXPIRY_PERIOD_IN_HOURS: int = config("AIRLOCK_SAS_TOKEN_EXPIRY_PERIOD_IN_HOURS", default=48) API_ROOT_SCOPE: str = f"api://{API_CLIENT_ID}/user_impersonation" From c8e5ed39fb8d2839c9a25ee79fe2de8d22be32b2 Mon Sep 17 00:00:00 2001 From: Jonny Rylands Date: Wed, 1 May 2024 18:22:19 +0100 Subject: [PATCH 25/79] Remove TLS1.0/1.1 support. Resolves #3914 (#3916) --- CHANGELOG.md | 1 + core/terraform/appgateway/appgateway.tf | 6 ++++++ core/version.txt | 2 +- 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6e6a83a377..64cdb8bd18 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ ENHANCEMENTS: BUG FIXES: * Update to Resource Processor Image, now using Ubuntu 22.04 (jammy). Part of ([#3523](https://github.com/microsoft/AzureTRE/issues/3523)) +* Remove TLS1.0/1.1 support from Application Gateway COMPONENTS: diff --git a/core/terraform/appgateway/appgateway.tf b/core/terraform/appgateway/appgateway.tf index c3c573c8ae..6f743fbe6b 100644 --- a/core/terraform/appgateway/appgateway.tf +++ b/core/terraform/appgateway/appgateway.tf @@ -65,6 +65,12 @@ resource "azurerm_application_gateway" "agw" { key_vault_secret_id = azurerm_key_vault_certificate.tlscert.secret_id } + # SSL policy + ssl_policy { + policy_type = "Predefined" + policy_name = "AppGwSslPolicy20220101" + } + # Backend pool with the static website in storage account. backend_address_pool { name = local.staticweb_backend_pool_name diff --git a/core/version.txt b/core/version.txt index a25765c3e1..88081a7269 100644 --- a/core/version.txt +++ b/core/version.txt @@ -1 +1 @@ -__version__ = "0.9.8" +__version__ = "0.9.9" From 606a5d99cd3c02415d380a1453df0dbcf9a60737 Mon Sep 17 00:00:00 2001 From: Tim Allen Date: Thu, 9 May 2024 17:32:40 +0100 Subject: [PATCH 26/79] Ubuntu 2204 update (#3924) * Update clean_validation_envs.yml * update * update BRANCH_LAST_ACTIVITY_IN_HOURS_FOR_STOP: 8 * Squashed commit of the following: commit e66cd8206e51c1af615b84e0c56bdcf8b92988f2 Author: tim-allen-ck Date: Tue May 7 16:35:57 2024 +0100 squash commits commit 933e1603bb45a45a4edb6933d3af4596cb2c2593 Author: tim-allen-ck Date: Thu Apr 4 15:54:39 2024 +0100 update BRANCH_LAST_ACTIVITY_IN_HOURS_FOR_STOP: 8 commit 379e93c05f6b99bb9b2222755e5d9346e0a169b1 Author: tim-allen-ck Date: Thu Apr 4 15:52:25 2024 +0100 update commit 161880fad5234823f8522e9d7632f53b88d4d8e8 Author: Tim Allen Date: Tue Apr 2 09:38:19 2024 +0100 Update clean_validation_envs.yml commit 79080439ebebf1d8fb2d453cae6c3590e3e46d05 Author: tim-allen-ck Date: Tue May 7 16:32:15 2024 +0100 update changelog commit 76466e407dd773bdafc5ad6c56f4ad75814c3a9c Author: tim-allen-ck Date: Tue May 7 16:28:55 2024 +0100 update changelog commit 9b3b98e07da0264543ccc456c0328cb348bd01da Author: tim-allen-ck Date: Fri Apr 12 09:27:52 2024 +0100 changelog update commit d199c777bf5a2c908c6532e11517579562888b6c Author: Tim Allen Date: Fri Apr 12 09:01:26 2024 +0100 Update Resource processor Ubuntu Image (#3902) * Update clean_validation_envs.yml * update * update BRANCH_LAST_ACTIVITY_IN_HOURS_FOR_STOP: 8 * update core resource processor image * remove clean env * update version * update changelog commit c4d84045ed8eba4cfc192caca19adcec3dc063d1 Author: tim-allen-ck Date: Thu Apr 11 12:18:36 2024 +0100 update readme and changelog commit 81dd79b35d2d4319d87f341a51d907702599daaf Author: tim-allen-ck Date: Thu Apr 11 12:18:36 2024 +0100 update readme and changelog commit 8cecc55e38b434cd2451b99d1bd2272083edc45d Author: wojciechcloudkubed <159798789+wojciechcloudkubed@users.noreply.github.com> Date: Tue Apr 2 09:23:37 2024 +0100 Ubuntu update (#1) * personal * update ubuntu image * revert changes * update ubuntu version * update version * update offer * update sku * change offer --------- Co-authored-by: Wojciech <57405495+thewbuk@users.noreply.github.com> commit 49813bf08b0188ad3f77b1a3d5384799f9e09568 Author: Jonny Rylands Date: Wed May 1 18:22:19 2024 +0100 Remove TLS1.0/1.1 support. Resolves #3914 (#3916) commit a094c19d5708b064628f06ed7f09016fa654f733 Author: tim-allen-ck Date: Tue May 7 16:12:53 2024 +0100 doc update commit 004a9c0a15e91e1fdc08acf6a3d41b2fe88d52cd Author: tim-allen-ck Date: Tue May 7 10:27:09 2024 +0100 update script commit 8044fb7c24178bd91d3cc05d1a8aaef81b52f4d1 Author: tim-allen-ck Date: Wed May 1 15:19:48 2024 +0100 updaet commit 218aa8bdb3a8701d2bd266f249b5467a5a599994 Author: tim-allen-ck Date: Wed May 1 15:19:40 2024 +0100 update commit 0ac060f9829df37738c9794f7af22f77d0aa4786 Author: tim-allen-ck Date: Tue Apr 30 15:44:47 2024 +0100 update commit 0486933a37a5e2b5f2354d57a970a8bed9c564f5 Author: tim-allen-ck Date: Tue Apr 30 12:43:46 2024 +0100 update vm config commit c9f0749da41b446b27d9ad3d380cade03a6f5688 Author: tim-allen-ck Date: Mon Apr 29 18:11:50 2024 +0100 Prevent screen timeout commit 7c2db7f5973300312bbfcb6a54dfc77fd4423de9 Author: tim-allen-ck Date: Mon Apr 29 18:09:49 2024 +0100 updates commit 8d6cf1d47966a173f7e65e98c2f6bbe423a824d8 Author: tim-allen-ck Date: Mon Apr 29 17:16:38 2024 +0100 update commit 3ecdec77319417d1346f36dc3dc3975946458f10 Author: tim-allen-ck Date: Mon Apr 29 12:21:28 2024 +0100 update commit eb59085ada8f20ffc4fdc536cca1251166abc909 Author: tim-allen-ck Date: Mon Apr 29 12:19:33 2024 +0100 nexus update commit 915c6bcd464459a7ab81e073cee1ffc2d14f5038 Author: tim-allen-ck Date: Mon Apr 29 10:24:45 2024 +0100 updste commit 2345db24f5779921d84dd5d4233e6569ada7e995 Author: tim-allen-ck Date: Mon Apr 29 10:24:36 2024 +0100 update proxy url commit 6b454a37d82c60f22c4ab82e510ac39f43d3d57f Author: tim-allen-ck Date: Mon Apr 29 10:03:44 2024 +0100 update commit 2ce801bddfc1e4eb54633bfdfdc4ee3bd88249f1 Author: tim-allen-ck Date: Mon Apr 29 09:48:20 2024 +0100 add in r studio download commit 3b83b4c13c6bc5d5c886c0a47f1e897c8cbf65c6 Author: tim-allen-ck Date: Mon Apr 29 09:46:11 2024 +0100 add in snapcraft to nexus commit dfb6b7bae1ac0a585f53c99de85761d64a9b38a5 Author: tim-allen-ck Date: Fri Apr 26 16:55:45 2024 +0100 spelling commit f896ce314a54f85dd3e2246de29f596c312161d1 Author: tim-allen-ck Date: Fri Apr 26 16:08:41 2024 +0100 update version commit fd540af3ffa5392c14f62001d9494bf912b556aa Author: tim-allen-ck Date: Fri Apr 26 16:08:32 2024 +0100 clean up script commit 1f8456f5a001959677435169230a921e79f77f13 Author: tim-allen-ck Date: Fri Apr 26 14:27:31 2024 +0100 update commit 89e65eb693ce2d7a3cc2c8177ace28ba41d46013 Author: tim-allen-ck Date: Fri Apr 26 14:27:23 2024 +0100 update commit ae4cb0475f7affc8174a40431683565706f9112a Author: tim-allen-ck Date: Fri Apr 26 14:22:13 2024 +0100 update commit c33e0330ced874a540e7c1bcc9bfbdadbcdb4799 Author: tim-allen-ck Date: Fri Apr 26 14:10:46 2024 +0100 update commit 2e290e159c3cc62f6941b751876c727cb65c1709 Author: tim-allen-ck Date: Fri Apr 26 14:03:41 2024 +0100 update commit 2c16b604446cdb1f92cd3e202a10e5f62d64fc29 Author: tim-allen-ck Date: Fri Apr 26 13:57:50 2024 +0100 update commit 757d565276d9c88204d3acf4174fedbf9f19c410 Author: tim-allen-ck Date: Fri Apr 26 12:18:28 2024 +0100 update commit 977b487e64b419089e5c7a7361c1c079e1443183 Author: tim-allen-ck Date: Fri Apr 26 11:45:21 2024 +0100 update commit 572c27cbbc70b825170b5b71ea0fe93e5a43fbad Author: tim-allen-ck Date: Fri Apr 26 11:45:12 2024 +0100 update commit dc7a6c522a0874639c25158b3de463a2ec50155b Author: tim-allen-ck Date: Fri Apr 26 11:39:38 2024 +0100 add in extensions commit e46c5bbbac67f710f6f2852a5f8f7191adf93c4a Author: tim-allen-ck Date: Fri Apr 26 11:34:57 2024 +0100 add sleeps commit fa1572001fc79e72e464539ad356c197c7f43bc7 Author: tim-allen-ck Date: Fri Apr 26 11:33:44 2024 +0100 update commit 893cf8daa33a231bb33026602cdc89a4da7a52ce Author: tim-allen-ck Date: Fri Apr 26 10:20:12 2024 +0100 update commit 42223aa4b81d773e1c08e9a5e270e61668d00eb8 Author: tim-allen-ck Date: Fri Apr 26 10:16:27 2024 +0100 commit commit 0a7b1e87ed65924d3a6319e3fcd523f7e67376f5 Author: tim-allen-ck Date: Fri Apr 26 10:16:19 2024 +0100 update commit 6ce77b00e52add974f4be049043aee2e86c0079a Author: tim-allen-ck Date: Fri Apr 26 09:43:49 2024 +0100 update commit f1d68da0cdcf8c2e61a6c71c2c625fa21f06e31c Author: tim-allen-ck Date: Thu Apr 25 17:58:40 2024 +0100 update commit 060b6fd5d0e611323047615122950f76188b1f75 Author: tim-allen-ck Date: Thu Apr 25 16:17:09 2024 +0100 vm update commit c4e70942407a5134bd6b7bb04e8a900dc8790787 Author: tim-allen-ck Date: Thu Apr 25 14:20:05 2024 +0100 update commit 760f783fef6b6eaaaff8bb6e0d500723286937c2 Author: tim-allen-ck Date: Tue Apr 23 16:58:05 2024 +0100 updat commit 943e07b9d5eb50a6a2925080bdbbd8a457477b9c Author: tim-allen-ck Date: Tue Apr 23 15:16:03 2024 +0100 add in ms download and other apps commit 7a4d250d3b9ed12624b0c7e1481fce93285ba9ff Author: tim-allen-ck Date: Thu Apr 18 09:57:54 2024 +0100 update linux commit 770e4c76dbcb4225cb76fc3d03dd27f8ff03c99c Author: tim-allen-ck Date: Tue Apr 16 15:31:25 2024 +0100 fix linting commit 4354ca0917935d14c282d38ba896a7a90d08f9e8 Author: tim-allen-ck Date: Tue Apr 16 14:06:49 2024 +0100 format commit 6980ecbb832e2e46578953e46b7ab91f57e3a980 Author: tim-allen-ck Date: Mon Apr 15 16:16:50 2024 +0100 update commit a3e5492f79a52eccd634f5591f865e791d07633f Author: tim-allen-ck Date: Mon Apr 15 16:16:38 2024 +0100 update commit f9d9ffcd4ae7f54e88f3e242c2e7fbd22ded53f1 Author: tim-allen-ck Date: Mon Apr 15 14:44:27 2024 +0100 update commit d5a40452e5c226afe78805d9cd9fcb34818da279 Author: tim-allen-ck Date: Mon Apr 15 14:39:17 2024 +0100 update commit aa4713ca58eba12cc3033b66893cb87ff011bd0a Author: tim-allen-ck Date: Mon Apr 15 12:08:41 2024 +0100 update image version commit 2082559750d01e06032396be3c222d100e7671a1 Author: tim-allen-ck Date: Mon Apr 15 09:28:08 2024 +0100 update to gen2 commit cd1a4dbf2fdbfda70c493880f3be4fde3a1590d8 Author: tim-allen-ck Date: Fri Apr 12 16:49:59 2024 +0100 updaet vm config commit eff70504b880de8645e2d5e6ca3db4e849cccb0d Author: tim-allen-ck Date: Fri Apr 12 16:00:41 2024 +0100 edit commit ba9ae5088cdb902953381c9f3909a10d19eca617 Author: tim-allen-ck Date: Fri Apr 12 15:10:09 2024 +0100 update commit 81801f8914d1fae57a024c40d30e74849cb2358f Author: tim-allen-ck Date: Fri Apr 12 14:36:17 2024 +0100 update version commit 86909a3b8a8bbe9b6a6b253761c29d0dd5e7049d Author: tim-allen-ck Date: Fri Apr 12 12:50:34 2024 +0100 vm-config commit c5ce11b550e29c13881bc2ada49c18893ae1c716 Author: tim-allen-ck Date: Fri Apr 12 10:43:48 2024 +0100 update config commit b1bb5c96ba6eb753ae082a4efd45f22b2282f45f Merge: 9a28c420 cb59c992 Author: Tim Allen Date: Fri Apr 12 09:32:38 2024 +0100 Merge branch 'main' into ubuntu-update commit 9a28c42075148a4a58ab2ecde2db3ca1d15b9d3e Author: tim-allen-ck Date: Fri Apr 12 09:31:47 2024 +0100 reset commit 4a2036bc4c897754f91d19824e01505f81f48197 Author: tim-allen-ck Date: Fri Apr 12 09:29:53 2024 +0100 update resource proccesor commit e1939430b31c13ea1183924c91554100061d162d Author: tim-allen-ck Date: Fri Apr 12 09:27:52 2024 +0100 changelog update commit e8ba5fda9f058b0f94135848f8f898083ecb552d Author: tim-allen-ck Date: Thu Apr 11 12:18:36 2024 +0100 update readme and changelog commit f3b4efb385019cf67acdd2115386d0ce94a16d42 Author: Tim Allen Date: Fri Apr 12 09:01:26 2024 +0100 Update Resource processor Ubuntu Image (#3902) * Update clean_validation_envs.yml * update * update BRANCH_LAST_ACTIVITY_IN_HOURS_FOR_STOP: 8 * update core resource processor image * remove clean env * update version * update changelog commit 85cdb983a17297e853c199c0c0ba1bc06b989c50 Author: tim-allen-ck Date: Thu Apr 11 12:18:36 2024 +0100 update readme and changelog commit b17bfabd8aac12a5ac1709e8dcd973afbd993f21 Author: wojciechcloudkubed <159798789+wojciechcloudkubed@users.noreply.github.com> Date: Tue Apr 2 09:23:37 2024 +0100 Ubuntu update (#1) * personal * update ubuntu image * revert changes * update ubuntu version * update version * update offer * update sku * change offer --------- Co-authored-by: Wojciech <57405495+thewbuk@users.noreply.github.com> commit d8fa5d412184c821361b623233c79d3b8f238242 Author: Tim Allen Date: Fri Apr 12 09:01:26 2024 +0100 Update Resource processor Ubuntu Image (#3902) * Update clean_validation_envs.yml * update * update BRANCH_LAST_ACTIVITY_IN_HOURS_FOR_STOP: 8 * update core resource processor image * remove clean env * update version * update changelog commit 5e2cdb52f04d0b4d18dee8f287f2a2e0672cfb7b Author: tim-allen-ck Date: Thu Apr 11 12:18:36 2024 +0100 update readme and changelog commit 9af4f05a2bedfb54b769bc11ef81bbc607680801 Author: wojciechcloudkubed <159798789+wojciechcloudkubed@users.noreply.github.com> Date: Tue Apr 2 09:23:37 2024 +0100 Ubuntu update (#1) * personal * update ubuntu image * revert changes * update ubuntu version * update version * update offer * update sku * change offer --------- Co-authored-by: Wojciech <57405495+thewbuk@users.noreply.github.com> commit aa4b9487467420435cac009441f19bbb8f265f02 Author: Tim Allen Date: Fri Apr 12 09:01:26 2024 +0100 Update Resource processor Ubuntu Image (#3902) * Update clean_validation_envs.yml * update * update BRANCH_LAST_ACTIVITY_IN_HOURS_FOR_STOP: 8 * update core resource processor image * remove clean env * update version * update changelog commit 39aa2846941ac02dac76ae8b546d58470c018983 Author: tim-allen-ck Date: Fri Apr 12 09:12:48 2024 +0100 resolving comments commit cb59c99233575b096207e6afc288af9da7ee0256 Author: Tim Allen Date: Fri Apr 12 09:01:26 2024 +0100 Update Resource processor Ubuntu Image (#3902) * Update clean_validation_envs.yml * update * update BRANCH_LAST_ACTIVITY_IN_HOURS_FOR_STOP: 8 * update core resource processor image * remove clean env * update version * update changelog commit e06dbcd284b42231261f09d2d9078446119af706 Author: tim-allen-ck Date: Thu Apr 11 19:57:14 2024 +0100 moby-tini || true commit c08a2b78f600b73ad6e1ea6771f00ceac806897b Author: tim-allen-ck Date: Thu Apr 11 17:02:01 2024 +0100 update version commit 104939002386bb1c70eb22873cc5f00b40facffe Author: tim-allen-ck Date: Thu Apr 11 17:01:21 2024 +0100 remove moby-tini commit ce4dc82ba377fc28ee4f55be2968618a42178347 Author: tim-allen-ck Date: Thu Apr 11 15:53:12 2024 +0100 update version commit 7a43e653d840cc436cc0754aa7bf9493b5222306 Author: tim-allen-ck Date: Thu Apr 11 15:52:58 2024 +0100 update vm config commit 7db0e5fdcb0c2f16224ca86224df96fbe1ad1e76 Author: tim-allen-ck Date: Thu Apr 11 14:46:09 2024 +0100 update ds install_ui: true commit 8ff7f69abeb8e50c3b301b1023a6155d665335da Author: tim-allen-ck Date: Thu Apr 11 14:08:22 2024 +0100 update script commit be7212b684ac32f0df27ea3e3e1198c6d1aeeb5b Author: tim-allen-ck Date: Thu Apr 11 13:40:29 2024 +0100 update version commit 3a30d23cd81eedaefabd5291dcbb2fe0cab526ba Author: tim-allen-ck Date: Thu Apr 11 13:40:18 2024 +0100 ds install_ui: false commit a3d9109ed4736348238b54ad4ceb0be4fa2145d2 Author: tim-allen-ck Date: Thu Apr 11 12:18:36 2024 +0100 update readme and changelog commit 875f2f454ddce9ffbab8e490fc91b25df59789e3 Author: wojciechcloudkubed <159798789+wojciechcloudkubed@users.noreply.github.com> Date: Tue Apr 2 09:23:37 2024 +0100 Ubuntu update (#1) * personal * update ubuntu image * revert changes * update ubuntu version * update version * update offer * update sku * change offer --------- Co-authored-by: Wojciech <57405495+thewbuk@users.noreply.github.com> commit 9fc272b93a7211867339ba6b9f64a0a88afbba6e Merge: 3a9eecbf bc2f2332 Author: Tim Allen Date: Thu Apr 11 12:12:57 2024 +0100 Merge branch 'main' into ubuntu-update commit 3a9eecbf08be075a14a2875cfa97cd21073b4258 Author: tim-allen-ck Date: Thu Apr 11 12:12:16 2024 +0100 testing commit 3b7522eebb4674fd60c1afdeca40fc60e727b36a Author: tim-allen-ck Date: Thu Apr 11 11:49:49 2024 +0100 version for guac commit d75e442ffca717e05abb8a4cf2453ac0691ec59f Author: tim-allen-ck Date: Thu Apr 11 11:34:15 2024 +0100 update to gen2 commit d4a57a331763ce86f57bda17204212a1f0af5633 Author: tim-allen-ck Date: Thu Apr 11 11:28:21 2024 +0100 update Readme for user resources commit af50b399b90dbffca77c1e113ac66c755c5f502d Author: tim-allen-ck Date: Thu Apr 11 11:12:46 2024 +0100 update apt-get commit bc414b75addc05fd5560bfbe14bd9d512e235c9b Author: tim-allen-ck Date: Thu Apr 11 11:07:43 2024 +0100 update config commit bc2f233216727f2586c7e79cdd4ca0a12d4dfbbe Author: wojciechcloudkubed <159798789+wojciechcloudkubed@users.noreply.github.com> Date: Thu Apr 11 09:50:09 2024 +0100 Update "Azure AD" references to "Microsoft Entra ID" (#3873) * rename Azure AD to Microsoft Entra Workforce ID * update Azure Active Directory to Microsoft Entra Workforce ID * replace * update version * change stale version * update from stale * update version * update readme * Microsoft Entra Workforce ID -> Microsoft Entra ID * AAD -> Microsoft Entra ID * Delete .devcontainer/devcontainer.json * Revert "Delete .devcontainer/devcontainer.json" This reverts commit 5dd6d5c2656c5304bf4adf6bb38e1a20735bbc8a. * revert code changes * remove double names * update version * go back version * api update version * revert for linting * revert test linting * fix linting * roll back linting * increase line length * fix linting * fix formatting * fix lintin 3 * update urls * update aad urls --------- Co-authored-by: Tim Allen commit a09af34ee572e166f5498825ef98450e3af9ced1 Author: tim-allen-ck Date: Wed Apr 10 16:44:01 2024 +0100 update apt-source-list commit 271c7e0fc3ebc2c108caf99d4669f182cc4a11a6 Author: tim-allen-ck Date: Wed Apr 10 15:57:32 2024 +0100 update pypi source commit 1ea11594ac3efe1f6dfcf49a975ba8b287c329cf Author: tim-allen-ck Date: Wed Apr 10 15:53:40 2024 +0100 update commit d1beb038d67b9f1e0dba1f0be9bfb18bf25e9b38 Author: tim-allen-ck Date: Wed Apr 10 15:51:51 2024 +0100 updaye commit 9c2211b70ae50930df09ed681e61553728254cb0 Author: tim-allen-ck Date: Wed Apr 10 15:31:17 2024 +0100 update core commit c7ebc5b9330846d5c10ac0194442c3075eeb6c1d Author: tim-allen-ck Date: Wed Apr 10 15:29:00 2024 +0100 update linux vms commit 18df98cfca0445f76378f12c552f97d3353f6954 Author: tim-allen-ck Date: Wed Apr 10 15:27:42 2024 +0100 update version commit 19316a16ee519157748753867b2f5e8d7d553178 Author: tim-allen-ck Date: Wed Apr 10 14:03:08 2024 +0100 update install UI commit 47c81826b5a4902fbf01d86004c422e7bfecd42f Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue Apr 9 19:39:14 2024 +0300 Bump the npm_and_yarn group in /ui/app with 3 updates (#3891) * Bump the npm_and_yarn group in /ui/app with 3 updates Bumps the npm_and_yarn group in /ui/app with 3 updates: [express](https://github.com/expressjs/express), [follow-redirects](https://github.com/follow-redirects/follow-redirects) and [webpack-dev-middleware](https://github.com/webpack/webpack-dev-middleware). Updates `express` from 4.18.3 to 4.19.2 - [Release notes](https://github.com/expressjs/express/releases) - [Changelog](https://github.com/expressjs/express/blob/master/History.md) - [Commits](https://github.com/expressjs/express/compare/4.18.3...4.19.2) Updates `follow-redirects` from 1.15.5 to 1.15.6 - [Release notes](https://github.com/follow-redirects/follow-redirects/releases) - [Commits](https://github.com/follow-redirects/follow-redirects/compare/v1.15.5...v1.15.6) Updates `webpack-dev-middleware` from 5.3.3 to 5.3.4 - [Release notes](https://github.com/webpack/webpack-dev-middleware/releases) - [Changelog](https://github.com/webpack/webpack-dev-middleware/blob/v5.3.4/CHANGELOG.md) - [Commits](https://github.com/webpack/webpack-dev-middleware/compare/v5.3.3...v5.3.4) --- updated-dependencies: - dependency-name: express dependency-type: indirect dependency-group: npm_and_yarn-security-group - dependency-name: follow-redirects dependency-type: indirect dependency-group: npm_and_yarn-security-group - dependency-name: webpack-dev-middleware dependency-type: indirect dependency-group: npm_and_yarn-security-group ... Signed-off-by: dependabot[bot] * update ui version --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Tim Allen commit 072cfdc24936ea65194152d6eb5fe39c6485d55c Author: tim-allen-ck Date: Tue Apr 9 17:26:28 2024 +0100 add in microsoft-apt/ubuntu/20.04 to source-list commit 30ecfa2401c2096237c02c336fccd47f90e606ed Author: tim-allen-ck Date: Tue Apr 9 14:55:25 2024 +0100 add in image to enum commit 33d14bee981e529928dcd8d21018555d69a1d9dc Author: tim-allen-ck Date: Tue Apr 9 14:33:52 2024 +0100 update image options commit 7aa64ba948609526b283c8142ab3d2e3d9581bf2 Author: tim-allen-ck Date: Tue Apr 9 12:09:38 2024 +0100 update commit ea63ebfaf4e838cf85988cd2cf53109a1acc35cd Author: Tim Allen Date: Tue Apr 9 06:37:40 2024 +0100 Feature/GitHub actions update (#3897) * Update clean_validation_envs.yml * azure login (#19) Co-authored-by: Wojciech <57405495+thewbuk@users.noreply.github.com> * GitHub actions update (#22) * azure login * reset cron * update action versions --------- Co-authored-by: wojciechcloudkubed <159798789+wojciechcloudkubed@users.noreply.github.com> * change conclusion action * add in teams --------- Co-authored-by: wojciechcloudkubed <159798789+wojciechcloudkubed@users.noreply.github.com> commit de141651ad9fb9f58e7b78e383edf263eaa549d1 Author: Tim Allen Date: Fri Apr 5 12:42:03 2024 +0100 Documentation Pipeline Fix (#3898) add in permissions to pipeline commit c92494e384362121d489380559e91c46cd6edf82 Merge: 27167496 086be330 Author: Tim Allen Date: Thu Apr 4 16:54:43 2024 +0100 Merge branch 'main' into ubuntu-update commit 27167496ec361294dcfe851bed55a30541594416 Author: wojciechcloudkubed <159798789+wojciechcloudkubed@users.noreply.github.com> Date: Tue Apr 2 09:23:37 2024 +0100 Ubuntu update (#1) * personal * update ubuntu image * revert changes * update ubuntu version * update version * update offer * update sku * change offer --------- Co-authored-by: Wojciech <57405495+thewbuk@users.noreply.github.com> * update env yaml * update bash * update linting * update docs * comment fixes * update * update nexus sku * Update docs/tre-templates/user-resources/guacamole-linux-vm.md Co-authored-by: Marcus Robinson * update docs * docs --------- Co-authored-by: Marcus Robinson --- CHANGELOG.md | 5 +- docs/tre-templates/shared-services/nexus.md | 19 +++ docs/tre-templates/user-resources/custom.md | 62 +++++++++ .../user-resources/guacamole-linux-vm.md | 10 ++ e2e_tests/test_performance.py | 2 +- .../sonatype-nexus-vm/porter.yaml | 2 +- .../scripts/nexus_realms_config.json | 5 +- .../microsoft_download_conf.json | 32 +++++ .../r_studio_download_conf.json | 32 +++++ .../nexus_repos_config/snapcraft_conf.json | 32 +++++ .../sonatype-nexus-vm/terraform/locals.tf | 2 +- .../sonatype-nexus-vm/terraform/vm.tf | 1 + .../guacamole/user_resources/README.md | 20 +-- .../guacamole-azure-linuxvm/porter.yaml | 20 +-- .../template_schema.json | 3 +- .../terraform/apt_sources_config.yml | 4 +- .../terraform/get_apt_keys.sh | 4 + .../terraform/linuxvm.tf | 3 + .../terraform/locals.tf | 2 +- .../terraform/pypi_sources_config.sh | 2 +- .../terraform/vm_config.sh | 124 +++++++++++++++--- 21 files changed, 330 insertions(+), 56 deletions(-) create mode 100644 docs/tre-templates/user-resources/custom.md create mode 100644 templates/shared_services/sonatype-nexus-vm/scripts/nexus_repos_config/microsoft_download_conf.json create mode 100644 templates/shared_services/sonatype-nexus-vm/scripts/nexus_repos_config/r_studio_download_conf.json create mode 100644 templates/shared_services/sonatype-nexus-vm/scripts/nexus_repos_config/snapcraft_conf.json diff --git a/CHANGELOG.md b/CHANGELOG.md index 64cdb8bd18..5aa6fe9888 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,8 +8,11 @@ FEATURES: ENHANCEMENTS: BUG FIXES: +* Update Guacomole Linux VM Images to Ubuntu 22.04 LTS. Part of ([#3523](https://github.com/microsoft/AzureTRE/issues/3523)) +* Update Nexus Shared Service with new proxies. Part of ([#3523](https://github.com/microsoft/AzureTRE/issues/3523)) * Update to Resource Processor Image, now using Ubuntu 22.04 (jammy). Part of ([#3523](https://github.com/microsoft/AzureTRE/issues/3523)) -* Remove TLS1.0/1.1 support from Application Gateway +* Remove TLS1.0/1.1 support from Application Gateway ([#3914](https://github.com/microsoft/AzureTRE/issues/3914)) +* GitHub Actions version updates. ([#3847](https://github.com/microsoft/AzureTRE/issues/3847)) COMPONENTS: diff --git a/docs/tre-templates/shared-services/nexus.md b/docs/tre-templates/shared-services/nexus.md index 5869ae9693..3717f986e8 100644 --- a/docs/tre-templates/shared-services/nexus.md +++ b/docs/tre-templates/shared-services/nexus.md @@ -87,10 +87,12 @@ Nexus Shared Service requires access to resources outside of the Azure TRE VNET. | Ubuntu Security Packages | apt | [http://security.ubuntu.com/ubuntu/] | `https://nexus-{TRE_ID}.{LOCATION}.cloudapp.azure.com/repository/ubuntu-security/` | Provide access to Ubuntu Security apt packages on Ubuntu systems. | | Almalinux | yum | [https://repo.almalinux.org] | `https://nexus-{TRE_ID}.{LOCATION}.cloudapp.azure.com/repository/almalinux` | Install Almalinux packages | | R-Proxy | r | [https://cran.r-project.org/] | `https://nexus-{TRE_ID}.{LOCATION}.cloudapp.azure.com/repository/r-proxy` | Provide access to CRAN packages for R | +| R-Studio Download | raw | [https://download1.rstudio.org] | `https://nexus-{TRE_ID}.{LOCATION}.cloudapp.azure.com/repository/r-studio-download` | Provide access to download R Studio | | Fedora Project | yum | [https://download-ib01.fedoraproject.org] | `https://nexus-{TRE_ID}.{LOCATION}.cloudapp.azure.com/repository/fedoraproject` | Install Fedora Project Linux packages | | Microsoft Apt | apt | [https://packages.microsoft.com] | `https://nexus-{TRE_ID}.{LOCATION}.cloudapp.azure.com/repository/microsoft-apt` | Provide access to Microsoft Apt packages | | Microsoft Keys | raw | [https://packages.microsoft.com/keys/] | `https://nexus-{TRE_ID}.{LOCATION}.cloudapp.azure.com/repository/microsoft-keys` | Provide access to Microsoft keys | | Microsoft Yum | yum | [https://packages.microsoft.com/yumrepos] | `https://nexus-{TRE_ID}.{LOCATION}.cloudapp.azure.com/repository/microsoft-yum` | Provide access to Microsoft Yum packages | +| Microsoft Download | raw | [https://download.microsoft.com/download] | `https://nexus-{TRE_ID}.{LOCATION}.cloudapp.azure.com/repository/microsoft-download` | Provide access to Microsoft Downloads | ### Migrate from an existing V1 Nexus service (hosted on App Service) @@ -111,3 +113,20 @@ If you still have an existing Nexus installation based on App Service (from the The Nexus service checks Key Vault regularly for the latest certificate matching the name you passed on deploy (`nexus-ssl` by default). When approaching expiry, you can either provide an updated certificate into the TRE core KeyVault (with the name you specified when installing Nexus) if you brought your own, or if you used the certs shared service to generate one, just call the `renew` custom action on that service. This will generate a new certificate and persist it to the Key Vault, replacing the expired one. + +## Updating to v3.0.0 +The newest version of Nexus is a significant update for the service. +As a result, a new installation of Nexus will be necessary. + +We are currently in the process of developing an upgrade path for upcoming releases. + +## Using Docker Hub +When using Docker with a VM, the image URL should be constructed as follows: {NEXUS_URL}:{port}/docker-image + +```bash +sudo docker pull {NEXUS_URL}:8083/hello-world +``` + +the default port out of the box is 8083 + +Nexus will also need "Anonymous Access" set to "Enable". This can be done by logging into the Nexus Portal with the Admin user and following the prompts. diff --git a/docs/tre-templates/user-resources/custom.md b/docs/tre-templates/user-resources/custom.md new file mode 100644 index 0000000000..dfdfb136bd --- /dev/null +++ b/docs/tre-templates/user-resources/custom.md @@ -0,0 +1,62 @@ +# Guacamole User Resources + +- linuxvm - a Linux-based virtual machine +- windowsvm - A Windows-based virtual machine + +## Customising the user resources + +The `guacamole-azure-linuxvm` and `guacamole-azure-windowsvm` folders follow a consistent layout. +To update one of these templates (or to create a new template based on these folders) to use different image details or VM sizes, there are a few files that need to be updated: + +| File | Description | +| ---------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `porter.yaml` | This file describes the template and the name should be updated when creating a template based on the folder.
This file also contains a `custom` data section that describes the VM properties.
Additionally, the version needs to be updated to deploy an updated version | +| `template_schema.json` | This file controls the validation applied to the template, for example specifying the valid options for fields such as size and image | + +### Configuration + +In `porter.yaml`, the `custom` section contains a couple of sub-sections (shown below) + +```yaml +custom: + vm_sizes: + "2 CPU | 8GB RAM": Standard_D2s_v5 + "4 CPU | 16GB RAM": Standard_D4s_v5 + "8 CPU | 32GB RAM": Standard_D8s_v5 + "16 CPU | 64GB RAM": Standard_D16s_v5 + image_options: + "Ubuntu 22.04 LTS": + source_image_reference: + publisher: canonical + offer: 0001-com-ubuntu-server-jammy + sku: 22_04-lts-gen2 + version: latest + apt_sku: 22.04 + install_ui: true + conda_config: false + # "Custom Image From Gallery": + # source_image_name: your-image + # install_ui: true + # conda_config: true +``` + +The `vm_sizes` section is a map of a custom SKU description to the SKU identifier. + +The `image_options` section defined the possible image choices for the template (note that the name of the image used here needs to be included in the corresponding enum in `template_schema.json`). + +Within the image definition in `image_options` there are a few properties that can be specified: + +| Name | Description | +| ------------------------ | -------------------------------------------------------------------------------------------------------- | +| `source_image_name` | Specify VM image to use by name (see notes below for identifying the image gallery containing the image) | +| `source_image_reference` | Specify VM image to use by `publisher`, `offer`, `sku` & `version` (e.g. for Azure Marketplace images) | +| `install_ui` | (Linux only) Set `true` to install desktop environment | +| `conda_config` | Set true to configure conda | + +When specifying images using `source_image_name`, the image must be stored in an [image gallery](https://learn.microsoft.com/en-us/azure/virtual-machines/azure-compute-gallery). +To enable re-using built user resource templates across environments where the image may vary, the image gallery is configured via the `RP_BUNDLE_VALUES` environment variable when deploying the TRE. +The `RP_BUNDLE_VALUES` variable is a JSON object, and the `image_gallery_id` property within it identifies the image gallery that contains the images specified by `source_image_name`: + +```bash +RP_BUNDLE_VALUES='{"image_gallery_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups//providers/Microsoft.Compute/galleries/"} +``` diff --git a/docs/tre-templates/user-resources/guacamole-linux-vm.md b/docs/tre-templates/user-resources/guacamole-linux-vm.md index 8cf7b55906..31c08f55a0 100644 --- a/docs/tre-templates/user-resources/guacamole-linux-vm.md +++ b/docs/tre-templates/user-resources/guacamole-linux-vm.md @@ -7,3 +7,13 @@ It blocks all inbound and outbound traffic to the internet and allows only RDP c - [A base workspace bundle installed](../workspaces/base.md) - [A guacamole workspace service bundle installed](../workspace-services/guacamole.md) +- [A Nexus shared service has been deployed](../shared-services/nexus.md) + +## Notes + +- Nexus is a prerequisite of installing the Linux VMs given the additional commands in the bootstrap scripts. +- In production we recommend using VM images to avoid transient issues downloading and installing packages. The included user resource templates for VMs with bootstrap scripts should only be used for trial/demonstration purposes. More info can be found [here](./custom.md). +- Snap (app store for linux via [snapcraft.io](https://snapcraft.io)) hasn't been configured to work via the nexus proxy + +## Using Custom Images +For custom image usage, visit this [page](./custom.md). diff --git a/e2e_tests/test_performance.py b/e2e_tests/test_performance.py index 9f284fc235..6c6d836d9d 100644 --- a/e2e_tests/test_performance.py +++ b/e2e_tests/test_performance.py @@ -106,7 +106,7 @@ async def test_bulk_updates_to_ensure_each_resource_updated_in_series(verify) -> "properties": { "display_name": "Perf test VM", "description": "", - "os_image": "Ubuntu 18.04" + "os_image": "Ubuntu 22.04 LTS" } } diff --git a/templates/shared_services/sonatype-nexus-vm/porter.yaml b/templates/shared_services/sonatype-nexus-vm/porter.yaml index 307bee19bc..f46a419468 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: 2.8.13 +version: 3.0.0 description: "A Sonatype Nexus shared service" dockerfile: Dockerfile.tmpl registry: azuretre diff --git a/templates/shared_services/sonatype-nexus-vm/scripts/nexus_realms_config.json b/templates/shared_services/sonatype-nexus-vm/scripts/nexus_realms_config.json index 51fa1053e0..eeb2530e36 100644 --- a/templates/shared_services/sonatype-nexus-vm/scripts/nexus_realms_config.json +++ b/templates/shared_services/sonatype-nexus-vm/scripts/nexus_realms_config.json @@ -1,5 +1,4 @@ [ - "NexusAuthenticatingRealm", - "NexusAuthorizingRealm", - "DockerToken" + "DockerToken", + "NexusAuthenticatingRealm" ] diff --git a/templates/shared_services/sonatype-nexus-vm/scripts/nexus_repos_config/microsoft_download_conf.json b/templates/shared_services/sonatype-nexus-vm/scripts/nexus_repos_config/microsoft_download_conf.json new file mode 100644 index 0000000000..a153c626a9 --- /dev/null +++ b/templates/shared_services/sonatype-nexus-vm/scripts/nexus_repos_config/microsoft_download_conf.json @@ -0,0 +1,32 @@ +{ + "name": "microsoft-download", + "online": true, + "storage": { + "blobStoreName": "default", + "strictContentTypeValidation": true, + "write_policy": "ALLOW" + }, + "proxy": { + "remoteUrl": "https://download.microsoft.com/download", + "contentMaxAge": 1440, + "metadataMaxAge": 1440 + }, + "negativeCache": { + "enabled": true, + "timeToLive": 1440 + }, + "httpClient": { + "blocked": false, + "autoBlock": false, + "connection": { + "retries": 0, + "userAgentSuffix": "string", + "timeout": 60, + "enableCircularRedirects": false, + "enableCookies": false, + "useTrustStore": false + } + }, + "baseType": "raw", + "repoType": "proxy" + } \ No newline at end of file diff --git a/templates/shared_services/sonatype-nexus-vm/scripts/nexus_repos_config/r_studio_download_conf.json b/templates/shared_services/sonatype-nexus-vm/scripts/nexus_repos_config/r_studio_download_conf.json new file mode 100644 index 0000000000..264deeeb36 --- /dev/null +++ b/templates/shared_services/sonatype-nexus-vm/scripts/nexus_repos_config/r_studio_download_conf.json @@ -0,0 +1,32 @@ +{ + "name": "r-studio-download", + "online": true, + "storage": { + "blobStoreName": "default", + "strictContentTypeValidation": true, + "write_policy": "ALLOW" + }, + "proxy": { + "remoteUrl": "https://download1.rstudio.org", + "contentMaxAge": 1440, + "metadataMaxAge": 1440 + }, + "negativeCache": { + "enabled": true, + "timeToLive": 1440 + }, + "httpClient": { + "blocked": false, + "autoBlock": false, + "connection": { + "retries": 0, + "userAgentSuffix": "string", + "timeout": 60, + "enableCircularRedirects": false, + "enableCookies": false, + "useTrustStore": false + } + }, + "baseType": "raw", + "repoType": "proxy" + } \ No newline at end of file diff --git a/templates/shared_services/sonatype-nexus-vm/scripts/nexus_repos_config/snapcraft_conf.json b/templates/shared_services/sonatype-nexus-vm/scripts/nexus_repos_config/snapcraft_conf.json new file mode 100644 index 0000000000..33019c0a48 --- /dev/null +++ b/templates/shared_services/sonatype-nexus-vm/scripts/nexus_repos_config/snapcraft_conf.json @@ -0,0 +1,32 @@ +{ + "name": "snapcraft", + "online": true, + "storage": { + "blobStoreName": "default", + "strictContentTypeValidation": true, + "write_policy": "ALLOW" + }, + "proxy": { + "remoteUrl": "https://snapcraftcontent.com", + "contentMaxAge": 1440, + "metadataMaxAge": 1440 + }, + "negativeCache": { + "enabled": true, + "timeToLive": 1440 + }, + "httpClient": { + "blocked": false, + "autoBlock": false, + "connection": { + "retries": 0, + "userAgentSuffix": "string", + "timeout": 60, + "enableCircularRedirects": false, + "enableCookies": false, + "useTrustStore": false + } + }, + "baseType": "raw", + "repoType": "proxy" + } \ No newline at end of file diff --git a/templates/shared_services/sonatype-nexus-vm/terraform/locals.tf b/templates/shared_services/sonatype-nexus-vm/terraform/locals.tf index c0484c712f..67cae90039 100644 --- a/templates/shared_services/sonatype-nexus-vm/terraform/locals.tf +++ b/templates/shared_services/sonatype-nexus-vm/terraform/locals.tf @@ -1,7 +1,7 @@ locals { core_vnet = "vnet-${var.tre_id}" core_resource_group_name = "rg-${var.tre_id}" - nexus_allowed_fqdns = "pypi.org,*.pypi.org,files.pythonhosted.org,security.ubuntu.com,archive.ubuntu.com,keyserver.ubuntu.com,repo.anaconda.com,*.docker.com,*.docker.io,conda.anaconda.org,azure.archive.ubuntu.com,packages.microsoft.com,repo.almalinux.org,download-ib01.fedoraproject.org,cran.r-project.org,cloud.r-project.org" + nexus_allowed_fqdns = "pypi.org,*.pypi.org,files.pythonhosted.org,security.ubuntu.com,archive.ubuntu.com,keyserver.ubuntu.com,repo.anaconda.com,*.docker.com,*.docker.io,conda.anaconda.org,azure.archive.ubuntu.com,packages.microsoft.com,repo.almalinux.org,download-ib01.fedoraproject.org,cran.r-project.org,cloud.r-project.org,download1.rstudio.org,*.snapcraftcontent.com,download.microsoft.com" nexus_allowed_fqdns_list = distinct(compact(split(",", replace(local.nexus_allowed_fqdns, " ", "")))) workspace_vm_allowed_fqdns = "r3.o.lencr.org,x1.c.lencr.org" workspace_vm_allowed_fqdns_list = distinct(compact(split(",", replace(local.workspace_vm_allowed_fqdns, " ", "")))) diff --git a/templates/shared_services/sonatype-nexus-vm/terraform/vm.tf b/templates/shared_services/sonatype-nexus-vm/terraform/vm.tf index 27a6a3d04f..79dfa04472 100644 --- a/templates/shared_services/sonatype-nexus-vm/terraform/vm.tf +++ b/templates/shared_services/sonatype-nexus-vm/terraform/vm.tf @@ -83,6 +83,7 @@ resource "azurerm_user_assigned_identity" "nexus_msi" { location = data.azurerm_resource_group.rg.location resource_group_name = local.core_resource_group_name tags = local.tre_shared_service_tags + lifecycle { ignore_changes = [tags] } } diff --git a/templates/workspace_services/guacamole/user_resources/README.md b/templates/workspace_services/guacamole/user_resources/README.md index c553e1673a..623098ad42 100644 --- a/templates/workspace_services/guacamole/user_resources/README.md +++ b/templates/workspace_services/guacamole/user_resources/README.md @@ -2,10 +2,9 @@ This folder contains user resources that can be deployed with the Guacamole workspace service: -- linuxvm - a Linux-based virtual machine (expects an Ubuntu 18.04-based VM) +- linuxvm - a Linux-based virtual machine - windowsvm - A Windows-based virtual machine - ## Customising the user resources The `guacamole-azure-linuxvm` and `guacamole-azure-windowsvm` folders follow a consistent layout. @@ -29,22 +28,15 @@ custom: "8 CPU | 32GB RAM": Standard_D8s_v5 "16 CPU | 64GB RAM": Standard_D16s_v5 image_options: - "Ubuntu 18.04": + "Ubuntu 22.04 LTS": source_image_reference: publisher: canonical - offer: ubuntuserver - sku: 18_04-lts-gen2 + offer: 0001-com-ubuntu-server-jammy + sku: 22_04-lts-gen2 version: latest + apt_sku: 22.04 install_ui: true conda_config: false - "Ubuntu 18.04 Data Science VM": - source_image_reference: - publisher: microsoft-dsvm - offer: ubuntu-1804 - sku: 1804-gen2 - version: latest - install_ui: false - conda_config: true # "Custom Image From Gallery": # source_image_name: your-image # install_ui: true @@ -68,8 +60,6 @@ When specifying images using `source_image_name`, the image must be stored in an To enable re-using built user resource templates across environments where the image may vary, the image gallery is configured via the `RP_BUNDLE_VALUES` environment variable when deploying the TRE. The `RP_BUNDLE_VALUES` variable is a JSON object, and the `image_gallery_id` property within it identifies the image gallery that contains the images specified by `source_image_name`: - ```bash RP_BUNDLE_VALUES='{"image_gallery_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups//providers/Microsoft.Compute/galleries/"} ``` - 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 f36a668258..cbd074d962 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: 0.6.9 +version: 1.0.0 description: "An Azure TRE User Resource Template for Guacamole (Linux)" dockerfile: Dockerfile.tmpl registry: azuretre @@ -14,29 +14,21 @@ custom: "8 CPU | 32GB RAM": Standard_D8s_v5 "16 CPU | 64GB RAM": Standard_D16s_v5 image_options: - "Ubuntu 18.04": + "Ubuntu 22.04 LTS": source_image_reference: publisher: canonical - offer: ubuntuserver - sku: 18_04-lts-gen2 + offer: 0001-com-ubuntu-server-jammy + sku: 22_04-lts-gen2 version: latest + apt_sku: 22.04 install_ui: true conda_config: false - "Ubuntu 18.04 Data Science VM": - source_image_reference: - publisher: microsoft-dsvm - offer: ubuntu-1804 - sku: 1804-gen2 - version: latest - install_ui: false - conda_config: true # For information on using custom images, see README.me in the guacamole/user-resources folder # "Custom Image From Gallery": # source_image_name: your-image # install_ui: true # conda_config: true - credentials: - name: azure_tenant_id env: ARM_TENANT_ID @@ -91,7 +83,7 @@ parameters: default: "public" - name: os_image type: string - default: "Ubuntu 18.04 Data Science VM" + default: "Ubuntu 22.04 LTS" - name: vm_size type: string default: "2 CPU | 8GB RAM" 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 9c7aec15a3..fc0bad231b 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 @@ -16,8 +16,7 @@ "title": "Linux image", "description": "Select Linux image to use for VM", "enum": [ - "Ubuntu 18.04", - "Ubuntu 18.04 Data Science VM" + "Ubuntu 22.04 LTS" ] }, "vm_size": { diff --git a/templates/workspace_services/guacamole/user_resources/guacamole-azure-linuxvm/terraform/apt_sources_config.yml b/templates/workspace_services/guacamole/user_resources/guacamole-azure-linuxvm/terraform/apt_sources_config.yml index 22b3418d5b..35b5b5857b 100644 --- a/templates/workspace_services/guacamole/user_resources/guacamole-azure-linuxvm/terraform/apt_sources_config.yml +++ b/templates/workspace_services/guacamole/user_resources/guacamole-azure-linuxvm/terraform/apt_sources_config.yml @@ -14,6 +14,8 @@ apt: deb [trusted=yes] $PRIMARY $RELEASE main restricted universe multiverse deb [trusted=yes] $PRIMARY $RELEASE-updates main restricted universe multiverse deb [trusted=yes] $SECURITY $RELEASE main restricted universe multiverse - deb [signed-by=/etc/apt/trusted.gpg.d/microsoft.gpg] ${nexus_proxy_url}/repository/microsoft-apt/ubuntu/18.04/prod $RELEASE main + deb [signed-by=/etc/apt/trusted.gpg.d/microsoft.gpg] ${nexus_proxy_url}/repository/microsoft-apt/ubuntu/${apt_sku}/prod $RELEASE main deb [signed-by=/etc/apt/trusted.gpg.d/microsoft.gpg] ${nexus_proxy_url}/repository/microsoft-apt/repos/edge stable main + deb [signed-by=/etc/apt/trusted.gpg.d/microsoft.gpg] ${nexus_proxy_url}/repository/microsoft-apt/repos/vscode stable main + deb [signed-by=/etc/apt/trusted.gpg.d/microsoft.gpg] ${nexus_proxy_url}/repository/microsoft-apt/repos/azure-cli $RELEASE main deb [signed-by=/etc/apt/trusted.gpg.d/docker-archive-keyring.gpg] ${nexus_proxy_url}/repository/docker/ $RELEASE stable diff --git a/templates/workspace_services/guacamole/user_resources/guacamole-azure-linuxvm/terraform/get_apt_keys.sh b/templates/workspace_services/guacamole/user_resources/guacamole-azure-linuxvm/terraform/get_apt_keys.sh index 5849eaede3..6e69009525 100644 --- a/templates/workspace_services/guacamole/user_resources/guacamole-azure-linuxvm/terraform/get_apt_keys.sh +++ b/templates/workspace_services/guacamole/user_resources/guacamole-azure-linuxvm/terraform/get_apt_keys.sh @@ -6,6 +6,10 @@ set -o nounset # Uncomment this line to see each command for debugging (careful: this will show secrets!) # set -o xtrace +#remove key if they already exist +sudo rm -f /etc/apt/trusted.gpg.d/docker-archive-keyring.gpg || true +sudo rm -f /etc/apt/trusted.gpg.d/microsoft.gpg || true + # Get Docker Public key from Nexus curl -fsSL "${NEXUS_PROXY_URL}"/repository/docker-public-key/gpg | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/docker-archive-keyring.gpg diff --git a/templates/workspace_services/guacamole/user_resources/guacamole-azure-linuxvm/terraform/linuxvm.tf b/templates/workspace_services/guacamole/user_resources/guacamole-azure-linuxvm/terraform/linuxvm.tf index 247c4f77e0..8172ec77bb 100644 --- a/templates/workspace_services/guacamole/user_resources/guacamole-azure-linuxvm/terraform/linuxvm.tf +++ b/templates/workspace_services/guacamole/user_resources/guacamole-azure-linuxvm/terraform/linuxvm.tf @@ -110,6 +110,8 @@ data "template_file" "vm_config" { FILESHARE_NAME = var.shared_storage_access ? data.azurerm_storage_share.shared_storage[0].name : "" NEXUS_PROXY_URL = local.nexus_proxy_url CONDA_CONFIG = local.selected_image.conda_config ? 1 : 0 + VM_USER = random_string.username.result + APT_SKU = replace(local.apt_sku, ".", "") } } @@ -131,6 +133,7 @@ data "template_file" "apt_sources_config" { template = file("${path.module}/apt_sources_config.yml") vars = { nexus_proxy_url = local.nexus_proxy_url + apt_sku = local.apt_sku } } diff --git a/templates/workspace_services/guacamole/user_resources/guacamole-azure-linuxvm/terraform/locals.tf b/templates/workspace_services/guacamole/user_resources/guacamole-azure-linuxvm/terraform/locals.tf index 43a6d5982b..e0281269fd 100644 --- a/templates/workspace_services/guacamole/user_resources/guacamole-azure-linuxvm/terraform/locals.tf +++ b/templates/workspace_services/guacamole/user_resources/guacamole-azure-linuxvm/terraform/locals.tf @@ -15,7 +15,6 @@ locals { tre_user_resource_id = var.tre_resource_id } nexus_proxy_url = "https://nexus-${data.azurerm_public_ip.app_gateway_ip.fqdn}" - # Load VM SKU/image details from porter.yaml porter_yaml = yamldecode(file("${path.module}/../porter.yaml")) vm_sizes = local.porter_yaml["custom"]["vm_sizes"] @@ -26,4 +25,5 @@ locals { # selected_image_source_refs is an array to enable easy use of a dynamic block selected_image_source_refs = lookup(local.selected_image, "source_image_reference", null) == null ? [] : [local.selected_image.source_image_reference] selected_image_source_id = lookup(local.selected_image, "source_image_name", null) == null ? null : "${var.image_gallery_id}/images/${local.selected_image.source_image_name}" + apt_sku = local.selected_image_source_refs[0]["apt_sku"] } diff --git a/templates/workspace_services/guacamole/user_resources/guacamole-azure-linuxvm/terraform/pypi_sources_config.sh b/templates/workspace_services/guacamole/user_resources/guacamole-azure-linuxvm/terraform/pypi_sources_config.sh index 6d70862655..9380cbc9e1 100644 --- a/templates/workspace_services/guacamole/user_resources/guacamole-azure-linuxvm/terraform/pypi_sources_config.sh +++ b/templates/workspace_services/guacamole/user_resources/guacamole-azure-linuxvm/terraform/pypi_sources_config.sh @@ -1,5 +1,5 @@ #!/bin/bash -sudo tee /etc/pip.conf > dev/null <<'EOF' +sudo tee /etc/pip.conf > /dev/null <<'EOF' [global] index = ${nexus_proxy_url}/repository/pypi/pypi index-url = ${nexus_proxy_url}/repository/pypi/simple diff --git a/templates/workspace_services/guacamole/user_resources/guacamole-azure-linuxvm/terraform/vm_config.sh b/templates/workspace_services/guacamole/user_resources/guacamole-azure-linuxvm/terraform/vm_config.sh index 7db5f89b82..71d7317545 100644 --- a/templates/workspace_services/guacamole/user_resources/guacamole-azure-linuxvm/terraform/vm_config.sh +++ b/templates/workspace_services/guacamole/user_resources/guacamole-azure-linuxvm/terraform/vm_config.sh @@ -2,32 +2,94 @@ set -o errexit set -o pipefail -# set -o nounset +set -o nounset # Uncomment this line to see each command for debugging (careful: this will show secrets!) -# set -o xtrace +set -o xtrace # Remove apt sources not included in sources.list file sudo rm -f /etc/apt/sources.list.d/* # Update apt packages from configured Nexus sources -sudo apt-get update - -# Install xrdp so Guacamole can connect via RDP -sudo apt-get install xrdp -y +echo "init_vm.sh: START" +sudo apt update || true +sudo apt upgrade -y +sudo apt install -y gnupg2 software-properties-common apt-transport-https wget dirmngr gdebi-core +sudo apt-get update || true + +## Desktop +echo "init_vm.sh: Desktop" +sudo systemctl start gdm3 || true +DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true dpkg-reconfigure gdm3 || true +sudo apt install -y xfce4 xfce4-goodies xorg dbus-x11 x11-xserver-utils +echo /usr/sbin/gdm3 > /etc/X11/default-display-manager + +## Install xrdp so Guacamole can connect via RDP +echo "init_vm.sh: xrdp" +sudo apt install -y xrdp xorgxrdp xfce4-session sudo adduser xrdp ssl-cert +sudo -u "${VM_USER}" -i bash -c 'echo xfce4-session > ~/.xsession' +sudo -u "${VM_USER}" -i bash -c 'echo xset s off >> ~/.xsession' +sudo -u "${VM_USER}" -i bash -c 'echo xset -dpms >> ~/.xsession' -# Install desktop environment if image doesn't have one already -if [ "${INSTALL_UI}" -eq 1 ]; then - sudo apt-get install xorg xfce4 xfce4-goodies dbus-x11 x11-xserver-utils -y - echo xfce4-session > ~/.xsession -fi +# Make sure xrdp service starts up with the system +sudo systemctl enable xrdp +sudo service xrdp restart + +## Python 3.8 and Jupyter +sudo apt install -y jupyter-notebook microsoft-edge-dev + +## VS Code +echo "init_vm.sh: VS Code" +sudo apt install -y code +sudo apt install -y gvfs-bin || true + +echo "init_vm.sh: Folders" +sudo mkdir -p /opt/vscode/user-data +sudo mkdir -p /opt/vscode/extensions + +# echo "init_vm.sh: azure-cli" +sudo apt install azure-cli -y + +# TODO: need to look at proxy extentions +## VSCode Extensions +# echo "init_vm.sh: VSCode extensions" +# code --extensions-dir="/opt/vscode/extensions" --user-data-dir="/opt/vscode/user-data" --install-extension ms-python.python +# code --extensions-dir="/opt/vscode/extensions" --user-data-dir="/opt/vscode/user-data" --install-extension REditorSupport.r +# code --extensions-dir="/opt/vscode/extensions" --user-data-dir="/opt/vscode/user-data" --install-extension RDebugger.r-debugger + +# Azure Storage Explorer +sudo apt install gnome-keyring dotnet-sdk-7.0 -y +wget -q "${NEXUS_PROXY_URL}"/repository/microsoft-download/A/E/3/AE32C485-B62B-4437-92F7-8B6B2C48CB40/StorageExplorer-linux-x64.tar.gz -P /tmp +sudo mkdir /opt/storage-explorer +sudo tar xvf /tmp/StorageExplorer-linux-x64.tar.gz -C /opt/storage-explorer +sudo chmod +x /opt/storage-explorer/* + +sudo tee /usr/share/applications/storage-explorer.desktop << END +[Desktop Entry] +Name=Storage Explorer +Comment=Azure Storage Explorer +Exec=/opt/storage-explorer/StorageExplorer +Icon=/opt/storage-explorer/resources/app/out/app/icon.png +Terminal=false +Type=Application +StartupNotify=false +StartupWMClass=Code +Categories=Development; +END + +## R +echo "init_vm.sh: R Setup" +sudo apt install -y r-base + +# RStudio Desktop +echo "init_vm.sh: RStudio" +wget "${NEXUS_PROXY_URL}"/repository/r-studio-download/electron/jammy/amd64/rstudio-2023.12.1-402-amd64.deb -P /tmp/2204 +wget "${NEXUS_PROXY_URL}"/repository/r-studio-download/electron/focal/amd64/rstudio-2023.12.1-402-amd64.deb -P /tmp/2004 +sudo gdebi --non-interactive /tmp/"${APT_SKU}"/rstudio-2023.12.1-402-amd64.deb # Fix for blank screen on DSVM (/sh -> /bash due to conflict with profile.d scripts) sudo sed -i 's|!/bin/sh|!/bin/bash|g' /etc/xrdp/startwm.sh -# Make sure xrdp service starts up with the system -sudo systemctl enable xrdp - if [ "${SHARED_STORAGE_ACCESS}" -eq 1 ]; then # Install required packages sudo apt-get install autofs -y @@ -75,6 +137,7 @@ fi ### Anaconda Config if [ "${CONDA_CONFIG}" -eq 1 ]; then + echo "init_vm.sh: Anaconda" export PATH="/anaconda/condabin":$PATH export PATH="/anaconda/bin":$PATH export PATH="/anaconda/envs/py38_default/bin":$PATH @@ -85,11 +148,42 @@ if [ "${CONDA_CONFIG}" -eq 1 ]; then fi # Docker install and config +sudo apt-get remove -y moby-tini || true +sudo apt-get install -y r-base-core sudo apt-get install -y ca-certificates curl gnupg lsb-release -sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin jq +sudo apt-get install -y docker-compose-plugin docker-ce-cli containerd.io jq +sudo apt-get install -y docker-ce jq -n --arg proxy "${NEXUS_PROXY_URL}:8083" '{"registry-mirrors": [$proxy]}' > /etc/docker/daemon.json sudo systemctl daemon-reload sudo systemctl restart docker # R config sudo echo -e "local({\n r <- getOption(\"repos\")\n r[\"Nexus\"] <- \"""${NEXUS_PROXY_URL}\"/repository/r-proxy/\"\n options(repos = r)\n})" | sudo tee /etc/R/Rprofile.site + +# Jupiter Notebook Config +sudo sed -i -e 's/Terminal=true/Terminal=false/g' /usr/share/applications/jupyter-notebook.desktop + +# Default Browser +sudo update-alternatives --config x-www-browser + +## Cleanup +echo "init_vm.sh: Cleanup" +sudo shutdown -r now + +# Prevent screen timeout +echo "init_vm.sh: Preventing Timeout" +sudo touch /home/"${VM_USER}"/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-screensaver.xml +sudo chmod 664 /home/"${VM_USER}"/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-screensaver.xml +sudo chown "${VM_USER}":"${VM_USER}" /home/"${VM_USER}"/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-screensaver.xml +sudo tee /home/"${VM_USER}"/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-screensaver.xml << END + + + + + + + + + + +END From bd0aa62f577b05a8548b03db43e90f2495ecd109 Mon Sep 17 00:00:00 2001 From: Marcus Robinson Date: Fri, 10 May 2024 10:48:36 +0100 Subject: [PATCH 27/79] Create KEY_VAULT_URL env var when a private.env file exists (#3727) * Add in variablkes required when have a local porter config.yaml * skip SC2153 * fix typo --------- Co-authored-by: Tim Allen --- devops/scripts/load_and_validate_env.sh | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/devops/scripts/load_and_validate_env.sh b/devops/scripts/load_and_validate_env.sh index 3b79c9ef6a..c4d771ab91 100755 --- a/devops/scripts/load_and_validate_env.sh +++ b/devops/scripts/load_and_validate_env.sh @@ -85,4 +85,13 @@ else export TRE_URL fi +# if local debugging is configured, then set vars required by ~/.porter/config.yaml +if [ -f "$DIR/../../core/private.env" ]; then + # shellcheck disable=SC1091 + source "$DIR/../../core/private.env" + # shellcheck disable=SC2153 + KEY_VAULT_URL=$KEYVAULT_URI + export KEY_VAULT_URL +fi + set +o nounset From d866ec550a2c37ee0b8761fb00166d626b4c2c3a Mon Sep 17 00:00:00 2001 From: Marcus Robinson Date: Fri, 10 May 2024 11:41:59 +0100 Subject: [PATCH 28/79] Add storage account check to avoid name clash (#3863) * Add storage account check * update changelog. version and fix linting * Update _version.py --------- Co-authored-by: Tim Allen --- CHANGELOG.md | 1 + api_app/_version.py | 2 +- api_app/db/repositories/workspaces.py | 19 ++++--- api_app/requirements.txt | 1 + .../test_workpaces_repository.py | 49 +++++++++++++++++-- 5 files changed, 60 insertions(+), 12 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5aa6fe9888..61b916c43f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ BUG FIXES: * Update to Resource Processor Image, now using Ubuntu 22.04 (jammy). Part of ([#3523](https://github.com/microsoft/AzureTRE/issues/3523)) * Remove TLS1.0/1.1 support from Application Gateway ([#3914](https://github.com/microsoft/AzureTRE/issues/3914)) * GitHub Actions version updates. ([#3847](https://github.com/microsoft/AzureTRE/issues/3847)) +* Add workaround to avoid name clashes for storage accounts([#3863](https://github.com/microsoft/AzureTRE/pull/3858)) COMPONENTS: diff --git a/api_app/_version.py b/api_app/_version.py index bcea63d014..2e93a98791 100644 --- a/api_app/_version.py +++ b/api_app/_version.py @@ -1 +1 @@ -__version__ = "0.18.6" +__version__ = "0.18.7" diff --git a/api_app/db/repositories/workspaces.py b/api_app/db/repositories/workspaces.py index 8065d48be0..d66a875f7e 100644 --- a/api_app/db/repositories/workspaces.py +++ b/api_app/db/repositories/workspaces.py @@ -1,12 +1,12 @@ import uuid from typing import List, Tuple - +from azure.mgmt.storage import StorageManagementClient from pydantic import parse_obj_as from db.repositories.resources_history import ResourceHistoryRepository from models.domain.resource_template import ResourceTemplate from models.domain.authentication import User -from core import config +from core import config, credentials from db.errors import EntityDoesNotExist, InvalidInput, ResourceIsNotDeployed from db.repositories.resource_templates import ResourceTemplateRepository from db.repositories.resources import ResourceRepository, IS_NOT_DELETED_CLAUSE @@ -66,17 +66,22 @@ async def get_workspace_by_id(self, workspace_id: str) -> Workspace: return parse_obj_as(Workspace, workspaces[0]) # Remove this method once not using last 4 digits for naming - https://github.com/microsoft/AzureTRE/issues/3666 - async def is_workspace_with_last_4_id(self, workspace_id: str) -> bool: - query = self.workspaces_query_string() + f' AND ENDSWITH(c.id, "{workspace_id[-4:]}")' - workspaces = await self.query(query=query) - return len(workspaces) > 0 + async def is_worksapce_storage_account_available(self, workspace_id: str) -> bool: + storage_client = StorageManagementClient(credentials.get_credential(), config.SUBSCRIPTION_ID) + # check for storage account with last 4 digits of workspace_id + availability_result = storage_client.storage_accounts.check_name_availability( + { + "name": f"stgws{workspace_id[-4:]}" + } + ) + return availability_result.name_available async def create_workspace_item(self, workspace_input: WorkspaceInCreate, auth_info: dict, workspace_owner_object_id: str, user_roles: List[str]) -> Tuple[Workspace, ResourceTemplate]: full_workspace_id = str(uuid.uuid4()) # Ensure workspace with last four digits of ID does not already exist - remove when https://github.com/microsoft/AzureTRE/issues/3666 is resolved - while await self.is_workspace_with_last_4_id(full_workspace_id): + while not await self.is_worksapce_storage_account_available(full_workspace_id): full_workspace_id = str(uuid.uuid4()) template = await self.validate_input_against_template(workspace_input.templateName, workspace_input, ResourceType.Workspace, user_roles) diff --git a/api_app/requirements.txt b/api_app/requirements.txt index afe27aad1c..c94b3a6a08 100644 --- a/api_app/requirements.txt +++ b/api_app/requirements.txt @@ -7,6 +7,7 @@ azure-mgmt-compute==30.3.0 azure-mgmt-cosmosdb==9.3.0 azure-mgmt-costmanagement==4.0.1 azure-mgmt-resource==23.0.1 +azure-mgmt-storage==21.1.0 azure-monitor-opentelemetry==1.2.0 azure-servicebus==7.11.3 azure-storage-blob==12.19.0 diff --git a/api_app/tests_ma/test_db/test_repositories/test_workpaces_repository.py b/api_app/tests_ma/test_db/test_repositories/test_workpaces_repository.py index 01727d4e24..a53ff0bc94 100644 --- a/api_app/tests_ma/test_db/test_repositories/test_workpaces_repository.py +++ b/api_app/tests_ma/test_db/test_repositories/test_workpaces_repository.py @@ -98,15 +98,18 @@ async def test_get_workspace_by_id_queries_db(workspace_repo, workspace): @pytest.mark.asyncio @patch('db.repositories.workspaces.generate_new_cidr') @patch('db.repositories.workspaces.WorkspaceRepository.validate_input_against_template') +@patch('db.repositories.workspaces.WorkspaceRepository.is_worksapce_storage_account_available') @patch('core.config.RESOURCE_LOCATION', "useast2") @patch('core.config.TRE_ID', "9876") -async def test_create_workspace_item_creates_a_workspace_with_the_right_values(validate_input_mock, new_cidr_mock, workspace_repo, basic_workspace_request, basic_resource_template): +async def test_create_workspace_item_creates_a_workspace_with_the_right_values(mock_is_workspace_storage_account_available, validate_input_mock, new_cidr_mock, workspace_repo, basic_workspace_request, basic_resource_template): workspace_to_create = basic_workspace_request # make sure the input has 'None' for values that we expect to be set workspace_to_create.properties.pop("address_space", None) workspace_to_create.properties.pop("address_spaces", None) workspace_to_create.properties.pop("workspace_owner_object_id", None) + mock_is_workspace_storage_account_available.return_value = AsyncMock().return_value + mock_is_workspace_storage_account_available.return_value.return_value = False validate_input_mock.return_value = basic_resource_template new_cidr_mock.return_value = "1.2.3.4/24" @@ -165,14 +168,18 @@ async def test_get_address_space_based_on_size_with_large_address_space(workspac @pytest.mark.asyncio @patch('db.repositories.workspaces.WorkspaceRepository.validate_input_against_template') +@patch('db.repositories.workspaces.WorkspaceRepository.is_worksapce_storage_account_available') @patch('core.config.RESOURCE_LOCATION', "useast2") @patch('core.config.TRE_ID', "9876") @patch('core.config.CORE_ADDRESS_SPACE', "10.1.0.0/22") @patch('core.config.TRE_ADDRESS_SPACE', "10.0.0.0/12") -async def test_create_workspace_item_creates_a_workspace_with_custom_address_space(validate_input_mock, workspace_repo, basic_workspace_request, basic_resource_template): +async def test_create_workspace_item_creates_a_workspace_with_custom_address_space(mock_is_workspace_storage_account_available, validate_input_mock, workspace_repo, basic_workspace_request, basic_resource_template): workspace_to_create = basic_workspace_request workspace_to_create.properties["address_space_size"] = "custom" workspace_to_create.properties["address_space"] = "10.2.4.0/24" + + mock_is_workspace_storage_account_available.return_value = AsyncMock().return_value + mock_is_workspace_storage_account_available.return_value.return_value = False validate_input_mock.return_value = basic_resource_template workspace, _ = await workspace_repo.create_workspace_item(workspace_to_create, {}, "test_object_id", ["test_role"]) @@ -182,14 +189,18 @@ async def test_create_workspace_item_creates_a_workspace_with_custom_address_spa @pytest.mark.asyncio @patch('db.repositories.workspaces.WorkspaceRepository.validate_input_against_template') +@patch('db.repositories.workspaces.WorkspaceRepository.is_worksapce_storage_account_available') @patch('core.config.RESOURCE_LOCATION', "useast2") @patch('core.config.TRE_ID', "9876") @patch('core.config.CORE_ADDRESS_SPACE', "10.1.0.0/22") @patch('core.config.TRE_ADDRESS_SPACE', "10.0.0.0/12") -async def test_create_workspace_item_throws_exception_with_bad_custom_address_space(validate_input_mock, workspace_repo, basic_workspace_request, basic_resource_template): +async def test_create_workspace_item_throws_exception_with_bad_custom_address_space(mock_is_workspace_storage_account_available, validate_input_mock, workspace_repo, basic_workspace_request, basic_resource_template): workspace_to_create = basic_workspace_request workspace_to_create.properties["address_space_size"] = "custom" workspace_to_create.properties["address_space"] = "192.168.0.0/24" + + mock_is_workspace_storage_account_available.return_value = AsyncMock().return_value + mock_is_workspace_storage_account_available.return_value.return_value = False validate_input_mock.return_value = basic_resource_template with pytest.raises(InvalidInput): @@ -249,8 +260,12 @@ async def test_get_address_space_based_on_size_with_address_space_and_address_sp @pytest.mark.asyncio @patch('db.repositories.workspaces.WorkspaceRepository.validate_input_against_template') -async def test_create_workspace_item_raises_value_error_if_template_is_invalid(validate_input_mock, workspace_repo, basic_workspace_request): +@patch('db.repositories.workspaces.WorkspaceRepository.is_worksapce_storage_account_available') +async def test_create_workspace_item_raises_value_error_if_template_is_invalid(mock_is_workspace_storage_account_available, validate_input_mock, workspace_repo, basic_workspace_request): workspace_input = basic_workspace_request + + mock_is_workspace_storage_account_available.return_value = AsyncMock().return_value + mock_is_workspace_storage_account_available.return_value.return_value = False validate_input_mock.side_effect = ValueError with pytest.raises(ValueError): @@ -281,3 +296,29 @@ def test_workspace_owner_is_not_overwritten_if_present_in_workspace_properties(w not_expected_object_id = "Not Expected" assert workspace_repo.get_workspace_owner(dictToTest, not_expected_object_id) == "Expected" + + +@patch('azure.mgmt.storage.StorageManagementClient') +async def test_is_worksapce_storage_account_available_when_name_available(mock_storage_client): + workspace_id = "workspace1234" + mock_storage_client.return_value.storage_accounts.check_name_availability.return_value = AsyncMock() + mock_storage_client.return_value.storage_accounts.check_name_availability.return_value.name_available = True + workspace_repo = WorkspaceRepository() + + result = await workspace_repo.is_workspace_with_last_4_id(workspace_id) + + mock_storage_client.return_value.storage_accounts.check_name_availability.assert_called_once_with({"name": f"stgws{workspace_id[-4:]}"}) + assert result is False + + +@patch('azure.mgmt.storage.StorageManagementClient') +async def test_is_worksapce_storage_account_available_when_name_not_available(mock_storage_client): + workspace_id = "workspace1234" + mock_storage_client.return_value.storage_accounts.check_name_availability.return_value = AsyncMock() + mock_storage_client.return_value.storage_accounts.check_name_availability.return_value.name_available = False + workspace_repo = WorkspaceRepository() + + result = await workspace_repo.is_workspace_with_last_4_id(workspace_id) + + mock_storage_client.return_value.storage_accounts.check_name_availability.assert_called_once_with({"name": f"stgws{workspace_id[-4:]}"}) + assert result is True From 7b572af421d21a070acddf2e1a620cce6796b5a8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 10 May 2024 13:09:28 +0100 Subject: [PATCH 29/79] Bump the npm_and_yarn group in /ui/app with 2 updates (#3918) * Bump the npm_and_yarn group in /ui/app with 2 updates Bumps the npm_and_yarn group in /ui/app with 2 updates: [ejs](https://github.com/mde/ejs) and [tar](https://github.com/isaacs/node-tar). Updates `ejs` from 3.1.9 to 3.1.10 - [Release notes](https://github.com/mde/ejs/releases) - [Commits](https://github.com/mde/ejs/compare/v3.1.9...v3.1.10) Updates `tar` from 6.2.0 to 6.2.1 - [Release notes](https://github.com/isaacs/node-tar/releases) - [Changelog](https://github.com/isaacs/node-tar/blob/main/CHANGELOG.md) - [Commits](https://github.com/isaacs/node-tar/compare/v6.2.0...v6.2.1) --- updated-dependencies: - dependency-name: ejs dependency-type: indirect dependency-group: npm_and_yarn - dependency-name: tar dependency-type: indirect dependency-group: npm_and_yarn ... Signed-off-by: dependabot[bot] * update version --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Tim Allen --- ui/app/package.json | 2 +- ui/app/yarn.lock | 43 ++++++++++++++++++++++++++++++++++--------- 2 files changed, 35 insertions(+), 10 deletions(-) diff --git a/ui/app/package.json b/ui/app/package.json index 5d5966da33..a1b55d7333 100644 --- a/ui/app/package.json +++ b/ui/app/package.json @@ -1,6 +1,6 @@ { "name": "tre-ui", - "version": "0.5.22", + "version": "0.5.23", "private": true, "dependencies": { "@azure/msal-browser": "^2.35.0", diff --git a/ui/app/yarn.lock b/ui/app/yarn.lock index 98157cef4c..97db5a0caa 100644 --- a/ui/app/yarn.lock +++ b/ui/app/yarn.lock @@ -4552,9 +4552,9 @@ ee-first@1.1.1: integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== ejs@^3.1.6: - version "3.1.9" - resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.9.tgz#03c9e8777fe12686a9effcef22303ca3d8eeb361" - integrity sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ== + version "3.1.10" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.10.tgz#69ab8358b14e896f80cc39e62087b88500c3ac3b" + integrity sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA== dependencies: jake "^10.8.5" @@ -10380,7 +10380,16 @@ string-natural-compare@^3.0.1: resolved "https://registry.yarnpkg.com/string-natural-compare/-/string-natural-compare-3.0.1.tgz#7a42d58474454963759e8e8b7ae63d71c1e7fdf4" integrity sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw== -"string-width-cjs@npm:string-width@^4.2.0", "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: +"string-width-cjs@npm:string-width@^4.2.0": + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -10463,7 +10472,14 @@ stringify-object@^3.3.0: is-obj "^1.0.1" is-regexp "^1.0.0" -"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: +"strip-ansi-cjs@npm:strip-ansi@^6.0.1": + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== @@ -10657,9 +10673,9 @@ tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0, tapable@^2.2.1: integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== tar@^6.0.2, tar@^6.1.11, tar@^6.1.2: - version "6.2.0" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.0.tgz#b14ce49a79cb1cd23bc9b016302dea5474493f73" - integrity sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ== + version "6.2.1" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.1.tgz#717549c541bc3c2af15751bea94b1dd068d4b03a" + integrity sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A== dependencies: chownr "^2.0.0" fs-minipass "^2.0.0" @@ -11719,7 +11735,16 @@ workbox-window@6.6.1: "@types/trusted-types" "^2.0.2" workbox-core "6.6.1" -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== From 565fd4dc270b933d191a2120c30dc8fcbb012586 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 10 May 2024 15:03:16 +0000 Subject: [PATCH 30/79] Bump the pip group across 3 directories with 2 updates (#3930) * Bump the pip group across 3 directories with 2 updates Bumps the pip group with 2 updates in the /api_app directory: [aiohttp](https://github.com/aio-libs/aiohttp) and [gunicorn](https://github.com/benoitc/gunicorn). Bumps the pip group with 1 update in the /cli directory: [aiohttp](https://github.com/aio-libs/aiohttp). Bumps the pip group with 1 update in the /resource_processor/vmss_porter directory: [aiohttp](https://github.com/aio-libs/aiohttp). Updates `aiohttp` from 3.9.3 to 3.9.4 - [Release notes](https://github.com/aio-libs/aiohttp/releases) - [Changelog](https://github.com/aio-libs/aiohttp/blob/master/CHANGES.rst) - [Commits](https://github.com/aio-libs/aiohttp/compare/v3.9.3...v3.9.4) Updates `gunicorn` from 21.2.0 to 22.0.0 - [Release notes](https://github.com/benoitc/gunicorn/releases) - [Commits](https://github.com/benoitc/gunicorn/compare/21.2.0...22.0.0) Updates `aiohttp` from 3.9.3 to 3.9.4 - [Release notes](https://github.com/aio-libs/aiohttp/releases) - [Changelog](https://github.com/aio-libs/aiohttp/blob/master/CHANGES.rst) - [Commits](https://github.com/aio-libs/aiohttp/compare/v3.9.3...v3.9.4) Updates `aiohttp` from 3.9.3 to 3.9.4 - [Release notes](https://github.com/aio-libs/aiohttp/releases) - [Changelog](https://github.com/aio-libs/aiohttp/blob/master/CHANGES.rst) - [Commits](https://github.com/aio-libs/aiohttp/compare/v3.9.3...v3.9.4) --- updated-dependencies: - dependency-name: aiohttp dependency-type: direct:production dependency-group: pip - dependency-name: gunicorn dependency-type: direct:production dependency-group: pip - dependency-name: aiohttp dependency-type: direct:production dependency-group: pip - dependency-name: aiohttp dependency-type: direct:production dependency-group: pip ... Signed-off-by: dependabot[bot] * update version * update RP version --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Tim Allen --- api_app/_version.py | 2 +- api_app/requirements.txt | 4 ++-- cli/requirements.txt | 2 +- cli/setup.py | 2 +- resource_processor/_version.py | 2 +- resource_processor/vmss_porter/requirements.txt | 2 +- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/api_app/_version.py b/api_app/_version.py index 2e93a98791..782e3ece69 100644 --- a/api_app/_version.py +++ b/api_app/_version.py @@ -1 +1 @@ -__version__ = "0.18.7" +__version__ = "0.18.8" diff --git a/api_app/requirements.txt b/api_app/requirements.txt index c94b3a6a08..cd8df17246 100644 --- a/api_app/requirements.txt +++ b/api_app/requirements.txt @@ -1,4 +1,4 @@ -aiohttp==3.9.3 +aiohttp==3.9.4 azure-core==1.30.0 azure-cosmos==4.5.1 azure-eventgrid==4.15.0 @@ -13,7 +13,7 @@ azure-servicebus==7.11.3 azure-storage-blob==12.19.0 fastapi==0.110.0 fastapi-utils==0.2.1 -gunicorn==21.2.0 +gunicorn==22.0.0 jsonschema[format_nongpl]==4.19.1 msal==1.26.0 opentelemetry.instrumentation.logging==0.44b0 diff --git a/cli/requirements.txt b/cli/requirements.txt index 3960c64435..3f55c3ca44 100644 --- a/cli/requirements.txt +++ b/cli/requirements.txt @@ -8,4 +8,4 @@ pygments==2.16.1 PyJWT==2.8.0 azure-cli-core==2.57.0 azure-identity==1.14.1 -aiohttp==3.9.3 +aiohttp==3.9.4 diff --git a/cli/setup.py b/cli/setup.py index c9bab6e678..b1a2da314c 100644 --- a/cli/setup.py +++ b/cli/setup.py @@ -49,7 +49,7 @@ "PyJWT==2.8.0", "azure-cli-core==2.57.0", "azure-identity==1.14.1", - "aiohttp==3.9.3" + "aiohttp==3.9.4" ], namespace_packages=[], diff --git a/resource_processor/_version.py b/resource_processor/_version.py index fa3ddd8c5a..af46754d38 100644 --- a/resource_processor/_version.py +++ b/resource_processor/_version.py @@ -1 +1 @@ -__version__ = "0.8.4" +__version__ = "0.8.5" diff --git a/resource_processor/vmss_porter/requirements.txt b/resource_processor/vmss_porter/requirements.txt index 649ef718b8..48dedfb07f 100644 --- a/resource_processor/vmss_porter/requirements.txt +++ b/resource_processor/vmss_porter/requirements.txt @@ -1,4 +1,4 @@ -aiohttp==3.9.3 +aiohttp==3.9.4 azure-cli-core==2.57.0 azure-identity==1.14.1 azure-monitor-opentelemetry==1.2.0 From ddbbffe70fc6a8fe5d0b430afc4c18116f7ff993 Mon Sep 17 00:00:00 2001 From: Tim Allen Date: Mon, 20 May 2024 09:30:22 +0100 Subject: [PATCH 31/79] Snyk updates 0524 (#3932) * Update clean_validation_envs.yml * update * update BRANCH_LAST_ACTIVITY_IN_HOURS_FOR_STOP: 8 * snyk update * update version * update * update * update * update version * update --- CHANGELOG.md | 3 +- .../guacamole-server/docker/version.txt | 2 +- .../guacamole-auth-azure/pom.xml | 8 ++--- .../workspace_services/guacamole/porter.yaml | 2 +- ui/app/package.json | 4 +-- ui/app/yarn.lock | 30 +++++++++---------- 6 files changed, 25 insertions(+), 24 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 61b916c43f..e0e08b7b2b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,12 +8,13 @@ FEATURES: ENHANCEMENTS: BUG FIXES: -* Update Guacomole Linux VM Images to Ubuntu 22.04 LTS. Part of ([#3523](https://github.com/microsoft/AzureTRE/issues/3523)) +* Update Guacamole Linux VM Images to Ubuntu 22.04 LTS. Part of ([#3523](https://github.com/microsoft/AzureTRE/issues/3523)) * Update Nexus Shared Service with new proxies. Part of ([#3523](https://github.com/microsoft/AzureTRE/issues/3523)) * Update to Resource Processor Image, now using Ubuntu 22.04 (jammy). Part of ([#3523](https://github.com/microsoft/AzureTRE/issues/3523)) * Remove TLS1.0/1.1 support from Application Gateway ([#3914](https://github.com/microsoft/AzureTRE/issues/3914)) * GitHub Actions version updates. ([#3847](https://github.com/microsoft/AzureTRE/issues/3847)) * Add workaround to avoid name clashes for storage accounts([#3863](https://github.com/microsoft/AzureTRE/pull/3858)) +* Dependency and Vulnerability updates COMPONENTS: diff --git a/templates/workspace_services/guacamole/guacamole-server/docker/version.txt b/templates/workspace_services/guacamole/guacamole-server/docker/version.txt index deded3247f..732155f8df 100644 --- a/templates/workspace_services/guacamole/guacamole-server/docker/version.txt +++ b/templates/workspace_services/guacamole/guacamole-server/docker/version.txt @@ -1 +1 @@ -__version__ = "0.8.2" +__version__ = "0.8.3" diff --git a/templates/workspace_services/guacamole/guacamole-server/guacamole-auth-azure/pom.xml b/templates/workspace_services/guacamole/guacamole-server/guacamole-auth-azure/pom.xml index 075cab92a8..70d4939e9a 100644 --- a/templates/workspace_services/guacamole/guacamole-server/guacamole-auth-azure/pom.xml +++ b/templates/workspace_services/guacamole/guacamole-server/guacamole-auth-azure/pom.xml @@ -20,7 +20,7 @@ com.auth0 jwks-rsa - 0.22.0 + 0.22.1 com.auth0 @@ -41,19 +41,19 @@ org.apache.guacamole guacamole-ext - 1.5.3 + 1.5.4 provided com.azure azure-security-keyvault-secrets - 4.7.2 + 4.7.3 com.azure azure-identity - 1.9.1 + 1.11.2 diff --git a/templates/workspace_services/guacamole/porter.yaml b/templates/workspace_services/guacamole/porter.yaml index 18a50e9b83..f49e3b02e3 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.10.6 +version: 0.10.7 description: "An Azure TRE service for Guacamole" dockerfile: Dockerfile.tmpl registry: azuretre diff --git a/ui/app/package.json b/ui/app/package.json index a1b55d7333..f691245496 100644 --- a/ui/app/package.json +++ b/ui/app/package.json @@ -1,6 +1,6 @@ { "name": "tre-ui", - "version": "0.5.23", + "version": "0.5.24", "private": true, "dependencies": { "@azure/msal-browser": "^2.35.0", @@ -24,7 +24,7 @@ "react-dom": "^18.2.0", "react-markdown": "^8.0.3", "react-redux": "^8.0.4", - "react-router-dom": "6.21.1", + "react-router-dom": "6.22.1", "remark-gfm": "^3.0.1", "typescript": "^5.3.3", "web-vitals": "^3.3.0" diff --git a/ui/app/yarn.lock b/ui/app/yarn.lock index 97db5a0caa..d711e557a4 100644 --- a/ui/app/yarn.lock +++ b/ui/app/yarn.lock @@ -1932,10 +1932,10 @@ redux-thunk "^2.4.2" reselect "^4.1.8" -"@remix-run/router@1.14.1": - version "1.14.1" - resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.14.1.tgz#6d2dd03d52e604279c38911afc1079d58c50a755" - integrity sha512-Qg4DMQsfPNAs88rb2xkdk03N3bjK4jgX5fR24eHCTR9q6PrhZQZ4UJBPzCHJkIpTRN1UKxx2DzjZmnC+7Lj0Ow== +"@remix-run/router@1.15.1": + version "1.15.1" + resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.15.1.tgz#221fd31a65186b9bc027b74573485fb3226dff7f" + integrity sha512-zcU0gM3z+3iqj8UX45AmWY810l3oUmXM7uH4dt5xtzvMhRtYVhKGOmgOd1877dOPPepfCjUv57w+syamWIYe7w== "@rjsf/core@^4.2.3": version "4.2.3" @@ -9444,20 +9444,20 @@ react-refresh@^0.11.0: resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.11.0.tgz#77198b944733f0f1f1a90e791de4541f9f074046" integrity sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A== -react-router-dom@6.21.1: - version "6.21.1" - resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-6.21.1.tgz#58b459d2fe1841388c95bb068f85128c45e27349" - integrity sha512-QCNrtjtDPwHDO+AO21MJd7yIcr41UetYt5jzaB9Y1UYaPTCnVuJq6S748g1dE11OQlCFIQg+RtAA1SEZIyiBeA== +react-router-dom@6.22.1: + version "6.22.1" + resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-6.22.1.tgz#cfa109d4b6b0a4d00bac179bc0ad2a6469455282" + integrity sha512-iwMyyyrbL7zkKY7MRjOVRy+TMnS/OPusaFVxM2P11x9dzSzGmLsebkCvYirGq0DWB9K9hOspHYYtDz33gE5Duw== dependencies: - "@remix-run/router" "1.14.1" - react-router "6.21.1" + "@remix-run/router" "1.15.1" + react-router "6.22.1" -react-router@6.21.1: - version "6.21.1" - resolved "https://registry.yarnpkg.com/react-router/-/react-router-6.21.1.tgz#8db7ee8d7cfc36513c9a66b44e0897208c33be34" - integrity sha512-W0l13YlMTm1YrpVIOpjCADJqEUpz1vm+CMo47RuFX4Ftegwm6KOYsL5G3eiE52jnJpKvzm6uB/vTKTPKM8dmkA== +react-router@6.22.1: + version "6.22.1" + resolved "https://registry.yarnpkg.com/react-router/-/react-router-6.22.1.tgz#a5ff849bfe709438f7e139421bb28138209662c7" + integrity sha512-0pdoRGwLtemnJqn1K0XHUbnKiX0S4X8CgvVVmHGOWmofESj31msHo/1YiqcJWK7Wxfq2a4uvvtS01KAQyWK/CQ== dependencies: - "@remix-run/router" "1.14.1" + "@remix-run/router" "1.15.1" react-scripts@5.0.1: version "5.0.1" From bdb736e6db39ede7ad789f707959c74f869eb39f Mon Sep 17 00:00:00 2001 From: Jonny Rylands Date: Tue, 28 May 2024 16:54:36 +0100 Subject: [PATCH 32/79] Improve documentation on TRE teardown (#3954) Update tear-down.md --- docs/tre-admins/tear-down.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/tre-admins/tear-down.md b/docs/tre-admins/tear-down.md index 38e730c5f9..17e7beab38 100644 --- a/docs/tre-admins/tear-down.md +++ b/docs/tre-admins/tear-down.md @@ -6,7 +6,7 @@ To remove the Azure TRE and its resources from your Azure subscription run: make tre-destroy ``` -Alternatively, you can delete the resource groups in Azure Portal or using the CLI: +Alternatively, you can directly delete the resource groups in Azure Portal or using the CLI, however the `make` method is recommended if you plan to re-deploy the Azure TRE since it performs [additional tidy up](https://github.com/microsoft/AzureTRE/blob/main/devops/scripts/destroy_env_no_terraform.sh) which prevent re-deployment errors. ```cmd az group delete --name From 8d9703920c4ad45b6c77d45a5c0880d6cf3fea4d Mon Sep 17 00:00:00 2001 From: Tim Allen Date: Wed, 29 May 2024 12:32:05 +0100 Subject: [PATCH 33/79] Add Key Vault purge protection variable (#3952) * Update clean_validation_envs.yml * update * update BRANCH_LAST_ACTIVITY_IN_HOURS_FOR_STOP: 8 * add new variable * update to allow kv var to be optional * tf format * Update clean_validation_envs.yml --- .github/actions/devcontainer_run_command/action.yml | 5 +++++ .github/workflows/deploy_tre_reusable.yml | 1 + CHANGELOG.md | 1 + config.sample.yaml | 2 ++ core/terraform/keyvault.tf | 2 +- core/terraform/variables.tf | 6 ++++++ core/version.txt | 2 +- docs/tre-admins/environment-variables.md | 1 + 8 files changed, 18 insertions(+), 2 deletions(-) diff --git a/.github/actions/devcontainer_run_command/action.yml b/.github/actions/devcontainer_run_command/action.yml index d39dada904..18b44e2606 100644 --- a/.github/actions/devcontainer_run_command/action.yml +++ b/.github/actions/devcontainer_run_command/action.yml @@ -121,6 +121,10 @@ inputs: description: "JSON string containing key/value pairs to injet into the Resource Processor as ENV vars" required: false default: "" + KV_PURGE_PROTECTION_ENABLED: + description: "A boolean indicating if the purge protection will be enabled on the core keyvault." + required: false + default: "true" runs: using: composite @@ -219,6 +223,7 @@ runs: -e IS_API_SECURED=${{ inputs.IS_API_SECURED }} \ -e DOCKER_BUILDKIT=1 \ -e TF_VAR_stateful_resources_locked=${{ inputs.STATEFUL_RESOURCES_LOCKED }} \ + -e TF_VAR_kv_purge_protection_enabled="${{ inputs.KV_PURGE_PROTECTION_ENABLED }}" \ -e TF_VAR_enable_airlock_malware_scanning=${{ inputs.ENABLE_AIRLOCK_MALWARE_SCANNING }} \ -e CI_CACHE_ACR_NAME="${{ inputs.CI_CACHE_ACR_NAME }}" \ -e TF_VAR_core_app_service_plan_sku="${{ (inputs.CORE_APP_SERVICE_PLAN_SKU != '' diff --git a/.github/workflows/deploy_tre_reusable.yml b/.github/workflows/deploy_tre_reusable.yml index 9a2f986f97..a8a3005dc0 100644 --- a/.github/workflows/deploy_tre_reusable.yml +++ b/.github/workflows/deploy_tre_reusable.yml @@ -353,6 +353,7 @@ jobs: APPLICATION_ADMIN_CLIENT_ID: "${{ secrets.APPLICATION_ADMIN_CLIENT_ID }}" APPLICATION_ADMIN_CLIENT_SECRET: "${{ secrets.APPLICATION_ADMIN_CLIENT_SECRET }}" STATEFUL_RESOURCES_LOCKED: "${{ github.ref == 'refs/heads/main' && inputs.prRef == '' && true || false }}" + KV_PURGE_PROTECTION_ENABLED: ${{ vars.KV_PURGE_PROTECTION_ENABLED || true }} CORE_APP_SERVICE_PLAN_SKU: ${{ vars.CORE_APP_SERVICE_PLAN_SKU }} RESOURCE_PROCESSOR_NUMBER_PROCESSES_PER_INSTANCE: ${{ vars.RESOURCE_PROCESSOR_NUMBER_PROCESSES_PER_INSTANCE }} RP_BUNDLE_VALUES: ${{ vars.RP_BUNDLE_VALUES }} diff --git a/CHANGELOG.md b/CHANGELOG.md index e0e08b7b2b..25e480c127 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ FEATURES: ENHANCEMENTS: +* Add KeyVault Purge Protection Variable ([#3922](https://github.com/microsoft/AzureTRE/issues/3922)) BUG FIXES: * Update Guacamole Linux VM Images to Ubuntu 22.04 LTS. Part of ([#3523](https://github.com/microsoft/AzureTRE/issues/3523)) diff --git a/config.sample.yaml b/config.sample.yaml index e4c2f2d789..da877d0217 100644 --- a/config.sample.yaml +++ b/config.sample.yaml @@ -67,6 +67,8 @@ resource_processor: developer_settings: # Locks will not be added to stateful resources so they can be easily removed # stateful_resources_locked: false +# TRE Core Key Vault purge protection will be disabled so it can be reused upon deletion +# kv_purge_protection_enabled: false # This setting will enable your local machine to be able to # communicate with Service Bus and Cosmos. It will also allow deploying diff --git a/core/terraform/keyvault.tf b/core/terraform/keyvault.tf index 8260fb239e..659017dfb0 100644 --- a/core/terraform/keyvault.tf +++ b/core/terraform/keyvault.tf @@ -4,7 +4,7 @@ resource "azurerm_key_vault" "kv" { location = azurerm_resource_group.core.location resource_group_name = azurerm_resource_group.core.name sku_name = "standard" - purge_protection_enabled = true + purge_protection_enabled = var.kv_purge_protection_enabled tags = local.tre_core_tags lifecycle { ignore_changes = [access_policy, tags] } diff --git a/core/terraform/variables.tf b/core/terraform/variables.tf index 39702b98fb..724969d0b6 100644 --- a/core/terraform/variables.tf +++ b/core/terraform/variables.tf @@ -185,6 +185,12 @@ variable "is_cosmos_defined_throughput" { default = false } +variable "kv_purge_protection_enabled" { + type = bool + description = "A boolean indicating if the purge protection will be enabled on the core keyvault." + default = true +} + variable "logging_level" { type = string default = "INFO" diff --git a/core/version.txt b/core/version.txt index 88081a7269..c0984d55cc 100644 --- a/core/version.txt +++ b/core/version.txt @@ -1 +1 @@ -__version__ = "0.9.9" +__version__ = "0.9.10" diff --git a/docs/tre-admins/environment-variables.md b/docs/tre-admins/environment-variables.md index 815251cd84..55825e8ef9 100644 --- a/docs/tre-admins/environment-variables.md +++ b/docs/tre-admins/environment-variables.md @@ -31,6 +31,7 @@ | `API_CLIENT_ID` | Generated when following [pre-deployment steps](./setup-instructions/setup-auth-entities.md) guide. Client id of the "TRE API". | | `API_CLIENT_SECRET` | Generated when following [pre-deployment steps](./setup-instructions/setup-auth-entities.md) guide. Client secret of the "TRE API". | | `STATEFUL_RESOURCES_LOCKED` | If set to `false` locks on stateful resources won't be created. A recommended setting for developers. | +| `KV_PURGE_PROTECTION_ENABLED` | If set to `false` the core Key Vault's purge protection will be disabled so it can be reused upon deletion. A recommended setting for developers. | | `ENABLE_AIRLOCK_MALWARE_SCANNING` | If False, Airlock requests will skip the malware scanning stage. If set to True, Defender for Storage will be enabled. | | `ENABLE_LOCAL_DEBUGGING` | Set to `false` by default. Setting this to `true` will ensure that Azure resources are accessible from your local development machine. (e.g. ServiceBus and Cosmos) | | `PUBLIC_DEPLOYMENT_IP_ADDRESS` | The public IP address of the machine that is deploying TRE. (Your desktop or the build agents). In certain locations a dynamic script to retrieve this from [https://ipecho.net/plain](https://ipecho.net/plain) does not work. If this is the case, then you can 'hardcode' your IP. | From 1ffb09baf37f4599adfd65b4259fdda7564da408 Mon Sep 17 00:00:00 2001 From: Jonny Rylands Date: Thu, 30 May 2024 10:20:06 +0100 Subject: [PATCH 34/79] Resource processor - Re-instate az login and az acr login commands prior to porter explain command to fix microsoft/AzureTRE#3950 (#3951) * Update commands.py Resource processor - Re-instate az login and az acr login commands prior to porter explain command to fix microsoft/AzureTRE#3950 * commands.py - fix linter whitespace error - W293 blank line contains whitespace * Update resource processor version and changelog --- CHANGELOG.md | 1 + resource_processor/_version.py | 2 +- resource_processor/resources/commands.py | 4 +++- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 25e480c127..01fde90d47 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ BUG FIXES: * Remove TLS1.0/1.1 support from Application Gateway ([#3914](https://github.com/microsoft/AzureTRE/issues/3914)) * GitHub Actions version updates. ([#3847](https://github.com/microsoft/AzureTRE/issues/3847)) * Add workaround to avoid name clashes for storage accounts([#3863](https://github.com/microsoft/AzureTRE/pull/3858)) +* Resource processor fails to deploy first workspace on fresh TRE deployment ([#3950](https://github.com/microsoft/AzureTRE/issues/3950)) * Dependency and Vulnerability updates COMPONENTS: diff --git a/resource_processor/_version.py b/resource_processor/_version.py index af46754d38..de77196f44 100644 --- a/resource_processor/_version.py +++ b/resource_processor/_version.py @@ -1 +1 @@ -__version__ = "0.8.5" +__version__ = "0.8.6" diff --git a/resource_processor/resources/commands.py b/resource_processor/resources/commands.py index 551029af8a..0111b52358 100644 --- a/resource_processor/resources/commands.py +++ b/resource_processor/resources/commands.py @@ -104,7 +104,9 @@ async def build_porter_command_for_outputs(msg_body): async def get_porter_parameter_keys(config, msg_body): - command = [f"porter explain --reference {config['registry_server']}/{msg_body['name']}:v{msg_body['version']} --output json"] + command = [f"{azure_login_command(config)} && \ + {azure_acr_login_command(config)} && \ + porter explain --reference {config['registry_server']}/{msg_body['name']}:v{msg_body['version']} --output json"] proc = await asyncio.create_subprocess_shell( ''.join(command), From 59d006a872f14af07b423957c7b1e0f9a1bed5fd Mon Sep 17 00:00:00 2001 From: Tim Allen Date: Fri, 21 Jun 2024 14:13:42 +0100 Subject: [PATCH 35/79] MySQL Recreation Fix (#3994) * Update clean_validation_envs.yml * update * update BRANCH_LAST_ACTIVITY_IN_HOURS_FOR_STOP: 8 * update charset and collation * update chnagelog * add in lifecylce rule for charset and collation * update changelog * update clean env yaml --- CHANGELOG.md | 1 + templates/workspace_services/gitea/porter.yaml | 2 +- templates/workspace_services/gitea/terraform/mysql.tf | 2 ++ templates/workspace_services/mysql/porter.yaml | 2 +- templates/workspace_services/mysql/terraform/mysql.tf | 2 ++ 5 files changed, 7 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 01fde90d47..d15ebf852b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,7 @@ BUG FIXES: * Add workaround to avoid name clashes for storage accounts([#3863](https://github.com/microsoft/AzureTRE/pull/3858)) * Resource processor fails to deploy first workspace on fresh TRE deployment ([#3950](https://github.com/microsoft/AzureTRE/issues/3950)) * Dependency and Vulnerability updates +* Add lifecycle rule to MySQL resources to stop them recreating on `update` ([#3993](https://github.com/microsoft/AzureTRE/issues/3993)) COMPONENTS: diff --git a/templates/workspace_services/gitea/porter.yaml b/templates/workspace_services/gitea/porter.yaml index 6c5f739872..05d050a4dc 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.0.1 +version: 1.0.2 description: "A Gitea workspace service" dockerfile: Dockerfile.tmpl registry: azuretre diff --git a/templates/workspace_services/gitea/terraform/mysql.tf b/templates/workspace_services/gitea/terraform/mysql.tf index ce03f835c7..7608827310 100644 --- a/templates/workspace_services/gitea/terraform/mysql.tf +++ b/templates/workspace_services/gitea/terraform/mysql.tf @@ -27,6 +27,8 @@ resource "azurerm_mysql_flexible_database" "gitea" { server_name = azurerm_mysql_flexible_server.gitea.name charset = "utf8" collation = "utf8_unicode_ci" + + lifecycle { ignore_changes = [charset, collation] } } moved { diff --git a/templates/workspace_services/mysql/porter.yaml b/templates/workspace_services/mysql/porter.yaml index 7f7baccfe1..69f24158b0 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.1 +version: 1.0.2 description: "A MySQL workspace service" registry: azuretre dockerfile: Dockerfile.tmpl diff --git a/templates/workspace_services/mysql/terraform/mysql.tf b/templates/workspace_services/mysql/terraform/mysql.tf index 09d188e2eb..154bb80538 100644 --- a/templates/workspace_services/mysql/terraform/mysql.tf +++ b/templates/workspace_services/mysql/terraform/mysql.tf @@ -27,6 +27,8 @@ resource "azurerm_mysql_flexible_database" "db" { server_name = azurerm_mysql_flexible_server.mysql.name charset = "utf8" collation = "utf8_unicode_ci" + + lifecycle { ignore_changes = [charset, collation] } } resource "azurerm_private_endpoint" "mysql_private_endpoint" { From 73944ed72e7f211f7c00abcf54f989ee5b0e5ddb Mon Sep 17 00:00:00 2001 From: Tim Allen Date: Fri, 21 Jun 2024 15:10:43 +0100 Subject: [PATCH 36/79] Core provider update (#3991) * Update clean_validation_envs.yml * update * update BRANCH_LAST_ACTIVITY_IN_HOURS_FOR_STOP: 8 * update * rest activity * update version * pin provider * add in premium_messaging_partitions for sb * update type * update other providers * remove deprecated attributes * more depricated attributes * reset * add in tf lock --- CHANGELOG.md | 3 +- core/terraform/.terraform.lock.hcl | 142 ++++++++++++++--------------- core/terraform/main.tf | 10 +- core/terraform/servicebus.tf | 13 +-- core/version.txt | 2 +- 5 files changed, 86 insertions(+), 84 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d15ebf852b..0a54a2a59b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,8 @@ ## 0.18.0 (Unreleased) **BREAKING CHANGES & MIGRATIONS**: - +* Update Core Terraform Provider versions ([[#3919](https://github.com/microsoft/AzureTRE/issues/3919)]) + FEATURES: ENHANCEMENTS: diff --git a/core/terraform/.terraform.lock.hcl b/core/terraform/.terraform.lock.hcl index ea690ac29e..6b17e557fb 100644 --- a/core/terraform/.terraform.lock.hcl +++ b/core/terraform/.terraform.lock.hcl @@ -2,102 +2,102 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/azure/azapi" { - version = "1.9.0" - constraints = "1.9.0" + version = "1.13.1" + constraints = ">= 1.9.0, ~> 1.13.0" hashes = [ - "h1:zaLH2Owmj61RX2G1Cy6VDy8Ttfzx+lDsSCyiu5cXkm4=", - "zh:349569471fbf387feaaf8b88da1690669e201147c342f905e5eb03df42b3cf87", - "zh:54346d5fb78cbad3eb7cfd96e1dd7ce4f78666cabaaccfec6ee9437476330018", - "zh:64b799da915ea3a9a58ac7a926c6a31c59fd0d911687804d8e815eda88c5580b", - "zh:9336ed9e112555e0fda8af6be9ba21478e30117d79ba662233311d9560d2b7c6", - "zh:a8aace9897b28ea0b2dbd7a3be3df033e158af40412c9c7670be0956f216ed7e", - "zh:ab23df7de700d9e785009a4ca9ceb38ae1ab894a13f5788847f15d018556f415", - "zh:b4f13f0b13560a67d427c71c85246f8920f98987120341830071df4535842053", - "zh:e58377bf36d8a14d28178a002657865ee17446182dac03525fd43435e41a1b5c", - "zh:ea5db4acc6413fd0fe6b35981e58cdc9850f5f3118031cc3d2581de511aee6aa", - "zh:f0b32c06c6bd4e4af2c02a62be07b947766aeeb09289a03f21aba16c2fd3c60f", - "zh:f1518e766a90c257d7eb36d360dafaf311593a4a9352ff8db0bcfe0ed8cf45ae", - "zh:fa89e84cff0776b5b61ff27049b1d8ed52040bd58c81c4628890d644a6fb2989", + "h1:xDZG4lbtQJeyJa3Gzo8qecYxyw+AIXYcdDRlkaSLNz8=", + "zh:1f2aceddd67ceeb82a75c2f15dc01e54781e9aed5968507dbc29590c165b2e2b", + "zh:397f0bfbac899d48e23cecf38d362c27562150aa20b19157b5bd370b8e6801ee", + "zh:652263b7d00623684e29ef7b8ff285a17c5bd7cc8ba7d22967c66d0b3a3c568a", + "zh:652c53320a41434942877515780296a1509be03f32d54e60178f39200f960a67", + "zh:666426faf686401e54ec09fe06e9d7c06a6455ec398764f70558440c73aeb7f9", + "zh:6aa91ae8ba78f2494f99b4c99e66d15ed0b14d735cd1f77adc12ff9dfa075807", + "zh:a529e5a13c37d1805c469227f08cdbe7527d04dd64d18709d26627c6a0b588b1", + "zh:a589c049205e8e5bf94a13d56b28f400d908ad27e13e16df64408ee82eb8a0ff", + "zh:a9a50defdee230f315f74be6c77ff104fe2610a1b3ad6b87326f555e80d13b18", + "zh:ba49ef70d96e13795e2dbffd6cb2ff976dfe84e0373a5971ebe3b4c9c9b7af60", + "zh:d3ed50efe5f8c80d3d7d464ab9a13ccf82440d871c9ce3032ce476845364c6b9", + "zh:e3eb48ee8c36ee4f81850d8a21fc59b81886c729d7c3b7adece4a25f355bed2f", ] } provider "registry.terraform.io/hashicorp/azurerm" { - version = "3.74.0" - constraints = ">= 3.8.0, >= 3.16.0, 3.74.0" + version = "3.108.0" + constraints = ">= 3.8.0, >= 3.16.0, 3.108.0" hashes = [ - "h1:ETVZfmulZQ435+lgFCkZRpfVOLyAxfDOwbPXFg3aLLQ=", - "zh:0424c70152f949da1ec52ba96d20e5fd32fd22d9bd9203ce045d5f6aab3d20fc", - "zh:16dbf581d10f8e7937185bcdcceb4f91d08c919e452fb8da7580071288c8c397", - "zh:3019103bc2c3b4e185f5c65696c349697644c968f5c085af5505fed6d01c4241", - "zh:49bb56ebaed6653fdb913c2b2bb74fc8b5399e7258d1e89084f72c44ea1130dd", - "zh:85547666517f899d88620bd23a000a8f43c7dc93587c350eb1ea17bcb3e645c7", - "zh:8bed8b646ff1822d8764de68b56b71e5dd971a4b77eba80d47f400a530800bea", - "zh:8bfa6c70c004ba05ebce47f74f49ce872c28a68a18bb71b281a9681bcbbdbfa1", - "zh:a2ae9e38fda0695fb8aa810e4f1ce4b104bfda651a87923b307bb1728680d8b6", - "zh:beac1efe32f99072c892095f5ff46e40d6852b66679a03bc3acbe1b90fb1f653", - "zh:d8a6ca20e49ebe7ea5688d91233d571e2c2ccc3e41000c39a7d7031df209ea8e", + "h1:RIFBFTXz4X48JDHjbQHX4y400ax1/uEzMVFZgX3/z3w=", + "zh:2afecf948fd702bc08c87d9114595809d011f99a70a12dbf6bc67a12d0bee5fc", + "zh:395b6d1384a579867064e62d49b0b91e15919c33b03ea8b5031c2779bfa16b3d", + "zh:3e5594c59b6b02bc6e0f4c3de71aa2ab992494c53725fb3c64d36745f3814ef3", + "zh:4613e190609377309f6a4ac44f631c9469efab3ae148dbb09e73718201dc4f42", + "zh:624f01cb7604d58100068401bd07ab09a141e7bd318f8214127838cf202e4868", + "zh:65709950c9933e38704e2075a2339951e1259a6e882f35d390be36e1844ebc72", + "zh:af82657fad4e3a177f2ebb8035b45bda40f8856eb999288533321028794d03e5", + "zh:c40b331eba08830d16c0e6795fa7cbf08231073df2cfdb0f34e9d908a915981a", + "zh:d6ccd533a0bd984ca7ed1ae860e057e9e2f88468745be9712236d2d240353de4", + "zh:f361fd398e8772f8554a010331d161d6f7284a43238fd28bfa7b41795a5538b8", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", - "zh:f937b5fdf49b072c0347408d0a1c5a5d822dae1a23252915930e5a82d1d8ce8b", + "zh:f8c2132c77d35930203ec66f1bf9bbf633a2406e9f7b572ff425d65b8aa8c492", ] } provider "registry.terraform.io/hashicorp/http" { - version = "3.2.1" - constraints = "~> 3.2.0" + version = "3.4.3" + constraints = "~> 3.4" hashes = [ - "h1:DfxMa1zM/0NCFWN5PAxivSHJMNkOAFZvDYQkO72ZQmw=", - "zh:088b3b3128034485e11dff8da16e857d316fbefeaaf5bef24cceda34c6980641", - "zh:09ed1f2462ea4590b112e048c4af556f0b6eafc7cf2c75bb2ac21cd87ca59377", - "zh:39c6b0b4d3f0f65e783c467d3f634e2394820b8aef907fcc24493f21dcf73ca3", - "zh:47aab45327daecd33158a36c1a36004180a518bf1620cdd5cfc5e1fe77d5a86f", - "zh:4d70a990aa48116ab6f194eef393082c21cf58bece933b63575c63c1d2b66818", - "zh:65470c43fda950c7e9ac89417303c470146de984201fff6ef84299ea29e02d30", + "h1:WUwrzNfcBamA4mm3Stzt6+GcwTosQv2T0CEmZefPBAo=", + "zh:001e12b8079955a9fa7f8fcd515ae665b2e1087107fd337c4b872e88a86d540b", + "zh:0874fb3f870b2ac24c967a9685f2da641079589024109340389694696301a85b", + "zh:3b5e533c3d2859575945568aad0aac66b71bfc709706231fc2de94e01ca76d7f", + "zh:622ee28d42ed9d4b1399dde377db515e62cac08bd65bb2455068621f7a42d90d", + "zh:6dea688d78840a3f678e06ee602d37c766ce2ee625dcdce0c6658116ebcbde8e", "zh:78d5eefdd9e494defcb3c68d282b8f96630502cac21d1ea161f53cfe9bb483b3", - "zh:842b4dd63e438f5cd5fdfba1c09b8fdf268e8766e6690988ee24e8b25bfd9e8d", - "zh:a167a057f7e2d80c78d4b4057538588131fceb983d5c93b07675ad9eb1aa5790", - "zh:d0ba69b62b6db788cfe3cf8f7dc6e9a0eabe2927dc119d7fe3fe6573ee559e66", - "zh:e28d24c1d5ff24b1d1cc6f0074a1f41a6974f473f4ff7a37e55c7b6dca68308a", - "zh:fde8a50554960e5366fd0e1ca330a7c1d24ae6bbb2888137a5c83d83ce14fd18", + "zh:7f57a1436a464bc2e1698457b402ff0fd98ef9e7dcf6707d6bd0debc67fad164", + "zh:829d89d82e6fc3c89714950dc8afa51d622bb8e4f4bd5c73037505fb55a67834", + "zh:e453202d09b62531ed3278926307d315276e05784e7c6448a2c21c6a2da6e48f", + "zh:e76edc035240b4ad9334b4a0282b44a086e001df3007a2fc51f6262c4db032d1", + "zh:eeb0379da9093e155a193f666079de6baf8ed02855bf2a443448903f7cfef378", + "zh:fcb00eeb665ccae383645173d8e10c3071946396629a7797db39c798997f21b0", ] } provider "registry.terraform.io/hashicorp/local" { - version = "2.4.0" - constraints = ">= 2.2.0, ~> 2.4.0" + version = "2.5.1" + constraints = ">= 2.2.0, ~> 2.5" hashes = [ - "h1:R97FTYETo88sT2VHfMgkPU3lzCsZLunPftjSI5vfKe8=", - "zh:53604cd29cb92538668fe09565c739358dc53ca56f9f11312b9d7de81e48fab9", - "zh:66a46e9c508716a1c98efbf793092f03d50049fa4a83cd6b2251e9a06aca2acf", - "zh:70a6f6a852dd83768d0778ce9817d81d4b3f073fab8fa570bff92dcb0824f732", + "h1:8oTPe2VUL6E2d3OcrvqyjI4Nn/Y/UEQN26WLk5O/B0g=", + "zh:0af29ce2b7b5712319bf6424cb58d13b852bf9a777011a545fac99c7fdcdf561", + "zh:126063ea0d79dad1f68fa4e4d556793c0108ce278034f101d1dbbb2463924561", + "zh:196bfb49086f22fd4db46033e01655b0e5e036a5582d250412cc690fa7995de5", + "zh:37c92ec084d059d37d6cffdb683ccf68e3a5f8d2eb69dd73c8e43ad003ef8d24", + "zh:4269f01a98513651ad66763c16b268f4c2da76cc892ccfd54b401fff6cc11667", + "zh:51904350b9c728f963eef0c28f1d43e73d010333133eb7f30999a8fb6a0cc3d8", + "zh:73a66611359b83d0c3fcba2984610273f7954002febb8a57242bbb86d967b635", "zh:78d5eefdd9e494defcb3c68d282b8f96630502cac21d1ea161f53cfe9bb483b3", - "zh:82a803f2f484c8b766e2e9c32343e9c89b91997b9f8d2697f9f3837f62926b35", - "zh:9708a4e40d6cc4b8afd1352e5186e6e1502f6ae599867c120967aebe9d90ed04", - "zh:973f65ce0d67c585f4ec250c1e634c9b22d9c4288b484ee2a871d7fa1e317406", - "zh:c8fa0f98f9316e4cfef082aa9b785ba16e36ff754d6aba8b456dab9500e671c6", - "zh:cfa5342a5f5188b20db246c73ac823918c189468e1382cb3c48a9c0c08fc5bf7", - "zh:e0e2b477c7e899c63b06b38cd8684a893d834d6d0b5e9b033cedc06dd7ffe9e2", - "zh:f62d7d05ea1ee566f732505200ab38d94315a4add27947a60afa29860822d3fc", - "zh:fa7ce69dde358e172bd719014ad637634bbdabc49363104f4fca759b4b73f2ce", + "zh:7ae387993a92bcc379063229b3cce8af7eaf082dd9306598fcd42352994d2de0", + "zh:9e0f365f807b088646db6e4a8d4b188129d9ebdbcf2568c8ab33bddd1b82c867", + "zh:b5263acbd8ae51c9cbffa79743fbcadcb7908057c87eb22fd9048268056efbc4", + "zh:dfcd88ac5f13c0d04e24be00b686d069b4879cc4add1b7b1a8ae545783d97520", ] } provider "registry.terraform.io/hashicorp/random" { - version = "3.4.3" - constraints = ">= 3.0.0, ~> 3.4.0" + version = "3.6.2" + constraints = ">= 3.0.0, ~> 3.6" hashes = [ - "h1:xZGZf18JjMS06pFa4NErzANI98qi59SEcBsOcS2P2yQ=", - "zh:41c53ba47085d8261590990f8633c8906696fa0a3c4b384ff6a7ecbf84339752", - "zh:59d98081c4475f2ad77d881c4412c5129c56214892f490adf11c7e7a5a47de9b", - "zh:686ad1ee40b812b9e016317e7f34c0d63ef837e084dea4a1f578f64a6314ad53", + "h1:wmG0QFjQ2OfyPy6BB7mQ57WtoZZGGV07uAPQeDmIrAE=", + "zh:0ef01a4f81147b32c1bea3429974d4d104bbc4be2ba3cfa667031a8183ef88ec", + "zh:1bcd2d8161e89e39886119965ef0f37fcce2da9c1aca34263dd3002ba05fcb53", + "zh:37c75d15e9514556a5f4ed02e1548aaa95c0ecd6ff9af1119ac905144c70c114", + "zh:4210550a767226976bc7e57d988b9ce48f4411fa8a60cd74a6b246baf7589dad", + "zh:562007382520cd4baa7320f35e1370ffe84e46ed4e2071fdc7e4b1a9b1f8ae9b", + "zh:5efb9da90f665e43f22c2e13e0ce48e86cae2d960aaf1abf721b497f32025916", + "zh:6f71257a6b1218d02a573fc9bff0657410404fb2ef23bc66ae8cd968f98d5ff6", "zh:78d5eefdd9e494defcb3c68d282b8f96630502cac21d1ea161f53cfe9bb483b3", - "zh:84103eae7251384c0d995f5a257c72b0096605048f757b749b7b62107a5dccb3", - "zh:8ee974b110adb78c7cd18aae82b2729e5124d8f115d484215fd5199451053de5", - "zh:9dd4561e3c847e45de603f17fa0c01ae14cae8c4b7b4e6423c9ef3904b308dda", - "zh:bb07bb3c2c0296beba0beec629ebc6474c70732387477a65966483b5efabdbc6", - "zh:e891339e96c9e5a888727b45b2e1bb3fcbdfe0fd7c5b4396e4695459b38c8cb1", - "zh:ea4739860c24dfeaac6c100b2a2e357106a89d18751f7693f3c31ecf6a996f8d", - "zh:f0c76ac303fd0ab59146c39bc121c5d7d86f878e9a69294e29444d4c653786f8", - "zh:f143a9a5af42b38fed328a161279906759ff39ac428ebcfe55606e05e1518b93", + "zh:9647e18f221380a85f2f0ab387c68fdafd58af6193a932417299cdcae4710150", + "zh:bb6297ce412c3c2fa9fec726114e5e0508dd2638cad6a0cb433194930c97a544", + "zh:f83e925ed73ff8a5ef6e3608ad9225baa5376446349572c2449c0c0b3cf184b7", + "zh:fbef0781cb64de76b1df1ca11078aecba7800d82fd4a956302734999cfd9a4af", ] } diff --git a/core/terraform/main.tf b/core/terraform/main.tf index e31d359bda..64b3334bfc 100644 --- a/core/terraform/main.tf +++ b/core/terraform/main.tf @@ -3,23 +3,23 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "=3.74.0" + version = "=3.108.0" } random = { source = "hashicorp/random" - version = "~> 3.4.0" + version = "~> 3.6" } local = { source = "hashicorp/local" - version = "~> 2.4.0" + version = "~> 2.5" } http = { source = "hashicorp/http" - version = "~> 3.2.0" + version = "~> 3.4" } azapi = { source = "Azure/azapi" - version = "~> 1.9.0" + version = "~> 1.13.0" } } diff --git a/core/terraform/servicebus.tf b/core/terraform/servicebus.tf index afeff8e140..231594596b 100644 --- a/core/terraform/servicebus.tf +++ b/core/terraform/servicebus.tf @@ -1,10 +1,11 @@ resource "azurerm_servicebus_namespace" "sb" { - name = "sb-${var.tre_id}" - location = azurerm_resource_group.core.location - resource_group_name = azurerm_resource_group.core.name - sku = "Premium" - capacity = "1" - tags = local.tre_core_tags + name = "sb-${var.tre_id}" + location = azurerm_resource_group.core.location + resource_group_name = azurerm_resource_group.core.name + sku = "Premium" + premium_messaging_partitions = "1" + capacity = "1" + tags = local.tre_core_tags # Block public access # See https://docs.microsoft.com/azure/service-bus-messaging/service-bus-service-endpoints diff --git a/core/version.txt b/core/version.txt index c0984d55cc..43e38a8b4c 100644 --- a/core/version.txt +++ b/core/version.txt @@ -1 +1 @@ -__version__ = "0.9.10" +__version__ = "0.9.11" From 63ee9358b80e8769e796d61a9826bc4f7fe0387c Mon Sep 17 00:00:00 2001 From: Jonny Rylands Date: Mon, 24 Jun 2024 10:20:09 +0100 Subject: [PATCH 37/79] Expose FIREWALL_SKU as environment variable & support start/stop of SKU Basic Firewall (#3975) * Expose FIREWALL_SKU as environment variable & support start/stop of SKU Basic Firewall * Fix lint / build validation issues * Fix Lint issue & improve documentation on FIREWALL_SKU as per @marrobi * Fix build validation: update core build version number * #3975 Increment minor version numbers as per @tamirkamara review --- .../devcontainer_run_command/action.yml | 5 +++++ .github/workflows/deploy_tre_reusable.yml | 2 ++ config.sample.yaml | 1 + config_schema.json | 4 ++++ core/terraform/main.tf | 1 + .../vmss_porter/cloud-config.yaml | 1 + .../resource_processor/vmss_porter/data.tf | 1 + .../vmss_porter/variables.tf | 3 +++ core/terraform/variables.tf | 6 ++++++ core/version.txt | 2 +- devops/scripts/control_tre.sh | 21 ++++++++++++------- docs/tre-admins/environment-variables.md | 2 ++ .../cicd-pre-deployment-steps.md | 1 + .../setup-instructions/workflows.md | 1 + docs/tre-admins/start-stop.md | 4 +++- resource_processor/_version.py | 2 +- resource_processor/shared/config.py | 1 + .../shared_services/firewall/parameters.json | 4 ++-- .../shared_services/firewall/porter.yaml | 10 ++++----- .../firewall/terraform/firewall.tf | 8 +++---- .../firewall/terraform/locals.tf | 3 +++ .../firewall/terraform/variables.tf | 4 ++-- 22 files changed, 64 insertions(+), 23 deletions(-) diff --git a/.github/actions/devcontainer_run_command/action.yml b/.github/actions/devcontainer_run_command/action.yml index 18b44e2606..d4d9926e9d 100644 --- a/.github/actions/devcontainer_run_command/action.yml +++ b/.github/actions/devcontainer_run_command/action.yml @@ -125,6 +125,10 @@ inputs: description: "A boolean indicating if the purge protection will be enabled on the core keyvault." required: false default: "true" + FIREWALL_SKU: + description: "Firewall SKU" + required: false + default: "" runs: using: composite @@ -234,6 +238,7 @@ runs: && inputs.RP_BUNDLE_VALUES) || '{}' }}' \ -e TF_VAR_resource_processor_number_processes_per_instance="${{ (inputs.RESOURCE_PROCESSOR_NUMBER_PROCESSES_PER_INSTANCE != '' && inputs.RESOURCE_PROCESSOR_NUMBER_PROCESSES_PER_INSTANCE) || 5 }}" \ + -e TF_VAR_firewall_sku=${{ inputs.FIREWALL_SKU }} \ -e E2E_TESTS_NUMBER_PROCESSES="${{ inputs.E2E_TESTS_NUMBER_PROCESSES }}" \ '${{ inputs.CI_CACHE_ACR_NAME }}${{ env.ACR_DOMAIN_SUFFIX }}/tredev:${{ inputs.DEVCONTAINER_TAG }}' \ bash -c "${{ inputs.COMMAND }}" diff --git a/.github/workflows/deploy_tre_reusable.yml b/.github/workflows/deploy_tre_reusable.yml index a8a3005dc0..4b43636ab6 100644 --- a/.github/workflows/deploy_tre_reusable.yml +++ b/.github/workflows/deploy_tre_reusable.yml @@ -357,6 +357,7 @@ jobs: CORE_APP_SERVICE_PLAN_SKU: ${{ vars.CORE_APP_SERVICE_PLAN_SKU }} RESOURCE_PROCESSOR_NUMBER_PROCESSES_PER_INSTANCE: ${{ vars.RESOURCE_PROCESSOR_NUMBER_PROCESSES_PER_INSTANCE }} RP_BUNDLE_VALUES: ${{ vars.RP_BUNDLE_VALUES }} + FIREWALL_SKU: ${{ vars.FIREWALL_SKU}} - name: API Healthcheck uses: ./.github/actions/devcontainer_run_command @@ -666,6 +667,7 @@ jobs: TEST_ACCOUNT_CLIENT_SECRET: "${{ secrets.TEST_ACCOUNT_CLIENT_SECRET }}" TRE_ID: ${{ secrets.TRE_ID }} LOCATION: ${{ vars.LOCATION }} + FIREWALL_SKU: ${{ vars.FIREWALL_SKU}} - name: State Store Migrations uses: ./.github/actions/devcontainer_run_command diff --git a/config.sample.yaml b/config.sample.yaml index da877d0217..ad2aa6078c 100644 --- a/config.sample.yaml +++ b/config.sample.yaml @@ -41,6 +41,7 @@ tre: # If you want to use TRE_URL to point to your local TRE API instance or be configured to another cloud provider # uncomment and set this variable # tre_url: __CHANGE_ME__ + firewall_sku: Standard authentication: aad_tenant_id: __CHANGE_ME__ diff --git a/config_schema.json b/config_schema.json index 0d2a781578..a8ae1711d6 100644 --- a/config_schema.json +++ b/config_schema.json @@ -85,6 +85,10 @@ "description": "Url for the TRE environment.", "type": "string", "pattern": "^https?://" + }, + "firewall_sku": { + "description": "SKU of the Azure Firewall.", + "type": "string" } } }, diff --git a/core/terraform/main.tf b/core/terraform/main.tf index 64b3334bfc..3a102b292f 100644 --- a/core/terraform/main.tf +++ b/core/terraform/main.tf @@ -167,6 +167,7 @@ module "resource_processor_vmss_porter" { resource_processor_vmss_sku = var.resource_processor_vmss_sku arm_environment = var.arm_environment logging_level = var.logging_level + firewall_sku = var.firewall_sku rp_bundle_values = var.rp_bundle_values depends_on = [ diff --git a/core/terraform/resource_processor/vmss_porter/cloud-config.yaml b/core/terraform/resource_processor/vmss_porter/cloud-config.yaml index 1422c06e8a..b86b4c883d 100644 --- a/core/terraform/resource_processor/vmss_porter/cloud-config.yaml +++ b/core/terraform/resource_processor/vmss_porter/cloud-config.yaml @@ -57,6 +57,7 @@ write_files: AZURE_ENVIRONMENT=${azure_environment} AAD_AUTHORITY_URL=${aad_authority_url} MICROSOFT_GRAPH_FQDN=${microsoft_graph_fqdn} + FIREWALL_SKU=${firewall_sku} OTEL_RESOURCE_ATTRIBUTES=service.name=resource_processor,service.version=${resource_processor_vmss_porter_image_tag} OTEL_EXPERIMENTAL_RESOURCE_DETECTORS=azure_vm LOGGING_LEVEL=${logging_level} diff --git a/core/terraform/resource_processor/vmss_porter/data.tf b/core/terraform/resource_processor/vmss_porter/data.tf index 4ab89b4367..8f2f2d3ccd 100644 --- a/core/terraform/resource_processor/vmss_porter/data.tf +++ b/core/terraform/resource_processor/vmss_porter/data.tf @@ -29,6 +29,7 @@ data "template_file" "cloudconfig" { azure_environment = local.azure_environment aad_authority_url = module.terraform_azurerm_environment_configuration.active_directory_endpoint microsoft_graph_fqdn = regex("(?:(?P[^:/?#]+):)?(?://(?P[^/?#:]*))?", module.terraform_azurerm_environment_configuration.microsoft_graph_endpoint).fqdn + firewall_sku = var.firewall_sku logging_level = var.logging_level rp_bundle_values = local.rp_bundle_values_formatted } diff --git a/core/terraform/resource_processor/vmss_porter/variables.tf b/core/terraform/resource_processor/vmss_porter/variables.tf index 4ec2f7910e..8c2b835fa0 100644 --- a/core/terraform/resource_processor/vmss_porter/variables.tf +++ b/core/terraform/resource_processor/vmss_porter/variables.tf @@ -69,6 +69,9 @@ variable "subscription_id" { variable "logging_level" { type = string } +variable "firewall_sku" { + type = string +} variable "rp_bundle_values" { type = map(string) } diff --git a/core/terraform/variables.tf b/core/terraform/variables.tf index 724969d0b6..93d8c3a765 100644 --- a/core/terraform/variables.tf +++ b/core/terraform/variables.tf @@ -174,6 +174,12 @@ variable "enable_airlock_malware_scanning" { description = "If False, Airlock requests will skip the malware scanning stage" } +variable "firewall_sku" { + description = "Azure Firewall SKU" + type = string + default = "" +} + variable "rp_bundle_values" { description = "Additional environment values to set on the resource processor that can be supplied to template bundles" type = map(string) diff --git a/core/version.txt b/core/version.txt index 43e38a8b4c..a9b029e7c7 100644 --- a/core/version.txt +++ b/core/version.txt @@ -1 +1 @@ -__version__ = "0.9.11" +__version__ = "0.10.0" \ No newline at end of file diff --git a/devops/scripts/control_tre.sh b/devops/scripts/control_tre.sh index c5a04f5a71..a53c6f4166 100755 --- a/devops/scripts/control_tre.sh +++ b/devops/scripts/control_tre.sh @@ -12,6 +12,8 @@ fi core_rg_name="rg-${TRE_ID}" fw_name="fw-${TRE_ID}" agw_name="agw-$TRE_ID" +fw_pip_name="pip-${fw_name}" +vnet_name="vnet-${TRE_ID}" # if the resource group doesn't exist, no need to continue this script. # most likely this is an automated execution before calling make tre-deploy. @@ -27,8 +29,14 @@ if [[ "$1" == *"start"* ]]; then if [[ $(az network firewall list --output json --query "[?resourceGroup=='${core_rg_name}'&&name=='${fw_name}'] | length(@)") != 0 ]]; then CURRENT_PUBLIC_IP=$(az network firewall ip-config list -f "${fw_name}" -g "${core_rg_name}" --query "[0].publicIpAddress" -o tsv) if [ -z "$CURRENT_PUBLIC_IP" ]; then - echo "Starting Firewall - creating ip-config" - az network firewall ip-config create -f "${fw_name}" -g "${core_rg_name}" -n "fw-ip-configuration" --public-ip-address "pip-${fw_name}" --vnet-name "vnet-$TRE_ID" > /dev/null & + FW_SKU_TIER=$(az network firewall show --n "${fw_name}" -g "${core_rg_name}" --query "sku.tier" -o tsv) + if [ "$FW_SKU_TIER" == "Basic" ]; then + echo "Starting Firewall (Basic SKU) - creating ip-config and management-ip-config" + az network firewall ip-config create -f "${fw_name}" -g "${core_rg_name}" -n "fw-ip-configuration" --public-ip-address "${fw_pip_name}" --vnet-name "${vnet_name}" --m-name "fw-management-ip-configuration" --m-public-ip-address "pip-fw-management-$TRE_ID" --m-vnet-name "${vnet_name}"> /dev/null & + else + echo "Starting Firewall - creating ip-config" + az network firewall ip-config create -f "${fw_name}" -g "${core_rg_name}" -n "fw-ip-configuration" --public-ip-address "${fw_pip_name}" --vnet-name "${vnet_name}" > /dev/null & + fi else echo "Firewall ip-config already exists" fi @@ -66,14 +74,13 @@ if [[ "$1" == *"start"* ]]; then elif [[ "$1" == *"stop"* ]]; then if [[ $(az network firewall list --output json --query "[?resourceGroup=='${core_rg_name}'&&name=='${fw_name}'] | length(@)") != 0 ]]; then - fw_sku=$(az network firewall show -n "${fw_name}" -g "${core_rg_name}" --query "sku.tier" -o tsv) IPCONFIG_NAME=$(az network firewall ip-config list -f "${fw_name}" -g "${core_rg_name}" --query "[0].name" -o tsv) - if [ -n "$IPCONFIG_NAME" ] && [ "${fw_sku}" != "Basic" ]; then - echo "Deleting Firewall ip-config: $IPCONFIG_NAME" - az network firewall ip-config delete -f "${fw_name}" -n "$IPCONFIG_NAME" -g "${core_rg_name}" & + if [ -n "$IPCONFIG_NAME" ]; then + echo "Deleting Firewall ip-config" + az network firewall update --name "${fw_name}" --resource-group "${core_rg_name}" --remove ipConfigurations --remove managementIpConfiguration & else - echo "No Firewall ip-config found or SKU (${fw_sku}) doesn't allow deallocation" + echo "No Firewall ip-config found" fi fi diff --git a/docs/tre-admins/environment-variables.md b/docs/tre-admins/environment-variables.md index 55825e8ef9..25f3e73751 100644 --- a/docs/tre-admins/environment-variables.md +++ b/docs/tre-admins/environment-variables.md @@ -39,6 +39,8 @@ | `CORE_APP_SERVICE_PLAN_SKU` | The SKU of AppService plans created for the core infrastructure. | | `WORKSPACE_APP_SERVICE_PLAN_SKU` | Optional. The SKU used for AppService plan used in E2E tests unless otherwise specified. Default value is `P1v2`. | | `RESOURCE_PROCESSOR_NUMBER_PROCESSES_PER_INSTANCE` | Optional. The number of processes to instantiate when the Resource Processor starts. Equates to the number of parallel deployment operations possible in your TRE. Defaults to `5`. | +| `FIREWALL_SKU` | Optional. The SKU of the Azure Firewall instance. Default value is `Standard`. Allowed values [`Basic`, `Standard`, `Premium`]. See [Azure Firewall SKU feature comparison](https://learn.microsoft.com/en-us/azure/firewall/choose-firewall-sku). | + ## For authentication in `/config.yaml` diff --git a/docs/tre-admins/setup-instructions/cicd-pre-deployment-steps.md b/docs/tre-admins/setup-instructions/cicd-pre-deployment-steps.md index 07a231ef0b..af61f035f7 100644 --- a/docs/tre-admins/setup-instructions/cicd-pre-deployment-steps.md +++ b/docs/tre-admins/setup-instructions/cicd-pre-deployment-steps.md @@ -83,6 +83,7 @@ Configure the following **variables** in your github environment: | `WORKSPACE_APP_SERVICE_PLAN_SKU` | Optional. The SKU used for AppService plan used in E2E tests. Default value is `P1v2`. | | `RESOURCE_PROCESSOR_NUMBER_PROCESSES_PER_INSTANCE` | Optional. The number of processes to instantiate when the Resource Processor starts. Equates to the number of parallel deployment operations possible in your TRE. Defaults to `5`. | | `ENABLE_SWAGGER` | Optional. Determines whether the Swagger interface for the API will be available. Default value is `false`. | +| `FIREWALL_SKU` | Optional. The SKU of the Azure Firewall instance. Default value is `Standard`. Allowed values [`Basic`, `Standard`, `Premium`]. See [Azure Firewall SKU feature comparison](https://learn.microsoft.com/en-us/azure/firewall/choose-firewall-sku). | ### Configure Authentication Secrets diff --git a/docs/tre-admins/setup-instructions/workflows.md b/docs/tre-admins/setup-instructions/workflows.md index a432e90463..a06ccf46c6 100644 --- a/docs/tre-admins/setup-instructions/workflows.md +++ b/docs/tre-admins/setup-instructions/workflows.md @@ -144,6 +144,7 @@ Configure variables used in the deployment workflow: | `WORKSPACE_APP_SERVICE_PLAN_SKU` | Optional. The SKU used for AppService plan used in E2E tests. Default value is `P1v2`. | | `RESOURCE_PROCESSOR_NUMBER_PROCESSES_PER_INSTANCE` | Optional. The number of processes to instantiate when the Resource Processor starts. Equates to the number of parallel deployment operations possible in your TRE. Defaults to `5`. | | `ENABLE_SWAGGER` | Optional. Determines whether the Swagger interface for the API will be available. Default value is `false`. | +| `FIREWALL_SKU` | Optional. The SKU of the Azure Firewall instance. Default value is `Standard`. Allowed values [`Basic`, `Standard`, `Premium`]. See [Azure Firewall SKU feature comparison](https://learn.microsoft.com/en-us/azure/firewall/choose-firewall-sku). | ### Deploy the TRE using the workflow diff --git a/docs/tre-admins/start-stop.md b/docs/tre-admins/start-stop.md index 2d60b46e60..3d565575fb 100644 --- a/docs/tre-admins/start-stop.md +++ b/docs/tre-admins/start-stop.md @@ -161,7 +161,9 @@ foreach ($Group in $ResourceGroups) { # Find the firewall's public IP and virtual network $pip = Get-AzPublicIpAddress -ResourceGroupName $Group.ResourceGroupName -Name "pip-fw-$azureTreId" $vnet = Get-AzVirtualNetwork -ResourceGroupName $Group.ResourceGroupName -Name "vnet-$azureTreId" - $Firewall.Allocate($vnet, $pip) + # Find the firewall's public management IP - note this will only be present for a firewall with a Basic SKU + $mgmtPip = Get-AzPublicIpAddress -ResourceGroupName "rg-$azureTreId" -Name "pip-fw-management-$azureTreId" -ErrorAction SilentlyContinue + $Firewall.Allocate($vnet, $pip, $mgmtPip) Write-Output "Allocating Firewall '$($Firewall.Name)' with public IP '$($pip.Name)'" Set-AzFirewall -AzureFirewall $Firewall } diff --git a/resource_processor/_version.py b/resource_processor/_version.py index de77196f44..3e2f46a3a3 100644 --- a/resource_processor/_version.py +++ b/resource_processor/_version.py @@ -1 +1 @@ -__version__ = "0.8.6" +__version__ = "0.9.0" diff --git a/resource_processor/shared/config.py b/resource_processor/shared/config.py index e937d24552..8da0ee2ab0 100644 --- a/resource_processor/shared/config.py +++ b/resource_processor/shared/config.py @@ -24,6 +24,7 @@ def get_config() -> dict: config["azure_environment"] = os.environ.get("AZURE_ENVIRONMENT", "AzureCloud") config["aad_authority_url"] = os.environ.get("AAD_AUTHORITY_URL", "https://login.microsoftonline.com") config["microsoft_graph_fqdn"] = os.environ.get("MICROSOFT_GRAPH_FQDN", "graph.microsoft.com") + config["firewall_sku"] = os.environ.get("FIREWALL_SKU", "") try: config["number_processes_int"] = int(config["number_processes"]) diff --git a/templates/shared_services/firewall/parameters.json b/templates/shared_services/firewall/parameters.json index 0923966196..7883f0aa13 100755 --- a/templates/shared_services/firewall/parameters.json +++ b/templates/shared_services/firewall/parameters.json @@ -47,9 +47,9 @@ } }, { - "name": "sku_tier", + "name": "firewall_sku", "source": { - "env": "SKU_TIER" + "env": "FIREWALL_SKU" } }, { diff --git a/templates/shared_services/firewall/porter.yaml b/templates/shared_services/firewall/porter.yaml index fa65582077..d84fcb2cd1 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.1.7 +version: 1.2.0 description: "An Azure TRE Firewall shared service" dockerfile: Dockerfile.tmpl registry: azuretre @@ -45,7 +45,7 @@ parameters: type: string default: "W10=" # b64 for [] description: "Network rule collection array" - - name: sku_tier + - name: firewall_sku type: string default: Standard description: The firewall and its policy SKU tier @@ -67,7 +67,7 @@ install: tre_resource_id: ${ bundle.parameters.id } api_driven_rule_collections_b64: ${ bundle.parameters.rule_collections } api_driven_network_rule_collections_b64: ${ bundle.parameters.network_rule_collections } - sku_tier: ${ bundle.parameters.sku_tier } + firewall_sku: ${ bundle.parameters.firewall_sku } microsoft_graph_fqdn: ${ bundle.parameters.microsoft_graph_fqdn } backendConfig: resource_group_name: ${ bundle.parameters.tfstate_resource_group_name } @@ -83,7 +83,7 @@ upgrade: tre_resource_id: ${ bundle.parameters.id } api_driven_rule_collections_b64: ${ bundle.parameters.rule_collections } api_driven_network_rule_collections_b64: ${ bundle.parameters.network_rule_collections } - sku_tier: ${ bundle.parameters.sku_tier } + firewall_sku: ${ bundle.parameters.firewall_sku } microsoft_graph_fqdn: ${ bundle.parameters.microsoft_graph_fqdn } backendConfig: resource_group_name: ${ bundle.parameters.tfstate_resource_group_name } @@ -99,7 +99,7 @@ uninstall: tre_resource_id: ${ bundle.parameters.id } api_driven_rule_collections_b64: ${ bundle.parameters.rule_collections } api_driven_network_rule_collections_b64: ${ bundle.parameters.network_rule_collections } - sku_tier: ${ bundle.parameters.sku_tier } + firewall_sku: ${ bundle.parameters.firewall_sku } microsoft_graph_fqdn: ${ bundle.parameters.microsoft_graph_fqdn } backendConfig: resource_group_name: ${ bundle.parameters.tfstate_resource_group_name } diff --git a/templates/shared_services/firewall/terraform/firewall.tf b/templates/shared_services/firewall/terraform/firewall.tf index fcaefaafdb..ae94aecff0 100644 --- a/templates/shared_services/firewall/terraform/firewall.tf +++ b/templates/shared_services/firewall/terraform/firewall.tf @@ -15,7 +15,7 @@ moved { } resource "azurerm_public_ip" "fwmanagement" { - count = var.sku_tier == "Basic" ? 1 : 0 + count = local.effective_firewall_sku == "Basic" ? 1 : 0 name = "pip-fw-management-${var.tre_id}" resource_group_name = local.core_resource_group_name location = data.azurerm_resource_group.rg.location @@ -31,7 +31,7 @@ resource "azurerm_firewall" "fw" { name = local.firewall_name resource_group_name = local.core_resource_group_name location = data.azurerm_resource_group.rg.location - sku_tier = var.sku_tier + sku_tier = local.effective_firewall_sku sku_name = "AZFW_VNet" firewall_policy_id = azurerm_firewall_policy.root.id tags = local.tre_shared_service_tags @@ -42,7 +42,7 @@ resource "azurerm_firewall" "fw" { } dynamic "management_ip_configuration" { - for_each = var.sku_tier == "Basic" ? [1] : [] + for_each = local.effective_firewall_sku == "Basic" ? [1] : [] content { name = "mgmtconfig" subnet_id = data.azurerm_subnet.firewall_management.id @@ -80,7 +80,7 @@ resource "azurerm_firewall_policy" "root" { name = local.firewall_policy_name resource_group_name = local.core_resource_group_name location = data.azurerm_resource_group.rg.location - sku = var.sku_tier + sku = local.effective_firewall_sku tags = local.tre_shared_service_tags lifecycle { ignore_changes = [tags] } diff --git a/templates/shared_services/firewall/terraform/locals.tf b/templates/shared_services/firewall/terraform/locals.tf index 3eb2a41c33..83762737da 100644 --- a/templates/shared_services/firewall/terraform/locals.tf +++ b/templates/shared_services/firewall/terraform/locals.tf @@ -15,4 +15,7 @@ locals { api_driven_network_rule_collection = jsondecode(base64decode(var.api_driven_network_rule_collections_b64)) firewall_policy_name = "fw-policy-${var.tre_id}" + + default_firewall_sku = "Standard" + effective_firewall_sku = coalesce(var.firewall_sku, local.default_firewall_sku) } diff --git a/templates/shared_services/firewall/terraform/variables.tf b/templates/shared_services/firewall/terraform/variables.tf index 974ac891e6..a1017e157f 100644 --- a/templates/shared_services/firewall/terraform/variables.tf +++ b/templates/shared_services/firewall/terraform/variables.tf @@ -23,7 +23,7 @@ variable "api_driven_network_rule_collections_b64" { default = "W10=" #b64 for [] } -variable "sku_tier" { +variable "firewall_sku" { type = string - default = "Standard" + default = "" } From 4004cb8133239223d64473c3ebf3e52ca460dc4f Mon Sep 17 00:00:00 2001 From: Michael Fielding <98596456+michael-fielding@users.noreply.github.com> Date: Mon, 24 Jun 2024 10:54:55 +0100 Subject: [PATCH 38/79] Fixes #4003 with correct links (#4005) Co-authored-by: Tim Allen --- CHANGELOG.md | 1 + docs/using-tre/templates/index.md | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0a54a2a59b..519192722f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,7 @@ BUG FIXES: * Resource processor fails to deploy first workspace on fresh TRE deployment ([#3950](https://github.com/microsoft/AzureTRE/issues/3950)) * Dependency and Vulnerability updates * Add lifecycle rule to MySQL resources to stop them recreating on `update` ([#3993](https://github.com/microsoft/AzureTRE/issues/3993)) +* Fixes broken links on 'Using the Azure TRE -> Custom Templates' page of documentation ([[#4003](https://github.com/microsoft/AzureTRE/issues/4003)]) COMPONENTS: diff --git a/docs/using-tre/templates/index.md b/docs/using-tre/templates/index.md index 6183819f5d..ffe7d042bd 100644 --- a/docs/using-tre/templates/index.md +++ b/docs/using-tre/templates/index.md @@ -22,10 +22,10 @@ See the [template authoring guide](../../tre-workspace-authors/authoring-workspa 1. Add your template under the relevant folder (For example: if you are adding a new workspace template then place it under `/templates/workspaces` folder). 1. Use existing templates in AzureTRE as a reference. -1. Add porter configuration - AzureTRE uses [Porter](https://porter.sh/) as a solution for implementing and deploying workspaces and workspace, learn more about how it is used in AzureTRE [here](https://microsoft.github.io/AzureTRE/tre-developers/resource-processor/#porter). +1. Add porter configuration - AzureTRE uses [Porter](https://porter.sh/) as a solution for implementing and deploying workspaces and workspace, learn more about how it is used in AzureTRE [here](https://microsoft.github.io/AzureTRE/latest/tre-developers/resource-processor/#porter). 1. Add terraform scripts to set up your deployment plan. - - Define resource template in the API - follow [this readme](https://microsoft.github.io/AzureTRE/tre-admins/registering-templates/) to register your template. - - Use the [AzureTRE UI](https://microsoft.github.io/AzureTRE/tre-developers/ui/) to deploy your resources + - Define resource template in the API - follow [this readme](https://microsoft.github.io/AzureTRE/latest/tre-admins/registering-templates/) to register your template. + - Use the [AzureTRE UI](https://microsoft.github.io/AzureTRE/latest/tre-developers/ui/) to deploy your resources - Add your custom templates to CI/CD workflows - in Deploy Azure TRE Reusable workflow make sure to add your bundles under register_bundles and publish_bundles steps. ## Publish and Register Custom templates in the CI/CD From 8b762a97e05adfbcf12ca80a01bbec4c00bd70db Mon Sep 17 00:00:00 2001 From: Marcus Robinson Date: Mon, 24 Jun 2024 12:32:48 +0100 Subject: [PATCH 39/79] Enable Workspace owners to create Airlock requests and remove need for email (#3988) * Enable Workspace owners to create Airlock requests and remove need for email * Update versions * Fix linting. * add additonal test. * Update CHANGELOG.md * Update version.txt --------- Co-authored-by: Tim Allen --- CHANGELOG.md | 4 ++- api_app/_version.py | 2 +- api_app/core/config.py | 1 + api_app/resources/strings.py | 4 +-- api_app/services/airlock.py | 14 ++++---- .../tests_ma/test_services/test_airlock.py | 32 +++++++++++++++++++ config.sample.yaml | 4 +++ config_schema.json | 4 +++ core/terraform/api-webapp.tf | 1 + core/terraform/variables.tf | 6 ++++ core/version.txt | 2 +- 11 files changed, 62 insertions(+), 12 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 519192722f..05649d4db0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,11 +3,13 @@ **BREAKING CHANGES & MIGRATIONS**: * Update Core Terraform Provider versions ([[#3919](https://github.com/microsoft/AzureTRE/issues/3919)]) - +* Introduction of config value `enable_airlock_email_check`, which defaults to `false`, this is a change in behaviour. If you require email addresses for users before an airlock request is created, set to `true`. ([#3904](https://github.com/microsoft/AzureTRE/issues/3904)) + FEATURES: ENHANCEMENTS: * Add KeyVault Purge Protection Variable ([#3922](https://github.com/microsoft/AzureTRE/issues/3922)) +* Make check for email addresses prior to an airlock request being created optional. ([#3904](https://github.com/microsoft/AzureTRE/issues/3904)) BUG FIXES: * Update Guacamole Linux VM Images to Ubuntu 22.04 LTS. Part of ([#3523](https://github.com/microsoft/AzureTRE/issues/3523)) diff --git a/api_app/_version.py b/api_app/_version.py index 782e3ece69..963aa2b5eb 100644 --- a/api_app/_version.py +++ b/api_app/_version.py @@ -1 +1 @@ -__version__ = "0.18.8" +__version__ = "0.18.9" diff --git a/api_app/core/config.py b/api_app/core/config.py index 95394d3229..5e338830d7 100644 --- a/api_app/core/config.py +++ b/api_app/core/config.py @@ -70,5 +70,6 @@ API_AUDIENCE: str = config("API_AUDIENCE", default=API_CLIENT_ID) AIRLOCK_SAS_TOKEN_EXPIRY_PERIOD_IN_HOURS: int = config("AIRLOCK_SAS_TOKEN_EXPIRY_PERIOD_IN_HOURS", default=1) +ENABLE_AIRLOCK_EMAIL_CHECK: bool = config("ENABLE_AIRLOCK_EMAIL_CHECK", cast=bool, default=False) API_ROOT_SCOPE: str = f"api://{API_CLIENT_ID}/user_impersonation" diff --git a/api_app/resources/strings.py b/api_app/resources/strings.py index 9c2d7ff4b4..aaebcbd1ee 100644 --- a/api_app/resources/strings.py +++ b/api_app/resources/strings.py @@ -215,8 +215,8 @@ AIRLOCK_REQUEST_INVALID_STATUS = "Airlock request status is unknown." AIRLOCK_UNAUTHORIZED_TO_SA = "User is unauthorized to access airlock request files in its current status." AIRLOCK_NOT_ENABLED_IN_WORKSPACE = "Airlock is not enabled in this workspace." -AIRLOCK_NO_RESEARCHER_EMAIL = "There are no Workspace Researchers with an email address." -AIRLOCK_NO_AIRLOCK_MANAGER_EMAIL = "There are no Airlock Managers with an email address." +AIRLOCK_NO_EMAIL = "There are no Workspace Researchers or Workspace Owners in the workspace with an email address." +AIRLOCK_NO_AIRLOCK_MANAGER_EMAIL = "There are no Airlock Managers in the workspace with an email address." # Airlock Actions AIRLOCK_ACTION_REVIEW = "review" diff --git a/api_app/services/airlock.py b/api_app/services/airlock.py index fc33645afb..6e79d49b64 100644 --- a/api_app/services/airlock.py +++ b/api_app/services/airlock.py @@ -272,10 +272,10 @@ async def _handle_existing_review_resource(existing_resource: AirlockReviewUserR async def save_and_publish_event_airlock_request(airlock_request: AirlockRequest, airlock_request_repo: AirlockRequestRepository, user: User, workspace: Workspace): - # First check we have some email addresses so we can notify people. access_service = get_access_service() role_assignment_details = access_service.get_workspace_role_assignment_details(workspace) - check_email_exists(role_assignment_details) + if config.ENABLE_AIRLOCK_EMAIL_CHECK: + check_email_exists(role_assignment_details) try: logger.debug(f"Saving airlock request item: {airlock_request.id}") @@ -345,11 +345,11 @@ def get_timestamp() -> float: def check_email_exists(role_assignment_details: defaultdict(list)): - if "WorkspaceResearcher" not in role_assignment_details or not role_assignment_details["WorkspaceResearcher"]: - logger.error('Creating an airlock request but the researcher does not have an email address.') - raise HTTPException(status_code=status.HTTP_417_EXPECTATION_FAILED, detail=strings.AIRLOCK_NO_RESEARCHER_EMAIL) - if "AirlockManager" not in role_assignment_details or not role_assignment_details["AirlockManager"]: - logger.error('Creating an airlock request but the airlock manager does not have an email address.') + if not role_assignment_details.get("WorkspaceResearcher") and not role_assignment_details.get("WorkspaceOwner"): + logger.error(strings.AIRLOCK_NO_EMAIL) + raise HTTPException(status_code=status.HTTP_417_EXPECTATION_FAILED, detail=strings.AIRLOCK_NO_EMAIL) + if not role_assignment_details.get("AirlockManager"): + logger.error(strings.AIRLOCK_NO_AIRLOCK_MANAGER_EMAIL) raise HTTPException(status_code=status.HTTP_417_EXPECTATION_FAILED, detail=strings.AIRLOCK_NO_AIRLOCK_MANAGER_EMAIL) diff --git a/api_app/tests_ma/test_services/test_airlock.py b/api_app/tests_ma/test_services/test_airlock.py index c7fccec4d9..d8a26a1df8 100644 --- a/api_app/tests_ma/test_services/test_airlock.py +++ b/api_app/tests_ma/test_services/test_airlock.py @@ -317,6 +317,17 @@ async def test_check_email_exists_raises_417_if_email_not_present(role_assignmen assert ex.value.status_code == status.HTTP_417_EXPECTATION_FAILED +@pytest.mark.asyncio +@pytest.mark.parametrize('role_assignment_details_mock_return', [ + {"AirlockManager": ["manager@outlook.com"], "WorkspaceResearcher": ["researcher@outlook.com"], }, + {"AirlockManager": ["manager@outlook.com"], "WorkspaceOwner": ["researcher@outlook.com"], }, + {"AirlockManager": ["manager@outlook.com"], "WorkspaceResearcher": ["researcher@outlook.com"], "WorkspaceOwner": ["owner@outlook.com"]}]) +async def test_check_email_exists_passes_if_researcher_or_owner_and_airlock_manager_email_present(role_assignment_details_mock_return): + role_assignment_details = role_assignment_details_mock_return + result = check_email_exists(role_assignment_details) + assert result is None + + @pytest.mark.asyncio @pytest.mark.parametrize('email_mock_return', [{}, {"AirlockManager": ["owner@outlook.com"]}, @@ -324,6 +335,7 @@ async def test_check_email_exists_raises_417_if_email_not_present(role_assignmen {"WorkspaceResearcher": ["researcher@outlook.com"], "owner_emails": []}, {"WorkspaceResearcher": ["researcher@outlook.com"]}]) @patch("services.aad_authentication.AzureADAuthorization.get_workspace_role_assignment_details") +@patch('core.config.ENABLE_AIRLOCK_EMAIL_CHECK', "True") async def test_save_and_publish_event_airlock_request_raises_417_if_email_not_present(get_workspace_role_assignment_details_patched, email_mock_return): get_workspace_role_assignment_details_patched.return_value = email_mock_return @@ -338,6 +350,26 @@ async def test_save_and_publish_event_airlock_request_raises_417_if_email_not_pr assert ex.value.status_code == status.HTTP_417_EXPECTATION_FAILED +@pytest.mark.asyncio +@pytest.mark.parametrize('email_mock_return', [{}, + {"WorkspaceResearcher": [], "AirlockManager": []}]) +@patch("services.aad_authentication.AzureADAuthorization.get_workspace_role_assignment_details") +@patch("event_grid.event_sender.publish_event", return_value=AsyncMock()) +async def test_save_and_publish_event_airlock_notification_if_email_not_present(publish_event_mock, get_workspace_role_assignment_details_patched, email_mock_return, airlock_request_repo_mock): + + get_workspace_role_assignment_details_patched.return_value = email_mock_return + airlock_request_mock = sample_airlock_request() + airlock_request_repo_mock.save_item = AsyncMock() + + await save_and_publish_event_airlock_request( + airlock_request=airlock_request_mock, + airlock_request_repo=airlock_request_repo_mock, + user=create_test_user(), + workspace=sample_workspace()) + + assert publish_event_mock.call_count == 2 + + @pytest.mark.asyncio @patch("event_grid.helpers.EventGridPublisherClient", return_value=AsyncMock()) @patch("services.aad_authentication.AzureADAuthorization.get_workspace_role_assignment_details", return_value={"WorkspaceResearcher": ["researcher@outlook.com"], "WorkspaceOwner": ["owner@outlook.com"], "AirlockManager": ["manager@outlook.com"]}) diff --git a/config.sample.yaml b/config.sample.yaml index ad2aa6078c..21e757fe89 100644 --- a/config.sample.yaml +++ b/config.sample.yaml @@ -33,6 +33,10 @@ tre: enable_swagger: true enable_airlock_malware_scanning: true + # Set to true if want to ensure users have an email address before airlock request is created + # Used if rely on email notifications for governance purposes + # enable_airlock_email_check: true + # TODO: move to RP default with https://github.com/microsoft/AzureTRE/issues/2948 workspace_app_service_plan_sku: P1v2 # The TRE Web UI is deployed by default. diff --git a/config_schema.json b/config_schema.json index a8ae1711d6..d16ff8f775 100644 --- a/config_schema.json +++ b/config_schema.json @@ -69,6 +69,10 @@ "description": "Allow airlock malware scanning.", "type": "boolean" }, + "enable_airlock_email_check": { + "description": "Require email check for airlock.", + "type": "boolean" + }, "core_address_space": { "description": "TRE core address spaces.", "type": "string" diff --git a/core/terraform/api-webapp.tf b/core/terraform/api-webapp.tf index a38d6ed26f..f2d4beab1a 100644 --- a/core/terraform/api-webapp.tf +++ b/core/terraform/api-webapp.tf @@ -58,6 +58,7 @@ resource "azurerm_linux_web_app" "api" { RESOURCE_MANAGER_ENDPOINT = module.terraform_azurerm_environment_configuration.resource_manager_endpoint MICROSOFT_GRAPH_URL = module.terraform_azurerm_environment_configuration.microsoft_graph_endpoint STORAGE_ENDPOINT_SUFFIX = module.terraform_azurerm_environment_configuration.storage_suffix + ENABLE_AIRLOCK_EMAIL_CHECK = var.enable_airlock_email_check LOGGING_LEVEL = var.logging_level OTEL_RESOURCE_ATTRIBUTES = "service.name=api,service.version=${local.version}" OTEL_EXPERIMENTAL_RESOURCE_DETECTORS = "azure_app_service" diff --git a/core/terraform/variables.tf b/core/terraform/variables.tf index 93d8c3a765..478325be7a 100644 --- a/core/terraform/variables.tf +++ b/core/terraform/variables.tf @@ -174,6 +174,12 @@ variable "enable_airlock_malware_scanning" { description = "If False, Airlock requests will skip the malware scanning stage" } +variable "enable_airlock_email_check" { + type = bool + default = false + description = "If True, prior to airlock requests creation will check users have email addresses" +} + variable "firewall_sku" { description = "Azure Firewall SKU" type = string diff --git a/core/version.txt b/core/version.txt index a9b029e7c7..1f4c4d43b2 100644 --- a/core/version.txt +++ b/core/version.txt @@ -1 +1 @@ -__version__ = "0.10.0" \ No newline at end of file +__version__ = "0.10.1" From 3689c09b902df14fae064fefecacc8b5665e8acb Mon Sep 17 00:00:00 2001 From: Jonny Rylands Date: Tue, 25 Jun 2024 14:56:39 +0100 Subject: [PATCH 40/79] Fix .github/workflows/lets_encrypt.yml (#3979) * Fix missing env vars. Add environment selector on manual run. Comment out schedule. * Update CHANGELOG for Lets Encrypt fix, and add missing entry for FIREWALL_SKU enhancement * Fix lint issue - remove trailing space --- .github/workflows/lets_encrypt.yml | 26 ++++++++++++++++---------- CHANGELOG.md | 2 ++ 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/.github/workflows/lets_encrypt.yml b/.github/workflows/lets_encrypt.yml index d0f00e1dd0..6a0712ab15 100644 --- a/.github/workflows/lets_encrypt.yml +++ b/.github/workflows/lets_encrypt.yml @@ -2,10 +2,16 @@ name: Renew Lets Encrypt Certificates on: # yamllint disable-line rule:truthy - schedule: - # 3am each month https://crontab.guru/#0_3_1_*_* - - cron: "0 3 1 * *" + # schedule: + # # 3am each month https://crontab.guru/#0_3_1_*_* + # - cron: "0 3 1 * *" workflow_dispatch: + inputs: + environment: + description: The environment to run this workflow in + type: environment + default: CICD + required: true # This will prevent multiple runs of this entire workflow. # We should NOT cancel in progress runs as that can destabilize the environment. @@ -20,7 +26,7 @@ jobs: renew_letsencrypt_certs: name: Renew Lets Encrypt Certificates runs-on: ubuntu-latest - environment: CICD + environment: ${{ github.event.inputs.environment || 'CICD' }} steps: - name: Checkout uses: actions/checkout@v4 @@ -38,13 +44,13 @@ jobs: env: ARM_CLIENT_ID: ${{ fromJSON(secrets.AZURE_CREDENTIALS).clientId }} ARM_CLIENT_SECRET: ${{ fromJSON(secrets.AZURE_CREDENTIALS).clientSecret }} - ARM_SUBSCRIPTION_ID: ${{ fromJSON(secrets.AZURE_CREDENTIALS).tenantId }} - ARM_TENANT_ID: ${{ fromJSON(secrets.AZURE_CREDENTIALS).subscriptionId }} + ARM_SUBSCRIPTION_ID: ${{ fromJSON(secrets.AZURE_CREDENTIALS).subscriptionId }} + ARM_TENANT_ID: ${{ fromJSON(secrets.AZURE_CREDENTIALS).tenantId }} + AZURE_ENVIRONMENT: ${{ vars.AZURE_ENVIRONMENT }} TRE_ID: ${{ secrets.TRE_ID }} - TERRAFORM_STATE_CONTAINER_NAME: - ${{ secrets.TERRAFORM_STATE_CONTAINER_NAME && secrets.TERRAFORM_STATE_CONTAINER_NAME || 'tfstate' }} - MGMT_RESOURCE_GROUP_NAME: ${{ secrets.MGMT_RESOURCE_GROUP_NAME }} - MGMT_STORAGE_ACCOUNT_NAME: ${{ secrets.MGMT_STORAGE_ACCOUNT_NAME }} + TF_VAR_terraform_state_container_name: ${{ secrets.TERRAFORM_STATE_CONTAINER_NAME || 'tfstate' }} + TF_VAR_mgmt_resource_group_name: ${{ secrets.MGMT_RESOURCE_GROUP_NAME }} + TF_VAR_mgmt_storage_account_name: ${{ secrets.MGMT_STORAGE_ACCOUNT_NAME }} run: | sudo apt-get install -y python3 python3-venv libaugeas0 \ && python3 -m venv /opt/certbot/ \ diff --git a/CHANGELOG.md b/CHANGELOG.md index 05649d4db0..6155665bfe 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ FEATURES: ENHANCEMENTS: * Add KeyVault Purge Protection Variable ([#3922](https://github.com/microsoft/AzureTRE/issues/3922)) * Make check for email addresses prior to an airlock request being created optional. ([#3904](https://github.com/microsoft/AzureTRE/issues/3904)) +* Add Firewall SKU variable ([#3961](https://github.com/microsoft/AzureTRE/issues/3961)) BUG FIXES: * Update Guacamole Linux VM Images to Ubuntu 22.04 LTS. Part of ([#3523](https://github.com/microsoft/AzureTRE/issues/3523)) @@ -22,6 +23,7 @@ BUG FIXES: * Dependency and Vulnerability updates * Add lifecycle rule to MySQL resources to stop them recreating on `update` ([#3993](https://github.com/microsoft/AzureTRE/issues/3993)) * Fixes broken links on 'Using the Azure TRE -> Custom Templates' page of documentation ([[#4003](https://github.com/microsoft/AzureTRE/issues/4003)]) +* Fix 'Renew Lets Encrypt Certificates' GitHub Action ([#3978](https://github.com/microsoft/AzureTRE/issues/3978)) COMPONENTS: From 0560d29ad1cd156c50eeb9ea3a26bb08f0bc08c7 Mon Sep 17 00:00:00 2001 From: Tim Allen Date: Tue, 25 Jun 2024 16:05:21 +0100 Subject: [PATCH 41/79] Gitea Shared Service Fix (#4008) * add in ignore_changes * changelog update --- CHANGELOG.md | 3 ++- templates/shared_services/gitea/terraform/mysql.tf | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6155665bfe..45cccf3cc4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,7 @@ ## 0.18.0 (Unreleased) **BREAKING CHANGES & MIGRATIONS**: -* Update Core Terraform Provider versions ([[#3919](https://github.com/microsoft/AzureTRE/issues/3919)]) +* Update Core Terraform Provider versions ([#3919](https://github.com/microsoft/AzureTRE/issues/3919)) * Introduction of config value `enable_airlock_email_check`, which defaults to `false`, this is a change in behaviour. If you require email addresses for users before an airlock request is created, set to `true`. ([#3904](https://github.com/microsoft/AzureTRE/issues/3904)) FEATURES: @@ -24,6 +24,7 @@ BUG FIXES: * Add lifecycle rule to MySQL resources to stop them recreating on `update` ([#3993](https://github.com/microsoft/AzureTRE/issues/3993)) * Fixes broken links on 'Using the Azure TRE -> Custom Templates' page of documentation ([[#4003](https://github.com/microsoft/AzureTRE/issues/4003)]) * Fix 'Renew Lets Encrypt Certificates' GitHub Action ([#3978](https://github.com/microsoft/AzureTRE/issues/3978)) +* Add lifecycle rule to the Gitea Shared Service template for the MySQL resource to stop it recreating on `update` ([#4006](https://github.com/microsoft/AzureTRE/issues/4006)) COMPONENTS: diff --git a/templates/shared_services/gitea/terraform/mysql.tf b/templates/shared_services/gitea/terraform/mysql.tf index 33d4a0fe9f..61fe2af169 100644 --- a/templates/shared_services/gitea/terraform/mysql.tf +++ b/templates/shared_services/gitea/terraform/mysql.tf @@ -27,6 +27,8 @@ resource "azurerm_mysql_flexible_database" "gitea" { server_name = azurerm_mysql_flexible_server.gitea.name charset = "utf8" collation = "utf8_unicode_ci" + + lifecycle { ignore_changes = [charset, collation] } } moved { From 8171fe9e99bace2e195fe8260631c5a5708b5f72 Mon Sep 17 00:00:00 2001 From: Michael Fielding <98596456+michael-fielding@users.noreply.github.com> Date: Tue, 25 Jun 2024 16:16:34 +0100 Subject: [PATCH 42/79] Updates Windows11 Source Image SKU as previous SKU is end-of-life (#3996) * Updates Windows11 Source Imgae SKU as previous SKU is end-of-life * Updated template version and CHANGELOG * Fixed typo in CHANGELOG * Updates to major version to prevent upgrades due to data loss --------- Co-authored-by: Tim Allen --- CHANGELOG.md | 1 + .../user_resources/guacamole-azure-windowsvm/porter.yaml | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 45cccf3cc4..6072c83c63 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ FEATURES: ENHANCEMENTS: * Add KeyVault Purge Protection Variable ([#3922](https://github.com/microsoft/AzureTRE/issues/3922)) +* Update Guacamole Windows 11 VM Image to 2Win11-23h2-pro ([#3995](https://github.com/microsoft/AzureTRE/issues/3995)) * Make check for email addresses prior to an airlock request being created optional. ([#3904](https://github.com/microsoft/AzureTRE/issues/3904)) * Add Firewall SKU variable ([#3961](https://github.com/microsoft/AzureTRE/issues/3961)) 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 3b3354ef84..2a6e633040 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: 0.7.9 +version: 1.0.0 description: "An Azure TRE User Resource Template for Guacamole (Windows 10)" dockerfile: Dockerfile.tmpl registry: azuretre @@ -25,7 +25,7 @@ custom: source_image_reference: publisher: microsoftwindowsdesktop offer: windows-11 - sku: win11-21h2-pro + sku: win11-23h2-pro version: latest conda_config: false "Server 2019 Data Science VM": From 21daf3f2658ede4fc3e830de7dd6e1ccfd516a9b Mon Sep 17 00:00:00 2001 From: Tim Allen Date: Wed, 26 Jun 2024 09:37:18 +0100 Subject: [PATCH 43/79] Weak hashes (#3963) * Update clean_validation_envs.yml * update * update BRANCH_LAST_ACTIVITY_IN_HOURS_FOR_STOP: 8 * sha2 * update chnagelog * update * update --- .github/scripts/build.js | 2 +- CHANGELOG.md | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/scripts/build.js b/.github/scripts/build.js index e6d17b8f84..9a144926ed 100644 --- a/.github/scripts/build.js +++ b/.github/scripts/build.js @@ -292,7 +292,7 @@ function getRefIdForBranch(branchName) { return createShortHash(`refs/heads/${branchName}\n`); } function createShortHash(ref) { - const hash = createHash('sha1').update(ref, 'utf8').digest('hex') + const hash = createHash('sha2').update(ref, 'utf8').digest('hex') return hash.substring(0, 8); } diff --git a/CHANGELOG.md b/CHANGELOG.md index 6072c83c63..1e83998c24 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,7 @@ BUG FIXES: * Add workaround to avoid name clashes for storage accounts([#3863](https://github.com/microsoft/AzureTRE/pull/3858)) * Resource processor fails to deploy first workspace on fresh TRE deployment ([#3950](https://github.com/microsoft/AzureTRE/issues/3950)) * Dependency and Vulnerability updates +* Fix Weak hashes ([#3931](https://github.com/microsoft/AzureTRE/issues/3931)) * Add lifecycle rule to MySQL resources to stop them recreating on `update` ([#3993](https://github.com/microsoft/AzureTRE/issues/3993)) * Fixes broken links on 'Using the Azure TRE -> Custom Templates' page of documentation ([[#4003](https://github.com/microsoft/AzureTRE/issues/4003)]) * Fix 'Renew Lets Encrypt Certificates' GitHub Action ([#3978](https://github.com/microsoft/AzureTRE/issues/3978)) From 69095849604dded0167dca56413b8e602f220788 Mon Sep 17 00:00:00 2001 From: Tim Allen Date: Thu, 27 Jun 2024 12:22:22 +0100 Subject: [PATCH 44/79] Databricks ips (#3964) --- CHANGELOG.md | 1 + .../databricks/terraform/.terraform.lock.hcl | 108 ++-- .../databricks/terraform/databricks-udr.json | 470 +++++++++++++++--- .../databricks/terraform/providers.tf | 8 +- 4 files changed, 446 insertions(+), 141 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1e83998c24..d24a717e90 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ FEATURES: ENHANCEMENTS: +* Additional DataBrick IPs added ([#3901](https://github.com/microsoft/AzureTRE/issues/3901)) * Add KeyVault Purge Protection Variable ([#3922](https://github.com/microsoft/AzureTRE/issues/3922)) * Update Guacamole Windows 11 VM Image to 2Win11-23h2-pro ([#3995](https://github.com/microsoft/AzureTRE/issues/3995)) * Make check for email addresses prior to an airlock request being created optional. ([#3904](https://github.com/microsoft/AzureTRE/issues/3904)) diff --git a/templates/workspace_services/databricks/terraform/.terraform.lock.hcl b/templates/workspace_services/databricks/terraform/.terraform.lock.hcl index a5d87419ff..450f2307b5 100644 --- a/templates/workspace_services/databricks/terraform/.terraform.lock.hcl +++ b/templates/workspace_services/databricks/terraform/.terraform.lock.hcl @@ -2,79 +2,75 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/azure/azapi" { - version = "1.1.0" - constraints = "1.1.0" + version = "1.13.1" + constraints = "1.13.1" hashes = [ - "h1:IR+AHCwfjl1c0baWwfOwZ6QZtHj41H2syTgHkJtAr/M=", - "zh:2a25df6325a49f9e821f0b02c7da86167fc19a3bac647cd1edf231300f29d077", - "zh:2b443a836a39724663fe455d4deee408ff3a2d9a8b86f8408aa7db2e8aa743f8", - "zh:364ed09ddfc50d9bed8d930f7de489cb654a9908feb139413a097823a50075fd", - "zh:523bc005f56ae785867d230d55c29f59db4b599dbc6c38b4d03ea55a79458916", - "zh:60ded375fdb305b60bcb4d9e596dbb222cab166bad1b4958199b05a72aaeacfd", - "zh:61e69c58642fead6814e511c872b7c0a6478ec6af4ab758b4512607d910ac078", - "zh:823b2154ae2262dabcbd11aac992e3cc29eae0f7baa96bee1e3e2fe1ece8730b", - "zh:870ea9cc24807ef5142e4cad0281dac7173f7b6bf818a79762b6c690d12d4c4b", - "zh:9094ae76ed66cb328a4f35bd18b9140fb6fc6859c2e46431ec73c018bcb58d96", - "zh:d89149cfd01cb70012459536b4d36490b58e43312440562e5910bd5160537858", - "zh:dba7ec06171ca062fc423ba5b4776a5600444e45e57f4d1cb043bdc3eee538b7", - "zh:ff5bd6883d9ac8334e043434246357a55107411e9a962856c1d17e47ee15ac37", + "h1:xDZG4lbtQJeyJa3Gzo8qecYxyw+AIXYcdDRlkaSLNz8=", + "zh:1f2aceddd67ceeb82a75c2f15dc01e54781e9aed5968507dbc29590c165b2e2b", + "zh:397f0bfbac899d48e23cecf38d362c27562150aa20b19157b5bd370b8e6801ee", + "zh:652263b7d00623684e29ef7b8ff285a17c5bd7cc8ba7d22967c66d0b3a3c568a", + "zh:652c53320a41434942877515780296a1509be03f32d54e60178f39200f960a67", + "zh:666426faf686401e54ec09fe06e9d7c06a6455ec398764f70558440c73aeb7f9", + "zh:6aa91ae8ba78f2494f99b4c99e66d15ed0b14d735cd1f77adc12ff9dfa075807", + "zh:a529e5a13c37d1805c469227f08cdbe7527d04dd64d18709d26627c6a0b588b1", + "zh:a589c049205e8e5bf94a13d56b28f400d908ad27e13e16df64408ee82eb8a0ff", + "zh:a9a50defdee230f315f74be6c77ff104fe2610a1b3ad6b87326f555e80d13b18", + "zh:ba49ef70d96e13795e2dbffd6cb2ff976dfe84e0373a5971ebe3b4c9c9b7af60", + "zh:d3ed50efe5f8c80d3d7d464ab9a13ccf82440d871c9ce3032ce476845364c6b9", + "zh:e3eb48ee8c36ee4f81850d8a21fc59b81886c729d7c3b7adece4a25f355bed2f", ] } provider "registry.terraform.io/databricks/databricks" { - version = "1.5.0" - constraints = "1.5.0" + version = "1.48.0" + constraints = "1.48.0" hashes = [ - "h1:UJe5L/BteOU7M5ewRLzuUjiewYFLF695eLp3hMKVR6M=", - "zh:0fa9ca13d977a8dcb46254f07c9be731891468f5b423f09cb51da97eaace8e2b", - "zh:3a648e4f8ece8aab05acfc7759b4e4cd153ecd29b3ed0e00d7f1a3a19911f7d8", - "zh:3b052b98b5e22ae4e81e4b667ae5cee9a68bb1750d22546ae9eff16c8d6a294a", - "zh:4320b165218cb39f0ad313d483bba20d0de9e48db0c1467fd0e3a0afb2c02012", - "zh:588c9fdbf35ca9c430cafb5dbd90f34a165744e3514212d0f2c07a3387d8b339", - "zh:b50f8eb38b556ddfa24a76b4113e8a84b778a9a0bb4b4ba5fdc3edca59198d2a", - "zh:ca5186443ac672f5566d9c9b5727f55124a8642dd3949e973790b9195e6b306a", - "zh:db817409b94c34c9b9b5e109751eff7fbca90d08b407a099630c8ec79b6c6d4b", - "zh:edf04424c68db603bf2473e2f14f3e3ad217feb84fc2c7debb6641d15886f8e3", - "zh:ef374f84c41fe529bff1ec3274eb7fe5dd8184c5e71f3e6d99a6adaff6eab82e", + "h1:o1tNRClUSRi0luylRIJEZWkXTcAWj3okW4UzZxyLj+c=", + "zh:2f754ee98cc6779cc989363156fee3a094c3e3b42f5fc7725058b76a2dcc8672", + "zh:8e328c079117a274815f4e4c7c456e4dd4c3bcf72547bf96e7ccd873e6dde73a", + "zh:9d5ae7428e2a12c13138a360b51195a7d76cffd86c2b3587a6a8a931b26cb560", + "zh:c4067270ae9639261493b36200bce767c3546351e3ad1198bc4b909efef98400", + "zh:d93a9ff998e27f6db70a0ffb37cd31c3e6c9c42291ef69030581c8ed7a133ee5", + "zh:f154f5c0331f23fc3a2f2afb9ad6ebc3f32546a9370171259e344a11aeada7f6", ] } provider "registry.terraform.io/hashicorp/azurerm" { - version = "3.40.0" - constraints = "3.40.0" + version = "3.108.0" + constraints = "3.108.0" hashes = [ - "h1:/Jbhw/zNAsDYDoASaG6w+0KZyay9BkUVOpR8b7m0CsA=", - "zh:00fa6dc05bf2643c6a3c741edb7d88263698086835a8a613f1d7bd76d1b918fd", - "zh:0da9b788e773272a7aa9d59bd9e3d5842edd4acc8c3895bea469e66dc14205a0", - "zh:25a8c39d1f042fc7c83ba9dd745c3569ea9e577fadb57563a575fb115ac2b9f1", - "zh:4423666dbeae8bc22c6e8898ffbb88745681dc27668ca9104b665dd7f3d7292c", - "zh:78c07308e7407b558d15737a98fb5eaf15529d297fc3798de6a7d61e0466e2e3", - "zh:894aca7e6f4f331ee8eb51957a180dc03d399d2b1727e0d7842e9b3f022a8c6a", - "zh:bb0e620c2161b4c4892a6f50b1c4c69ed70f66bb5e92543a03d79d0e4b1d9441", - "zh:c7d8e6a791159ca63b30908c9efe72ab65f60d64b30f0c1eb5a64972f4994844", - "zh:d04c11bfd346c1ac34d16bbdca70b23b006e822f6beb236b85375e8343888eb4", - "zh:f4edea9660327c7c70a823d786fd1b1c1b186c8759770447f63da72f23e1a73c", + "h1:RIFBFTXz4X48JDHjbQHX4y400ax1/uEzMVFZgX3/z3w=", + "zh:2afecf948fd702bc08c87d9114595809d011f99a70a12dbf6bc67a12d0bee5fc", + "zh:395b6d1384a579867064e62d49b0b91e15919c33b03ea8b5031c2779bfa16b3d", + "zh:3e5594c59b6b02bc6e0f4c3de71aa2ab992494c53725fb3c64d36745f3814ef3", + "zh:4613e190609377309f6a4ac44f631c9469efab3ae148dbb09e73718201dc4f42", + "zh:624f01cb7604d58100068401bd07ab09a141e7bd318f8214127838cf202e4868", + "zh:65709950c9933e38704e2075a2339951e1259a6e882f35d390be36e1844ebc72", + "zh:af82657fad4e3a177f2ebb8035b45bda40f8856eb999288533321028794d03e5", + "zh:c40b331eba08830d16c0e6795fa7cbf08231073df2cfdb0f34e9d908a915981a", + "zh:d6ccd533a0bd984ca7ed1ae860e057e9e2f88468745be9712236d2d240353de4", + "zh:f361fd398e8772f8554a010331d161d6f7284a43238fd28bfa7b41795a5538b8", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", - "zh:f986e268949cf445ff53a66af48a87c6f6dba5964e8a5b1dc0ea02afabdd71f7", + "zh:f8c2132c77d35930203ec66f1bf9bbf633a2406e9f7b572ff425d65b8aa8c492", ] } provider "registry.terraform.io/hashicorp/dns" { - version = "3.2.3" - constraints = "3.2.3" + version = "3.4.1" + constraints = "3.4.1" hashes = [ - "h1:ODcR+vWOhCAJ2iCChZMVdRglNCx07VNr67OPLRPZyDY=", - "zh:03a304f4b76ac6c8bebffddcdf555bf77578a7f638948a681589def32e140cb8", - "zh:08c7d2498b747054e9c9df7838bfa4e4a6b5d63e2d29f0457247e384f792d56c", - "zh:20adf489819ba51ba9d9d15da2dbe1fecb92491b3d0dd80096873e5e84d8b4bd", - "zh:2959ff209d2578456ca490672b82864d483b9e9db9efc8e4ffada06e23017609", - "zh:3ecd0b22db79550fb1108ff7bd00c4066825e8c23bb64e3cc8d9b8102e8caa45", - "zh:6e53a9232245b4be52b56b078f15f270b89afe6abb9c9b8baab4a282fe0cf9f8", + "h1:6VWKyyb75bXOvm+jFNyOfu/cj0SdcDru7seMblWRBfc=", + "zh:00fc9ba46d66a35c0f4cb66d19b402280f5d074a5652b6a378aac9b11b93d069", + "zh:0d612631e82f246d1e7ee20d3dff29ad1c328d1cec0a3b030719e6246676737b", + "zh:29b847c53ea307acf7ed923c751f3051aae3308a23ba376ad86b120c0f6b978b", + "zh:4b5612e01d369ba56abe87daaea12e65114da9befdd080bf26269dfcbd1c07fa", + "zh:5a2e3af49eabe6592bc24ff6c718872cc8a3fbc3b7be152b00d124ef1dd5d0bd", + "zh:6570128aa7cb71390f78b9aa918c937f1ab0d695e8d7a0b38b84713d2cc92893", "zh:78d5eefdd9e494defcb3c68d282b8f96630502cac21d1ea161f53cfe9bb483b3", - "zh:80437bdfa08eb90f70105b52cb06799a8f7967313654b43d28d7f654fcd4edc1", - "zh:816ddaca0ecc29e287376e5b0b8b0729ee13f23a9d74bfad5b14b7983e1a1775", - "zh:82d8ac7ad00c1a71d0a7c1aca03bb59a6b51128f895242df80b1f3d016c3c51a", - "zh:ec9243b8bd80693a6eeeea5d4f7f4e6f57bd44ae796d6d5b1a91790e359f8a61", - "zh:fd821adbfb03a2c9eac111ff27a32b3a5523b18f80333008de85482d3bbea645", + "zh:874cbc34ef9973e4b1f894d910e7f853cc317ee6b5208179d41c1bfa51831425", + "zh:946d5fbe75d4fc0fdc1d2deea85a5e02ec46f6830731f9414884276b7c3ec4bc", + "zh:b1cde393e83634c733649caea76ef6f4f14f01f2b04e8c90926ccbb49ac6c53d", + "zh:b803d82cf6fc8ae6660f896144e065d6ed032273a3eb418e62b39a7dec73f734", + "zh:e8d8b93b1c13b199c929819b2b049627a6d3874fd3f16e05b3f594d526233dd6", ] } diff --git a/templates/workspace_services/databricks/terraform/databricks-udr.json b/templates/workspace_services/databricks/terraform/databricks-udr.json index c8454c7352..4cabb84df9 100644 --- a/templates/workspace_services/databricks/terraform/databricks-udr.json +++ b/templates/workspace_services/databricks/terraform/databricks-udr.json @@ -1,9 +1,21 @@ { "australiacentral": { - "webappDestinationAddresses": ["13.75.218.172/32"], + "webappDestinationAddresses": [ + "13.75.218.172/32", + "20.70.34.64/28", + "4.150.168.160/28" + ], "sccRelayDestinationAddresses": ["13.75.164.249/32"], "sccRelayDomains": ["tunnel.australiaeast.azuredatabricks.net"], - "controlPlaneNatDestinationAddresses": ["13.70.105.50/32"], + "controlPlaneNatDestinationAddresses": [ + "13.70.105.50/32", + "20.211.147.64/29", + "20.28.138.72/29", + "20.11.26.96/29", + "20.40.72.88/29", + "20.5.1.136/29", + "20.5.170.240/29" + ], "extendedInfrastructureDestinationAddresses": ["20.53.145.128/28"], " ": ["dblogprodausteast.blob.core.windows.net"], "artifactBlobStoragePrimaryDomains": [ @@ -20,10 +32,22 @@ ] }, "australiacentral2": { - "webappDestinationAddresses": ["13.75.218.172/32"], + "webappDestinationAddresses": [ + "13.75.218.172/32", + "20.193.110.128/28", + "4.150.168.160/28" + ], "sccRelayDestinationAddresses": ["13.75.164.249/32"], "sccRelayDomains": ["tunnel.australiaeast.azuredatabricks.net"], - "controlPlaneNatDestinationAddresses": ["13.70.105.50/32"], + "controlPlaneNatDestinationAddresses": [ + "13.70.105.50/32", + "20.211.147.64/29", + "20.28.138.72/29", + "20.11.26.96/29", + "20.40.72.88/29", + "20.5.1.136/29", + "20.5.170.240/29" + ], "extendedInfrastructureDestinationAddresses": ["20.53.145.128/28"], "logBlobStorageDomains": ["dblogprodausteast.blob.core.windows.net"], "artifactBlobStoragePrimaryDomains": [ @@ -40,10 +64,22 @@ ] }, "australiaeast": { - "webappDestinationAddresses": ["13.75.218.172/32"], + "webappDestinationAddresses": [ + "13.75.218.172/32", + "4.147.241.0/28", + "4.150.168.160/28" + ], "sccRelayDestinationAddresses": ["13.75.164.249/32"], "sccRelayDomains": ["tunnel.australiaeast.azuredatabricks.net"], - "controlPlaneNatDestinationAddresses": ["13.70.105.50/32"], + "controlPlaneNatDestinationAddresses": [ + "13.70.105.50/32", + "20.211.147.64/29", + "20.28.138.72/29", + "20.11.26.96/29", + "20.40.72.88/29", + "20.5.1.136/29", + "20.5.170.240/29" + ], "extendedInfrastructureDestinationAddresses": ["20.53.145.128/28"], "logBlobStorageDomains": ["dblogprodausteast.blob.core.windows.net"], "artifactBlobStoragePrimaryDomains": [ @@ -76,10 +112,22 @@ ] }, "australiasoutheast": { - "webappDestinationAddresses": ["13.75.218.172/32"], + "webappDestinationAddresses": [ + "13.75.218.172/32", + "4.198.113.16/28", + "4.150.168.160/28" + ], "sccRelayDestinationAddresses": ["13.75.164.249/32"], "sccRelayDomains": ["tunnel.australiaeast.azuredatabricks.net"], - "controlPlaneNatDestinationAddresses": ["13.70.105.50/32"], + "controlPlaneNatDestinationAddresses": [ + "13.70.105.50/32", + "20.211.147.64/29", + "20.28.138.72/29", + "20.11.26.96/29", + "20.40.72.88/29", + "20.5.1.136/29", + "20.5.170.240/29" + ], "extendedInfrastructureDestinationAddresses": ["20.53.145.128/28"], "logBlobStorageDomains": ["dblogprodausteast.blob.core.windows.net"], "artifactBlobStoragePrimaryDomains": [ @@ -96,10 +144,22 @@ ] }, "brazilsouth": { - "webappDestinationAddresses": ["104.41.54.118/32"], + "webappDestinationAddresses": [ + "104.41.54.118/32", + "20.201.68.160/28", + "4.150.168.160/28" + ], "sccRelayDestinationAddresses": ["23.97.106.142/32"], "sccRelayDomains": ["tunnel.brazilsouth.azuredatabricks.net"], - "controlPlaneNatDestinationAddresses": ["191.232.53.223/32"], + "controlPlaneNatDestinationAddresses": [ + "191.232.53.223/32", + "20.206.205.232/29", + "20.201.127.40/29", + "191.233.243.72/29", + "20.206.144.56/29", + "191.233.243.64/29", + "20.206.205.224/29" + ], "extendedInfrastructureDestinationAddresses": ["20.197.222.144/28"], "logBlobStorageDomains": ["dblogprodbrazilsou.blob.core.windows.net."], "artifactBlobStoragePrimaryDomains": [ @@ -116,10 +176,22 @@ ] }, "canadacentral": { - "webappDestinationAddresses": ["13.71.184.74/32"], + "webappDestinationAddresses": [ + "13.71.184.74/32", + "20.220.50.240/28", + "4.150.168.160/28" + ], "sccRelayDestinationAddresses": ["13.88.249.244/32"], "sccRelayDomains": ["tunnel.canadacentral.azuredatabricks.net"], - "controlPlaneNatDestinationAddresses": ["40.85.223.25/32"], + "controlPlaneNatDestinationAddresses": [ + "40.85.223.25/32", + "4.229.241.184/29", + "20.151.153.184/29", + "4.239.251.152/29", + "20.151.145.208/29", + "4.239.251.160/29", + "4.229.241.192/29" + ], "extendedInfrastructureDestinationAddresses": ["52.139.4.160/28"], "logBlobStorageDomains": ["dblogprodcacentral.blob.core.windows.net"], "artifactBlobStoragePrimaryDomains": [ @@ -142,10 +214,22 @@ ] }, "canadaeast": { - "webappDestinationAddresses": ["13.71.184.74/32"], + "webappDestinationAddresses": [ + "13.71.184.74/32", + "20.220.99.176/28", + "4.150.168.160/28" + ], "sccRelayDestinationAddresses": ["13.88.249.244/32"], "sccRelayDomains": ["tunnel.canadacentral.azuredatabricks.net"], - "controlPlaneNatDestinationAddresses": ["40.85.223.25/32"], + "controlPlaneNatDestinationAddresses": [ + "40.85.223.25/32", + "4.229.241.184/29", + "20.151.153.184/29", + "4.239.251.152/29", + "20.151.145.208/29", + "4.239.251.160/29", + "4.229.241.192/29" + ], "extendedInfrastructureDestinationAddresses": ["52.139.4.160/28"], "logBlobStorageDomains": ["dblogprodcacentral.blob.core.windows.net"], "artifactBlobStoragePrimaryDomains": [ @@ -165,10 +249,22 @@ ] }, "centralindia": { - "webappDestinationAddresses": ["104.211.89.81/32"], + "webappDestinationAddresses": [ + "104.211.89.81/32", + "20.235.199.64/28", + "4.150.168.160/28" + ], "sccRelayDestinationAddresses": ["52.172.133.58/32"], "sccRelayDomains": ["tunnel.centralindia.azuredatabricks.net"], - "controlPlaneNatDestinationAddresses": ["104.211.101.14/32"], + "controlPlaneNatDestinationAddresses": [ + "104.211.101.14/32", + "20.244.88.56/29", + "98.70.76.16/29", + "20.198.25.0/29", + "98.70.75.40/29", + "20.198.9.224/29", + "98.70.91.64/29" + ], "extendedInfrastructureDestinationAddresses": ["20.193.246.208/28"], "logBlobStorageDomains": ["dblogprodcindia.blob.core.windows.net"], "artifactBlobStoragePrimaryDomains": [ @@ -191,7 +287,12 @@ ] }, "centralus": { - "webappDestinationAddresses": ["40.70.58.221/32", "20.37.156.209/32"], + "webappDestinationAddresses": [ + "40.70.58.221/32", + "20.37.156.209/32", + "4.249.192.240/28", + "4.150.168.160/28" + ], "sccRelayDestinationAddresses": ["13.86.58.215/32", "52.247.0.200/32"], "sccRelayDomains": [ "tunnel.eastus2.azuredatabricks.net", @@ -199,7 +300,19 @@ ], "controlPlaneNatDestinationAddresses": [ "23.101.152.95/32", - "20.37.156.208/32" + "20.37.156.208/32", + "52.180.139.48/29", + "172.202.121.240/29", + "20.186.233.208/29", + "74.249.107.232/29", + "20.161.82.48/29", + "20.161.68.208/29", + "4.150.177.120/29", + "52.165.98.248/29", + "20.15.235.192/29", + "20.161.81.88/29", + "20.161.68.200/29", + "68.154.4.136/29" ], "extendedInfrastructureDestinationAddresses": ["20.57.106.0/28"], "logBlobStorageDomains": [ @@ -322,10 +435,22 @@ }, "eastasia": { - "webappDestinationAddresses": ["52.187.145.107/32"], + "webappDestinationAddresses": [ + "20.189.106.192/32", + "20.239.211.144/28", + "4.150.168.160/28" + ], "sccRelayDestinationAddresses": ["102.37.41.3/32"], "sccRelayDomains": ["tunnel.southeastasia.azuredatabricks.net"], - "controlPlaneNatDestinationAddresses": ["52.187.0.85/32"], + "controlPlaneNatDestinationAddresses": [ + "20.189.106.194/32", + "20.2.226.184/29", + "20.2.234.144/29", + "52.184.83.208/29", + "20.205.24.128/29", + "20.189.126.232/29", + "20.6.233.184/29" + ], "extendedInfrastructureDestinationAddresses": ["20.195.104.64/28"], "logBlobStorageDomains": [ "dblogprodseasia.blob.core.windows.net", @@ -350,7 +475,9 @@ "webappDestinationAddresses": [ "40.70.58.221/32", "20.42.4.209/32", - "20.42.4.211/32" + "20.42.4.211/32", + "52.234.168.240/28", + "4.150.168.160/28" ], "sccRelayDestinationAddresses": ["52.247.0.200/32", "52.146.50.16/32"], "sccRelayDomains": [ @@ -360,7 +487,19 @@ "controlPlaneNatDestinationAddresses": [ "23.101.152.95/32", "20.42.4.208/32", - "20.42.4.210/32" + "20.42.4.210/32", + "57.151.106.192/29", + "57.151.124.96/29", + "57.151.82.88/29", + "74.249.107.232/29", + "20.161.82.48/29", + "20.161.68.208/29", + "57.151.124.56/29", + "57.151.84.240/29", + "172.203.186.112/29", + "20.161.81.88/29", + "20.161.68.200/29", + "68.154.4.136/29" ], "extendedInfrastructureDestinationAddresses": ["20.57.106.0/28"], "logBlobStorageDomains": [ @@ -399,7 +538,6 @@ "consolidated-eastus-prod-metastore-addl-2.mysql.database.azure.com", "consolidated-eastus-prod-metastore-addl-3.mysql.database.azure.com", "consolidated-eastus-prod-metastore-addl-4.mysql.database.azure.com", - "consolidated-eastusc2-prod-metastore-0.mysql.database.azure.com", "consolidated-eastusc3-prod-metastore-0.mysql.database.azure.com", "consolidated-eastusc3-prod-metastore-1.mysql.database.azure.com", "consolidated-eastusc3-prod-metastore-2.mysql.database.azure.com", @@ -407,15 +545,35 @@ ] }, "eastus2": { - "webappDestinationAddresses": ["40.70.58.221/32", "20.41.4.113/32"], + "webappDestinationAddresses": [ + "40.70.58.221/32", + "20.41.4.113/32", + "20.41.4.116/32", + "52.254.24.96/28", + "4.150.168.160/28" + ], "sccRelayDestinationAddresses": ["52.247.0.200/32", "20.186.83.56/32"], "sccRelayDomains": [ "tunnel.eastus2.azuredatabricks.net", - "tunnel.eastus2c2.azuredatabricks.net" + "tunnel.eastus2c2.azuredatabricks.net", + "tunnel.eastus2c3.azuredatabricks.net" ], "controlPlaneNatDestinationAddresses": [ "23.101.152.95/32", - "20.41.4.112/32" + "20.41.4.112/32", + "20.41.4.114/32", + "74.249.107.232/29", + "20.161.82.48/29", + "20.161.68.208/29", + "74.249.108.56/29", + "20.161.82.56/29", + "20.161.68.216/29", + "74.249.108.120/29", + "20.161.82.64/29", + "20.161.68.224/29", + "20.161.81.88/29", + "20.161.68.200/29", + "68.154.4.136/29" ], "extendedInfrastructureDestinationAddresses": ["20.57.106.0/28"], "logBlobStorageDomains": [ @@ -460,7 +618,6 @@ "consolidated-eastus2c3-prod-metastore-0.mysql.database.azure.com" ] }, - "eastus2euap": { "webappDestinationAddresses": [""], "sccRelayDestinationAddresses": [""], @@ -473,12 +630,15 @@ "eventHubEndpointDomains": [""], "metastoreDomains": [""] }, - "francecentral": { - "webappDestinationAddresses": ["40.89.168.225/32"], + "webappDestinationAddresses": [ + "40.89.168.225/32", + "20.19.113.192/28", + "4.150.168.160/28" + ], "sccRelayDestinationAddresses": ["51.103.18.111/32"], "sccRelayDomains": ["tunnel.francecentral.azuredatabricks.net"], - "controlPlaneNatDestinationAddresses": ["40.89.171.101/32"], + "controlPlaneNatDestinationAddresses": ["40.89.171.101/32", "98.66.170.152/29", "4.233.185.56/29", "20.19.35.8/29", "4.233.193.64/29", "20.19.34.168/29", "4.178.122.232/29"], "extendedInfrastructureDestinationAddresses": ["20.74.69.128/28"], "logBlobStorageDomains": ["dblogprodfrcentral.blob.core.windows.net"], "artifactBlobStoragePrimaryDomains": [ @@ -495,10 +655,14 @@ ] }, "germanywestcentral": { - "webappDestinationAddresses": ["20.52.93.41/32"], + "webappDestinationAddresses": [ + "20.52.93.41/32", + "98.67.225.0/28", + "4.150.168.160/28" + ], "sccRelayDestinationAddresses": ["20.52.93.40/32"], "sccRelayDomains": ["tunnel.germanywestcentral.azuredatabricks.net"], - "controlPlaneNatDestinationAddresses": ["20.52.93.42/32"], + "controlPlaneNatDestinationAddresses": ["20.52.93.42/32", "20.218.169.48/29", "98.67.186.40/29", "51.116.120.104/29", "98.67.186.32/29", "51.116.120.96/29", "20.218.169.40/29"], "extendedInfrastructureDestinationAddresses": ["20.52.93.40/29"], "logBlobStorageDomains": ["dblogprodgerwescen.blob.core.windows.net"], "artifactBlobStoragePrimaryDomains": [ @@ -515,10 +679,14 @@ ] }, "japaneast": { - "webappDestinationAddresses": ["52.246.160.72/32"], + "webappDestinationAddresses": [ + "52.246.160.72/32", + "4.189.194.16/28", + "4.150.168.160/28" + ], "sccRelayDestinationAddresses": ["20.46.121.76/32"], "sccRelayDomains": ["tunnel.japaneast.azuredatabricks.net"], - "controlPlaneNatDestinationAddresses": ["13.78.19.235/32"], + "controlPlaneNatDestinationAddresses": ["13.78.19.235/32", "20.210.195.88/29", "20.40.91.88/29", "4.216.211.0/29", "20.222.179.176/29", "20.243.34.72/29", "20.210.194.80/29"], "extendedInfrastructureDestinationAddresses": ["20.78.226.176/28"], "logBlobStorageDomains": ["dblogprodjapaneast.blob.core.windows.net"], "artifactBlobStoragePrimaryDomains": [ @@ -535,10 +703,14 @@ ] }, "japanwest": { - "webappDestinationAddresses": ["52.246.160.72/32"], + "webappDestinationAddresses": [ + "52.246.160.72/32", + "138.91.16.64/28", + "4.150.168.160/28" + ], "sccRelayDestinationAddresses": ["20.46.121.76/32"], "sccRelayDomains": ["tunnel.japaneast.azuredatabricks.net"], - "controlPlaneNatDestinationAddresses": ["13.78.19.235/32"], + "controlPlaneNatDestinationAddresses": ["13.78.19.235/32", "20.210.195.88/29", "20.40.91.88/29", "4.216.211.0/29", "20.222.179.176/29", "20.243.34.72/29", "20.210.194.80/29"], "extendedInfrastructureDestinationAddresses": ["20.78.226.176/28"], "logBlobStorageDomains": ["dblogprodjapaneast.blob.core.windows.net"], "artifactBlobStoragePrimaryDomains": [ @@ -555,10 +727,14 @@ ] }, "koreacentral": { - "webappDestinationAddresses": ["52.141.22.164/32"], + "webappDestinationAddresses": [ + "52.141.22.164/32", + "20.214.117.160/28", + "4.150.168.160/28" + ], "sccRelayDestinationAddresses": ["20.194.4.102/32"], "sccRelayDomains": ["tunnel.koreacentral.azuredatabricks.net"], - "controlPlaneNatDestinationAddresses": ["52.141.6.181/32"], + "controlPlaneNatDestinationAddresses": ["52.141.6.181/32", "20.39.199.24/29", "20.41.120.112/29", "52.141.26.136/29", "20.41.105.232/29", "52.141.26.120/29", "20.39.198.216/29"], "extendedInfrastructureDestinationAddresses": ["20.194.107.48/28"], "logBlobStorageDomains": ["dblogprodkoreacentral.blob.core.windows.net"], "artifactBlobStoragePrimaryDomains": [ @@ -575,15 +751,19 @@ ] }, "northcentralus": { - "webappDestinationAddresses": ["40.70.58.221/32", "40.80.188.0/32"], + "webappDestinationAddresses": [ + "40.70.58.221/32", + "40.80.188.0/32", + "172.214.168.112/28", + "4.150.168.160/28" + ], "sccRelayDestinationAddresses": ["52.247.0.200/32", "23.100.226.13/32"], "sccRelayDomains": [ "tunnel.eastus2.azuredatabricks.net", "tunnel.northcentralusc2.azuredatabricks.net" ], "controlPlaneNatDestinationAddresses": [ - "23.101.152.95/32", - "40.80.188.1/32" + "23.101.152.95/32", "40.80.188.1/32", "74.249.107.232/29", "20.161.82.48/29", "20.161.68.208/29", "52.240.210.16/28", "20.161.81.88/29", "20.161.68.200/29", "68.154.4.136/29" ], "extendedInfrastructureDestinationAddresses": ["20.57.106.0/28"], "logBlobStorageDomains": [ @@ -606,15 +786,19 @@ ] }, "northeurope": { - "webappDestinationAddresses": ["52.232.19.246/32", "20.38.84.81/32"], + "webappDestinationAddresses": [ + "52.232.19.246/32", + "20.38.84.81/32", + "4.209.165.0/28", + "4.150.168.160/28" + ], "sccRelayDestinationAddresses": ["23.97.201.41/32", "40.127.147.196/32"], "sccRelayDomains": [ "tunnel.westeurope.azuredatabricks.net", "tunnel.northeuropec2.azuredatabricks.net" ], "controlPlaneNatDestinationAddresses": [ - "23.100.0.135/32", - "20.38.84.80/32" + "23.100.0.135/32", "20.38.84.80/32", "98.71.25.152/29", "4.245.219.224/29", "20.123.51.88/29", "172.201.83.192/29", "172.211.2.248/29", "172.205.204.120/29", "4.245.227.208/29", "68.219.252.224/29", "74.234.43.80/29", "172.211.67.168/29", "172.201.244.200/29", "172.211.58.192/29" ], "extendedInfrastructureDestinationAddresses": ["20.73.215.48/28"], "logBlobStorageDomains": ["dblogprodwesteurope.blob.core.windows.net"], @@ -646,10 +830,22 @@ ] }, "norwayeast": { - "webappDestinationAddresses": ["51.120.40.120/32"], + "webappDestinationAddresses": [ + "51.120.40.120/32", + "20.100.214.208/28", + "4.150.168.160/28" + ], "sccRelayDestinationAddresses": ["51.120.40.122/32"], "sccRelayDomains": ["tunnel.norwayeast.azuredatabricks.net"], - "controlPlaneNatDestinationAddresses": ["51.120.40.121/32"], + "controlPlaneNatDestinationAddresses": [ + "51.120.40.121/32", + "51.120.246.120/29", + "4.235.113.232/29", + "51.120.8.208/29", + "20.251.169.232/29", + "51.120.8.32/29", + "51.120.246.96/29" + ], "extendedInfrastructureDestinationAddresses": ["51.13.86.224/28"], "logBlobStorageDomains": ["dblogprodnweast.blob.core.windows.net"], "artifactBlobStoragePrimaryDomains": [ @@ -665,11 +861,47 @@ "consolidated-norwayeast-prod-metastore-0.mysql.database.azure.com" ] }, + "qatarcentral": { + "webappDestinationAddresses": [ + "20.21.32.32/32", + "20.173.17.128/28", + "4.150.168.160/28" + ], + "sccRelayDestinationAddresses": [""], + "sccRelayDomains": ["tunnel.qatarcentral.azuredatabricks.net"], + "controlPlaneNatDestinationAddresses": [ + "20.21.32.34/32", + "20.173.105.240/29", + "20.173.97.224/29", + "20.173.50.48/29", + "20.21.129.232/29", + "20.173.50.40/29", + "20.173.105.232/29" + ], + "extendedInfrastructureDestinationAddresses": [""], + "logBlobStorageDomains": ["dblogprodqcentral.blob.core.windows.net"], + "artifactBlobStoragePrimaryDomains": [ + "dbartifactsprodqcentral.blob.core.windows.net" + ], + "artifactBlobStorageSecondaryDomains": [ + "dbartifactsprodwestus.blob.core.windows.net" + ], + "eventHubEndpointDomains": [ + "prod-qatarcentral-observabilityeventhubs.servicebus.windows.net" + ], + "metastoreDomains": [ + "consolidated-qatarcentral-prod-metastore-0.mysql.database.azure.com" + ] + }, "southafricanorth": { - "webappDestinationAddresses": ["102.133.224.24/32"], + "webappDestinationAddresses": [ + "102.133.224.24/32", + "20.87.238.224/28", + "4.150.168.160/28" + ], "sccRelayDestinationAddresses": ["102.37.41.3/32"], "sccRelayDomains": ["tunnel.southafricanorth.azuredatabricks.net"], - "controlPlaneNatDestinationAddresses": ["40.127.5.82/32"], + "controlPlaneNatDestinationAddresses": ["40.127.5.82/32", "40.127.8.136/29", "102.37.214.112/29", "20.164.16.120/29", "102.37.214.88/29", "20.164.16.48/29", "40.127.8.48/29"], "extendedInfrastructureDestinationAddresses": ["102.133.192.48/28"], "logBlobStorageDomains": ["dblogprodsafrican.blob.core.windows.net"], "artifactBlobStoragePrimaryDomains": [ @@ -686,12 +918,16 @@ ] }, "southcentralus": { - "webappDestinationAddresses": ["40.118.174.12/32", "40.119.9.208/32"], + "webappDestinationAddresses": [ + "40.118.174.12/32", + "40.119.9.208/32", + "52.185.215.96/28", + "4.150.168.160/28" + ], "sccRelayDestinationAddresses": ["40.86.167.110/32"], "sccRelayDomains": ["tunnel.westus.azuredatabricks.net"], "controlPlaneNatDestinationAddresses": [ - "40.83.178.242/32", - "40.119.9.209/32" + "40.83.178.242/32", "40.119.9.209/32", "20.65.137.224/29", "40.124.140.48/29", "4.151.11.48/29", "52.157.9.208/28" ], "extendedInfrastructureDestinationAddresses": ["13.91.84.96/28"], "logBlobStorageDomains": [ @@ -721,10 +957,22 @@ ] }, "southindia": { - "webappDestinationAddresses": ["104.211.89.81/32"], + "webappDestinationAddresses": [ + "104.211.89.81/32", + "52.140.35.224/28", + "4.150.168.160/28" + ], "sccRelayDestinationAddresses": ["52.172.133.58/32"], "sccRelayDomains": ["tunnel.centralindia.azuredatabricks.net"], - "controlPlaneNatDestinationAddresses": ["104.211.101.14/32"], + "controlPlaneNatDestinationAddresses": [ + "104.211.101.14/32", + "20.244.88.56/29", + "98.70.76.16/29", + "20.198.25.0/29", + "98.70.75.40/29", + "20.198.9.224/29", + "98.70.91.64/29" + ], "extendedInfrastructureDestinationAddresses": ["20.193.246.208/28"], "logBlobStorageDomains": ["dblogprodcindia.blob.core.windows.net"], "artifactBlobStoragePrimaryDomains": [ @@ -741,10 +989,14 @@ ] }, "southeastasia": { - "webappDestinationAddresses": ["52.187.145.107/32"], + "webappDestinationAddresses": [ + "52.187.145.107/32", + "20.247.134.0/28", + "4.150.168.160/28" + ], "sccRelayDestinationAddresses": ["52.230.27.216/32"], "sccRelayDomains": ["tunnel.southeastasia.azuredatabricks.net"], - "controlPlaneNatDestinationAddresses": ["52.187.0.85/32"], + "controlPlaneNatDestinationAddresses": ["52.187.0.85/32", "52.237.98.24/29", "20.6.34.248/29", "20.6.83.136/29", "172.188.66.64/29", "20.6.82.208/29", "172.188.123.176/29"], "extendedInfrastructureDestinationAddresses": ["20.195.104.64/28"], "logBlobStorageDomains": ["dblogprodseasia.blob.core.windows.net"], "artifactBlobStoragePrimaryDomains": [ @@ -765,10 +1017,14 @@ ] }, "swedencentral": { - "webappDestinationAddresses": ["51.12.41.16/32"], + "webappDestinationAddresses": [ + "51.12.41.16/32", + "4.225.21.224/28", + "4.150.168.160/28" + ], "sccRelayDestinationAddresses": ["51.12.41.18/32"], "sccRelayDomains": ["tunnel.swedencentral.azuredatabricks.net"], - "controlPlaneNatDestinationAddresses": ["51.12.41.17/32"], + "controlPlaneNatDestinationAddresses": ["51.12.41.17/32", "51.12.251.232/29", "20.240.203.248/29", "20.240.218.136/29", "172.160.244.40/29", "51.12.59.200/29", "51.12.250.248/29"], "extendedInfrastructureDestinationAddresses": ["20.91.164.16/28"], "logBlobStorageDomains": ["dblogprodswissnor.blob.core.windows.net"], "artifactBlobStoragePrimaryDomains": [ @@ -785,10 +1041,14 @@ ] }, "switzerlandnorth": { - "webappDestinationAddresses": ["51.107.48.120/32"], + "webappDestinationAddresses": [ + "51.107.48.120/32", + "20.208.63.112/28", + "4.150.168.160/28" + ], "sccRelayDestinationAddresses": ["51.107.203.195/32"], "sccRelayDomains": ["tunnel.switzerlandnorth.azuredatabricks.net"], - "controlPlaneNatDestinationAddresses": ["51.107.48.121/32"], + "controlPlaneNatDestinationAddresses": ["51.107.48.121/32", "20.250.160.184/29", "51.103.214.248/29", "51.107.12.216/29", "20.250.144.32/29", "51.107.12.208/29", "74.242.170.224/29"], "extendedInfrastructureDestinationAddresses": ["51.103.172.176/28"], "logBlobStorageDomains": [""], "artifactBlobStoragePrimaryDomains": [""], @@ -797,10 +1057,14 @@ "metastoreDomains": [""] }, "switzerlandwest": { - "webappDestinationAddresses": ["51.107.144.68/32"], + "webappDestinationAddresses": [ + "51.107.144.68/32", + "20.199.198.240/28", + "4.150.168.160/28" + ], "sccRelayDestinationAddresses": ["51.107.144.70/32"], "sccRelayDomains": ["tunnel.switzerlandwest.azuredatabricks.net"], - "controlPlaneNatDestinationAddresses": ["51.107.144.69/32"], + "controlPlaneNatDestinationAddresses": ["51.107.144.69/32", "20.199.199.32/28"], "extendedInfrastructureDestinationAddresses": ["51.107.233.80/28"], "logBlobStorageDomains": ["dblogprodswisswest.blob.core.windows.net"], "artifactBlobStoragePrimaryDomains": [ @@ -818,10 +1082,14 @@ ] }, "uaenorth": { - "webappDestinationAddresses": ["40.123.212.253/32"], + "webappDestinationAddresses": [ + "40.123.212.253/32", + "20.233.156.224/28", + "4.150.168.160/28" + ], "sccRelayDestinationAddresses": ["40.123.225.135/32"], "sccRelayDomains": ["tunnel.uaenorth.azuredatabricks.net"], - "controlPlaneNatDestinationAddresses": ["40.123.218.63/32"], + "controlPlaneNatDestinationAddresses": ["40.123.218.63/32", "20.174.35.40/29", "20.174.162.32/29", "20.46.193.88/29", "20.174.162.24/29", "20.46.193.40/29", "20.174.35.32/29"], "extendedInfrastructureDestinationAddresses": ["40.120.89.0/28"], "logBlobStorageDomains": ["dblogproduaenorth.blob.core.windows.net"], "artifactBlobStoragePrimaryDomains": [ @@ -844,10 +1112,14 @@ ] }, "uksouth": { - "webappDestinationAddresses": ["51.140.204.4/32"], + "webappDestinationAddresses": [ + "51.140.204.4/32", + "4.158.9.160/28", + "4.150.168.160/28" + ], "sccRelayDestinationAddresses": ["51.141.103.193/32"], "sccRelayDomains": ["tunnel.ukwest.azuredatabricks.net"], - "controlPlaneNatDestinationAddresses": ["51.140.203.27/32"], + "controlPlaneNatDestinationAddresses": ["51.140.203.27/32", "51.141.67.0/28"], "extendedInfrastructureDestinationAddresses": ["51.141.64.128/28"], "logBlobStorageDomains": ["dblogprodukwest.blob.core.windows.net"], "artifactBlobStoragePrimaryDomains": [ @@ -871,10 +1143,14 @@ ] }, "ukwest": { - "webappDestinationAddresses": ["51.140.204.4/32"], + "webappDestinationAddresses": [ + "51.140.204.4/32", + "20.254.183.0/28", + "4.150.168.160/28" + ], "sccRelayDestinationAddresses": ["51.141.103.193/32"], "sccRelayDomains": ["tunnel.ukwest.azuredatabricks.net"], - "controlPlaneNatDestinationAddresses": ["51.140.203.27/32"], + "controlPlaneNatDestinationAddresses": ["51.140.203.27/32", "51.141.67.0/28"], "extendedInfrastructureDestinationAddresses": ["51.141.64.128/28"], "logBlobStorageDomains": ["dblogprodukwest.blob.core.windows.net"], "artifactBlobStoragePrimaryDomains": [ @@ -937,10 +1213,14 @@ ] }, "westcentralus": { - "webappDestinationAddresses": ["52.150.136.68/32"], + "webappDestinationAddresses": [ + "52.150.136.68/32", + "13.78.197.48/28", + "4.150.168.160/28" + ], "sccRelayDestinationAddresses": ["52.150.136.70/32"], "sccRelayDomains": ["tunnel.westcentralus.azuredatabricks.net"], - "controlPlaneNatDestinationAddresses": ["52.150.136.69/32"], + "controlPlaneNatDestinationAddresses": ["52.150.136.69/32", "13.78.197.240/28"], "extendedInfrastructureDestinationAddresses": ["52.161.34.0/28"], "logBlobStorageDomains": ["dblogprodwcentus.blob.core.windows.net"], "artifactBlobStoragePrimaryDomains": [ @@ -957,15 +1237,19 @@ ] }, "westeurope": { - "webappDestinationAddresses": ["52.232.19.246/32", "40.74.30.80/32"], + "webappDestinationAddresses": [ + "52.232.19.246/32", + "40.74.30.80/32", + "20.103.219.240/28", + "4.150.168.160/28" + ], "sccRelayDestinationAddresses": ["23.97.201.41/32", "51.138.96.158/32"], "sccRelayDomains": [ "tunnel.westeurope.azuredatabricks.net", "tunnel.westeuropec2.azuredatabricks.net" ], "controlPlaneNatDestinationAddresses": [ - "23.100.0.135/32", - "40.74.30.81/32" + "23.100.0.135/32", "40.74.30.81/32", "172.201.83.192/29", "172.211.2.248/29", "172.205.204.120/29", "172.201.84.24/29", "172.211.3.72/29", "172.205.204.128/29", "172.211.67.168/29", "172.201.244.200/29", "172.211.58.192/29" ], "extendedInfrastructureDestinationAddresses": ["20.73.215.48/28"], "logBlobStorageDomains": ["dblogprodwesteurope.blob.core.windows.net"], @@ -1015,10 +1299,22 @@ ] }, "westindia": { - "webappDestinationAddresses": ["104.211.89.81/32"], + "webappDestinationAddresses": [ + "104.211.89.81/32", + "104.211.190.96/28", + "4.150.168.160/28" + ], "sccRelayDestinationAddresses": ["52.172.133.58/32"], "sccRelayDomains": ["tunnel.centralindia.azuredatabricks.net"], - "controlPlaneNatDestinationAddresses": ["104.211.101.14/32"], + "controlPlaneNatDestinationAddresses": [ + "104.211.101.14/32", + "20.244.88.56/29", + "98.70.76.16/29", + "20.198.25.0/29", + "98.70.75.40/29", + "20.198.9.224/29", + "98.70.91.64/29" + ], "extendedInfrastructureDestinationAddresses": ["20.193.246.208/28"], "logBlobStorageDomains": ["dblogprodcindia.blob.core.windows.net"], "artifactBlobStoragePrimaryDomains": [ @@ -1035,12 +1331,15 @@ ] }, "westus": { - "webappDestinationAddresses": ["40.118.174.12/32", "20.42.129.160/32"], + "webappDestinationAddresses": [ + "40.118.174.12/32", + "13.91.180.32/28", + "4.150.168.160/28" + ], "sccRelayDestinationAddresses": ["40.86.167.110/32"], "sccRelayDomains": ["tunnel.westus.azuredatabricks.net"], "controlPlaneNatDestinationAddresses": [ - "40.83.178.242/32", - "20.42.129.161/32" + "40.83.178.242/32", "52.157.9.208/28", "52.157.9.208/28" ], "extendedInfrastructureDestinationAddresses": ["13.91.84.96/28"], "logBlobStorageDomains": ["dblogprodwestus.blob.core.windows.net"], @@ -1078,10 +1377,15 @@ ] }, "westus2": { - "webappDestinationAddresses": ["40.118.174.12/32"], + "webappDestinationAddresses": [ + "40.118.174.12/32", + "20.42.129.160/32", + "20.59.51.96/28", + "4.150.168.160/28" + ], "sccRelayDestinationAddresses": ["40.86.167.110/32"], "sccRelayDomains": ["tunnel.westus.azuredatabricks.net"], - "controlPlaneNatDestinationAddresses": ["40.83.178.242/32"], + "controlPlaneNatDestinationAddresses": ["40.83.178.242/32", "4.149.240.248/29", "20.42.129.161/32", "4.242.19.240/29", "20.115.219.72/29"], "extendedInfrastructureDestinationAddresses": ["13.91.84.96/28"], "logBlobStorageDomains": [ "dblogprodwestus.blob.core.windows.net", @@ -1109,10 +1413,14 @@ ] }, "westus3": { - "webappDestinationAddresses": ["20.150.160.106"], + "webappDestinationAddresses": [ + "20.150.160.106", + "4.227.68.192/28", + "4.150.168.160/28" + ], "sccRelayDestinationAddresses": ["40.86.167.110/32"], "sccRelayDomains": ["tunnel.westus3.azuredatabricks.net"], - "controlPlaneNatDestinationAddresses": ["20.150.160.104"], + "controlPlaneNatDestinationAddresses": ["20.150.160.104", "20.163.31.104/29", "20.168.96.112/29", "20.163.3.56/29", "20.168.96.96/29", "20.163.2.88/29", "20.169.49.96/29"], "extendedInfrastructureDestinationAddresses": ["20.125.82.0/28"], "logBlobStorageDomains": ["dblogprodwestus3.blob.core.windows.net"], "artifactBlobStoragePrimaryDomains": [ diff --git a/templates/workspace_services/databricks/terraform/providers.tf b/templates/workspace_services/databricks/terraform/providers.tf index b3699a76da..e0fd9fc550 100644 --- a/templates/workspace_services/databricks/terraform/providers.tf +++ b/templates/workspace_services/databricks/terraform/providers.tf @@ -2,19 +2,19 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "=3.40.0" + version = "=3.108.0" } azapi = { source = "Azure/azapi" - version = "=1.1.0" + version = "=1.13.1" } databricks = { source = "databricks/databricks" - version = "=1.5.0" + version = "=1.48.0" } dns = { source = "hashicorp/dns" - version = "=3.2.3" + version = "=3.4.1" } } From fc4abe1e6fefa110a07ce70eb491fd241ac13ebd Mon Sep 17 00:00:00 2001 From: Marcus Robinson Date: Thu, 27 Jun 2024 12:24:20 +0100 Subject: [PATCH 45/79] Fix hash issue with builds (#4013) * Fix hash issue with builds * Update build.test.js --- .github/scripts/build.js | 6 ++++-- .github/scripts/build.test.js | 32 ++++++++++++++++++++------------ 2 files changed, 24 insertions(+), 14 deletions(-) diff --git a/.github/scripts/build.js b/.github/scripts/build.js index 9a144926ed..1014402991 100644 --- a/.github/scripts/build.js +++ b/.github/scripts/build.js @@ -5,6 +5,7 @@ // These tests can be run from the dev container using the run-tests.sh script // const { createHash } = require('crypto'); +const { create } = require('domain'); async function getCommandFromComment({ core, context, github }) { const commentUsername = context.payload.comment.user.login; @@ -292,11 +293,12 @@ function getRefIdForBranch(branchName) { return createShortHash(`refs/heads/${branchName}\n`); } function createShortHash(ref) { - const hash = createHash('sha2').update(ref, 'utf8').digest('hex') + const hash = createHash('sha512').update(ref, 'utf8').digest('hex'); return hash.substring(0, 8); } module.exports = { getCommandFromComment, - labelAsExternalIfAuthorDoesNotHaveWriteAccess + labelAsExternalIfAuthorDoesNotHaveWriteAccess, + createShortHash } diff --git a/.github/scripts/build.test.js b/.github/scripts/build.test.js index 73a5b0d632..5a9cd8456b 100644 --- a/.github/scripts/build.test.js +++ b/.github/scripts/build.test.js @@ -1,4 +1,4 @@ -const { getCommandFromComment, labelAsExternalIfAuthorDoesNotHaveWriteAccess } = require('./build.js') +const { getCommandFromComment, labelAsExternalIfAuthorDoesNotHaveWriteAccess, createShortHash } = require('./build.js') const { createGitHubContext, PR_NUMBER, outputFor, toHaveComment } = require('./test-helpers.js') expect.extend({ @@ -146,7 +146,7 @@ describe('getCommandFromComment', () => { owner: 'someOwner', repo: 'someRepo', issue_number: PR_NUMBER.UPSTREAM_NON_DOCS_CHANGES, - bodyMatcher: /Running tests: https:\/\/github.com\/someOwner\/someRepo\/actions\/runs\/11112222 \(with refid `cbce50da`\)/, + bodyMatcher: /Running tests: https:\/\/github.com\/someOwner\/someRepo\/actions\/runs\/11112222 \(with refid `291ae84f`\)/, }); }); }); @@ -326,7 +326,7 @@ describe('getCommandFromComment', () => { owner: 'someOwner', repo: 'someRepo', issue_number: PR_NUMBER.FORK_NON_DOCS_CHANGES, - bodyMatcher: /Running tests: https:\/\/github.com\/someOwner\/someRepo\/actions\/runs\/11112222 \(with refid `6db070b1`\)/, + bodyMatcher: /Running tests: https:\/\/github.com\/someOwner\/someRepo\/actions\/runs\/11112222 \(with refid `607c7437`\)/, }); }); }) @@ -355,7 +355,7 @@ describe('getCommandFromComment', () => { owner: 'someOwner', repo: 'someRepo', issue_number: PR_NUMBER.FORK_NON_DOCS_CHANGES, - bodyMatcher: /Running tests: https:\/\/github.com\/someOwner\/someRepo\/actions\/runs\/11112222 \(with refid `6db070b1`\)/, + bodyMatcher: /Running tests: https:\/\/github.com\/someOwner\/someRepo\/actions\/runs\/11112222 \(with refid `607c7437`\)/, }); }); }) @@ -381,7 +381,7 @@ describe('getCommandFromComment', () => { owner: 'someOwner', repo: 'someRepo', issue_number: PR_NUMBER.UPSTREAM_NON_DOCS_CHANGES, - bodyMatcher: /Running extended tests: https:\/\/github.com\/someOwner\/someRepo\/actions\/runs\/11112222 \(with refid `cbce50da`\)/, + bodyMatcher: /Running extended tests: https:\/\/github.com\/someOwner\/someRepo\/actions\/runs\/11112222 \(with refid `291ae84f`\)/, }); }); }); @@ -407,7 +407,7 @@ describe('getCommandFromComment', () => { owner: 'someOwner', repo: 'someRepo', issue_number: PR_NUMBER.UPSTREAM_NON_DOCS_CHANGES, - bodyMatcher: /Running extended AAD tests: https:\/\/github.com\/someOwner\/someRepo\/actions\/runs\/11112222 \(with refid `cbce50da`\)/, + bodyMatcher: /Running extended AAD tests: https:\/\/github.com\/someOwner\/someRepo\/actions\/runs\/11112222 \(with refid `291ae84f`\)/, }); }); }); @@ -433,7 +433,7 @@ describe('getCommandFromComment', () => { owner: 'someOwner', repo: 'someRepo', issue_number: PR_NUMBER.UPSTREAM_NON_DOCS_CHANGES, - bodyMatcher: /Running shared service tests: https:\/\/github.com\/someOwner\/someRepo\/actions\/runs\/11112222 \(with refid `cbce50da`\)/, + bodyMatcher: /Running shared service tests: https:\/\/github.com\/someOwner\/someRepo\/actions\/runs\/11112222 \(with refid `291ae84f`\)/, }); }); }); @@ -549,7 +549,7 @@ describe('getCommandFromComment', () => { owner: 'someOwner', repo: 'someRepo', issue_number: PR_NUMBER.FORK_NON_DOCS_CHANGES, - bodyMatcher: /Running extended tests: https:\/\/github.com\/someOwner\/someRepo\/actions\/runs\/11112222 \(with refid `6db070b1`\)/, + bodyMatcher: /Running extended tests: https:\/\/github.com\/someOwner\/someRepo\/actions\/runs\/11112222 \(with refid `607c7437`\)/, }); }); }) @@ -679,13 +679,13 @@ goes here`, }); test('should set prRefId output', async () => { - // Using a PR number of 123 should give a refid of 'cbce50da' + // Using a PR number of 123 should give a refid of '291ae84f' // Based on running `echo "refs/pull/123/merge" | shasum | cut -c1-8` (as per the original bash scripts) const context = createCommentContext({ pullRequestNumber: PR_NUMBER.UPSTREAM_NON_DOCS_CHANGES }); await getCommandFromComment({ core, context, github }); - expect(outputFor(mockCoreSetOutput, 'prRefId')).toBe('cbce50da'); + expect(outputFor(mockCoreSetOutput, 'prRefId')).toBe('291ae84f'); }); test('should not set branchRefId output for PR from forked repo', async () => { @@ -701,13 +701,13 @@ goes here`, test('should set branchRefId for PR from upstream repo', async () => { // Using PR 123 which is faked as a PR from the upstream repo - // The Using a PR number of 123 should give a refid of '71f7c907' + // The Using a PR number of 123 should give a refid of '6b751c8f' // Based on running `echo "refs/heads/pr-head-ref" | shasum | cut -c1-8` (as per the original bash scripts) const context = createCommentContext({ pullRequestNumber: PR_NUMBER.UPSTREAM_NON_DOCS_CHANGES }); await getCommandFromComment({ core, context, github }); - expect(outputFor(mockCoreSetOutput, 'branchRefId')).toBe('71f7c907'); + expect(outputFor(mockCoreSetOutput, 'branchRefId')).toBe('6b751c8f'); }); test('should set prHeadSha output', async () => { @@ -770,4 +770,12 @@ goes here`, }); }); + describe('createShortHash creates a short hash from a long hash', () => { + test('should return the first 8 characters of the hash', () => { + const longHash = '0123456789abcdef'; + const shortHash = '1c043fbe'; + expect(createShortHash(longHash)).toBe(shortHash); + } + ); + }); }); From 9e49ed69d1ca074f7cae54647bd16001e59644a8 Mon Sep 17 00:00:00 2001 From: Tim Allen Date: Fri, 28 Jun 2024 14:45:40 +0100 Subject: [PATCH 46/79] Release v0.18 (#4016) * update release.md * spelling * update changelog * moved to different branch * Databricks ips (#3964) * Fix hash issue with builds (#4013) * Fix hash issue with builds * Update build.test.js --------- Co-authored-by: Marcus Robinson --- CHANGELOG.md | 44 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d24a717e90..b9fc942a5e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,17 @@ -## 0.18.0 (Unreleased) +## 0.19.0 (Unreleased) + +**BREAKING CHANGES & MIGRATIONS**: + +FEATURES: + +ENHANCEMENTS: + +BUG FIXES: + +COMPONENTS: + +## 0.18.0 **BREAKING CHANGES & MIGRATIONS**: * Update Core Terraform Provider versions ([#3919](https://github.com/microsoft/AzureTRE/issues/3919)) @@ -30,6 +42,36 @@ BUG FIXES: * Add lifecycle rule to the Gitea Shared Service template for the MySQL resource to stop it recreating on `update` ([#4006](https://github.com/microsoft/AzureTRE/issues/4006)) COMPONENTS: +| name | version | +| ----- | ----- | +| devops | 0.5.1 | +| core | 0.10.1 | +| ui | 0.5.24 | +| tre-service-guacamole-linuxvm | 1.0.0 | +| tre-service-guacamole-import-reviewvm | 0.2.8 | +| tre-service-guacamole-export-reviewvm | 0.1.8 | +| tre-service-guacamole-windowsvm | 1.0.0 | +| tre-service-guacamole | 0.10.7 | +| tre-service-databricks | 1.0.3 | +| tre-service-mlflow | 0.7.7 | +| tre-service-innereye | 0.6.4 | +| tre-workspace-service-ohdsi | 0.2.4 | +| tre-workspace-service-gitea | 1.0.2 | +| tre-workspace-service-mysql | 1.0.2 | +| tre-user-resource-aml-compute-instance | 0.5.7 | +| tre-service-azureml | 0.8.10 | +| tre-workspace-service-health | 0.2.5 | +| tre-workspace-airlock-import-review | 0.12.16 | +| tre-workspace-unrestricted | 0.11.4 | +| tre-workspace-base | 1.5.3 | +| tre-shared-service-cyclecloud | 0.5.5 | +| tre-shared-service-databricks-private-auth | 0.1.5 | +| tre-shared-service-sonatype-nexus | 3.0.0 | +| tre-shared-service-admin-vm | 0.4.3 | +| tre-shared-service-firewall | 1.2.0 | +| tre-shared-service-gitea | 1.0.1 | +| tre-shared-service-certs | 0.5.1 | +| tre-shared-service-airlock-notifier | 0.9.0 | ## 0.17.0 From 5778fc93221fcb89ab64268be98703ba9d86c705 Mon Sep 17 00:00:00 2001 From: Jonny Rylands Date: Tue, 9 Jul 2024 16:26:54 +0100 Subject: [PATCH 47/79] Support custom domain on SSL certificate and App Registration redirect (#4014) * Support custom domain on SSL certificate and App Registration redirect * Update CHANGELOG.md * Update core version number * Custom domain documentation * Fix docs formatting * Update CHANGELOG.md * Print certificate FQDN to console in letsencrypt.sh --- .github/workflows/lets_encrypt.yml | 1 + CHANGELOG.md | 1 + config.sample.yaml | 9 ++++-- config_schema.json | 9 +++--- core/terraform/scripts/letsencrypt.sh | 11 ++++++-- core/version.txt | 2 +- devops/scripts/aad/create_api_application.sh | 11 ++++++++ devops/scripts/create_aad_assets.sh | 3 +- docs/tre-admins/custom-domain.md | 28 +++++++++++++++++++ docs/tre-admins/environment-variables.md | 2 +- .../cicd-pre-deployment-steps.md | 2 +- .../setup-instructions/workflows.md | 1 + mkdocs.yml | 1 + 13 files changed, 67 insertions(+), 14 deletions(-) create mode 100644 docs/tre-admins/custom-domain.md diff --git a/.github/workflows/lets_encrypt.yml b/.github/workflows/lets_encrypt.yml index 6a0712ab15..875ce050db 100644 --- a/.github/workflows/lets_encrypt.yml +++ b/.github/workflows/lets_encrypt.yml @@ -51,6 +51,7 @@ jobs: TF_VAR_terraform_state_container_name: ${{ secrets.TERRAFORM_STATE_CONTAINER_NAME || 'tfstate' }} TF_VAR_mgmt_resource_group_name: ${{ secrets.MGMT_RESOURCE_GROUP_NAME }} TF_VAR_mgmt_storage_account_name: ${{ secrets.MGMT_STORAGE_ACCOUNT_NAME }} + CUSTOM_DOMAIN: ${{ secrets.CUSTOM_DOMAIN }} run: | sudo apt-get install -y python3 python3-venv libaugeas0 \ && python3 -m venv /opt/certbot/ \ diff --git a/CHANGELOG.md b/CHANGELOG.md index b9fc942a5e..caba3ef5d3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ FEATURES: ENHANCEMENTS: +* Ability to host TRE on a custom domain ([#4014](https://github.com/microsoft/AzureTRE/pull/4014)) BUG FIXES: diff --git a/config.sample.yaml b/config.sample.yaml index 21e757fe89..77ce40d68c 100644 --- a/config.sample.yaml +++ b/config.sample.yaml @@ -42,11 +42,10 @@ tre: # The TRE Web UI is deployed by default. # Uncomment the following to disable deployment of the Web UI. # deploy_ui: false - # If you want to use TRE_URL to point to your local TRE API instance or be configured to another cloud provider - # uncomment and set this variable - # tre_url: __CHANGE_ME__ firewall_sku: Standard + # Uncomment to deploy to a custom domain + # custom_domain: __CHANGE_ME__ authentication: aad_tenant_id: __CHANGE_ME__ # Setting AUTO_WORKSPACE_APP_REGISTRATION to false will: @@ -83,3 +82,7 @@ developer_settings: # Used by the API and Resource processor application to change log level # Can be "ERROR", "WARNING", "INFO", "DEBUG" # logging_level: "INFO" + +# If you want to use TRE_URL to point to your local TRE API instance or be configured to another cloud provider +# uncomment and set this variable +# tre_url: __CHANGE_ME__ diff --git a/config_schema.json b/config_schema.json index d16ff8f775..f388319883 100644 --- a/config_schema.json +++ b/config_schema.json @@ -85,14 +85,13 @@ "description": "Determines whether the Swagger interface for the API will be available.", "type": "boolean" }, - "tre_url": { - "description": "Url for the TRE environment.", - "type": "string", - "pattern": "^https?://" - }, "firewall_sku": { "description": "SKU of the Azure Firewall.", "type": "string" + }, + "custom_domain": { + "description": "Custom domain name.", + "type": "string" } } }, diff --git a/core/terraform/scripts/letsencrypt.sh b/core/terraform/scripts/letsencrypt.sh index 937586ba53..cb1e68f4a1 100755 --- a/core/terraform/scripts/letsencrypt.sh +++ b/core/terraform/scripts/letsencrypt.sh @@ -92,6 +92,13 @@ ledir=$(pwd)/letsencrypt mkdir -p "${ledir}/logs" +CERT_FQDN=$FQDN +if [[ -n "$CUSTOM_DOMAIN" ]]; then + CERT_FQDN=$CUSTOM_DOMAIN +fi + +echo "Requesting certificate for $CERT_FQDN..." + # Initiate the ACME challange /opt/certbot/bin/certbot certonly \ --config-dir "${ledir}" \ @@ -101,13 +108,13 @@ mkdir -p "${ledir}/logs" --preferred-challenges=http \ --manual-auth-hook "${script_dir}"/auth-hook.sh \ --manual-cleanup-hook "${script_dir}"/cleanup-hook.sh \ - --domain "$FQDN" \ + --domain "$CERT_FQDN" \ --non-interactive \ --agree-tos \ --register-unsafely-without-email # Convert the generated certificate to a .pfx -CERT_DIR="${ledir}/live/$FQDN" +CERT_DIR="${ledir}/live/$CERT_FQDN" CERT_PASSWORD=$(openssl rand -base64 30) openssl pkcs12 -export \ -inkey "${CERT_DIR}/privkey.pem" \ diff --git a/core/version.txt b/core/version.txt index 1f4c4d43b2..17c1a6260b 100644 --- a/core/version.txt +++ b/core/version.txt @@ -1 +1 @@ -__version__ = "0.10.1" +__version__ = "0.10.2" diff --git a/devops/scripts/aad/create_api_application.sh b/devops/scripts/aad/create_api_application.sh index bfc18ebb27..024b086bc7 100755 --- a/devops/scripts/aad/create_api_application.sh +++ b/devops/scripts/aad/create_api_application.sh @@ -22,6 +22,7 @@ Options: Requires directory admin privileges to the Azure AD in question. -t,--automation-clientid Optional, when --workspace is specified the client ID of the automation account can be added to the TRE workspace. -r,--reset-password Optional, switch to automatically reset the password. Default 0 + -d,--custom-domain Optional, custom domain, used to construct auth redirection URLs (in addition to --tre-url) Examples: 1. $0 -n TRE -r https://mytre.region.cloudapp.azure.com -a @@ -58,6 +59,7 @@ declare automationAppId="" declare automationAppObjectId="" declare msGraphUri="" declare spPassword="" +declare customDomain="" # Initialize parameters specified from command line while [[ $# -gt 0 ]]; do @@ -82,6 +84,10 @@ while [[ $# -gt 0 ]]; do resetPassword=$2 shift 2 ;; + -d|--custom-domain) + customDomain=$2 + shift 2 + ;; *) echo "Invalid option: $1." show_usage @@ -244,6 +250,11 @@ if [[ -n ${treUrl} ]]; then echo "Adding reply/redirect URL \"${treUrl}\" to \"${appName}\"" redirectUris="${redirectUris}, \"${treUrl}\", \"${treUrl}/api/docs/oauth2-redirect\"" fi +if [[ -n ${customDomain} ]]; then + customDomainUrl="https://${customDomain}" + echo "Adding reply/redirect URL \"${customDomainUrl}\" to \"${appName}\"" + redirectUris="${redirectUris}, \"${customDomainUrl}\", \"${customDomainUrl}/api/docs/oauth2-redirect\"" +fi uxAppDefinition=$(jq -c . << JSON { diff --git a/devops/scripts/create_aad_assets.sh b/devops/scripts/create_aad_assets.sh index d034e1be40..06584a9fb5 100755 --- a/devops/scripts/create_aad_assets.sh +++ b/devops/scripts/create_aad_assets.sh @@ -55,7 +55,8 @@ fi --name "${TRE_ID}" \ --tre-url "${TRE_URL}" \ --admin-consent --automation-clientid "${TEST_ACCOUNT_CLIENT_ID}" \ - --reset-password $RESET_PASSWORDS + --reset-password $RESET_PASSWORDS \ + --custom-domain "${CUSTOM_DOMAIN}" if [ "${AUTO_WORKSPACE_APP_REGISTRATION:=false}" == false ]; then # Load the new values back in diff --git a/docs/tre-admins/custom-domain.md b/docs/tre-admins/custom-domain.md new file mode 100644 index 0000000000..8fee96effc --- /dev/null +++ b/docs/tre-admins/custom-domain.md @@ -0,0 +1,28 @@ +# Custom domain name + +In order to use a custom domain name with the Azure TRE: + +1. Register a domain name, and create a DNS entry for the domain name pointing to the FQDN of the Azure App Gateway, e.g. `mytre-domain-name.org. CNAME mytre.region.cloudapp.azure.com.` + +2. Set the domain name in the `CUSTOM_DOMAIN` variable in `config.yaml` or create a GitHub Actions secret, depending on your deployment method. + +3. Update the *TRE UX* App Registration redirect URIs: + + a. If you haven't deployed your TRE yet, this is done automatically for you using the `make auth` command. Refer to the setup instructions to deploy your TRE. + + b. If your TRE has already been deployed, manually add the following redirect URIs in Entra ID > App Registrations > *TRE_ID UX* > Authentication > Single-page application Redirect URIs: + +```text + https://mytre-domain-name.org + https://mytre-domain-name.org/api/docs/oauth2-redirect +``` + +4. Generate an SSL certificate for the TRE's new domain name: + +```bash + make letsencrypt +``` + +## Limitations + +The method above allows a custom domain name to be used to access the Azure TRE's portal and Swagger UI. It does not configure the custom domain name for Guacamole instances, or services available within the TRE network such as Gitea, or Sonatype Nexus. diff --git a/docs/tre-admins/environment-variables.md b/docs/tre-admins/environment-variables.md index 25f3e73751..739d438e17 100644 --- a/docs/tre-admins/environment-variables.md +++ b/docs/tre-admins/environment-variables.md @@ -40,7 +40,7 @@ | `WORKSPACE_APP_SERVICE_PLAN_SKU` | Optional. The SKU used for AppService plan used in E2E tests unless otherwise specified. Default value is `P1v2`. | | `RESOURCE_PROCESSOR_NUMBER_PROCESSES_PER_INSTANCE` | Optional. The number of processes to instantiate when the Resource Processor starts. Equates to the number of parallel deployment operations possible in your TRE. Defaults to `5`. | | `FIREWALL_SKU` | Optional. The SKU of the Azure Firewall instance. Default value is `Standard`. Allowed values [`Basic`, `Standard`, `Premium`]. See [Azure Firewall SKU feature comparison](https://learn.microsoft.com/en-us/azure/firewall/choose-firewall-sku). | - +| `CUSTOM_DOMAIN` | Optional. Custom domain name to access the Azure TRE portal. See [Custom domain name](custom-domain.md). | ## For authentication in `/config.yaml` diff --git a/docs/tre-admins/setup-instructions/cicd-pre-deployment-steps.md b/docs/tre-admins/setup-instructions/cicd-pre-deployment-steps.md index af61f035f7..b9ddc041c0 100644 --- a/docs/tre-admins/setup-instructions/cicd-pre-deployment-steps.md +++ b/docs/tre-admins/setup-instructions/cicd-pre-deployment-steps.md @@ -84,7 +84,7 @@ Configure the following **variables** in your github environment: | `RESOURCE_PROCESSOR_NUMBER_PROCESSES_PER_INSTANCE` | Optional. The number of processes to instantiate when the Resource Processor starts. Equates to the number of parallel deployment operations possible in your TRE. Defaults to `5`. | | `ENABLE_SWAGGER` | Optional. Determines whether the Swagger interface for the API will be available. Default value is `false`. | | `FIREWALL_SKU` | Optional. The SKU of the Azure Firewall instance. Default value is `Standard`. Allowed values [`Basic`, `Standard`, `Premium`]. See [Azure Firewall SKU feature comparison](https://learn.microsoft.com/en-us/azure/firewall/choose-firewall-sku). | - +| `CUSTOM_DOMAIN` | Optional. Custom domain name to access the Azure TRE portal. See [Custom domain name](../custom-domain.md). | ### Configure Authentication Secrets diff --git a/docs/tre-admins/setup-instructions/workflows.md b/docs/tre-admins/setup-instructions/workflows.md index a06ccf46c6..37dfb97dc1 100644 --- a/docs/tre-admins/setup-instructions/workflows.md +++ b/docs/tre-admins/setup-instructions/workflows.md @@ -127,6 +127,7 @@ Configure additional secrets used in the deployment workflow: | `MGMT_RESOURCE_GROUP_NAME` | The name of the shared resource group for all Azure TRE core resources. | | `MGMT_STORAGE_ACCOUNT_NAME` | The name of the storage account to hold the Terraform state and other deployment artifacts. E.g. `mystorageaccount`. | | `ACR_NAME` | A globally unique name for the Azure Container Registry (ACR) that will be created to store deployment images. | +| `CUSTOM_DOMAIN` | Optional. Custom domain name to access the Azure TRE portal. See [Custom domain name](../custom-domain.md). | ### Configure repository/environment variables diff --git a/mkdocs.yml b/mkdocs.yml index 34047b9fb4..e2b9e8d73f 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -132,6 +132,7 @@ nav: - Upgrading Resources Version: tre-admins/upgrading-resources.md - Configuring Airlock Reviews: tre-admins/configure-airlock-review.md - Supported Clouds: tre-admins/supported-clouds.md + - Custom Domain Name: tre-admins/custom-domain.md - Development: # Docs related to the developing code for the AzureTRE - Local Development: using-tre/local-development/local-development.md From 9d0bf319e5eed1b5ae4ec055917adc98ce6651da Mon Sep 17 00:00:00 2001 From: Tim Allen Date: Fri, 12 Jul 2024 23:03:54 +0100 Subject: [PATCH 48/79] Add user case studies to docs (#4025) --- CHANGELOG.md | 1 + docs/azure-tre-overview/case-studies.md | 20 ++++++++++++++++++++ mkdocs.yml | 2 ++ 3 files changed, 23 insertions(+) create mode 100644 docs/azure-tre-overview/case-studies.md diff --git a/CHANGELOG.md b/CHANGELOG.md index caba3ef5d3..a860ebe024 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ FEATURES: ENHANCEMENTS: +* Add Case Study Docs ([#1366](https://github.com/microsoft/AzureTRE/issues/1366)) * Ability to host TRE on a custom domain ([#4014](https://github.com/microsoft/AzureTRE/pull/4014)) BUG FIXES: diff --git a/docs/azure-tre-overview/case-studies.md b/docs/azure-tre-overview/case-studies.md new file mode 100644 index 0000000000..d95d8be1d0 --- /dev/null +++ b/docs/azure-tre-overview/case-studies.md @@ -0,0 +1,20 @@ +# Case Studies + +## CloudKubed and Imperial College London +Imperial College London partnered with CloudKubed to address the increasing demands for scalable and centralised research solutions. The challenge was to enhance project visibility, streamline end-to-end research, and improve the management of research projects. CloudKubed implemented a cloud-based Azure Trusted Research Environment (TRE) aligned with Imperial’s strategy and needs. +This TRE integrated approval processes and provided a secure, compliant environment for research. The outcome allowed Imperial to efficiently provision workspaces, facilitate access to research tools, and streamline the entire research process. The partnership significantly improved the efficiency of research operations and compliance with data security measures. + +Click [here]("https://www.cloudkubed.com/case-studies/imperial-college-london-trusted-research-environment/") to see the full case study. + +## Building the Trusted Research Environment with Azure Databricks +The importance of secure and scalable data environments in healthcare research has grown, particularly highlighted by the COVID-19 pandemic. The Trusted Research Environments (TREs) enable secure collaboration on sensitive data while maintaining patient privacy. Azure Databricks enhances TREs by offering scalable, secure, and flexible data processing capabilities. +For example, Providence Health used Azure Databricks to reduce hospital overcrowding and improve patient care by leveraging real-time data. The integration of Azure Databricks into the Azure TRE blueprint allows researchers to perform complex data analysis securely, promoting innovative research and improved healthcare outcomes. + +Click [here]("https://www.databricks.com/blog/2023/03/27/trusted-research-environments-health-and-life-sciences.html") to see the full case study. + +## Data Saves Lives: Lessons to Enable Healthcare Research by PA Consulting +The UK Government's investment in secure data environments (SDEs) aims to make health data more accessible for research, enhancing patient outcomes and accelerating life sciences research. +Key lessons from implementing SDEs include leveraging cloud technologies for scalability, publicising access and pricing to facilitate research, and improving communication to drive public consent. Establishing clear data roles and shared services, building trust through transparency, and starting small to scale effectively are critical for success. +These steps ensure that health data can be used ethically and efficiently, transforming care and services in the UK. + +Click [here]("https://www.paconsulting.com/insights/data-saves-lives-lessons-to-enable-healthcare-research") to see the full case study. diff --git a/mkdocs.yml b/mkdocs.yml index e2b9e8d73f..dbbdc922cf 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -55,6 +55,7 @@ nav: - Airlock: azure-tre-overview/airlock.md - Cost Reporting: azure-tre-overview/cost-reporting.md - Terms and Definitions: using-tre/terms-definitions.md + - Case Studies: azure-tre-overview/case-studies.md # - Compliance: azure-tre-overview/compliance-info.md - QuickStart: # Setup steps for anyone performing an initial deployment of the AzureTRE for eval purposes @@ -97,6 +98,7 @@ nav: - Health Services: tre-templates/workspace-services/health_services.md - Azure Databricks: tre-templates/workspace-services/databricks.md - OHDSI: tre-templates/workspace-services/ohdsi.md + - MySQL: tre-templates/workspace-services/mysql.md - Shared Services: - Gitea (Source Mirror): tre-templates/shared-services/gitea.md - Nexus (Package Mirror): tre-templates/shared-services/nexus.md From 43eb846c726073d454f8c0e71a767e771c58e7d1 Mon Sep 17 00:00:00 2001 From: Jonny Rylands Date: Mon, 15 Jul 2024 15:43:34 +0100 Subject: [PATCH 49/79] Azure SQL Workspace Service (#3970) * Azure SQL Workspace Service - New Azure SQL workspace service, based on existing MySQL workspace - TRE Core changes: - Add Azure SQL privatelink DNS zone to core terraform - Base workspace changes: - Add Azure SQL privatelink DNS zone virtual network link to base workspace - Documentation * Update CHANGELOG.md * Fix lint issues * Add #tflint-ignore directive until a new release is created on microsoft/terraform-azurerm-environment-configuration * Pin 0.5.0 version to https://github.com/microsoft/terraform-azurerm-environment-configuration.git * Update CHANGELOG.md * Update terraform versions --- .github/workflows/deploy_tre_reusable.yml | 4 + CHANGELOG.md | 1 + core/terraform/dns_zones_non_core.tf | 11 ++ core/terraform/locals.tf | 1 + core/terraform/main.tf | 2 +- core/version.txt | 2 +- .../workspace-services/azuresql.md | 54 ++++++++ e2e_tests/resources/strings.py | 1 + e2e_tests/test_workspace_services.py | 1 + mkdocs.yml | 1 + .../workspace_services/azuresql/.dockerignore | 7 + .../workspace_services/azuresql/.env.sample | 5 + .../workspace_services/azuresql/.gitignore | 1 + .../azuresql/Dockerfile.tmpl | 15 +++ .../azuresql/parameters.json | 68 ++++++++++ .../workspace_services/azuresql/porter.yaml | 121 ++++++++++++++++++ .../azuresql/template_schema.json | 39 ++++++ .../azuresql/terraform/.terraform.lock.hcl | 42 ++++++ .../azuresql/terraform/azuresql.tf | 65 ++++++++++ .../azuresql/terraform/locals.tf | 35 +++++ .../azuresql/terraform/main.tf | 63 +++++++++ .../azuresql/terraform/outputs.tf | 3 + .../azuresql/terraform/variables.tf | 32 +++++ templates/workspaces/base/porter.yaml | 2 +- .../workspaces/base/terraform/network/data.tf | 5 + .../base/terraform/network/network.tf | 2 +- .../base/terraform/network/zone_links.tf | 10 ++ 27 files changed, 589 insertions(+), 4 deletions(-) create mode 100644 docs/tre-templates/workspace-services/azuresql.md create mode 100644 templates/workspace_services/azuresql/.dockerignore create mode 100644 templates/workspace_services/azuresql/.env.sample create mode 100644 templates/workspace_services/azuresql/.gitignore create mode 100644 templates/workspace_services/azuresql/Dockerfile.tmpl create mode 100644 templates/workspace_services/azuresql/parameters.json create mode 100644 templates/workspace_services/azuresql/porter.yaml create mode 100644 templates/workspace_services/azuresql/template_schema.json create mode 100644 templates/workspace_services/azuresql/terraform/.terraform.lock.hcl create mode 100644 templates/workspace_services/azuresql/terraform/azuresql.tf create mode 100644 templates/workspace_services/azuresql/terraform/locals.tf create mode 100644 templates/workspace_services/azuresql/terraform/main.tf create mode 100644 templates/workspace_services/azuresql/terraform/outputs.tf create mode 100644 templates/workspace_services/azuresql/terraform/variables.tf diff --git a/.github/workflows/deploy_tre_reusable.yml b/.github/workflows/deploy_tre_reusable.yml index 4b43636ab6..8c022360da 100644 --- a/.github/workflows/deploy_tre_reusable.yml +++ b/.github/workflows/deploy_tre_reusable.yml @@ -399,6 +399,8 @@ jobs: BUNDLE_DIR: "./templates/workspace_services/databricks"} - {BUNDLE_TYPE: "workspace_service", BUNDLE_DIR: "./templates/workspace_services/ohdsi"} + - {BUNDLE_TYPE: "workspace_service", + BUNDLE_DIR: "./templates/workspace_services/azuresql"} - {BUNDLE_TYPE: "user_resource", BUNDLE_DIR: "./templates/workspace_services/guacamole/user_resources/guacamole-azure-windowsvm"} - {BUNDLE_TYPE: "user_resource", @@ -558,6 +560,8 @@ jobs: BUNDLE_DIR: "./templates/workspace_services/databricks"} - {BUNDLE_TYPE: "workspace_service", BUNDLE_DIR: "./templates/workspace_services/ohdsi"} + - {BUNDLE_TYPE: "workspace_service", + BUNDLE_DIR: "./templates/workspace_services/azuresql"} environment: ${{ inputs.environmentName }} steps: diff --git a/CHANGELOG.md b/CHANGELOG.md index a860ebe024..904fda7598 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ **BREAKING CHANGES & MIGRATIONS**: FEATURES: +* Azure SQL Workspace Service ([#3969](https://github.com/microsoft/AzureTRE/issues/3969)) ENHANCEMENTS: * Add Case Study Docs ([#1366](https://github.com/microsoft/AzureTRE/issues/1366)) diff --git a/core/terraform/dns_zones_non_core.tf b/core/terraform/dns_zones_non_core.tf index 882767a1ae..d2b044b349 100644 --- a/core/terraform/dns_zones_non_core.tf +++ b/core/terraform/dns_zones_non_core.tf @@ -21,6 +21,17 @@ resource "azurerm_private_dns_zone_virtual_network_link" "mysql" { lifecycle { ignore_changes = [tags] } } +# since shared services are in the core network, their dns link could exist once and must be defined here. +resource "azurerm_private_dns_zone_virtual_network_link" "azuresql" { + resource_group_name = azurerm_resource_group.core.name + virtual_network_id = module.network.core_vnet_id + private_dns_zone_name = azurerm_private_dns_zone.non_core["privatelink.database.windows.net"].name + name = azurerm_private_dns_zone.non_core["privatelink.database.windows.net"].name + registration_enabled = false + tags = local.tre_core_tags + lifecycle { ignore_changes = [tags] } +} + # Once the deployment of the app gateway is complete, we can proceed to include the required DNS zone for Nexus, which is dependent on the FQDN of the app gateway. resource "azurerm_private_dns_zone" "nexus" { name = "nexus-${module.appgateway.app_gateway_fqdn}" diff --git a/core/terraform/locals.tf b/core/terraform/locals.tf index 97608ad1e1..76882f8a51 100644 --- a/core/terraform/locals.tf +++ b/core/terraform/locals.tf @@ -32,6 +32,7 @@ locals { "privatelink.notebooks.azure.net", "privatelink.postgres.database.azure.com", "privatelink.mysql.database.azure.com", + "privatelink.database.windows.net", "privatelink.azuredatabricks.net" ]) diff --git a/core/terraform/main.tf b/core/terraform/main.tf index 3a102b292f..4e8fa6932f 100644 --- a/core/terraform/main.tf +++ b/core/terraform/main.tf @@ -179,6 +179,6 @@ module "resource_processor_vmss_porter" { } module "terraform_azurerm_environment_configuration" { - source = "git::https://github.com/microsoft/terraform-azurerm-environment-configuration.git?ref=0.2.0" + source = "git::https://github.com/microsoft/terraform-azurerm-environment-configuration.git?ref=0.5.0" arm_environment = var.arm_environment } diff --git a/core/version.txt b/core/version.txt index 17c1a6260b..aa87fd3bff 100644 --- a/core/version.txt +++ b/core/version.txt @@ -1 +1 @@ -__version__ = "0.10.2" +__version__ = "0.10.3" \ No newline at end of file diff --git a/docs/tre-templates/workspace-services/azuresql.md b/docs/tre-templates/workspace-services/azuresql.md new file mode 100644 index 0000000000..d815bf2fe6 --- /dev/null +++ b/docs/tre-templates/workspace-services/azuresql.md @@ -0,0 +1,54 @@ +# Azure SQL Workspace Service + +See: [Azure SQL Database](https://learn.microsoft.com/en-us/azure/azure-sql/database) + +## Prerequisites + +- The base workspace deployed, or a workspace derived from the base workspace + +- The Azure SQL workspace service container image published to your TRE: + + `make workspace_service_bundle BUNDLE=azuresql` + +- Guacamole, with a VM containing SQL Server Management Studio or Azure Data Studio in order to connect - the Azure Data Science VM template contains both of these + + +## Authentication + +- Server name: Shown on the details page of the service in the Azure TRE portal under **Azure SQL FQDN** +- Authentication method: **SQL Server Authentication** +- Administrator credentials: + - Username: **azuresqladmin** + - Password: *(available in the workspace keyvault)* + +## Supported SKUs + +The following Azure SQL SKUs have been added to the template: + +| Service Tier | Level | DTUs | +|--------------|-------|----------| +| Standard | S1 | 20 DTUs | +| Standard | S2 | 50 DTUs | +| Standard | S3 | 100 DTUs | +| Standard | S4 | 200 DTUs | +| Standard | S6 | 400 DTUs | + +For costs please [Azure SQL Database pricing](https://azure.microsoft.com/en-us/pricing/details/azure-sql-database/single/) and select **DTU** as the purchase model. + +### Adding new SKUs + +To add new SKU options within the template, please determine the SKU names using: + +```bash +az sql db list-editions --location --output table +``` + +Then add the SKUs in the following places: + +1. In the `templates/workspace_services/azuresql/template_schema.yaml` file under `properties.sql_sku.enum`. +2. In the `templates/workspace_services/azuresql/terraform/locals.tf` file under `azuresql_sku`. +3. Above in this document. + +Once added, increment the version number in the `templates/workspace_services/azuresql/porter.yaml` file, and republish the template with the following command: + + `make workspace_service_bundle BUNDLE=azuresql` diff --git a/e2e_tests/resources/strings.py b/e2e_tests/resources/strings.py index ce06b588d5..2821407a68 100644 --- a/e2e_tests/resources/strings.py +++ b/e2e_tests/resources/strings.py @@ -19,6 +19,7 @@ MLFLOW_SERVICE = "tre-service-mlflow" MYSQL_SERVICE = "tre-workspace-service-mysql" HEALTH_SERVICE = "tre-workspace-service-health" +AZURESQL_SERVICE = "tre-workspace-service-azuresql" FIREWALL_SHARED_SERVICE = "tre-shared-service-firewall" GITEA_SHARED_SERVICE = "tre-shared-service-gitea" diff --git a/e2e_tests/test_workspace_services.py b/e2e_tests/test_workspace_services.py index 31ac5a0b14..c6d8f1429b 100644 --- a/e2e_tests/test_workspace_services.py +++ b/e2e_tests/test_workspace_services.py @@ -13,6 +13,7 @@ strings.MLFLOW_SERVICE, strings.MYSQL_SERVICE, strings.HEALTH_SERVICE, + strings.AZURESQL_SERVICE ] diff --git a/mkdocs.yml b/mkdocs.yml index dbbdc922cf..886992b882 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -99,6 +99,7 @@ nav: - Azure Databricks: tre-templates/workspace-services/databricks.md - OHDSI: tre-templates/workspace-services/ohdsi.md - MySQL: tre-templates/workspace-services/mysql.md + - Azure SQL: tre-templates/workspace-services/azuresql.md - Shared Services: - Gitea (Source Mirror): tre-templates/shared-services/gitea.md - Nexus (Package Mirror): tre-templates/shared-services/nexus.md diff --git a/templates/workspace_services/azuresql/.dockerignore b/templates/workspace_services/azuresql/.dockerignore new file mode 100644 index 0000000000..01f9314130 --- /dev/null +++ b/templates/workspace_services/azuresql/.dockerignore @@ -0,0 +1,7 @@ +# See https://docs.docker.com/engine/reference/builder/#dockerignore-file +# Put files here that you don't want copied into your bundle's invocation image +.gitignore +Dockerfile.tmpl + +# Local .terraform directories +**/.terraform/* diff --git a/templates/workspace_services/azuresql/.env.sample b/templates/workspace_services/azuresql/.env.sample new file mode 100644 index 0000000000..f46a9df64d --- /dev/null +++ b/templates/workspace_services/azuresql/.env.sample @@ -0,0 +1,5 @@ +ID="__CHANGE_ME__" +WORKSPACE_ID="__CHANGE_ME__" +SQL_SKU="__CHANGE_ME__" +STORAGE_GB="__CHANGE_ME__" +DB_NAME="__CHANGE_ME__" diff --git a/templates/workspace_services/azuresql/.gitignore b/templates/workspace_services/azuresql/.gitignore new file mode 100644 index 0000000000..e08a3e22b9 --- /dev/null +++ b/templates/workspace_services/azuresql/.gitignore @@ -0,0 +1 @@ +.cnab/ diff --git a/templates/workspace_services/azuresql/Dockerfile.tmpl b/templates/workspace_services/azuresql/Dockerfile.tmpl new file mode 100644 index 0000000000..c584174140 --- /dev/null +++ b/templates/workspace_services/azuresql/Dockerfile.tmpl @@ -0,0 +1,15 @@ +# syntax=docker/dockerfile-upstream:1.4.0 +FROM --platform=linux/amd64 debian:bullseye-slim + +# PORTER_INIT + +RUN rm -f /etc/apt/apt.conf.d/docker-clean; echo 'Binary::apt::APT::Keep-Downloaded-Packages "true";' > /etc/apt/apt.conf.d/keep-cache + +# Git is required for terraform_azurerm_environment_configuration +RUN --mount=type=cache,target=/var/cache/apt --mount=type=cache,target=/var/lib/apt \ + apt-get update && apt-get install -y git --no-install-recommends + +# PORTER_MIXINS + +# Use the BUNDLE_DIR build argument to copy files into the bundle +COPY --link . ${BUNDLE_DIR}/ diff --git a/templates/workspace_services/azuresql/parameters.json b/templates/workspace_services/azuresql/parameters.json new file mode 100644 index 0000000000..d43e5fa6b5 --- /dev/null +++ b/templates/workspace_services/azuresql/parameters.json @@ -0,0 +1,68 @@ +{ + "schemaType": "ParameterSet", + "schemaVersion": "1.0.1", + "namespace": "", + "name": "tre-workspace-service-azuresql", + "parameters": [ + { + "name": "tre_id", + "source": { + "env": "TRE_ID" + } + }, + { + "name": "id", + "source": { + "env": "ID" + } + }, + { + "name": "tfstate_container_name", + "source": { + "env": "TERRAFORM_STATE_CONTAINER_NAME" + } + }, + { + "name": "tfstate_resource_group_name", + "source": { + "env": "MGMT_RESOURCE_GROUP_NAME" + } + }, + { + "name": "tfstate_storage_account_name", + "source": { + "env": "MGMT_STORAGE_ACCOUNT_NAME" + } + }, + { + "name": "sql_sku", + "source": { + "env": "SQL_SKU" + } + }, + { + "name": "storage_gb", + "source": { + "env": "STORAGE_GB" + } + }, + { + "name": "db_name", + "source": { + "env": "DB_NAME" + } + }, + { + "name": "workspace_id", + "source": { + "env": "WORKSPACE_ID" + } + }, + { + "name": "arm_environment", + "source": { + "env": "ARM_ENVIRONMENT" + } + } + ] +} diff --git a/templates/workspace_services/azuresql/porter.yaml b/templates/workspace_services/azuresql/porter.yaml new file mode 100644 index 0000000000..1316577ac5 --- /dev/null +++ b/templates/workspace_services/azuresql/porter.yaml @@ -0,0 +1,121 @@ +--- +schemaVersion: 1.0.0 +name: tre-workspace-service-azuresql +version: 1.0.9 +description: "An Azure SQL workspace service" +registry: azuretre +dockerfile: Dockerfile.tmpl + +credentials: + - name: azure_tenant_id + env: ARM_TENANT_ID + - name: azure_subscription_id + env: ARM_SUBSCRIPTION_ID + - name: azure_client_id + env: ARM_CLIENT_ID + - name: azure_client_secret + env: ARM_CLIENT_SECRET +parameters: + - name: workspace_id + type: string + - name: tre_id + type: string + + # the following are added automatically by the resource processor + - name: id + type: string + description: "Resource ID" + env: id + - name: tfstate_resource_group_name + type: string + description: "Resource group containing the Terraform state storage account" + - name: tfstate_storage_account_name + type: string + description: "The name of the Terraform state storage account" + - name: tfstate_container_name + env: tfstate_container_name + type: string + default: "tfstate" + description: "The name of the Terraform state storage container" + - name: arm_use_msi + env: ARM_USE_MSI + type: boolean + default: false + - name: arm_environment + env: ARM_ENVIRONMENT + type: string + default: "public" + - name: sql_sku + type: string + default: "S2 | 50 DTUs" + - name: storage_gb + type: integer + default: 5 + - name: db_name + type: string + default: tredb + +mixins: + - exec + - terraform: + clientVersion: 1.9.2 + +outputs: + - name: azuresql_fqdn + type: string + applyTo: + - install + - upgrade + +install: + - terraform: + description: "Deploy Azure SQL workspace service" + vars: + workspace_id: ${ bundle.parameters.workspace_id } + tre_id: ${ bundle.parameters.tre_id } + tre_resource_id: ${ bundle.parameters.id } + sql_sku: ${ bundle.parameters.sql_sku } + storage_gb: ${ bundle.parameters.storage_gb } + db_name: ${ bundle.parameters.db_name } + arm_environment: ${ bundle.parameters.arm_environment } + backendConfig: + resource_group_name: ${ bundle.parameters.tfstate_resource_group_name } + storage_account_name: ${ bundle.parameters.tfstate_storage_account_name } + container_name: ${ bundle.parameters.tfstate_container_name } + key: tre-workspace-service-azuresql-${ bundle.parameters.id } + outputs: + - name: azuresql_fqdn +upgrade: + - terraform: + description: "Upgrade Azure SQL workspace service" + vars: + workspace_id: ${ bundle.parameters.workspace_id } + tre_id: ${ bundle.parameters.tre_id } + tre_resource_id: ${ bundle.parameters.id } + sql_sku: ${ bundle.parameters.sql_sku } + storage_gb: ${ bundle.parameters.storage_gb } + db_name: ${ bundle.parameters.db_name } + arm_environment: ${ bundle.parameters.arm_environment } + backendConfig: + resource_group_name: ${ bundle.parameters.tfstate_resource_group_name } + storage_account_name: ${ bundle.parameters.tfstate_storage_account_name } + container_name: ${ bundle.parameters.tfstate_container_name } + key: tre-workspace-service-azuresql-${ bundle.parameters.id } + outputs: + - name: azuresql_fqdn +uninstall: + - terraform: + description: "Tear down Azure SQL workspace service" + vars: + workspace_id: ${ bundle.parameters.workspace_id } + tre_id: ${ bundle.parameters.tre_id } + tre_resource_id: ${ bundle.parameters.id } + sql_sku: ${ bundle.parameters.sql_sku } + storage_gb: ${ bundle.parameters.storage_gb } + db_name: ${ bundle.parameters.db_name } + arm_environment: ${ bundle.parameters.arm_environment } + backendConfig: + resource_group_name: ${ bundle.parameters.tfstate_resource_group_name } + storage_account_name: ${ bundle.parameters.tfstate_storage_account_name } + container_name: ${ bundle.parameters.tfstate_container_name } + key: tre-workspace-service-azuresql-${ bundle.parameters.id } diff --git a/templates/workspace_services/azuresql/template_schema.json b/templates/workspace_services/azuresql/template_schema.json new file mode 100644 index 0000000000..2e80406307 --- /dev/null +++ b/templates/workspace_services/azuresql/template_schema.json @@ -0,0 +1,39 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema", + "$id": "https://github.com/microsoft/AzureTRE/templates/workspace_services/azuresql/template_schema.json", + "type": "object", + "title": "Azure SQL", + "description": "Provides Azure SQL within the workspace", + "required": [], + "properties": { + "sql_sku": { + "$id": "#/properties/sql_sku", + "type": "string", + "title": "Azure SQL SKU", + "description": "Azure SQL SKU", + "updateable": true, + "enum": [ + "S1 | 20 DTUs", + "S2 | 50 DTUs", + "S3 | 100 DTUs", + "S4 | 200 DTUs", + "S6 | 400 DTUs" + ], + "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", + "default": "tredb" + } + } +} diff --git a/templates/workspace_services/azuresql/terraform/.terraform.lock.hcl b/templates/workspace_services/azuresql/terraform/.terraform.lock.hcl new file mode 100644 index 0000000000..fae00c026f --- /dev/null +++ b/templates/workspace_services/azuresql/terraform/.terraform.lock.hcl @@ -0,0 +1,42 @@ +# This file is maintained automatically by "terraform init". +# Manual edits may be lost in future updates. + +provider "registry.terraform.io/hashicorp/azurerm" { + version = "3.111.0" + constraints = "3.111.0" + hashes = [ + "h1:vgrdy5JWGAK5N44/V75etoHIAMvXKNlMrIHTaWApehA=", + "zh:0db8afb9278993df7e74796bdd125153b07a7045e5ca1756783a8b8cfec564f4", + "zh:22c424fcfda13dc720caa289248c1b71b2ad20e329fd4a52cc6be7e45f795a4a", + "zh:471a2c1d7353bc21ef28963f006d2cf5276e7885b423fc0b73f2d8ce6cde72dd", + "zh:68bf81cb353c755d48792e881b6405919daa041e35de1d510209237d90d6c21f", + "zh:841d8664955bbc77f12095c9b1a4b3923362564a790fd945337759e9bc95d07e", + "zh:86e92f959056c573bf4b2be1d6cfa838dab06d3e5a944f371a1131e4c6477d88", + "zh:95a096ced57616659687970b5d618c2ce3cd54fa0311b7a7569435cacf39f26f", + "zh:c5656a11253ffdaee973e7292dd3c10a1db81f1fc9ee2d3041ae1182f7d25379", + "zh:cd6a1049de69280f339d6f83f30a9006bbe003a840a39eb7b5900990c5aadbb0", + "zh:e7b3d96f0c9ea47261dbd015f1f64fdb43c8ccb196afda862c0865e30d88245c", + "zh:f1ec7da6ab5526845274bff77e023b9faec71c2cf38bd18587274932b2aa2e89", + "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", + ] +} + +provider "registry.terraform.io/hashicorp/random" { + version = "3.6.2" + constraints = "3.6.2" + hashes = [ + "h1:wmG0QFjQ2OfyPy6BB7mQ57WtoZZGGV07uAPQeDmIrAE=", + "zh:0ef01a4f81147b32c1bea3429974d4d104bbc4be2ba3cfa667031a8183ef88ec", + "zh:1bcd2d8161e89e39886119965ef0f37fcce2da9c1aca34263dd3002ba05fcb53", + "zh:37c75d15e9514556a5f4ed02e1548aaa95c0ecd6ff9af1119ac905144c70c114", + "zh:4210550a767226976bc7e57d988b9ce48f4411fa8a60cd74a6b246baf7589dad", + "zh:562007382520cd4baa7320f35e1370ffe84e46ed4e2071fdc7e4b1a9b1f8ae9b", + "zh:5efb9da90f665e43f22c2e13e0ce48e86cae2d960aaf1abf721b497f32025916", + "zh:6f71257a6b1218d02a573fc9bff0657410404fb2ef23bc66ae8cd968f98d5ff6", + "zh:78d5eefdd9e494defcb3c68d282b8f96630502cac21d1ea161f53cfe9bb483b3", + "zh:9647e18f221380a85f2f0ab387c68fdafd58af6193a932417299cdcae4710150", + "zh:bb6297ce412c3c2fa9fec726114e5e0508dd2638cad6a0cb433194930c97a544", + "zh:f83e925ed73ff8a5ef6e3608ad9225baa5376446349572c2449c0c0b3cf184b7", + "zh:fbef0781cb64de76b1df1ca11078aecba7800d82fd4a956302734999cfd9a4af", + ] +} diff --git a/templates/workspace_services/azuresql/terraform/azuresql.tf b/templates/workspace_services/azuresql/terraform/azuresql.tf new file mode 100644 index 0000000000..0e435cb567 --- /dev/null +++ b/templates/workspace_services/azuresql/terraform/azuresql.tf @@ -0,0 +1,65 @@ +resource "random_password" "password" { + length = 20 + min_upper = 2 + min_lower = 2 + min_numeric = 2 + min_special = 2 +} + +resource "azurerm_mssql_server" "azuresql" { + name = local.azuresql_server_name + resource_group_name = data.azurerm_resource_group.ws.name + location = data.azurerm_resource_group.ws.location + version = "12.0" + administrator_login = local.azuresql_administrator_login + administrator_login_password = random_password.password.result + minimum_tls_version = "1.2" + public_network_access_enabled = false + outbound_network_restriction_enabled = true + tags = local.workspace_service_tags + + lifecycle { ignore_changes = [tags] } +} + +resource "azurerm_mssql_database" "azuresqldatabase" { + name = var.db_name + server_id = azurerm_mssql_server.azuresql.id + collation = local.azuresql_collation + license_type = "LicenseIncluded" + max_size_gb = var.storage_gb + sku_name = local.azuresql_sku[var.sql_sku].value + tags = local.workspace_service_tags + + lifecycle { ignore_changes = [tags] } +} + +resource "azurerm_private_endpoint" "azuresql_private_endpoint" { + name = local.azuresql_private_endpoint_name + location = data.azurerm_resource_group.ws.location + resource_group_name = data.azurerm_resource_group.ws.name + subnet_id = data.azurerm_subnet.services.id + tags = local.workspace_service_tags + + private_service_connection { + private_connection_resource_id = azurerm_mssql_server.azuresql.id + name = local.azuresql_private_service_connection_name + subresource_names = ["sqlServer"] + is_manual_connection = false + } + + private_dns_zone_group { + name = module.terraform_azurerm_environment_configuration.private_links["privatelink.database.windows.net"] + private_dns_zone_ids = [data.azurerm_private_dns_zone.azuresql.id] + } + + lifecycle { ignore_changes = [tags] } +} + +resource "azurerm_key_vault_secret" "db_password" { + name = local.azuresql_password_keyvault_secret_name + value = random_password.password.result + key_vault_id = data.azurerm_key_vault.ws.id + tags = local.workspace_service_tags + + lifecycle { ignore_changes = [tags] } +} diff --git a/templates/workspace_services/azuresql/terraform/locals.tf b/templates/workspace_services/azuresql/terraform/locals.tf new file mode 100644 index 0000000000..4c3750fcf5 --- /dev/null +++ b/templates/workspace_services/azuresql/terraform/locals.tf @@ -0,0 +1,35 @@ +locals { + + core_resource_group_name = "rg-${var.tre_id}" + + workspace_short_id = substr(var.workspace_id, -4, -1) + workspace_resource_name_suffix = "${var.tre_id}-ws-${local.workspace_short_id}" + workspace_resource_group_name = "rg-${local.workspace_resource_name_suffix}" + workspace_vnet_name = "vnet-${local.workspace_resource_name_suffix}" + workspace_keyvault_name = lower("kv-${substr(local.workspace_resource_name_suffix, -20, -1)}") + + service_short_id = substr(var.tre_resource_id, -4, -1) + service_resource_name_suffix = "${local.workspace_resource_name_suffix}-svc-${local.service_short_id}" + + azuresql_server_name = "azsql-${local.service_resource_name_suffix}" + azuresql_administrator_login = "azuresqladmin" + azuresql_collation = "SQL_Latin1_General_CP1_CI_AS" + + azuresql_sku = { + "S1 | 20 DTUs" = { value = "S1" }, + "S2 | 50 DTUs" = { value = "S2" }, + "S3 | 100 DTUs" = { value = "S3" }, + "S4 | 200 DTUs" = { value = "S4" }, + "S6 | 400 DTUs" = { value = "S6" }, + } + + azuresql_private_endpoint_name = "pe-${azurerm_mssql_server.azuresql.name}" + azuresql_private_service_connection_name = "psc-${azurerm_mssql_server.azuresql.name}" + azuresql_password_keyvault_secret_name = "${azurerm_mssql_server.azuresql.name}-administrator-password" + + workspace_service_tags = { + tre_id = var.tre_id + tre_workspace_id = var.workspace_id + tre_workspace_service_id = var.tre_resource_id + } +} diff --git a/templates/workspace_services/azuresql/terraform/main.tf b/templates/workspace_services/azuresql/terraform/main.tf new file mode 100644 index 0000000000..6ea4d2d51a --- /dev/null +++ b/templates/workspace_services/azuresql/terraform/main.tf @@ -0,0 +1,63 @@ +# Azure Provider source and version being used +terraform { + required_providers { + azurerm = { + source = "hashicorp/azurerm" + version = "3.111.0" + } + random = { + source = "hashicorp/random" + version = "3.6.2" + } + } + + backend "azurerm" {} +} + +provider "azurerm" { + features { + key_vault { + # Don't purge on destroy (this would fail due to purge protection being enabled on keyvault) + purge_soft_delete_on_destroy = false + purge_soft_deleted_secrets_on_destroy = false + purge_soft_deleted_certificates_on_destroy = false + purge_soft_deleted_keys_on_destroy = false + # When recreating an environment, recover any previously soft deleted secrets - set to true by default + recover_soft_deleted_key_vaults = true + recover_soft_deleted_secrets = true + recover_soft_deleted_certificates = true + recover_soft_deleted_keys = true + } + } +} + +module "terraform_azurerm_environment_configuration" { + source = "git::https://github.com/microsoft/terraform-azurerm-environment-configuration.git?ref=0.5.0" + arm_environment = var.arm_environment +} + + +data "azurerm_resource_group" "ws" { + name = local.workspace_resource_group_name +} + +data "azurerm_virtual_network" "ws" { + name = local.workspace_vnet_name + resource_group_name = data.azurerm_resource_group.ws.name +} + +data "azurerm_key_vault" "ws" { + name = local.workspace_keyvault_name + resource_group_name = data.azurerm_resource_group.ws.name +} + +data "azurerm_subnet" "services" { + name = "ServicesSubnet" + virtual_network_name = data.azurerm_virtual_network.ws.name + resource_group_name = data.azurerm_resource_group.ws.name +} + +data "azurerm_private_dns_zone" "azuresql" { + name = module.terraform_azurerm_environment_configuration.private_links["privatelink.database.windows.net"] + resource_group_name = local.core_resource_group_name +} diff --git a/templates/workspace_services/azuresql/terraform/outputs.tf b/templates/workspace_services/azuresql/terraform/outputs.tf new file mode 100644 index 0000000000..1746deca7f --- /dev/null +++ b/templates/workspace_services/azuresql/terraform/outputs.tf @@ -0,0 +1,3 @@ +output "azuresql_fqdn" { + value = azurerm_mssql_server.azuresql.fully_qualified_domain_name +} diff --git a/templates/workspace_services/azuresql/terraform/variables.tf b/templates/workspace_services/azuresql/terraform/variables.tf new file mode 100644 index 0000000000..0a386dba5f --- /dev/null +++ b/templates/workspace_services/azuresql/terraform/variables.tf @@ -0,0 +1,32 @@ +variable "workspace_id" { + type = string +} + +variable "tre_id" { + type = string +} + +variable "tre_resource_id" { + type = string +} + +variable "sql_sku" { + type = string +} + +variable "db_name" { + type = string +} + +variable "storage_gb" { + type = number + + validation { + condition = var.storage_gb > 1 && var.storage_gb < 1024 + error_message = "The storage value is out of range." + } +} + +variable "arm_environment" { + type = string +} diff --git a/templates/workspaces/base/porter.yaml b/templates/workspaces/base/porter.yaml index f7a1802477..81297e717d 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: 1.5.3 +version: 1.5.4 description: "A base Azure TRE workspace" dockerfile: Dockerfile.tmpl registry: azuretre diff --git a/templates/workspaces/base/terraform/network/data.tf b/templates/workspaces/base/terraform/network/data.tf index b54dea230e..48dee597b7 100644 --- a/templates/workspaces/base/terraform/network/data.tf +++ b/templates/workspaces/base/terraform/network/data.tf @@ -93,6 +93,11 @@ data "azurerm_private_dns_zone" "postgres" { resource_group_name = local.core_resource_group_name } +data "azurerm_private_dns_zone" "azuresql" { + name = module.terraform_azurerm_environment_configuration.private_links["privatelink.database.windows.net"] + resource_group_name = local.core_resource_group_name +} + data "azurerm_public_ip" "app_gateway_ip" { name = "pip-agw-${var.tre_id}" resource_group_name = local.core_resource_group_name diff --git a/templates/workspaces/base/terraform/network/network.tf b/templates/workspaces/base/terraform/network/network.tf index bbae1ec1ab..c50ebff6f2 100644 --- a/templates/workspaces/base/terraform/network/network.tf +++ b/templates/workspaces/base/terraform/network/network.tf @@ -105,6 +105,6 @@ resource "azurerm_subnet_route_table_association" "rt_webapps_subnet_association } module "terraform_azurerm_environment_configuration" { - source = "git::https://github.com/microsoft/terraform-azurerm-environment-configuration.git?ref=0.2.0" + source = "git::https://github.com/microsoft/terraform-azurerm-environment-configuration.git?ref=0.5.0" arm_environment = var.arm_environment } diff --git a/templates/workspaces/base/terraform/network/zone_links.tf b/templates/workspaces/base/terraform/network/zone_links.tf index 8dc927c54b..e5a0f60781 100644 --- a/templates/workspaces/base/terraform/network/zone_links.tf +++ b/templates/workspaces/base/terraform/network/zone_links.tf @@ -129,6 +129,16 @@ resource "azurerm_private_dns_zone_virtual_network_link" "postgreslink" { lifecycle { ignore_changes = [tags] } } +resource "azurerm_private_dns_zone_virtual_network_link" "azuresqllink" { + name = "azuresqllink-${local.workspace_resource_name_suffix}" + resource_group_name = local.core_resource_group_name + private_dns_zone_name = data.azurerm_private_dns_zone.azuresql.name + virtual_network_id = azurerm_virtual_network.ws.id + tags = var.tre_workspace_tags + + lifecycle { ignore_changes = [tags] } +} + resource "azurerm_private_dns_zone_virtual_network_link" "nexuslink" { name = "nexuslink-${local.workspace_resource_name_suffix}" resource_group_name = local.core_resource_group_name From 5d5d8b058686dc70dd03119ec9498a29dc296135 Mon Sep 17 00:00:00 2001 From: Jonny Rylands Date: Tue, 16 Jul 2024 13:11:50 +0100 Subject: [PATCH 50/79] Disable public network access to API App Service - traffic is routed through PE from App Gateway (#4022) * Disable public network access to API - traffic should be routed through App Gateway via PE * Update core version and changelog * Update version.txt --- CHANGELOG.md | 1 + core/terraform/api-webapp.tf | 1 + core/version.txt | 2 +- 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 904fda7598..3c2b5cd0cb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ ENHANCEMENTS: * Ability to host TRE on a custom domain ([#4014](https://github.com/microsoft/AzureTRE/pull/4014)) BUG FIXES: +* Disable public network access to the API App Service ([#3986](https://github.com/microsoft/AzureTRE/issues/3986)) COMPONENTS: diff --git a/core/terraform/api-webapp.tf b/core/terraform/api-webapp.tf index f2d4beab1a..807b3a4259 100644 --- a/core/terraform/api-webapp.tf +++ b/core/terraform/api-webapp.tf @@ -25,6 +25,7 @@ resource "azurerm_linux_web_app" "api" { https_only = true key_vault_reference_identity_id = azurerm_user_assigned_identity.id.id virtual_network_subnet_id = module.network.web_app_subnet_id + public_network_access_enabled = false tags = local.tre_core_tags app_settings = { diff --git a/core/version.txt b/core/version.txt index aa87fd3bff..d9b054ab1c 100644 --- a/core/version.txt +++ b/core/version.txt @@ -1 +1 @@ -__version__ = "0.10.3" \ No newline at end of file +__version__ = "0.10.4" From 3d1bb3382723e601a8d3b60ed7f58478b0416105 Mon Sep 17 00:00:00 2001 From: Abhinav Pandey Date: Wed, 17 Jul 2024 18:40:48 +0530 Subject: [PATCH 51/79] Improve Bug Template (#4028) * Improve Bug Template Signed-off-by: Abhinav Pandey * Update CHANGELOG.md * Update CHANGELOG.md in `0.18.0` * Update CHANGELOG.md * Shift changes to `bug fixes` --------- Signed-off-by: Abhinav Pandey Co-authored-by: Tim Allen --- .github/ISSUE_TEMPLATE/bug_report.md | 4 ++-- CHANGELOG.md | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index c9ad684372..86d6feb9ae 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -15,8 +15,8 @@ A clear and concise description of what the bug is. **Steps to reproduce** 1. -1. -1. +2. +3. **Azure TRE release version (e.g. v0.14.0 or main):** diff --git a/CHANGELOG.md b/CHANGELOG.md index 3c2b5cd0cb..6bd4643d18 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ ENHANCEMENTS: * Ability to host TRE on a custom domain ([#4014](https://github.com/microsoft/AzureTRE/pull/4014)) BUG FIXES: +* Fix numbering issue within `bug_report.md` template ([#4028](https://github.com/microsoft/AzureTRE/pull/4028)) * Disable public network access to the API App Service ([#3986](https://github.com/microsoft/AzureTRE/issues/3986)) COMPONENTS: From 979c4face24a3fa78bb5d9e6df3318438146e2ff Mon Sep 17 00:00:00 2001 From: Jonny Rylands Date: Thu, 18 Jul 2024 15:12:55 +0100 Subject: [PATCH 52/79] Documentation typo (#4038) Update cloud-init.md --- docs/troubleshooting-faq/cloud-init.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/troubleshooting-faq/cloud-init.md b/docs/troubleshooting-faq/cloud-init.md index 6c4ed488d2..6dfad56adc 100644 --- a/docs/troubleshooting-faq/cloud-init.md +++ b/docs/troubleshooting-faq/cloud-init.md @@ -7,7 +7,7 @@ Examples of virtual machines using cloud-init are: - Sonatype Nexus VM - Apache Guacamole Linux VM -## Retrieving the cloud-inmit logs +## Retrieving the cloud-init logs Log onto the virtual machine using Bastion or serial console and run the following command to view the cloud-init logs: ```bash From 6d51acec45c4ae60a66bbfdf0d35d8b1c9158ff9 Mon Sep 17 00:00:00 2001 From: Jonny Rylands Date: Tue, 23 Jul 2024 14:35:34 +0100 Subject: [PATCH 53/79] Remove AppServiceFileAuditLogs diagnostic setting (#4034) --- CHANGELOG.md | 1 + core/terraform/locals.tf | 2 +- core/version.txt | 2 +- templates/shared_services/gitea/porter.yaml | 2 +- templates/shared_services/gitea/terraform/locals.tf | 2 +- templates/workspace_services/gitea/porter.yaml | 2 +- templates/workspace_services/gitea/terraform/locals.tf | 2 +- templates/workspace_services/guacamole/porter.yaml | 2 +- templates/workspace_services/guacamole/terraform/locals.tf | 2 +- templates/workspace_services/mlflow/porter.yaml | 2 +- templates/workspace_services/mlflow/terraform/locals.tf | 2 +- 11 files changed, 11 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6bd4643d18..53e7badc25 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ FEATURES: ENHANCEMENTS: * Add Case Study Docs ([#1366](https://github.com/microsoft/AzureTRE/issues/1366)) * Ability to host TRE on a custom domain ([#4014](https://github.com/microsoft/AzureTRE/pull/4014)) +* Remove AppServiceFileAuditLogs diagnostic setting ([#4033](https://github.com/microsoft/AzureTRE/issues/4033)) BUG FIXES: * Fix numbering issue within `bug_report.md` template ([#4028](https://github.com/microsoft/AzureTRE/pull/4028)) diff --git a/core/terraform/locals.tf b/core/terraform/locals.tf index 76882f8a51..8937bf980d 100644 --- a/core/terraform/locals.tf +++ b/core/terraform/locals.tf @@ -6,7 +6,7 @@ locals { } api_diagnostic_categories_enabled = [ - "AppServiceHTTPLogs", "AppServiceConsoleLogs", "AppServiceAppLogs", "AppServiceFileAuditLogs", + "AppServiceHTTPLogs", "AppServiceConsoleLogs", "AppServiceAppLogs", "AppServiceAuditLogs", "AppServiceIPSecAuditLogs", "AppServicePlatformLogs", "AppServiceAntivirusScanAuditLogs" ] servicebus_diagnostic_categories_enabled = ["OperationalLogs", "VNetAndIPFilteringLogs", "RuntimeAuditLogs", "ApplicationMetricsLogs"] diff --git a/core/version.txt b/core/version.txt index d9b054ab1c..a67aac0904 100644 --- a/core/version.txt +++ b/core/version.txt @@ -1 +1 @@ -__version__ = "0.10.4" +__version__ = "0.10.5" diff --git a/templates/shared_services/gitea/porter.yaml b/templates/shared_services/gitea/porter.yaml index e6c2fc70b8..5c49293e65 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.0.1 +version: 1.0.2 description: "A Gitea shared service" dockerfile: Dockerfile.tmpl registry: azuretre diff --git a/templates/shared_services/gitea/terraform/locals.tf b/templates/shared_services/gitea/terraform/locals.tf index 5322583f29..430072fb93 100644 --- a/templates/shared_services/gitea/terraform/locals.tf +++ b/templates/shared_services/gitea/terraform/locals.tf @@ -16,7 +16,7 @@ locals { tre_shared_service_id = var.tre_resource_id } webapp_diagnostic_categories_enabled = [ - "AppServiceHTTPLogs", "AppServiceConsoleLogs", "AppServiceAppLogs", "AppServiceFileAuditLogs", + "AppServiceHTTPLogs", "AppServiceConsoleLogs", "AppServiceAppLogs", "AppServiceAuditLogs", "AppServiceIPSecAuditLogs", "AppServicePlatformLogs", "AppServiceAntivirusScanAuditLogs" ] } diff --git a/templates/workspace_services/gitea/porter.yaml b/templates/workspace_services/gitea/porter.yaml index 05d050a4dc..e4780f0228 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.0.2 +version: 1.0.3 description: "A Gitea workspace service" dockerfile: Dockerfile.tmpl registry: azuretre diff --git a/templates/workspace_services/gitea/terraform/locals.tf b/templates/workspace_services/gitea/terraform/locals.tf index f37c1e270a..665181c21e 100644 --- a/templates/workspace_services/gitea/terraform/locals.tf +++ b/templates/workspace_services/gitea/terraform/locals.tf @@ -19,7 +19,7 @@ locals { tre_workspace_service_id = var.id } web_app_diagnostic_categories_enabled = [ - "AppServiceHTTPLogs", "AppServiceConsoleLogs", "AppServiceAppLogs", "AppServiceFileAuditLogs", + "AppServiceHTTPLogs", "AppServiceConsoleLogs", "AppServiceAppLogs", "AppServiceAuditLogs", "AppServiceIPSecAuditLogs", "AppServicePlatformLogs", "AppServiceAntivirusScanAuditLogs" ] gitea_openid_auth = "${var.aad_authority_url}/${data.azurerm_key_vault_secret.aad_tenant_id.value}/v2.0" diff --git a/templates/workspace_services/guacamole/porter.yaml b/templates/workspace_services/guacamole/porter.yaml index f49e3b02e3..dd081ea0b9 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.10.7 +version: 0.10.8 description: "An Azure TRE service for Guacamole" dockerfile: Dockerfile.tmpl registry: azuretre diff --git a/templates/workspace_services/guacamole/terraform/locals.tf b/templates/workspace_services/guacamole/terraform/locals.tf index 59b77e8a00..e3ac2a08f3 100644 --- a/templates/workspace_services/guacamole/terraform/locals.tf +++ b/templates/workspace_services/guacamole/terraform/locals.tf @@ -20,7 +20,7 @@ locals { tre_workspace_service_id = var.tre_resource_id } guacamole_diagnostic_categories_enabled = [ - "AppServiceHTTPLogs", "AppServiceConsoleLogs", "AppServiceAppLogs", "AppServiceFileAuditLogs", + "AppServiceHTTPLogs", "AppServiceConsoleLogs", "AppServiceAppLogs", "AppServiceAuditLogs", "AppServiceIPSecAuditLogs", "AppServicePlatformLogs", "AppServiceAntivirusScanAuditLogs" ] } diff --git a/templates/workspace_services/mlflow/porter.yaml b/templates/workspace_services/mlflow/porter.yaml index 322b7f025c..6f12152f0a 100644 --- a/templates/workspace_services/mlflow/porter.yaml +++ b/templates/workspace_services/mlflow/porter.yaml @@ -1,7 +1,7 @@ --- schemaVersion: 1.0.0 name: tre-service-mlflow -version: 0.7.7 +version: 0.7.8 description: "An Azure TRE service for MLflow machine learning lifecycle" dockerfile: Dockerfile.tmpl registry: azuretre diff --git a/templates/workspace_services/mlflow/terraform/locals.tf b/templates/workspace_services/mlflow/terraform/locals.tf index 460981cb35..3fd2d2d8c5 100644 --- a/templates/workspace_services/mlflow/terraform/locals.tf +++ b/templates/workspace_services/mlflow/terraform/locals.tf @@ -18,7 +18,7 @@ locals { tre_workspace_service_id = var.tre_resource_id } web_app_diagnostic_categories_enabled = [ - "AppServiceHTTPLogs", "AppServiceConsoleLogs", "AppServiceAppLogs", "AppServiceFileAuditLogs", + "AppServiceHTTPLogs", "AppServiceConsoleLogs", "AppServiceAppLogs", "AppServiceAuditLogs", "AppServiceIPSecAuditLogs", "AppServicePlatformLogs", "AppServiceAntivirusScanAuditLogs" ] identity_name = "id-${local.webapp_name}" From ba76a89f267cde70aefae1793643bad288808701 Mon Sep 17 00:00:00 2001 From: Tim Allen Date: Thu, 1 Aug 2024 09:48:14 +0100 Subject: [PATCH 54/79] Emoji markdown Fix (#4031) * update * update mkdocs * Release v0.18 (#4016) * update release.md * spelling * update changelog * moved to different branch * Databricks ips (#3964) * Fix hash issue with builds (#4013) * Fix hash issue with builds * Update build.test.js --------- Co-authored-by: Marcus Robinson * Support custom domain on SSL certificate and App Registration redirect (#4014) * Support custom domain on SSL certificate and App Registration redirect * Update CHANGELOG.md * Update core version number * Custom domain documentation * Fix docs formatting * Update CHANGELOG.md * Print certificate FQDN to console in letsencrypt.sh * Add user case studies to docs (#4025) * update changelog * update * update --------- Co-authored-by: Marcus Robinson Co-authored-by: Jonny Rylands --- CHANGELOG.md | 1 + docs/tre-developers/release.md | 34 ++++++++++++++++++---------------- mkdocs.yml | 3 +++ 3 files changed, 22 insertions(+), 16 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 53e7badc25..93f133c5dc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ ENHANCEMENTS: BUG FIXES: * Fix numbering issue within `bug_report.md` template ([#4028](https://github.com/microsoft/AzureTRE/pull/4028)) * Disable public network access to the API App Service ([#3986](https://github.com/microsoft/AzureTRE/issues/3986)) +* Update Docs to format emojis properly ([#4027](https://github.com/microsoft/AzureTRE/issues/4027)) COMPONENTS: diff --git a/docs/tre-developers/release.md b/docs/tre-developers/release.md index 63758bff65..ce7a362566 100644 --- a/docs/tre-developers/release.md +++ b/docs/tre-developers/release.md @@ -4,24 +4,26 @@ A release is created when enough changes have been made and the main branch is s The process follows these steps: -1. Update `CHANGELOG.md` in a PR with the following: - 1. Rename the top-most verion noted as unreleaed with the version number that makes sense. Note that you don't have to keep the one that is currently in the file as the version number chosen should reflect the changes made (major, minor, etc.) - 1. Create a new section for the next-unreleaed version so that future changes will be placed there. - 1. Run `devops/scripts/list_versions.sh` and include the output in the change log for the version you're about the release -1. Merge the PR -1. Create a GitHub Release +1. Create a `Prep for Release v0...` issue to track. +2. Create PR linked to the `Prep...` issue and open in Dev Container. +3. Update `CHANGELOG.md` in a PR with the following: + 1. Rename the top-most version noted as unreleased with the version number that makes sense. Note that you don't have to keep the one that is currently in the file as the version number chosen should reflect the changes made (major, minor, etc.) + 2. Create a new section for the next-unreleased version so that future changes will be placed there. + 3. Run `devops/scripts/list_versions.sh` and include the output in the change log for the version you're about the release +4. Merge the PR +5. Create GitHub Release in `Pre Release` state. 1. Go to https://github.com/microsoft/AzureTRE/releases/new - 1. Click on `Choose a tag` and type a new one for you version. It should be in the form of `v0.9.2` - note the "v" in the begining. - 1. The release title should be just the version number "0.9.2" in the example above. - 1. Copy the text from the CHANGELOG.md file and paste in the release description. - 1. Include a final line with a link to the full changelog similar to this: + 2. Click on `Choose a tag` and type a new one for you version. It should be in the form of `v0.9.2` - note the "v" in the beginning. + 3. The release title should be just the version number "0.9.2" in the example above. + 4. Copy the text from the CHANGELOG.md file and paste in the release description. + 5. Include a final line with a link to the full changelog similar to this: **Full Changelog**: https://github.com/microsoft/AzureTRE/compare/v0.9.1...v0.9.2 - -1. Update [AzureTRE-Deployment](https://github.com/microsoft/AzureTRE-Deployment). The procedure may vary depending on the level of changes introduced in the new version but should include the following steps: +6. Update [AzureTRE-Deployment](https://github.com/microsoft/AzureTRE-Deployment). The procedure may vary depending on the level of changes introduced in the new version but should include the following steps: 1. Update the tag used in [devcontainer.json](https://github.com/microsoft/AzureTRE-Deployment/blob/main/.devcontainer/devcontainer.json). - 1. Rebuild the container. - 1. Compare both `.devcontainer` and `.github` folders of the new release with the ones in the repo and make required updates so that only required difference exist. - The comapre can be done with VSCode [Compare Folders extension](https://marketplace.visualstudio.com/items?itemName=moshfeu.compare-folders) as you have both the old version (under to root folder) and the "new" one inside the _AzureTRE_ symlink. - 1. With all changes made, rebuild the container to verify it's working and that AzureTRE folder has been populated correctly. + 2. Rebuild the container. + 3. Compare both `.devcontainer` and `.github` folders of the new release with the ones in the repo and make required updates so that only required difference exist. + The compare can be done with VSCode [Compare Folders extension](https://marketplace.visualstudio.com/items?itemName=moshfeu.compare-folders) as you have both the old version (under to root folder) and the "new" one inside the _AzureTRE_ symlink. + 4. With all changes made, rebuild the container to verify it's working and that AzureTRE folder has been populated correctly. +7. Once tests have been complete edit GitHub Release to `Set as the latest release`. diff --git a/mkdocs.yml b/mkdocs.yml index 886992b882..a4e2aa3d2c 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -43,6 +43,9 @@ markdown_extensions: - mdx_truly_sane_lists - pymdownx.tabbed - pymdownx.tasklist + - pymdownx.emoji: + emoji_index: !!python/name:material.extensions.emoji.twemoji + emoji_generator: !!python/name:material.extensions.emoji.to_svg nav: - Overview: # Pages to explain what the Azure TRE From b0d896916932ee497ea32ce72a6c0da9e3fdc9ae Mon Sep 17 00:00:00 2001 From: Marcus Robinson Date: Fri, 2 Aug 2024 09:15:44 +0100 Subject: [PATCH 55/79] Fix incorrect link on Azure TRE Resource Breakdown page (#4045) Related to #4043 Update the link on the Azure Resources - Azure TRE page to point to the correct manual pre-deployment steps. * Update the link in the first paragraph of `docs/azure-tre-overview/tre-resources-breakdown.md` to point to `../../tre-admins/setup-instructions/manual-pre-deployment-steps`. * Update the link in the Azure TRE Management Resource Group table to point to `../../tre-admins/setup-instructions/manual-pre-deployment-steps`. --- For more details, open the [Copilot Workspace session](https://copilot-workspace.githubnext.com/microsoft/AzureTRE/issues/4043?shareId=XXXX-XXXX-XXXX-XXXX). Co-authored-by: Tim Allen --- docs/azure-tre-overview/tre-resources-breakdown.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/azure-tre-overview/tre-resources-breakdown.md b/docs/azure-tre-overview/tre-resources-breakdown.md index b4f6a329e9..72ca2f23fc 100644 --- a/docs/azure-tre-overview/tre-resources-breakdown.md +++ b/docs/azure-tre-overview/tre-resources-breakdown.md @@ -2,7 +2,7 @@ The Azure services deployed within an Azure TRE are described below. -Once an Azure TRE has been [provisioned](../../tre-admins/setup-instructions/pre-deployment-steps) in an Azure Subscription, you will have two Resource Groups: +Once an Azure TRE has been [provisioned](../../tre-admins/setup-instructions/manual-pre-deployment-steps) in an Azure Subscription, you will have two Resource Groups: 1. Azure TRE Management Resource Group - Prerequisite for deploying an Azure TRE instance 1. Azure TRE Resource Group - Core Azure TRE instance @@ -13,7 +13,7 @@ Once an Azure TRE has been [provisioned](../../tre-admins/setup-instructions/pre | Name | Azure Service | Description | Additional links |---|---|---|---| -| {MGMT_STORAGE_ACCOUNT_NAME} | Storage Account | [Azure TRE Terraform](../../tre-admins/setup-instructions/pre-deployment-steps) | [Storage Blobs](https://docs.microsoft.com/en-us/azure/storage/blobs/storage-blobs-overview) +| {MGMT_STORAGE_ACCOUNT_NAME} | Storage Account | [Azure TRE Terraform](../../tre-admins/setup-instructions/manual-pre-deployment-steps) | [Storage Blobs](https://docs.microsoft.com/en-us/azure/storage/blobs/storage-blobs-overview) | {ACR_NAME} | Container Registry | [Azure TRE container images (Porter bundles)](../architecture/#composition-service) | [Container Registry](https://docs.microsoft.com/en-gb/azure/container-registry/container-registry-intro) ## Azure TRE Resource Group From 388e4e690d46f6c30dc99f0db24b8e519cb95f2e Mon Sep 17 00:00:00 2001 From: Tim Allen Date: Fri, 2 Aug 2024 15:31:51 +0100 Subject: [PATCH 56/79] opentelemetry version fix (#4051) * update * update * change versions --- CHANGELOG.md | 1 + api_app/_version.py | 2 +- api_app/requirements.txt | 4 ++-- resource_processor/_version.py | 2 +- resource_processor/vmss_porter/requirements.txt | 4 ++-- 5 files changed, 7 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 93f133c5dc..1652c69d2c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ BUG FIXES: * Fix numbering issue within `bug_report.md` template ([#4028](https://github.com/microsoft/AzureTRE/pull/4028)) * Disable public network access to the API App Service ([#3986](https://github.com/microsoft/AzureTRE/issues/3986)) * Update Docs to format emojis properly ([#4027](https://github.com/microsoft/AzureTRE/issues/4027)) +* Update API and Resource Processor opentelemetry versions COMPONENTS: diff --git a/api_app/_version.py b/api_app/_version.py index 963aa2b5eb..fce337455e 100644 --- a/api_app/_version.py +++ b/api_app/_version.py @@ -1 +1 @@ -__version__ = "0.18.9" +__version__ = "0.18.10" diff --git a/api_app/requirements.txt b/api_app/requirements.txt index cd8df17246..d90e422da4 100644 --- a/api_app/requirements.txt +++ b/api_app/requirements.txt @@ -8,7 +8,7 @@ azure-mgmt-cosmosdb==9.3.0 azure-mgmt-costmanagement==4.0.1 azure-mgmt-resource==23.0.1 azure-mgmt-storage==21.1.0 -azure-monitor-opentelemetry==1.2.0 +azure-monitor-opentelemetry~=1.6 azure-servicebus==7.11.3 azure-storage-blob==12.19.0 fastapi==0.110.0 @@ -16,7 +16,7 @@ fastapi-utils==0.2.1 gunicorn==22.0.0 jsonschema[format_nongpl]==4.19.1 msal==1.26.0 -opentelemetry.instrumentation.logging==0.44b0 +opentelemetry.instrumentation.logging>=0.44b0 pandas==2.0.3 PyJWT==2.8.0 pytz==2022.7 diff --git a/resource_processor/_version.py b/resource_processor/_version.py index 3e2f46a3a3..d69d16e980 100644 --- a/resource_processor/_version.py +++ b/resource_processor/_version.py @@ -1 +1 @@ -__version__ = "0.9.0" +__version__ = "0.9.1" diff --git a/resource_processor/vmss_porter/requirements.txt b/resource_processor/vmss_porter/requirements.txt index 48dedfb07f..60c8454fb8 100644 --- a/resource_processor/vmss_porter/requirements.txt +++ b/resource_processor/vmss_porter/requirements.txt @@ -1,6 +1,6 @@ aiohttp==3.9.4 azure-cli-core==2.57.0 azure-identity==1.14.1 -azure-monitor-opentelemetry==1.2.0 +azure-monitor-opentelemetry~=1.6 azure-servicebus==7.11.3 -opentelemetry.instrumentation.logging==0.44b0 +opentelemetry.instrumentation.logging>=0.44b0 From 2aa05659b617b73ba86724cad1dc351fca2e546f Mon Sep 17 00:00:00 2001 From: Tim Allen Date: Mon, 5 Aug 2024 14:52:28 +0100 Subject: [PATCH 57/79] Snyk updates new (#3956) * Update clean_validation_envs.yml * update * update BRANCH_LAST_ACTIVITY_IN_HOURS_FOR_STOP: 8 * update versions * Snyk updates 0524 (#3932) * Update clean_validation_envs.yml * update * update BRANCH_LAST_ACTIVITY_IN_HOURS_FOR_STOP: 8 * snyk update * update version * update * update * update * update version * update * remove extras * update version --- .../guacamole-server/docker/version.txt | 2 +- .../guacamole-auth-azure/pom.xml | 6 ++-- ui/app/package.json | 8 ++--- ui/app/yarn.lock | 34 +++++++++---------- 4 files changed, 25 insertions(+), 25 deletions(-) diff --git a/templates/workspace_services/guacamole/guacamole-server/docker/version.txt b/templates/workspace_services/guacamole/guacamole-server/docker/version.txt index 732155f8df..fa3ddd8c5a 100644 --- a/templates/workspace_services/guacamole/guacamole-server/docker/version.txt +++ b/templates/workspace_services/guacamole/guacamole-server/docker/version.txt @@ -1 +1 @@ -__version__ = "0.8.3" +__version__ = "0.8.4" diff --git a/templates/workspace_services/guacamole/guacamole-server/guacamole-auth-azure/pom.xml b/templates/workspace_services/guacamole/guacamole-server/guacamole-auth-azure/pom.xml index 70d4939e9a..e0e9f77479 100644 --- a/templates/workspace_services/guacamole/guacamole-server/guacamole-auth-azure/pom.xml +++ b/templates/workspace_services/guacamole/guacamole-server/guacamole-auth-azure/pom.xml @@ -41,19 +41,19 @@ org.apache.guacamole guacamole-ext - 1.5.4 + 1.5.5 provided com.azure azure-security-keyvault-secrets - 4.7.3 + 4.8.2 com.azure azure-identity - 1.11.2 + 1.12.0 diff --git a/ui/app/package.json b/ui/app/package.json index f691245496..aee4010354 100644 --- a/ui/app/package.json +++ b/ui/app/package.json @@ -1,6 +1,6 @@ { "name": "tre-ui", - "version": "0.5.24", + "version": "0.5.25", "private": true, "dependencies": { "@azure/msal-browser": "^2.35.0", @@ -20,13 +20,13 @@ "@types/react-dom": "^18.2.6", "moment": "^2.29.4", "node-sass": "^8.0.0", - "react": "^18.2.0", - "react-dom": "^18.2.0", + "react": "^18.3.1", + "react-dom": "^18.3.1", "react-markdown": "^8.0.3", "react-redux": "^8.0.4", "react-router-dom": "6.22.1", "remark-gfm": "^3.0.1", - "typescript": "^5.3.3", + "typescript": "^5.4.5", "web-vitals": "^3.3.0" }, "devDependencies": { diff --git a/ui/app/yarn.lock b/ui/app/yarn.lock index d711e557a4..5556d178af 100644 --- a/ui/app/yarn.lock +++ b/ui/app/yarn.lock @@ -9373,13 +9373,13 @@ react-dev-utils@^12.0.1: strip-ansi "^6.0.1" text-table "^0.2.0" -react-dom@^18.2.0: - version "18.2.0" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d" - integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== +react-dom@^18.3.1: + version "18.3.1" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.3.1.tgz#c2265d79511b57d479b3dd3fdfa51536494c5cb4" + integrity sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw== dependencies: loose-envify "^1.1.0" - scheduler "^0.23.0" + scheduler "^0.23.2" react-error-overlay@^6.0.11: version "6.0.11" @@ -9514,10 +9514,10 @@ react-scripts@5.0.1: optionalDependencies: fsevents "^2.3.2" -react@^18.2.0: - version "18.2.0" - resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" - integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== +react@^18.3.1: + version "18.3.1" + resolved "https://registry.yarnpkg.com/react/-/react-18.3.1.tgz#49ab892009c53933625bd16b2533fc754cab2891" + integrity sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ== dependencies: loose-envify "^1.1.0" @@ -9917,10 +9917,10 @@ saxes@^5.0.1: dependencies: xmlchars "^2.2.0" -scheduler@^0.23.0: - version "0.23.0" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe" - integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw== +scheduler@^0.23.2: + version "0.23.2" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.2.tgz#414ba64a3b282892e944cf2108ecc078d115cdc3" + integrity sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ== dependencies: loose-envify "^1.1.0" @@ -10977,10 +10977,10 @@ typedarray-to-buffer@^3.1.5: dependencies: is-typedarray "^1.0.0" -typescript@^5.3.3: - version "5.3.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.3.3.tgz#b3ce6ba258e72e6305ba66f5c9b452aaee3ffe37" - integrity sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw== +typescript@^5.4.5: + version "5.4.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.5.tgz#42ccef2c571fdbd0f6718b1d1f5e6e5ef006f611" + integrity sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ== unbox-primitive@^1.0.2: version "1.0.2" From e14f440d775607e3ff9ef490a7c9de4b4b39f838 Mon Sep 17 00:00:00 2001 From: Tim Allen Date: Mon, 5 Aug 2024 16:26:26 +0100 Subject: [PATCH 58/79] update dependabot dependencies (#4037) * update dependencies * update app version * update chnagelog * update * Update CHANGELOG.md * Update _version.py * Update _version.py --- .github/scripts/yarn.lock | 24 ++++++++-------- CHANGELOG.md | 3 +- airlock_processor/_version.py | 2 +- airlock_processor/requirements.txt | 2 +- api_app/_version.py | 2 +- api_app/requirements.txt | 2 +- cli/requirements.txt | 2 +- cli/setup.py | 2 +- resource_processor/_version.py | 2 +- .../vmss_porter/requirements.txt | 2 +- .../guacamole-server/docker/version.txt | 2 +- .../guacamole-auth-azure/pom.xml | 2 +- ui/app/package.json | 2 +- ui/app/yarn.lock | 28 +++++++++---------- 14 files changed, 39 insertions(+), 38 deletions(-) diff --git a/.github/scripts/yarn.lock b/.github/scripts/yarn.lock index 443db916a6..f7a5a941d1 100644 --- a/.github/scripts/yarn.lock +++ b/.github/scripts/yarn.lock @@ -774,12 +774,12 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" -braces@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== +braces@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" + integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== dependencies: - fill-range "^7.0.1" + fill-range "^7.1.1" browser-process-hrtime@^1.0.0: version "1.0.0" @@ -1109,10 +1109,10 @@ fb-watchman@^2.0.0: dependencies: bser "2.1.1" -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== +fill-range@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" + integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== dependencies: to-regex-range "^5.0.1" @@ -2479,9 +2479,9 @@ write-file-atomic@^3.0.0: typedarray-to-buffer "^3.1.5" ws@^7.4.6: - version "7.5.9" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" - integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== + version "7.5.10" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.10.tgz#58b5c20dc281633f6c19113f39b349bd8bd558d9" + integrity sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ== xml-name-validator@^3.0.0: version "3.0.0" diff --git a/CHANGELOG.md b/CHANGELOG.md index 1652c69d2c..2125d62ce8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,8 +14,9 @@ ENHANCEMENTS: BUG FIXES: * Fix numbering issue within `bug_report.md` template ([#4028](https://github.com/microsoft/AzureTRE/pull/4028)) * Disable public network access to the API App Service ([#3986](https://github.com/microsoft/AzureTRE/issues/3986)) +* Add Dependabot Security updates for July * Update Docs to format emojis properly ([#4027](https://github.com/microsoft/AzureTRE/issues/4027)) -* Update API and Resource Processor opentelemetry versions +* Update API and Resource Processor opentelemetry versions ([#4052](https://github.com/microsoft/AzureTRE/issues/4052)) COMPONENTS: diff --git a/airlock_processor/_version.py b/airlock_processor/_version.py index a5f830a2c0..bc8c296f6a 100644 --- a/airlock_processor/_version.py +++ b/airlock_processor/_version.py @@ -1 +1 @@ -__version__ = "0.7.1" +__version__ = "0.7.2" diff --git a/airlock_processor/requirements.txt b/airlock_processor/requirements.txt index f27bc566bd..0b984bab32 100644 --- a/airlock_processor/requirements.txt +++ b/airlock_processor/requirements.txt @@ -2,7 +2,7 @@ azure-core==1.30.0 azure-functions==1.17.0 azure-storage-blob==12.19.0 -azure-identity==1.14.1 +azure-identity==1.16.1 azure-mgmt-storage==21.1.0 azure-mgmt-resource==23.0.1 pydantic==1.10.13 diff --git a/api_app/_version.py b/api_app/_version.py index fce337455e..2cfeb05209 100644 --- a/api_app/_version.py +++ b/api_app/_version.py @@ -1 +1 @@ -__version__ = "0.18.10" +__version__ = "0.18.11" diff --git a/api_app/requirements.txt b/api_app/requirements.txt index d90e422da4..5c773326ec 100644 --- a/api_app/requirements.txt +++ b/api_app/requirements.txt @@ -2,7 +2,7 @@ aiohttp==3.9.4 azure-core==1.30.0 azure-cosmos==4.5.1 azure-eventgrid==4.15.0 -azure-identity==1.14.1 +azure-identity==1.16.1 azure-mgmt-compute==30.3.0 azure-mgmt-cosmosdb==9.3.0 azure-mgmt-costmanagement==4.0.1 diff --git a/cli/requirements.txt b/cli/requirements.txt index 3f55c3ca44..57c1f59079 100644 --- a/cli/requirements.txt +++ b/cli/requirements.txt @@ -7,5 +7,5 @@ tabulate==0.9.0 pygments==2.16.1 PyJWT==2.8.0 azure-cli-core==2.57.0 -azure-identity==1.14.1 +azure-identity==1.16.1 aiohttp==3.9.4 diff --git a/cli/setup.py b/cli/setup.py index b1a2da314c..04e260921f 100644 --- a/cli/setup.py +++ b/cli/setup.py @@ -4,7 +4,7 @@ from setuptools import setup PROJECT = 'azure-tre-cli' -VERSION = '0.2.2' +VERSION = '0.2.3' try: long_description = open('README.md', 'rt').read() diff --git a/resource_processor/_version.py b/resource_processor/_version.py index d69d16e980..a2fecb4576 100644 --- a/resource_processor/_version.py +++ b/resource_processor/_version.py @@ -1 +1 @@ -__version__ = "0.9.1" +__version__ = "0.9.2" diff --git a/resource_processor/vmss_porter/requirements.txt b/resource_processor/vmss_porter/requirements.txt index 60c8454fb8..6c2771ffde 100644 --- a/resource_processor/vmss_porter/requirements.txt +++ b/resource_processor/vmss_porter/requirements.txt @@ -1,6 +1,6 @@ aiohttp==3.9.4 azure-cli-core==2.57.0 -azure-identity==1.14.1 +azure-identity==1.16.1 azure-monitor-opentelemetry~=1.6 azure-servicebus==7.11.3 opentelemetry.instrumentation.logging>=0.44b0 diff --git a/templates/workspace_services/guacamole/guacamole-server/docker/version.txt b/templates/workspace_services/guacamole/guacamole-server/docker/version.txt index fa3ddd8c5a..af46754d38 100644 --- a/templates/workspace_services/guacamole/guacamole-server/docker/version.txt +++ b/templates/workspace_services/guacamole/guacamole-server/docker/version.txt @@ -1 +1 @@ -__version__ = "0.8.4" +__version__ = "0.8.5" diff --git a/templates/workspace_services/guacamole/guacamole-server/guacamole-auth-azure/pom.xml b/templates/workspace_services/guacamole/guacamole-server/guacamole-auth-azure/pom.xml index e0e9f77479..b3d2a3ec1b 100644 --- a/templates/workspace_services/guacamole/guacamole-server/guacamole-auth-azure/pom.xml +++ b/templates/workspace_services/guacamole/guacamole-server/guacamole-auth-azure/pom.xml @@ -53,7 +53,7 @@ com.azure azure-identity - 1.12.0 + 1.12.2 diff --git a/ui/app/package.json b/ui/app/package.json index aee4010354..06b9933d38 100644 --- a/ui/app/package.json +++ b/ui/app/package.json @@ -1,6 +1,6 @@ { "name": "tre-ui", - "version": "0.5.25", + "version": "0.5.26", "private": true, "dependencies": { "@azure/msal-browser": "^2.35.0", diff --git a/ui/app/yarn.lock b/ui/app/yarn.lock index 5556d178af..560f322c28 100644 --- a/ui/app/yarn.lock +++ b/ui/app/yarn.lock @@ -3485,11 +3485,11 @@ brace-expansion@^2.0.1: balanced-match "^1.0.0" braces@^3.0.2, braces@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + version "3.0.3" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" + integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== dependencies: - fill-range "^7.0.1" + fill-range "^7.1.1" browser-process-hrtime@^1.0.0: version "1.0.0" @@ -5256,10 +5256,10 @@ filesize@^8.0.6: resolved "https://registry.yarnpkg.com/filesize/-/filesize-8.0.7.tgz#695e70d80f4e47012c132d57a059e80c6b580bd8" integrity sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ== -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== +fill-range@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" + integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== dependencies: to-regex-range "^5.0.1" @@ -11778,14 +11778,14 @@ write-file-atomic@^3.0.0: typedarray-to-buffer "^3.1.5" ws@^7.4.6: - version "7.5.9" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" - integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== + version "7.5.10" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.10.tgz#58b5c20dc281633f6c19113f39b349bd8bd558d9" + integrity sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ== ws@^8.13.0: - version "8.16.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.16.0.tgz#d1cd774f36fbc07165066a60e40323eab6446fd4" - integrity sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ== + version "8.17.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.17.1.tgz#9293da530bb548febc95371d90f9c878727d919b" + integrity sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ== xml-name-validator@^3.0.0: version "3.0.0" From b1243d85b898d70b5233cf93e3e2dab6589fbe47 Mon Sep 17 00:00:00 2001 From: Marcus Robinson Date: Mon, 5 Aug 2024 16:36:02 +0100 Subject: [PATCH 59/79] Fix Guacamole shared drive always enabled (#4046) * Fix Guacamole shared drive always enabled Related to #3885 Update Guacamole shared drive configuration to respect the 'drive' option setting. * Change the default value of `guac_enable_drive` to `false` in `templates/workspace_services/guacamole/porter.yaml`. * Change the default value of `guac_enable_drive` to `false` in `templates/workspace_services/guacamole/template_schema.json`. --- For more details, open the [Copilot Workspace session](https://copilot-workspace.githubnext.com/microsoft/AzureTRE/issues/3885?shareId=XXXX-XXXX-XXXX-XXXX). * Update change log * Update CHANGELOG.md --------- Co-authored-by: Tim Allen --- CHANGELOG.md | 1 + templates/workspace_services/guacamole/porter.yaml | 2 +- templates/workspace_services/guacamole/template_schema.json | 3 ++- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2125d62ce8..fe572858e0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ ENHANCEMENTS: BUG FIXES: * Fix numbering issue within `bug_report.md` template ([#4028](https://github.com/microsoft/AzureTRE/pull/4028)) * Disable public network access to the API App Service ([#3986](https://github.com/microsoft/AzureTRE/issues/3986)) +* Fix Guacamole shared drive always enabled ([#3885](https://github.com/microsoft/AzureTRE/issues/3885)) * Add Dependabot Security updates for July * Update Docs to format emojis properly ([#4027](https://github.com/microsoft/AzureTRE/issues/4027)) * Update API and Resource Processor opentelemetry versions ([#4052](https://github.com/microsoft/AzureTRE/issues/4052)) diff --git a/templates/workspace_services/guacamole/porter.yaml b/templates/workspace_services/guacamole/porter.yaml index dd081ea0b9..910efe2baa 100644 --- a/templates/workspace_services/guacamole/porter.yaml +++ b/templates/workspace_services/guacamole/porter.yaml @@ -53,7 +53,7 @@ parameters: description: "Guacamole disable paste configuration" - name: guac_enable_drive type: boolean - default: true + default: false env: GUAC_ENABLE_DRIVE description: "Guacamole enable drive configuration" - name: guac_drive_name diff --git a/templates/workspace_services/guacamole/template_schema.json b/templates/workspace_services/guacamole/template_schema.json index e0f052bd08..fa644e5c2c 100644 --- a/templates/workspace_services/guacamole/template_schema.json +++ b/templates/workspace_services/guacamole/template_schema.json @@ -46,7 +46,8 @@ "type": "boolean", "title": "Enable Drive", "description": "Enable mounted drive", - "updateable": true + "updateable": true, + "default": false }, "guac_disable_download": { "$id": "#/properties/guac_disable_download", From 4334cbcb8f7435b00ea3e10757e97178c50644b2 Mon Sep 17 00:00:00 2001 From: Marcus Robinson Date: Mon, 5 Aug 2024 18:05:28 +0100 Subject: [PATCH 60/79] Fix Blob.Created trigger to only handle Blob.Created events (#4044) * Fix Blob.Created trigger to only handle Blob.Created events Related to #3795 Update the `airlock_processor/BlobCreatedTrigger/function.json` to remove the binding for Blob.Deleted events. * Remove the `dataDeletionEvent` binding from the `airlock_processor/BlobCreatedTrigger/function.json` file. * Update the `CHANGELOG.md` to include the bug fix for the issue "Delete of in-progress container is triggered twice" (#4035). --- For more details, open the [Copilot Workspace session](https://copilot-workspace.githubnext.com/microsoft/AzureTRE/issues/3795?shareId=XXXX-XXXX-XXXX-XXXX). * Increment version * Update version from 0.7.1 to 0.7.2 --- For more details, open the [Copilot Workspace session](https://copilot-workspace.githubnext.com/microsoft/AzureTRE/issues/3795?shareId=XXXX-XXXX-XXXX-XXXX). * Update CHANGELOG.md * Update CHANGELOG.md --------- Co-authored-by: Tim Allen --- CHANGELOG.md | 1 + airlock_processor/BlobCreatedTrigger/function.json | 7 ------- airlock_processor/_version.py | 2 +- 3 files changed, 2 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fe572858e0..4ff852813c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ ENHANCEMENTS: BUG FIXES: * Fix numbering issue within `bug_report.md` template ([#4028](https://github.com/microsoft/AzureTRE/pull/4028)) * Disable public network access to the API App Service ([#3986](https://github.com/microsoft/AzureTRE/issues/3986)) +* Delete of in-progress container is triggered twice ([#3795](https://github.com/microsoft/AzureTRE/issues/3795)) * Fix Guacamole shared drive always enabled ([#3885](https://github.com/microsoft/AzureTRE/issues/3885)) * Add Dependabot Security updates for July * Update Docs to format emojis properly ([#4027](https://github.com/microsoft/AzureTRE/issues/4027)) diff --git a/airlock_processor/BlobCreatedTrigger/function.json b/airlock_processor/BlobCreatedTrigger/function.json index 5bde252c39..e797023cc3 100644 --- a/airlock_processor/BlobCreatedTrigger/function.json +++ b/airlock_processor/BlobCreatedTrigger/function.json @@ -16,13 +16,6 @@ "topicEndpointUri": "EVENT_GRID_STEP_RESULT_TOPIC_URI_SETTING", "topicKeySetting": "EVENT_GRID_STEP_RESULT_TOPIC_KEY_SETTING", "direction": "out" - }, - { - "type": "eventGrid", - "name": "dataDeletionEvent", - "topicEndpointUri": "EVENT_GRID_DATA_DELETION_TOPIC_URI_SETTING", - "topicKeySetting": "EVENT_GRID_DATA_DELETION_TOPIC_KEY_SETTING", - "direction": "out" } ] } diff --git a/airlock_processor/_version.py b/airlock_processor/_version.py index bc8c296f6a..4910b9ec3e 100644 --- a/airlock_processor/_version.py +++ b/airlock_processor/_version.py @@ -1 +1 @@ -__version__ = "0.7.2" +__version__ = "0.7.3" From f2c5ef89221eddf66bf37938a5dafc7cb7d6d48b Mon Sep 17 00:00:00 2001 From: Tim Allen Date: Tue, 6 Aug 2024 14:19:15 +0100 Subject: [PATCH 61/79] Cost API Error (#4035) * E2e test number (#23) * update * update changelog * test * update * update * update changelog * update * update --- CHANGELOG.md | 1 + ui/app/package.json | 2 +- ui/app/src/components/shared/ExceptionLayout.tsx | 11 +++++++++-- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4ff852813c..a8149ca6b3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ ENHANCEMENTS: * Remove AppServiceFileAuditLogs diagnostic setting ([#4033](https://github.com/microsoft/AzureTRE/issues/4033)) BUG FIXES: +* Removed 429 Error (Costs API) form presenting in UI ([#3929](https://github.com/microsoft/AzureTRE/issues/3929)) * Fix numbering issue within `bug_report.md` template ([#4028](https://github.com/microsoft/AzureTRE/pull/4028)) * Disable public network access to the API App Service ([#3986](https://github.com/microsoft/AzureTRE/issues/3986)) * Delete of in-progress container is triggered twice ([#3795](https://github.com/microsoft/AzureTRE/issues/3795)) diff --git a/ui/app/package.json b/ui/app/package.json index 06b9933d38..882f7375b3 100644 --- a/ui/app/package.json +++ b/ui/app/package.json @@ -1,6 +1,6 @@ { "name": "tre-ui", - "version": "0.5.26", + "version": "0.5.27", "private": true, "dependencies": { "@azure/msal-browser": "^2.35.0", diff --git a/ui/app/src/components/shared/ExceptionLayout.tsx b/ui/app/src/components/shared/ExceptionLayout.tsx index f472489037..dc29b3c1a9 100644 --- a/ui/app/src/components/shared/ExceptionLayout.tsx +++ b/ui/app/src/components/shared/ExceptionLayout.tsx @@ -8,6 +8,7 @@ interface ExceptionLayoutProps { export const ExceptionLayout: React.FunctionComponent = (props: ExceptionLayoutProps) => { const [showDetails, setShowDetails] = useState(false); + const [showMessageBar, setShowMessageBar] = useState(true); switch (props.e.status) { case 403: @@ -22,11 +23,17 @@ export const ExceptionLayout: React.FunctionComponent = (p

Attempted resource: {props.e.endpoint}

); + case 429: + return (<>); default: + if (!showMessageBar) return null; return ( - setShowMessageBar(false)} + dismissButtonAriaLabel="Close" >

{props.e.userMessage}

{props.e.message}


@@ -65,6 +72,6 @@ export const ExceptionLayout: React.FunctionComponent = (p }
- ) + ); } }; From 792e1a46ace38cbca928b9ce68b58b8f84348b1f Mon Sep 17 00:00:00 2001 From: Marcus Robinson Date: Tue, 6 Aug 2024 17:51:44 +0100 Subject: [PATCH 62/79] Revert "Fix Blob.Created trigger to only handle Blob.Created events" (#4060) Revert "Fix Blob.Created trigger to only handle Blob.Created events (#4044)" This reverts commit 4334cbcb8f7435b00ea3e10757e97178c50644b2. Co-authored-by: Tim Allen --- CHANGELOG.md | 1 - airlock_processor/BlobCreatedTrigger/function.json | 7 +++++++ airlock_processor/_version.py | 2 +- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a8149ca6b3..515371271f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,7 +15,6 @@ BUG FIXES: * Removed 429 Error (Costs API) form presenting in UI ([#3929](https://github.com/microsoft/AzureTRE/issues/3929)) * Fix numbering issue within `bug_report.md` template ([#4028](https://github.com/microsoft/AzureTRE/pull/4028)) * Disable public network access to the API App Service ([#3986](https://github.com/microsoft/AzureTRE/issues/3986)) -* Delete of in-progress container is triggered twice ([#3795](https://github.com/microsoft/AzureTRE/issues/3795)) * Fix Guacamole shared drive always enabled ([#3885](https://github.com/microsoft/AzureTRE/issues/3885)) * Add Dependabot Security updates for July * Update Docs to format emojis properly ([#4027](https://github.com/microsoft/AzureTRE/issues/4027)) diff --git a/airlock_processor/BlobCreatedTrigger/function.json b/airlock_processor/BlobCreatedTrigger/function.json index e797023cc3..5bde252c39 100644 --- a/airlock_processor/BlobCreatedTrigger/function.json +++ b/airlock_processor/BlobCreatedTrigger/function.json @@ -16,6 +16,13 @@ "topicEndpointUri": "EVENT_GRID_STEP_RESULT_TOPIC_URI_SETTING", "topicKeySetting": "EVENT_GRID_STEP_RESULT_TOPIC_KEY_SETTING", "direction": "out" + }, + { + "type": "eventGrid", + "name": "dataDeletionEvent", + "topicEndpointUri": "EVENT_GRID_DATA_DELETION_TOPIC_URI_SETTING", + "topicKeySetting": "EVENT_GRID_DATA_DELETION_TOPIC_KEY_SETTING", + "direction": "out" } ] } diff --git a/airlock_processor/_version.py b/airlock_processor/_version.py index 4910b9ec3e..bc8c296f6a 100644 --- a/airlock_processor/_version.py +++ b/airlock_processor/_version.py @@ -1 +1 @@ -__version__ = "0.7.3" +__version__ = "0.7.2" From e84e62516d29142f00554e0a5fe173b587b6cfe1 Mon Sep 17 00:00:00 2001 From: Tim Allen Date: Thu, 8 Aug 2024 12:26:17 +0100 Subject: [PATCH 63/79] update docs for links to work (#4061) * update docs * update changelog * update * update --- CHANGELOG.md | 1 + docs/azure-tre-overview/case-studies.md | 8 ++++---- mkdocs.yml | 1 + 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 515371271f..3d8ce2dbc7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,7 @@ BUG FIXES: * Add Dependabot Security updates for July * Update Docs to format emojis properly ([#4027](https://github.com/microsoft/AzureTRE/issues/4027)) * Update API and Resource Processor opentelemetry versions ([#4052](https://github.com/microsoft/AzureTRE/issues/4052)) +* Fix broken links in new Case Study Docs COMPONENTS: diff --git a/docs/azure-tre-overview/case-studies.md b/docs/azure-tre-overview/case-studies.md index d95d8be1d0..c6ecf62518 100644 --- a/docs/azure-tre-overview/case-studies.md +++ b/docs/azure-tre-overview/case-studies.md @@ -4,17 +4,17 @@ Imperial College London partnered with CloudKubed to address the increasing demands for scalable and centralised research solutions. The challenge was to enhance project visibility, streamline end-to-end research, and improve the management of research projects. CloudKubed implemented a cloud-based Azure Trusted Research Environment (TRE) aligned with Imperial’s strategy and needs. This TRE integrated approval processes and provided a secure, compliant environment for research. The outcome allowed Imperial to efficiently provision workspaces, facilitate access to research tools, and streamline the entire research process. The partnership significantly improved the efficiency of research operations and compliance with data security measures. -Click [here]("https://www.cloudkubed.com/case-studies/imperial-college-london-trusted-research-environment/") to see the full case study. +Click [here](https://cloudkubed.com/case-studies/imperial-college-london-trusted-research-environment/ "CloudKubed and Imperial College London"){target="_blank"} to see the full case study. ## Building the Trusted Research Environment with Azure Databricks The importance of secure and scalable data environments in healthcare research has grown, particularly highlighted by the COVID-19 pandemic. The Trusted Research Environments (TREs) enable secure collaboration on sensitive data while maintaining patient privacy. Azure Databricks enhances TREs by offering scalable, secure, and flexible data processing capabilities. -For example, Providence Health used Azure Databricks to reduce hospital overcrowding and improve patient care by leveraging real-time data. The integration of Azure Databricks into the Azure TRE blueprint allows researchers to perform complex data analysis securely, promoting innovative research and improved healthcare outcomes. +The integration of Azure Databricks into the Azure TRE blueprint allows researchers to perform complex data analysis securely, promoting innovative research and improved healthcare outcomes. -Click [here]("https://www.databricks.com/blog/2023/03/27/trusted-research-environments-health-and-life-sciences.html") to see the full case study. +Click [here](https://databricks.com/blog/2023/03/27/trusted-research-environments-health-and-life-sciences.html "Building the Trusted Research Environment with Azure Databricks"){target="_blank"} to see the full case study. ## Data Saves Lives: Lessons to Enable Healthcare Research by PA Consulting The UK Government's investment in secure data environments (SDEs) aims to make health data more accessible for research, enhancing patient outcomes and accelerating life sciences research. Key lessons from implementing SDEs include leveraging cloud technologies for scalability, publicising access and pricing to facilitate research, and improving communication to drive public consent. Establishing clear data roles and shared services, building trust through transparency, and starting small to scale effectively are critical for success. These steps ensure that health data can be used ethically and efficiently, transforming care and services in the UK. -Click [here]("https://www.paconsulting.com/insights/data-saves-lives-lessons-to-enable-healthcare-research") to see the full case study. +Click [here](https://paconsulting.com/insights/data-saves-lives-lessons-to-enable-healthcare-research "Data Saves Lives: Lessons to Enable Healthcare Research by PA Consulting"){target="_blank"} to see the full case study. diff --git a/mkdocs.yml b/mkdocs.yml index a4e2aa3d2c..b1b2679ce3 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -46,6 +46,7 @@ markdown_extensions: - pymdownx.emoji: emoji_index: !!python/name:material.extensions.emoji.twemoji emoji_generator: !!python/name:material.extensions.emoji.to_svg + - attr_list nav: - Overview: # Pages to explain what the Azure TRE From f1c17b879743277caf1e62f84e5c87993f18727f Mon Sep 17 00:00:00 2001 From: Tim Allen Date: Wed, 14 Aug 2024 10:09:14 +0100 Subject: [PATCH 64/79] update vm_config for screensaver timeout (#4064) * update vm_config for screensaver timeout amnd update dotnet sdk * update * update * update * update changelog --- CHANGELOG.md | 1 + .../guacamole-azure-linuxvm/porter.yaml | 2 +- .../terraform/vm_config.sh | 24 ++++--------------- 3 files changed, 7 insertions(+), 20 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3d8ce2dbc7..da63beea9e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,7 @@ BUG FIXES: * Update Docs to format emojis properly ([#4027](https://github.com/microsoft/AzureTRE/issues/4027)) * Update API and Resource Processor opentelemetry versions ([#4052](https://github.com/microsoft/AzureTRE/issues/4052)) * Fix broken links in new Case Study Docs +* Update Linux VM to stop screensaver locking out the user ([#4065](https://github.com/microsoft/AzureTRE/issues/4065)) COMPONENTS: 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 cbd074d962..992cb02481 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.0.0 +version: 1.0.1 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/terraform/vm_config.sh b/templates/workspace_services/guacamole/user_resources/guacamole-azure-linuxvm/terraform/vm_config.sh index 71d7317545..944f7f25ac 100644 --- a/templates/workspace_services/guacamole/user_resources/guacamole-azure-linuxvm/terraform/vm_config.sh +++ b/templates/workspace_services/guacamole/user_resources/guacamole-azure-linuxvm/terraform/vm_config.sh @@ -40,7 +40,7 @@ sudo apt install -y jupyter-notebook microsoft-edge-dev ## VS Code echo "init_vm.sh: VS Code" -sudo apt install -y code +sudo apt install -y code sudo apt install -y gvfs-bin || true echo "init_vm.sh: Folders" @@ -166,24 +166,10 @@ sudo sed -i -e 's/Terminal=true/Terminal=false/g' /usr/share/applications/jupyte # Default Browser sudo update-alternatives --config x-www-browser +# Prevent screen timeout +echo "init_vm.sh: Preventing Timeout" +sudo apt-get remove xfce4-screensaver -y + ## Cleanup echo "init_vm.sh: Cleanup" sudo shutdown -r now - -# Prevent screen timeout -echo "init_vm.sh: Preventing Timeout" -sudo touch /home/"${VM_USER}"/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-screensaver.xml -sudo chmod 664 /home/"${VM_USER}"/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-screensaver.xml -sudo chown "${VM_USER}":"${VM_USER}" /home/"${VM_USER}"/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-screensaver.xml -sudo tee /home/"${VM_USER}"/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-screensaver.xml << END - - - - - - - - - - -END From cb598712842a3db2956a78dea38d8c7ec22c7c37 Mon Sep 17 00:00:00 2001 From: Tim Allen Date: Wed, 14 Aug 2024 15:05:52 +0100 Subject: [PATCH 65/79] Snyk 0824 (#4059) * [pull] main from microsoft:main (#25) * updaet packages * update version * update yarn.lock --------- Co-authored-by: pull[bot] <39814207+pull[bot]@users.noreply.github.com> --- ui/app/package.json | 12 +- ui/app/yarn.lock | 3162 ++++++++++++++++++++++--------------------- 2 files changed, 1624 insertions(+), 1550 deletions(-) diff --git a/ui/app/package.json b/ui/app/package.json index 882f7375b3..31b0b45bcc 100644 --- a/ui/app/package.json +++ b/ui/app/package.json @@ -1,12 +1,12 @@ { "name": "tre-ui", - "version": "0.5.27", + "version": "0.5.28", "private": true, "dependencies": { "@azure/msal-browser": "^2.35.0", "@azure/msal-react": "^1.5.12", - "@fluentui/react": "^8.114.1", - "@fluentui/react-file-type-icons": "^8.7.9", + "@fluentui/react": "^8.119.1", + "@fluentui/react-file-type-icons": "^8.11.18", "@reduxjs/toolkit": "^1.8.6", "@rjsf/core": "^4.2.3", "@rjsf/fluent-ui": "^4.2.3", @@ -15,8 +15,8 @@ "@testing-library/user-event": "^14.4.3", "@testing-library/dom": "^7.21.4", "@types/jest": "^29.5.0", - "@types/node": "^20.4.2", - "@types/react": "^18.0.25", + "@types/node": "^20.14.10", + "@types/react": "^18.3.3", "@types/react-dom": "^18.2.6", "moment": "^2.29.4", "node-sass": "^8.0.0", @@ -26,7 +26,7 @@ "react-redux": "^8.0.4", "react-router-dom": "6.22.1", "remark-gfm": "^3.0.1", - "typescript": "^5.4.5", + "typescript": "^5.5.3", "web-vitals": "^3.3.0" }, "devDependencies": { diff --git a/ui/app/yarn.lock b/ui/app/yarn.lock index 560f322c28..764ac385db 100644 --- a/ui/app/yarn.lock +++ b/ui/app/yarn.lock @@ -2,15 +2,10 @@ # yarn lockfile v1 -"@aashutoshrathi/word-wrap@^1.2.3": - version "1.2.6" - resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" - integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== - -"@adobe/css-tools@^4.3.2": - version "4.3.3" - resolved "https://registry.yarnpkg.com/@adobe/css-tools/-/css-tools-4.3.3.tgz#90749bde8b89cd41764224f5aac29cd4138f75ff" - integrity sha512-rE0Pygv0sEZ4vBWHlAgJLGDU7Pm8xoO6p3wsEceb7GYAjScrOHpEo8KK/eVkAcnSM+slAEtXjA2JpdjLp4fJQQ== +"@adobe/css-tools@^4.4.0": + version "4.4.0" + resolved "https://registry.yarnpkg.com/@adobe/css-tools/-/css-tools-4.4.0.tgz#728c484f4e10df03d5a3acd0d8adcbbebff8ad63" + integrity sha512-Ff9+ksdQQB3rMncgqDK78uLznstjyfIf2Arnh22pW8kBpLs6rpKDwgnZT46hin5Hl1WzazzK64DOrhSwYpS7bQ== "@alloc/quick-lru@^5.2.0": version "5.2.0" @@ -18,12 +13,12 @@ integrity sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw== "@ampproject/remapping@^2.2.0": - version "2.2.1" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630" - integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== + version "2.3.0" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4" + integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw== dependencies: - "@jridgewell/gen-mapping" "^0.3.0" - "@jridgewell/trace-mapping" "^0.3.9" + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.24" "@apideck/better-ajv-errors@^0.3.1": version "0.3.6" @@ -35,50 +30,50 @@ leven "^3.1.0" "@azure/msal-browser@^2.35.0": - version "2.38.3" - resolved "https://registry.yarnpkg.com/@azure/msal-browser/-/msal-browser-2.38.3.tgz#2f131fa9b7a8a9546fc8d34e5d99ce4c18b04147" - integrity sha512-2WuLFnWWPR1IdvhhysT18cBbkXx1z0YIchVss5AwVA95g7CU5CpT3d+5BcgVGNXDXbUU7/5p0xYHV99V5z8C/A== + version "2.39.0" + resolved "https://registry.yarnpkg.com/@azure/msal-browser/-/msal-browser-2.39.0.tgz#684fd3974c2628b2dffd04a4c8416a0945b42b69" + integrity sha512-kks/n2AJzKUk+DBqZhiD+7zeQGBl+WpSOQYzWy6hff3bU0ZrYFqr4keFLlzB5VKuKZog0X59/FGHb1RPBDZLVg== dependencies: - "@azure/msal-common" "13.3.1" + "@azure/msal-common" "13.3.3" -"@azure/msal-common@13.3.1": - version "13.3.1" - resolved "https://registry.yarnpkg.com/@azure/msal-common/-/msal-common-13.3.1.tgz#012465bf940d12375dc47387b754ccf9d6b92180" - integrity sha512-Lrk1ozoAtaP/cp53May3v6HtcFSVxdFrg2Pa/1xu5oIvsIwhxW6zSPibKefCOVgd5osgykMi5jjcZHv8XkzZEQ== +"@azure/msal-common@13.3.3": + version "13.3.3" + resolved "https://registry.yarnpkg.com/@azure/msal-common/-/msal-common-13.3.3.tgz#b4963c9e5a164ed890b204becb036303ccf4f6ac" + integrity sha512-n278DdCXKeiWhLwhEL7/u9HRMyzhUXLefeajiknf6AmEedoiOiv2r5aRJ7LXdT3NGPyubkdIbthaJlVtmuEqvA== "@azure/msal-react@^1.5.12": - version "1.5.12" - resolved "https://registry.yarnpkg.com/@azure/msal-react/-/msal-react-1.5.12.tgz#d0a74161977bca6ffc30bb9177f7f9f5314aa5b8" - integrity sha512-waz8wFWVSLn3g8033uK6byGF29w3Lpg5gzuTKEJyBaAgoed3p09nuMYZRLgqFdXeAazpw/YthLdKRNN9DlMrQA== + version "1.5.13" + resolved "https://registry.yarnpkg.com/@azure/msal-react/-/msal-react-1.5.13.tgz#1b1d2b2c3108984c0d9de2d5ed9a872a35968141" + integrity sha512-rv3q7hwZS5VQs5AXgdoXwrPnCc0/xs3YmWNxhyCFw7JWZ3Nq0hV1JJSvWXZgXQIINOV7hCky3lYaRgHYT9qyKw== -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.0", "@babel/code-frame@^7.23.5", "@babel/code-frame@^7.8.3": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.23.5.tgz#9009b69a8c602293476ad598ff53e4562e15c244" - integrity sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA== +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.0", "@babel/code-frame@^7.24.7", "@babel/code-frame@^7.8.3": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.24.7.tgz#882fd9e09e8ee324e496bd040401c6f046ef4465" + integrity sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA== dependencies: - "@babel/highlight" "^7.23.4" - chalk "^2.4.2" + "@babel/highlight" "^7.24.7" + picocolors "^1.0.0" -"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.23.5": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.23.5.tgz#ffb878728bb6bdcb6f4510aa51b1be9afb8cfd98" - integrity sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw== +"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.25.2": + version "7.25.2" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.25.2.tgz#e41928bd33475305c586f6acbbb7e3ade7a6f7f5" + integrity sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ== "@babel/core@^7.1.0", "@babel/core@^7.11.1", "@babel/core@^7.12.3", "@babel/core@^7.16.0", "@babel/core@^7.23.7", "@babel/core@^7.7.2", "@babel/core@^7.8.0": - version "7.24.0" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.24.0.tgz#56cbda6b185ae9d9bed369816a8f4423c5f2ff1b" - integrity sha512-fQfkg0Gjkza3nf0c7/w6Xf34BW4YvzNfACRLmmb7XRLa6XHdR+K9AlJlxneFfWYf6uhOzuzZVTjF/8KfndZANw== + version "7.25.2" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.25.2.tgz#ed8eec275118d7613e77a352894cd12ded8eba77" + integrity sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA== dependencies: "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.23.5" - "@babel/generator" "^7.23.6" - "@babel/helper-compilation-targets" "^7.23.6" - "@babel/helper-module-transforms" "^7.23.3" - "@babel/helpers" "^7.24.0" - "@babel/parser" "^7.24.0" - "@babel/template" "^7.24.0" - "@babel/traverse" "^7.24.0" - "@babel/types" "^7.24.0" + "@babel/code-frame" "^7.24.7" + "@babel/generator" "^7.25.0" + "@babel/helper-compilation-targets" "^7.25.2" + "@babel/helper-module-transforms" "^7.25.2" + "@babel/helpers" "^7.25.0" + "@babel/parser" "^7.25.0" + "@babel/template" "^7.25.0" + "@babel/traverse" "^7.25.2" + "@babel/types" "^7.25.2" convert-source-map "^2.0.0" debug "^4.1.0" gensync "^1.0.0-beta.2" @@ -86,77 +81,76 @@ semver "^6.3.1" "@babel/eslint-parser@^7.16.3": - version "7.23.10" - resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.23.10.tgz#2d4164842d6db798873b40e0c4238827084667a2" - integrity sha512-3wSYDPZVnhseRnxRJH6ZVTNknBz76AEnyC+AYYhasjP3Yy23qz0ERR7Fcd2SHmYuSFJ2kY9gaaDd3vyqU09eSw== + version "7.25.1" + resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.25.1.tgz#469cee4bd18a88ff3edbdfbd227bd20e82aa9b82" + integrity sha512-Y956ghgTT4j7rKesabkh5WeqgSFZVFwaPR0IWFm7KFHFmmJ4afbG49SmfW4S+GyRPx0Dy5jxEWA5t0rpxfElWg== dependencies: "@nicolo-ribaudo/eslint-scope-5-internals" "5.1.1-v1" eslint-visitor-keys "^2.1.0" semver "^6.3.1" -"@babel/generator@^7.23.6", "@babel/generator@^7.7.2": - version "7.23.6" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.6.tgz#9e1fca4811c77a10580d17d26b57b036133f3c2e" - integrity sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw== +"@babel/generator@^7.25.0", "@babel/generator@^7.7.2": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.25.0.tgz#f858ddfa984350bc3d3b7f125073c9af6988f18e" + integrity sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw== dependencies: - "@babel/types" "^7.23.6" - "@jridgewell/gen-mapping" "^0.3.2" - "@jridgewell/trace-mapping" "^0.3.17" + "@babel/types" "^7.25.0" + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.25" jsesc "^2.5.1" -"@babel/helper-annotate-as-pure@^7.18.6", "@babel/helper-annotate-as-pure@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz#e7f06737b197d580a01edf75d97e2c8be99d3882" - integrity sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg== +"@babel/helper-annotate-as-pure@^7.18.6", "@babel/helper-annotate-as-pure@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz#5373c7bc8366b12a033b4be1ac13a206c6656aab" + integrity sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg== dependencies: - "@babel/types" "^7.22.5" + "@babel/types" "^7.24.7" -"@babel/helper-builder-binary-assignment-operator-visitor@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz#5426b109cf3ad47b91120f8328d8ab1be8b0b956" - integrity sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw== +"@babel/helper-builder-binary-assignment-operator-visitor@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.24.7.tgz#37d66feb012024f2422b762b9b2a7cfe27c7fba3" + integrity sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA== dependencies: - "@babel/types" "^7.22.15" + "@babel/traverse" "^7.24.7" + "@babel/types" "^7.24.7" -"@babel/helper-compilation-targets@^7.22.15", "@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.23.6": - version "7.23.6" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz#4d79069b16cbcf1461289eccfbbd81501ae39991" - integrity sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ== +"@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.24.7", "@babel/helper-compilation-targets@^7.24.8", "@babel/helper-compilation-targets@^7.25.2": + version "7.25.2" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz#e1d9410a90974a3a5a66e84ff55ef62e3c02d06c" + integrity sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw== dependencies: - "@babel/compat-data" "^7.23.5" - "@babel/helper-validator-option" "^7.23.5" - browserslist "^4.22.2" + "@babel/compat-data" "^7.25.2" + "@babel/helper-validator-option" "^7.24.8" + browserslist "^4.23.1" lru-cache "^5.1.1" semver "^6.3.1" -"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.21.0", "@babel/helper-create-class-features-plugin@^7.22.15", "@babel/helper-create-class-features-plugin@^7.23.6", "@babel/helper-create-class-features-plugin@^7.24.0": - version "7.24.0" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.0.tgz#fc7554141bdbfa2d17f7b4b80153b9b090e5d158" - integrity sha512-QAH+vfvts51BCsNZ2PhY6HAggnlS6omLLFTsIpeqZk/MmJ6cW7tgz5yRv0fMJThcr6FmbMrENh1RgrWPTYA76g== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-function-name" "^7.23.0" - "@babel/helper-member-expression-to-functions" "^7.23.0" - "@babel/helper-optimise-call-expression" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.20" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" +"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.21.0", "@babel/helper-create-class-features-plugin@^7.24.7", "@babel/helper-create-class-features-plugin@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.0.tgz#a109bf9c3d58dfed83aaf42e85633c89f43a6253" + integrity sha512-GYM6BxeQsETc9mnct+nIIpf63SAyzvyYN7UB/IlTyd+MBg06afFGp0mIeUqGyWgS2mxad6vqbMrHVlaL3m70sQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.24.7" + "@babel/helper-member-expression-to-functions" "^7.24.8" + "@babel/helper-optimise-call-expression" "^7.24.7" + "@babel/helper-replace-supers" "^7.25.0" + "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" + "@babel/traverse" "^7.25.0" semver "^6.3.1" -"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.15", "@babel/helper-create-regexp-features-plugin@^7.22.5": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz#5ee90093914ea09639b01c711db0d6775e558be1" - integrity sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w== +"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.24.7", "@babel/helper-create-regexp-features-plugin@^7.25.0": + version "7.25.2" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.2.tgz#24c75974ed74183797ffd5f134169316cd1808d9" + integrity sha512-+wqVGP+DFmqwFD3EH6TMTfUNeqDehV3E/dl+Sd54eaXqm17tEUNbEIn4sVivVowbvUpOtIGxdo3GoXyDH9N/9g== dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-annotate-as-pure" "^7.24.7" regexpu-core "^5.3.1" semver "^6.3.1" -"@babel/helper-define-polyfill-provider@^0.5.0": - version "0.5.0" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.5.0.tgz#465805b7361f461e86c680f1de21eaf88c25901b" - integrity sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q== +"@babel/helper-define-polyfill-provider@^0.6.2": + version "0.6.2" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz#18594f789c3594acb24cfdb4a7f7b7d2e8bd912d" + integrity sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ== dependencies: "@babel/helper-compilation-targets" "^7.22.6" "@babel/helper-plugin-utils" "^7.22.5" @@ -164,172 +158,165 @@ lodash.debounce "^4.0.8" resolve "^1.14.2" -"@babel/helper-environment-visitor@^7.22.20": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167" - integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== +"@babel/helper-member-expression-to-functions@^7.24.8": + version "7.24.8" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.8.tgz#6155e079c913357d24a4c20480db7c712a5c3fb6" + integrity sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA== + dependencies: + "@babel/traverse" "^7.24.8" + "@babel/types" "^7.24.8" + +"@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz#f2f980392de5b84c3328fc71d38bd81bbb83042b" + integrity sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA== + dependencies: + "@babel/traverse" "^7.24.7" + "@babel/types" "^7.24.7" + +"@babel/helper-module-transforms@^7.24.7", "@babel/helper-module-transforms@^7.24.8", "@babel/helper-module-transforms@^7.25.0", "@babel/helper-module-transforms@^7.25.2": + version "7.25.2" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz#ee713c29768100f2776edf04d4eb23b8d27a66e6" + integrity sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ== + dependencies: + "@babel/helper-module-imports" "^7.24.7" + "@babel/helper-simple-access" "^7.24.7" + "@babel/helper-validator-identifier" "^7.24.7" + "@babel/traverse" "^7.25.2" + +"@babel/helper-optimise-call-expression@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.7.tgz#8b0a0456c92f6b323d27cfd00d1d664e76692a0f" + integrity sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A== + dependencies: + "@babel/types" "^7.24.7" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.24.7", "@babel/helper-plugin-utils@^7.24.8", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.24.8" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz#94ee67e8ec0e5d44ea7baeb51e571bd26af07878" + integrity sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg== + +"@babel/helper-remap-async-to-generator@^7.24.7", "@babel/helper-remap-async-to-generator@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.0.tgz#d2f0fbba059a42d68e5e378feaf181ef6055365e" + integrity sha512-NhavI2eWEIz/H9dbrG0TuOicDhNexze43i5z7lEqwYm0WEZVTwnPpA0EafUTP7+6/W79HWIP2cTe3Z5NiSTVpw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.24.7" + "@babel/helper-wrap-function" "^7.25.0" + "@babel/traverse" "^7.25.0" + +"@babel/helper-replace-supers@^7.24.7", "@babel/helper-replace-supers@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.25.0.tgz#ff44deac1c9f619523fe2ca1fd650773792000a9" + integrity sha512-q688zIvQVYtZu+i2PsdIu/uWGRpfxzr5WESsfpShfZECkO+d2o+WROWezCi/Q6kJ0tfPa5+pUGUlfx2HhrA3Bg== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.24.8" + "@babel/helper-optimise-call-expression" "^7.24.7" + "@babel/traverse" "^7.25.0" + +"@babel/helper-simple-access@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz#bcade8da3aec8ed16b9c4953b74e506b51b5edb3" + integrity sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg== + dependencies: + "@babel/traverse" "^7.24.7" + "@babel/types" "^7.24.7" + +"@babel/helper-skip-transparent-expression-wrappers@^7.20.0", "@babel/helper-skip-transparent-expression-wrappers@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.7.tgz#5f8fa83b69ed5c27adc56044f8be2b3ea96669d9" + integrity sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ== + dependencies: + "@babel/traverse" "^7.24.7" + "@babel/types" "^7.24.7" + +"@babel/helper-string-parser@^7.24.8": + version "7.24.8" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz#5b3329c9a58803d5df425e5785865881a81ca48d" + integrity sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ== + +"@babel/helper-validator-identifier@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz#75b889cfaf9e35c2aaf42cf0d72c8e91719251db" + integrity sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w== + +"@babel/helper-validator-option@^7.24.7", "@babel/helper-validator-option@^7.24.8": + version "7.24.8" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz#3725cdeea8b480e86d34df15304806a06975e33d" + integrity sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q== + +"@babel/helper-wrap-function@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.25.0.tgz#dab12f0f593d6ca48c0062c28bcfb14ebe812f81" + integrity sha512-s6Q1ebqutSiZnEjaofc/UKDyC4SbzV5n5SrA2Gq8UawLycr3i04f1dX4OzoQVnexm6aOCh37SQNYlJ/8Ku+PMQ== + dependencies: + "@babel/template" "^7.25.0" + "@babel/traverse" "^7.25.0" + "@babel/types" "^7.25.0" + +"@babel/helpers@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.25.0.tgz#e69beb7841cb93a6505531ede34f34e6a073650a" + integrity sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw== + dependencies: + "@babel/template" "^7.25.0" + "@babel/types" "^7.25.0" + +"@babel/highlight@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.24.7.tgz#a05ab1df134b286558aae0ed41e6c5f731bf409d" + integrity sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw== + dependencies: + "@babel/helper-validator-identifier" "^7.24.7" + chalk "^2.4.2" + js-tokens "^4.0.0" + picocolors "^1.0.0" -"@babel/helper-function-name@^7.22.5", "@babel/helper-function-name@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759" - integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw== +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.25.0", "@babel/parser@^7.25.3": + version "7.25.3" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.25.3.tgz#91fb126768d944966263f0657ab222a642b82065" + integrity sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw== dependencies: - "@babel/template" "^7.22.15" - "@babel/types" "^7.23.0" + "@babel/types" "^7.25.2" -"@babel/helper-hoist-variables@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb" - integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== +"@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.25.3": + version "7.25.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.3.tgz#dca427b45a6c0f5c095a1c639dfe2476a3daba7f" + integrity sha512-wUrcsxZg6rqBXG05HG1FPYgsP6EvwF4WpBbxIpWIIYnH8wG0gzx3yZY3dtEHas4sTAOGkbTsc9EGPxwff8lRoA== dependencies: - "@babel/types" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.8" + "@babel/traverse" "^7.25.3" -"@babel/helper-member-expression-to-functions@^7.22.15", "@babel/helper-member-expression-to-functions@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz#9263e88cc5e41d39ec18c9a3e0eced59a3e7d366" - integrity sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA== +"@babel/plugin-bugfix-safari-class-field-initializer-scope@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.0.tgz#cd0c583e01369ef51676bdb3d7b603e17d2b3f73" + integrity sha512-Bm4bH2qsX880b/3ziJ8KD711LT7z4u8CFudmjqle65AZj/HNUFhEf90dqYv6O86buWvSBmeQDjv0Tn2aF/bIBA== dependencies: - "@babel/types" "^7.23.0" - -"@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz#16146307acdc40cc00c3b2c647713076464bdbf0" - integrity sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w== - dependencies: - "@babel/types" "^7.22.15" + "@babel/helper-plugin-utils" "^7.24.8" -"@babel/helper-module-transforms@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz#d7d12c3c5d30af5b3c0fcab2a6d5217773e2d0f1" - integrity sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ== - dependencies: - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-module-imports" "^7.22.15" - "@babel/helper-simple-access" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/helper-validator-identifier" "^7.22.20" - -"@babel/helper-optimise-call-expression@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz#f21531a9ccbff644fdd156b4077c16ff0c3f609e" - integrity sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.24.0", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.24.0" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz#945681931a52f15ce879fd5b86ce2dae6d3d7f2a" - integrity sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w== - -"@babel/helper-remap-async-to-generator@^7.22.20": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz#7b68e1cb4fa964d2996fd063723fb48eca8498e0" - integrity sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-wrap-function" "^7.22.20" - -"@babel/helper-replace-supers@^7.22.20": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz#e37d367123ca98fe455a9887734ed2e16eb7a793" - integrity sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw== - dependencies: - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-member-expression-to-functions" "^7.22.15" - "@babel/helper-optimise-call-expression" "^7.22.5" - -"@babel/helper-simple-access@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de" - integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-skip-transparent-expression-wrappers@^7.20.0", "@babel/helper-skip-transparent-expression-wrappers@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz#007f15240b5751c537c40e77abb4e89eeaaa8847" - integrity sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-split-export-declaration@^7.22.6": - version "7.22.6" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c" - integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-string-parser@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz#9478c707febcbbe1ddb38a3d91a2e054ae622d83" - integrity sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ== - -"@babel/helper-validator-identifier@^7.22.20": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" - integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== - -"@babel/helper-validator-option@^7.22.15", "@babel/helper-validator-option@^7.23.5": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz#907a3fbd4523426285365d1206c423c4c5520307" - integrity sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw== - -"@babel/helper-wrap-function@^7.22.20": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz#15352b0b9bfb10fc9c76f79f6342c00e3411a569" - integrity sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw== - dependencies: - "@babel/helper-function-name" "^7.22.5" - "@babel/template" "^7.22.15" - "@babel/types" "^7.22.19" - -"@babel/helpers@^7.24.0": - version "7.24.0" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.24.0.tgz#a3dd462b41769c95db8091e49cfe019389a9409b" - integrity sha512-ulDZdc0Aj5uLc5nETsa7EPx2L7rM0YJM8r7ck7U73AXi7qOV44IHHRAYZHY6iU1rr3C5N4NtTmMRUJP6kwCWeA== +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.0.tgz#749bde80356b295390954643de7635e0dffabe73" + integrity sha512-lXwdNZtTmeVOOFtwM/WDe7yg1PL8sYhRk/XH0FzbR2HDQ0xC+EnQ/JHeoMYSavtU115tnUk0q9CDyq8si+LMAA== dependencies: - "@babel/template" "^7.24.0" - "@babel/traverse" "^7.24.0" - "@babel/types" "^7.24.0" - -"@babel/highlight@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.23.4.tgz#edaadf4d8232e1a961432db785091207ead0621b" - integrity sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A== - dependencies: - "@babel/helper-validator-identifier" "^7.22.20" - chalk "^2.4.2" - js-tokens "^4.0.0" - -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.24.0": - version "7.24.0" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.0.tgz#26a3d1ff49031c53a97d03b604375f028746a9ac" - integrity sha512-QuP/FxEAzMSjXygs8v4N9dvdXzEHN4W1oF3PxuWAtPo08UdM17u89RDMgjLn/mlc56iM0HlLmVkO/wgR+rDgHg== + "@babel/helper-plugin-utils" "^7.24.8" -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.23.3.tgz#5cd1c87ba9380d0afb78469292c954fee5d2411a" - integrity sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ== +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.7.tgz#e4eabdd5109acc399b38d7999b2ef66fc2022f89" + integrity sha512-+izXIbke1T33mY4MSNnrqhPXDz01WYhEf3yF5NbnUtkiNnm+XBZJl3kNfoK6NKmYlz/D07+l2GWVK/QfDkNCuQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" + "@babel/plugin-transform-optional-chaining" "^7.24.7" -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.23.3.tgz#f6652bb16b94f8f9c20c50941e16e9756898dc5d" - integrity sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ== +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.0.tgz#3a82a70e7cb7294ad2559465ebcb871dfbf078fb" + integrity sha512-tggFrk1AIShG/RUQbEwt2Tr/E+ObkfwrPjR6BjbRvsx24+PSjK8zrq0GWPNCjo8qpRx4DuJzlcvWJqlm+0h3kw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/plugin-transform-optional-chaining" "^7.23.3" - -"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.23.7": - version "7.23.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.23.7.tgz#516462a95d10a9618f197d39ad291a9b47ae1d7b" - integrity sha512-LlRT7HgaifEpQA1ZgLVOIJZZFVPWN5iReq/7/JixwBtwcoeVGDBD53ZV28rrsLYOZs1Y/EHhA8N/Z6aazHR8cw== - dependencies: - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.8" + "@babel/traverse" "^7.25.0" "@babel/plugin-proposal-class-properties@^7.16.0": version "7.18.6" @@ -340,13 +327,13 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-proposal-decorators@^7.16.4": - version "7.24.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.24.0.tgz#845b42189e7441faa60a37682de1038eae97c382" - integrity sha512-LiT1RqZWeij7X+wGxCoYh3/3b8nVOX6/7BZ9wiQgAIyjoeQWdROaodJCgT+dwtbjHaz0r7bEbHJzjSbVfcOyjQ== + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.24.7.tgz#7e2dcfeda4a42596b57c4c9de1f5176bbfc532e3" + integrity sha512-RL9GR0pUG5Kc8BUWLNDm2T5OpYwSX15r98I0IkgmRQTXuELq/OynH8xtMTMvTJFjXbMWFVTKtYkTaYQsuAwQlQ== dependencies: - "@babel/helper-create-class-features-plugin" "^7.24.0" - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/plugin-syntax-decorators" "^7.24.0" + "@babel/helper-create-class-features-plugin" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/plugin-syntax-decorators" "^7.24.7" "@babel/plugin-proposal-nullish-coalescing-operator@^7.16.0": version "7.18.6" @@ -424,12 +411,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-decorators@^7.24.0": - version "7.24.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.24.0.tgz#7a15e20aeaf412469c53ed0d5666f31a1fc41215" - integrity sha512-MXW3pQCu9gUiVGzqkGqsgiINDVYXoAnrY8FYF/rmb+OfufNF0zHMpHPN4ulRrinxYT8Vk/aZJxYqOKsDECjKAw== +"@babel/plugin-syntax-decorators@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.24.7.tgz#e4f8a0a8778ccec669611cd5aed1ed8e6e3a6fcf" + integrity sha512-Ui4uLJJrRV1lb38zg1yYTmRKmiZLiftDEvZN2iq3kd9kUFU+PttmzTbAFC2ucRk/XJmtek6G23gPsuZbhrT8fQ== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-syntax-dynamic-import@^7.8.3": version "7.8.3" @@ -445,26 +432,26 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-syntax-flow@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.23.3.tgz#084564e0f3cc21ea6c70c44cff984a1c0509729a" - integrity sha512-YZiAIpkJAwQXBJLIQbRFayR5c+gJ35Vcz3bg954k7cd73zqjvhacJuL9RbrzPz8qPmZdgqP6EUKwy0PCNhaaPA== +"@babel/plugin-syntax-flow@^7.23.3", "@babel/plugin-syntax-flow@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.24.7.tgz#d1759e84dd4b437cf9fae69b4c06c41d7625bfb7" + integrity sha512-9G8GYT/dxn/D1IIKOUBmGX0mnmj46mGH9NnZyJLwtCpgh5f7D2VbuKodb+2s9m1Yavh1s7ASQN8lf0eqrb1LTw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-syntax-import-assertions@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.23.3.tgz#9c05a7f592982aff1a2768260ad84bcd3f0c77fc" - integrity sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw== +"@babel/plugin-syntax-import-assertions@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.7.tgz#2a0b406b5871a20a841240586b1300ce2088a778" + integrity sha512-Ec3NRUMoi8gskrkBe3fNmEQfxDvY8bgfQpz6jlk/41kX9eUjvpyqWU7PBP/pLAvMaSQjbMNKJmvX57jP+M6bPg== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-syntax-import-attributes@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.23.3.tgz#992aee922cf04512461d7dae3ff6951b90a2dc06" - integrity sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA== +"@babel/plugin-syntax-import-attributes@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.7.tgz#b4f9ea95a79e6912480c4b626739f86a076624ca" + integrity sha512-hbX+lKKeUMGihnK8nvKqmXBInriT3GVjzXKFriV3YC6APGxMbP8RZNFwy91+hocLXq90Mta+HshoB31802bb8A== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-syntax-import-meta@^7.10.4", "@babel/plugin-syntax-import-meta@^7.8.3": version "7.10.4" @@ -480,12 +467,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-jsx@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz#8f2e4f8a9b5f9aa16067e142c1ac9cd9f810f473" - integrity sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg== +"@babel/plugin-syntax-jsx@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz#39a1fa4a7e3d3d7f34e2acc6be585b718d30e02d" + integrity sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": version "7.10.4" @@ -543,12 +530,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-typescript@^7.23.3", "@babel/plugin-syntax-typescript@^7.7.2": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz#24f460c85dbbc983cd2b9c4994178bcc01df958f" - integrity sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ== +"@babel/plugin-syntax-typescript@^7.24.7", "@babel/plugin-syntax-typescript@^7.7.2": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.7.tgz#58d458271b4d3b6bb27ee6ac9525acbb259bad1c" + integrity sha512-c/+fVeJBB0FeKsFvwytYiUD+LBvhHjGSI0g446PRGdSVGZLRNArBUno2PETbAly3tpiNAQR5XaZ+JslxkotsbA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-syntax-unicode-sets-regex@^7.18.6": version "7.18.6" @@ -558,484 +545,492 @@ "@babel/helper-create-regexp-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-arrow-functions@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.23.3.tgz#94c6dcfd731af90f27a79509f9ab7fb2120fc38b" - integrity sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ== +"@babel/plugin-transform-arrow-functions@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.7.tgz#4f6886c11e423bd69f3ce51dbf42424a5f275514" + integrity sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-async-generator-functions@^7.23.9": - version "7.23.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.9.tgz#9adaeb66fc9634a586c5df139c6240d41ed801ce" - integrity sha512-8Q3veQEDGe14dTYuwagbRtwxQDnytyg1JFu4/HwEMETeofocrB0U0ejBJIXoeG/t2oXZ8kzCyI0ZZfbT80VFNQ== +"@babel/plugin-transform-async-generator-functions@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.0.tgz#b785cf35d73437f6276b1e30439a57a50747bddf" + integrity sha512-uaIi2FdqzjpAMvVqvB51S42oC2JEVgh0LDsGfZVDysWE8LrJtQC2jvKmOqEYThKyB7bDEb7BP1GYWDm7tABA0Q== dependencies: - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-remap-async-to-generator" "^7.22.20" + "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-remap-async-to-generator" "^7.25.0" "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/traverse" "^7.25.0" -"@babel/plugin-transform-async-to-generator@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.23.3.tgz#d1f513c7a8a506d43f47df2bf25f9254b0b051fa" - integrity sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw== +"@babel/plugin-transform-async-to-generator@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.7.tgz#72a3af6c451d575842a7e9b5a02863414355bdcc" + integrity sha512-SQY01PcJfmQ+4Ash7NE+rpbLFbmqA2GPIgqzxfFTL4t1FKRq4zTms/7htKpoCUI9OcFYgzqfmCdH53s6/jn5fA== dependencies: - "@babel/helper-module-imports" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-remap-async-to-generator" "^7.22.20" + "@babel/helper-module-imports" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-remap-async-to-generator" "^7.24.7" -"@babel/plugin-transform-block-scoped-functions@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.23.3.tgz#fe1177d715fb569663095e04f3598525d98e8c77" - integrity sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A== +"@babel/plugin-transform-block-scoped-functions@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.7.tgz#a4251d98ea0c0f399dafe1a35801eaba455bbf1f" + integrity sha512-yO7RAz6EsVQDaBH18IDJcMB1HnrUn2FJ/Jslc/WtPPWcjhpUJXU/rjbwmluzp7v/ZzWcEhTMXELnnsz8djWDwQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-block-scoping@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.4.tgz#b2d38589531c6c80fbe25e6b58e763622d2d3cf5" - integrity sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw== +"@babel/plugin-transform-block-scoping@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.0.tgz#23a6ed92e6b006d26b1869b1c91d1b917c2ea2ac" + integrity sha512-yBQjYoOjXlFv9nlXb3f1casSHOZkWr29NX+zChVanLg5Nc157CrbEX9D7hxxtTpuFy7Q0YzmmWfJxzvps4kXrQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.8" -"@babel/plugin-transform-class-properties@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.23.3.tgz#35c377db11ca92a785a718b6aa4e3ed1eb65dc48" - integrity sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg== +"@babel/plugin-transform-class-properties@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.7.tgz#256879467b57b0b68c7ddfc5b76584f398cd6834" + integrity sha512-vKbfawVYayKcSeSR5YYzzyXvsDFWU2mD8U5TFeXtbCPLFUqe7GyCgvO6XDHzje862ODrOwy6WCPmKeWHbCFJ4w== dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-create-class-features-plugin" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-class-static-block@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.23.4.tgz#2a202c8787a8964dd11dfcedf994d36bfc844ab5" - integrity sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ== +"@babel/plugin-transform-class-static-block@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.7.tgz#c82027ebb7010bc33c116d4b5044fbbf8c05484d" + integrity sha512-HMXK3WbBPpZQufbMG4B46A90PkuuhN9vBCb5T8+VAHqvAqvcLi+2cKoukcpmUYkszLhScU3l1iudhrks3DggRQ== dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-create-class-features-plugin" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-syntax-class-static-block" "^7.14.5" -"@babel/plugin-transform-classes@^7.23.8": - version "7.23.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.8.tgz#d08ae096c240347badd68cdf1b6d1624a6435d92" - integrity sha512-yAYslGsY1bX6Knmg46RjiCiNSwJKv2IUC8qOdYKqMMr0491SXFhcHqOdRDeCRohOOIzwN/90C6mQ9qAKgrP7dg== +"@babel/plugin-transform-classes@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.0.tgz#63122366527d88e0ef61b612554fe3f8c793991e" + integrity sha512-xyi6qjr/fYU304fiRwFbekzkqVJZ6A7hOjWZd+89FVcBqPV3S9Wuozz82xdpLspckeaafntbzglaW4pqpzvtSw== dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-compilation-targets" "^7.23.6" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-function-name" "^7.23.0" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.20" - "@babel/helper-split-export-declaration" "^7.22.6" + "@babel/helper-annotate-as-pure" "^7.24.7" + "@babel/helper-compilation-targets" "^7.24.8" + "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-replace-supers" "^7.25.0" + "@babel/traverse" "^7.25.0" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.23.3.tgz#652e69561fcc9d2b50ba4f7ac7f60dcf65e86474" - integrity sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw== +"@babel/plugin-transform-computed-properties@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.7.tgz#4cab3214e80bc71fae3853238d13d097b004c707" + integrity sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/template" "^7.22.15" + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/template" "^7.24.7" -"@babel/plugin-transform-destructuring@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.3.tgz#8c9ee68228b12ae3dff986e56ed1ba4f3c446311" - integrity sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw== +"@babel/plugin-transform-destructuring@^7.24.8": + version "7.24.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.8.tgz#c828e814dbe42a2718a838c2a2e16a408e055550" + integrity sha512-36e87mfY8TnRxc7yc6M9g9gOB7rKgSahqkIKwLpz4Ppk2+zC2Cy1is0uwtuSG6AE4zlTOUa+7JGz9jCJGLqQFQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.8" -"@babel/plugin-transform-dotall-regex@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.23.3.tgz#3f7af6054882ede89c378d0cf889b854a993da50" - integrity sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ== +"@babel/plugin-transform-dotall-regex@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.7.tgz#5f8bf8a680f2116a7207e16288a5f974ad47a7a0" + integrity sha512-ZOA3W+1RRTSWvyqcMJDLqbchh7U4NRGqwRfFSVbOLS/ePIP4vHB5e8T8eXcuqyN1QkgKyj5wuW0lcS85v4CrSw== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-create-regexp-features-plugin" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-duplicate-keys@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.23.3.tgz#664706ca0a5dfe8d066537f99032fc1dc8b720ce" - integrity sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA== +"@babel/plugin-transform-duplicate-keys@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.7.tgz#dd20102897c9a2324e5adfffb67ff3610359a8ee" + integrity sha512-JdYfXyCRihAe46jUIliuL2/s0x0wObgwwiGxw/UbgJBr20gQBThrokO4nYKgWkD7uBaqM7+9x5TU7NkExZJyzw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-dynamic-import@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.23.4.tgz#c7629e7254011ac3630d47d7f34ddd40ca535143" - integrity sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ== +"@babel/plugin-transform-duplicate-named-capturing-groups-regex@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.0.tgz#809af7e3339466b49c034c683964ee8afb3e2604" + integrity sha512-YLpb4LlYSc3sCUa35un84poXoraOiQucUTTu8X1j18JV+gNa8E0nyUf/CjZ171IRGr4jEguF+vzJU66QZhn29g== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-create-regexp-features-plugin" "^7.25.0" + "@babel/helper-plugin-utils" "^7.24.8" + +"@babel/plugin-transform-dynamic-import@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.7.tgz#4d8b95e3bae2b037673091aa09cd33fecd6419f4" + integrity sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-syntax-dynamic-import" "^7.8.3" -"@babel/plugin-transform-exponentiation-operator@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.23.3.tgz#ea0d978f6b9232ba4722f3dbecdd18f450babd18" - integrity sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ== +"@babel/plugin-transform-exponentiation-operator@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.7.tgz#b629ee22645f412024297d5245bce425c31f9b0d" + integrity sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ== dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-export-namespace-from@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.23.4.tgz#084c7b25e9a5c8271e987a08cf85807b80283191" - integrity sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ== +"@babel/plugin-transform-export-namespace-from@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.7.tgz#176d52d8d8ed516aeae7013ee9556d540c53f197" + integrity sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" "@babel/plugin-transform-flow-strip-types@^7.16.0": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.23.3.tgz#cfa7ca159cc3306fab526fc67091556b51af26ff" - integrity sha512-26/pQTf9nQSNVJCrLB1IkHUKyPxR+lMrH2QDPG89+Znu9rAMbtrybdbWeE9bb7gzjmE5iXHEY+e0HUwM6Co93Q== + version "7.25.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.25.2.tgz#b3aa251db44959b7a7c82abcd6b4225dec7d2258" + integrity sha512-InBZ0O8tew5V0K6cHcQ+wgxlrjOw1W4wDXLkOTjLRD8GYhTSkxTVBtdy3MMtvYBrbAWa1Qm3hNoTc1620Yj+Mg== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-flow" "^7.23.3" + "@babel/helper-plugin-utils" "^7.24.8" + "@babel/plugin-syntax-flow" "^7.24.7" -"@babel/plugin-transform-for-of@^7.23.6": - version "7.23.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.6.tgz#81c37e24171b37b370ba6aaffa7ac86bcb46f94e" - integrity sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw== +"@babel/plugin-transform-for-of@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.7.tgz#f25b33f72df1d8be76399e1b8f3f9d366eb5bc70" + integrity sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" -"@babel/plugin-transform-function-name@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.23.3.tgz#8f424fcd862bf84cb9a1a6b42bc2f47ed630f8dc" - integrity sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw== +"@babel/plugin-transform-function-name@^7.25.1": + version "7.25.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.1.tgz#b85e773097526c1a4fc4ba27322748643f26fc37" + integrity sha512-TVVJVdW9RKMNgJJlLtHsKDTydjZAbwIsn6ySBPQaEAUU5+gVvlJt/9nRmqVbsV/IBanRjzWoaAQKLoamWVOUuA== dependencies: - "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-function-name" "^7.23.0" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-compilation-targets" "^7.24.8" + "@babel/helper-plugin-utils" "^7.24.8" + "@babel/traverse" "^7.25.1" -"@babel/plugin-transform-json-strings@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.23.4.tgz#a871d9b6bd171976efad2e43e694c961ffa3714d" - integrity sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg== +"@babel/plugin-transform-json-strings@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.7.tgz#f3e9c37c0a373fee86e36880d45b3664cedaf73a" + integrity sha512-2yFnBGDvRuxAaE/f0vfBKvtnvvqU8tGpMHqMNpTN2oWMKIR3NqFkjaAgGwawhqK/pIN2T3XdjGPdaG0vDhOBGw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-syntax-json-strings" "^7.8.3" -"@babel/plugin-transform-literals@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.23.3.tgz#8214665f00506ead73de157eba233e7381f3beb4" - integrity sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ== +"@babel/plugin-transform-literals@^7.25.2": + version "7.25.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.2.tgz#deb1ad14fc5490b9a65ed830e025bca849d8b5f3" + integrity sha512-HQI+HcTbm9ur3Z2DkO+jgESMAMcYLuN/A7NRw9juzxAezN9AvqvUTnpKP/9kkYANz6u7dFlAyOu44ejuGySlfw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.8" -"@babel/plugin-transform-logical-assignment-operators@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.23.4.tgz#e599f82c51d55fac725f62ce55d3a0886279ecb5" - integrity sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg== +"@babel/plugin-transform-logical-assignment-operators@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.7.tgz#a58fb6eda16c9dc8f9ff1c7b1ba6deb7f4694cb0" + integrity sha512-4D2tpwlQ1odXmTEIFWy9ELJcZHqrStlzK/dAOWYyxX3zT0iXQB6banjgeOJQXzEc4S0E0a5A+hahxPaEFYftsw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" -"@babel/plugin-transform-member-expression-literals@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.23.3.tgz#e37b3f0502289f477ac0e776b05a833d853cabcc" - integrity sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag== +"@babel/plugin-transform-member-expression-literals@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.7.tgz#3b4454fb0e302e18ba4945ba3246acb1248315df" + integrity sha512-T/hRC1uqrzXMKLQ6UCwMT85S3EvqaBXDGf0FaMf4446Qx9vKwlghvee0+uuZcDUCZU5RuNi4781UQ7R308zzBw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-modules-amd@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.3.tgz#e19b55436a1416829df0a1afc495deedfae17f7d" - integrity sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw== +"@babel/plugin-transform-modules-amd@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.7.tgz#65090ed493c4a834976a3ca1cde776e6ccff32d7" + integrity sha512-9+pB1qxV3vs/8Hdmz/CulFB8w2tuu6EB94JZFsjdqxQokwGa9Unap7Bo2gGBGIvPmDIVvQrom7r5m/TCDMURhg== dependencies: - "@babel/helper-module-transforms" "^7.23.3" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-module-transforms" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-modules-commonjs@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz#661ae831b9577e52be57dd8356b734f9700b53b4" - integrity sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA== +"@babel/plugin-transform-modules-commonjs@^7.24.7", "@babel/plugin-transform-modules-commonjs@^7.24.8": + version "7.24.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.8.tgz#ab6421e564b717cb475d6fff70ae7f103536ea3c" + integrity sha512-WHsk9H8XxRs3JXKWFiqtQebdh9b/pTk4EgueygFzYlTKAg0Ud985mSevdNjdXdFBATSKVJGQXP1tv6aGbssLKA== dependencies: - "@babel/helper-module-transforms" "^7.23.3" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-simple-access" "^7.22.5" + "@babel/helper-module-transforms" "^7.24.8" + "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-simple-access" "^7.24.7" -"@babel/plugin-transform-modules-systemjs@^7.23.9": - version "7.23.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.9.tgz#105d3ed46e4a21d257f83a2f9e2ee4203ceda6be" - integrity sha512-KDlPRM6sLo4o1FkiSlXoAa8edLXFsKKIda779fbLrvmeuc3itnjCtaO6RrtoaANsIJANj+Vk1zqbZIMhkCAHVw== +"@babel/plugin-transform-modules-systemjs@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.0.tgz#8f46cdc5f9e5af74f3bd019485a6cbe59685ea33" + integrity sha512-YPJfjQPDXxyQWg/0+jHKj1llnY5f/R6a0p/vP4lPymxLu7Lvl4k2WMitqi08yxwQcCVUUdG9LCUj4TNEgAp3Jw== dependencies: - "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-module-transforms" "^7.23.3" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-validator-identifier" "^7.22.20" + "@babel/helper-module-transforms" "^7.25.0" + "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-validator-identifier" "^7.24.7" + "@babel/traverse" "^7.25.0" -"@babel/plugin-transform-modules-umd@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.23.3.tgz#5d4395fccd071dfefe6585a4411aa7d6b7d769e9" - integrity sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg== +"@babel/plugin-transform-modules-umd@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.7.tgz#edd9f43ec549099620df7df24e7ba13b5c76efc8" + integrity sha512-3aytQvqJ/h9z4g8AsKPLvD4Zqi2qT+L3j7XoFFu1XBlZWEl2/1kWnhmAbxpLgPrHSY0M6UA02jyTiwUVtiKR6A== dependencies: - "@babel/helper-module-transforms" "^7.23.3" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-module-transforms" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-named-capturing-groups-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz#67fe18ee8ce02d57c855185e27e3dc959b2e991f" - integrity sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ== +"@babel/plugin-transform-named-capturing-groups-regex@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.24.7.tgz#9042e9b856bc6b3688c0c2e4060e9e10b1460923" + integrity sha512-/jr7h/EWeJtk1U/uz2jlsCioHkZk1JJZVcc8oQsJ1dUlaJD83f4/6Zeh2aHt9BIFokHIsSeDfhUmju0+1GPd6g== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-create-regexp-features-plugin" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-new-target@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.23.3.tgz#5491bb78ed6ac87e990957cea367eab781c4d980" - integrity sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ== +"@babel/plugin-transform-new-target@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.7.tgz#31ff54c4e0555cc549d5816e4ab39241dfb6ab00" + integrity sha512-RNKwfRIXg4Ls/8mMTza5oPF5RkOW8Wy/WgMAp1/F1yZ8mMbtwXW+HDoJiOsagWrAhI5f57Vncrmr9XeT4CVapA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-nullish-coalescing-operator@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.23.4.tgz#45556aad123fc6e52189ea749e33ce090637346e" - integrity sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA== +"@babel/plugin-transform-nullish-coalescing-operator@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.7.tgz#1de4534c590af9596f53d67f52a92f12db984120" + integrity sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" -"@babel/plugin-transform-numeric-separator@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.23.4.tgz#03d08e3691e405804ecdd19dd278a40cca531f29" - integrity sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q== +"@babel/plugin-transform-numeric-separator@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.7.tgz#bea62b538c80605d8a0fac9b40f48e97efa7de63" + integrity sha512-e6q1TiVUzvH9KRvicuxdBTUj4AdKSRwzIyFFnfnezpCfP2/7Qmbb8qbU2j7GODbl4JMkblitCQjKYUaX/qkkwA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-transform-object-rest-spread@^7.24.0": - version "7.24.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.0.tgz#7b836ad0088fdded2420ce96d4e1d3ed78b71df1" - integrity sha512-y/yKMm7buHpFFXfxVFS4Vk1ToRJDilIa6fKRioB9Vjichv58TDGXTvqV0dN7plobAmTW5eSEGXDngE+Mm+uO+w== +"@babel/plugin-transform-object-rest-spread@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.7.tgz#d13a2b93435aeb8a197e115221cab266ba6e55d6" + integrity sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q== dependencies: - "@babel/compat-data" "^7.23.5" - "@babel/helper-compilation-targets" "^7.23.6" - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-compilation-targets" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.23.3" + "@babel/plugin-transform-parameters" "^7.24.7" -"@babel/plugin-transform-object-super@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.23.3.tgz#81fdb636dcb306dd2e4e8fd80db5b2362ed2ebcd" - integrity sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA== +"@babel/plugin-transform-object-super@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.7.tgz#66eeaff7830bba945dd8989b632a40c04ed625be" + integrity sha512-A/vVLwN6lBrMFmMDmPPz0jnE6ZGx7Jq7d6sT/Ev4H65RER6pZ+kczlf1DthF5N0qaPHBsI7UXiE8Zy66nmAovg== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.20" + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-replace-supers" "^7.24.7" -"@babel/plugin-transform-optional-catch-binding@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.23.4.tgz#318066de6dacce7d92fa244ae475aa8d91778017" - integrity sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A== +"@babel/plugin-transform-optional-catch-binding@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.7.tgz#00eabd883d0dd6a60c1c557548785919b6e717b4" + integrity sha512-uLEndKqP5BfBbC/5jTwPxLh9kqPWWgzN/f8w6UwAIirAEqiIVJWWY312X72Eub09g5KF9+Zn7+hT7sDxmhRuKA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" -"@babel/plugin-transform-optional-chaining@^7.23.3", "@babel/plugin-transform-optional-chaining@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.4.tgz#6acf61203bdfc4de9d4e52e64490aeb3e52bd017" - integrity sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA== +"@babel/plugin-transform-optional-chaining@^7.24.7", "@babel/plugin-transform-optional-chaining@^7.24.8": + version "7.24.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.8.tgz#bb02a67b60ff0406085c13d104c99a835cdf365d" + integrity sha512-5cTOLSMs9eypEy8JUVvIKOu6NgvbJMnpG62VpIHrTmROdQ+L5mDAaI40g25k5vXti55JWNX5jCkq3HZxXBQANw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" "@babel/plugin-syntax-optional-chaining" "^7.8.3" -"@babel/plugin-transform-parameters@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.23.3.tgz#83ef5d1baf4b1072fa6e54b2b0999a7b2527e2af" - integrity sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw== +"@babel/plugin-transform-parameters@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.7.tgz#5881f0ae21018400e320fc7eb817e529d1254b68" + integrity sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-private-methods@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.23.3.tgz#b2d7a3c97e278bfe59137a978d53b2c2e038c0e4" - integrity sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g== +"@babel/plugin-transform-private-methods@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.7.tgz#e6318746b2ae70a59d023d5cc1344a2ba7a75f5e" + integrity sha512-COTCOkG2hn4JKGEKBADkA8WNb35TGkkRbI5iT845dB+NyqgO8Hn+ajPbSnIQznneJTa3d30scb6iz/DhH8GsJQ== dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-create-class-features-plugin" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-private-property-in-object@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.23.4.tgz#3ec711d05d6608fd173d9b8de39872d8dbf68bf5" - integrity sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A== +"@babel/plugin-transform-private-property-in-object@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.7.tgz#4eec6bc701288c1fab5f72e6a4bbc9d67faca061" + integrity sha512-9z76mxwnwFxMyxZWEgdgECQglF2Q7cFLm0kMf8pGwt+GSJsY0cONKj/UuO4bOH0w/uAel3ekS4ra5CEAyJRmDA== dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-create-class-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-annotate-as-pure" "^7.24.7" + "@babel/helper-create-class-features-plugin" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-syntax-private-property-in-object" "^7.14.5" -"@babel/plugin-transform-property-literals@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.23.3.tgz#54518f14ac4755d22b92162e4a852d308a560875" - integrity sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw== +"@babel/plugin-transform-property-literals@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.7.tgz#f0d2ed8380dfbed949c42d4d790266525d63bbdc" + integrity sha512-EMi4MLQSHfd2nrCqQEWxFdha2gBCqU4ZcCng4WBGZ5CJL4bBRW0ptdqqDdeirGZcpALazVVNJqRmsO8/+oNCBA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-transform-react-constant-elements@^7.12.1": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.23.3.tgz#5efc001d07ef0f7da0d73c3a86c132f73d28e43c" - integrity sha512-zP0QKq/p6O42OL94udMgSfKXyse4RyJ0JqbQ34zDAONWjyrEsghYEyTSK5FIpmXmCpB55SHokL1cRRKHv8L2Qw== + version "7.25.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.25.1.tgz#71a665ed16ce618067d05f4a98130207349d82ae" + integrity sha512-SLV/giH/V4SmloZ6Dt40HjTGTAIkxn33TVIHxNGNvo8ezMhrxBkzisj4op1KZYPIOHFLqhv60OHvX+YRu4xbmQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.8" -"@babel/plugin-transform-react-display-name@^7.16.0", "@babel/plugin-transform-react-display-name@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.23.3.tgz#70529f034dd1e561045ad3c8152a267f0d7b6200" - integrity sha512-GnvhtVfA2OAtzdX58FJxU19rhoGeQzyVndw3GgtdECQvQFXPEZIOVULHVZGAYmOgmqjXpVpfocAbSjh99V/Fqw== +"@babel/plugin-transform-react-display-name@^7.16.0", "@babel/plugin-transform-react-display-name@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.24.7.tgz#9caff79836803bc666bcfe210aeb6626230c293b" + integrity sha512-H/Snz9PFxKsS1JLI4dJLtnJgCJRoo0AUm3chP6NYr+9En1JMKloheEiLIhlp5MDVznWo+H3AAC1Mc8lmUEpsgg== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-react-jsx-development@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.22.5.tgz#e716b6edbef972a92165cd69d92f1255f7e73e87" - integrity sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A== +"@babel/plugin-transform-react-jsx-development@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.24.7.tgz#eaee12f15a93f6496d852509a850085e6361470b" + integrity sha512-QG9EnzoGn+Qar7rxuW+ZOsbWOt56FvvI93xInqsZDC5fsekx1AlIO4KIJ5M+D0p0SqSH156EpmZyXq630B8OlQ== dependencies: - "@babel/plugin-transform-react-jsx" "^7.22.5" + "@babel/plugin-transform-react-jsx" "^7.24.7" -"@babel/plugin-transform-react-jsx@^7.22.15", "@babel/plugin-transform-react-jsx@^7.22.5", "@babel/plugin-transform-react-jsx@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.23.4.tgz#393f99185110cea87184ea47bcb4a7b0c2e39312" - integrity sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA== +"@babel/plugin-transform-react-jsx@^7.23.4", "@babel/plugin-transform-react-jsx@^7.24.7": + version "7.25.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.2.tgz#e37e8ebfa77e9f0b16ba07fadcb6adb47412227a" + integrity sha512-KQsqEAVBpU82NM/B/N9j9WOdphom1SZH3R+2V7INrQUH+V9EBFwZsEJl8eBIVeQE62FxJCc70jzEZwqU7RcVqA== dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-module-imports" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-jsx" "^7.23.3" - "@babel/types" "^7.23.4" + "@babel/helper-annotate-as-pure" "^7.24.7" + "@babel/helper-module-imports" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.8" + "@babel/plugin-syntax-jsx" "^7.24.7" + "@babel/types" "^7.25.2" -"@babel/plugin-transform-react-pure-annotations@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.23.3.tgz#fabedbdb8ee40edf5da96f3ecfc6958e3783b93c" - integrity sha512-qMFdSS+TUhB7Q/3HVPnEdYJDQIk57jkntAwSuz9xfSE4n+3I+vHYCli3HoHawN1Z3RfCz/y1zXA/JXjG6cVImQ== +"@babel/plugin-transform-react-pure-annotations@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.24.7.tgz#bdd9d140d1c318b4f28b29a00fb94f97ecab1595" + integrity sha512-PLgBVk3fzbmEjBJ/u8kFzOqS9tUeDjiaWud/rRym/yjCo/M9cASPlnrd2ZmmZpQT40fOOrvR8jh+n8jikrOhNA== dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-annotate-as-pure" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-regenerator@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.23.3.tgz#141afd4a2057298602069fce7f2dc5173e6c561c" - integrity sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ== +"@babel/plugin-transform-regenerator@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.7.tgz#021562de4534d8b4b1851759fd7af4e05d2c47f8" + integrity sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.7" regenerator-transform "^0.15.2" -"@babel/plugin-transform-reserved-words@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.23.3.tgz#4130dcee12bd3dd5705c587947eb715da12efac8" - integrity sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg== +"@babel/plugin-transform-reserved-words@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.7.tgz#80037fe4fbf031fc1125022178ff3938bb3743a4" + integrity sha512-0DUq0pHcPKbjFZCfTss/pGkYMfy3vFWydkUBd9r0GHpIyfs2eCDENvqadMycRS9wZCXR41wucAfJHJmwA0UmoQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-transform-runtime@^7.16.4": - version "7.24.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.24.0.tgz#e308fe27d08b74027d42547081eefaf4f2ffbcc9" - integrity sha512-zc0GA5IitLKJrSfXlXmp8KDqLrnGECK7YRfQBmEKg1NmBOQ7e+KuclBEKJgzifQeUYLdNiAw4B4bjyvzWVLiSA== - dependencies: - "@babel/helper-module-imports" "^7.22.15" - "@babel/helper-plugin-utils" "^7.24.0" - babel-plugin-polyfill-corejs2 "^0.4.8" - babel-plugin-polyfill-corejs3 "^0.9.0" - babel-plugin-polyfill-regenerator "^0.5.5" + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.24.7.tgz#00a5bfaf8c43cf5c8703a8a6e82b59d9c58f38ca" + integrity sha512-YqXjrk4C+a1kZjewqt+Mmu2UuV1s07y8kqcUf4qYLnoqemhR4gRQikhdAhSVJioMjVTu6Mo6pAbaypEA3jY6fw== + dependencies: + "@babel/helper-module-imports" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" + babel-plugin-polyfill-corejs2 "^0.4.10" + babel-plugin-polyfill-corejs3 "^0.10.1" + babel-plugin-polyfill-regenerator "^0.6.1" semver "^6.3.1" -"@babel/plugin-transform-shorthand-properties@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.23.3.tgz#97d82a39b0e0c24f8a981568a8ed851745f59210" - integrity sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg== +"@babel/plugin-transform-shorthand-properties@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.7.tgz#85448c6b996e122fa9e289746140aaa99da64e73" + integrity sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-spread@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.23.3.tgz#41d17aacb12bde55168403c6f2d6bdca563d362c" - integrity sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg== +"@babel/plugin-transform-spread@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.7.tgz#e8a38c0fde7882e0fb8f160378f74bd885cc7bb3" + integrity sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" -"@babel/plugin-transform-sticky-regex@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.23.3.tgz#dec45588ab4a723cb579c609b294a3d1bd22ff04" - integrity sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg== +"@babel/plugin-transform-sticky-regex@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.7.tgz#96ae80d7a7e5251f657b5cf18f1ea6bf926f5feb" + integrity sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-template-literals@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.23.3.tgz#5f0f028eb14e50b5d0f76be57f90045757539d07" - integrity sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg== +"@babel/plugin-transform-template-literals@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.7.tgz#a05debb4a9072ae8f985bcf77f3f215434c8f8c8" + integrity sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-typeof-symbol@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.23.3.tgz#9dfab97acc87495c0c449014eb9c547d8966bca4" - integrity sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ== +"@babel/plugin-transform-typeof-symbol@^7.24.8": + version "7.24.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.8.tgz#383dab37fb073f5bfe6e60c654caac309f92ba1c" + integrity sha512-adNTUpDCVnmAE58VEqKlAA6ZBlNkMnWD0ZcW76lyNFN3MJniyGFZfNwERVk8Ap56MCnXztmDr19T4mPTztcuaw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.8" -"@babel/plugin-transform-typescript@^7.23.3": - version "7.23.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.23.6.tgz#aa36a94e5da8d94339ae3a4e22d40ed287feb34c" - integrity sha512-6cBG5mBvUu4VUD04OHKnYzbuHNP8huDsD3EDqqpIpsswTDoqHCjLoHb6+QgsV1WsT2nipRqCPgxD3LXnEO7XfA== +"@babel/plugin-transform-typescript@^7.24.7": + version "7.25.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.25.2.tgz#237c5d10de6d493be31637c6b9fa30b6c5461add" + integrity sha512-lBwRvjSmqiMYe/pS0+1gggjJleUJi7NzjvQ1Fkqtt69hBa/0t1YuW/MLQMAPixfwaQOHUXsd6jeU3Z+vdGv3+A== dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-create-class-features-plugin" "^7.23.6" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-typescript" "^7.23.3" + "@babel/helper-annotate-as-pure" "^7.24.7" + "@babel/helper-create-class-features-plugin" "^7.25.0" + "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" + "@babel/plugin-syntax-typescript" "^7.24.7" -"@babel/plugin-transform-unicode-escapes@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.23.3.tgz#1f66d16cab01fab98d784867d24f70c1ca65b925" - integrity sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q== +"@babel/plugin-transform-unicode-escapes@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.7.tgz#2023a82ced1fb4971630a2e079764502c4148e0e" + integrity sha512-U3ap1gm5+4edc2Q/P+9VrBNhGkfnf+8ZqppY71Bo/pzZmXhhLdqgaUl6cuB07O1+AQJtCLfaOmswiNbSQ9ivhw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-unicode-property-regex@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.23.3.tgz#19e234129e5ffa7205010feec0d94c251083d7ad" - integrity sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA== +"@babel/plugin-transform-unicode-property-regex@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.7.tgz#9073a4cd13b86ea71c3264659590ac086605bbcd" + integrity sha512-uH2O4OV5M9FZYQrwc7NdVmMxQJOCCzFeYudlZSzUAHRFeOujQefa92E74TQDVskNHCzOXoigEuoyzHDhaEaK5w== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-create-regexp-features-plugin" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-unicode-regex@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.23.3.tgz#26897708d8f42654ca4ce1b73e96140fbad879dc" - integrity sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw== +"@babel/plugin-transform-unicode-regex@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.7.tgz#dfc3d4a51127108099b19817c0963be6a2adf19f" + integrity sha512-hlQ96MBZSAXUq7ltkjtu3FJCCSMx/j629ns3hA3pXnBXjanNP0LHi+JpPeA81zaWgVK1VGH95Xuy7u0RyQ8kMg== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-create-regexp-features-plugin" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-unicode-sets-regex@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.23.3.tgz#4fb6f0a719c2c5859d11f6b55a050cc987f3799e" - integrity sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw== +"@babel/plugin-transform-unicode-sets-regex@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.7.tgz#d40705d67523803a576e29c63cef6e516b858ed9" + integrity sha512-2G8aAvF4wy1w/AGZkemprdGMRg5o6zPNhbHVImRz3lss55TYCBd6xStN19rt8XJHq20sqV0JbyWjOWwQRwV/wg== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-create-regexp-features-plugin" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/preset-env@^7.11.0", "@babel/preset-env@^7.12.1", "@babel/preset-env@^7.16.4": - version "7.24.0" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.24.0.tgz#11536a7f4b977294f0bdfad780f01a8ac8e183fc" - integrity sha512-ZxPEzV9IgvGn73iK0E6VB9/95Nd7aMFpbE0l8KQFDG70cOV9IxRP7Y2FUPmlK0v6ImlLqYX50iuZ3ZTVhOF2lA== - dependencies: - "@babel/compat-data" "^7.23.5" - "@babel/helper-compilation-targets" "^7.23.6" - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/helper-validator-option" "^7.23.5" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.23.3" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.23.3" - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.23.7" + version "7.25.3" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.25.3.tgz#0bf4769d84ac51d1073ab4a86f00f30a3a83c67c" + integrity sha512-QsYW7UeAaXvLPX9tdVliMJE7MD7M6MLYVTovRTIwhoYQVFHR1rM4wO8wqAezYi3/BpSD+NzVCZ69R6smWiIi8g== + dependencies: + "@babel/compat-data" "^7.25.2" + "@babel/helper-compilation-targets" "^7.25.2" + "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-validator-option" "^7.24.8" + "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.25.3" + "@babel/plugin-bugfix-safari-class-field-initializer-scope" "^7.25.0" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.25.0" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.24.7" + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.25.0" "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-syntax-class-properties" "^7.12.13" "@babel/plugin-syntax-class-static-block" "^7.14.5" "@babel/plugin-syntax-dynamic-import" "^7.8.3" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-syntax-import-assertions" "^7.23.3" - "@babel/plugin-syntax-import-attributes" "^7.23.3" + "@babel/plugin-syntax-import-assertions" "^7.24.7" + "@babel/plugin-syntax-import-attributes" "^7.24.7" "@babel/plugin-syntax-import-meta" "^7.10.4" "@babel/plugin-syntax-json-strings" "^7.8.3" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" @@ -1047,59 +1042,60 @@ "@babel/plugin-syntax-private-property-in-object" "^7.14.5" "@babel/plugin-syntax-top-level-await" "^7.14.5" "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" - "@babel/plugin-transform-arrow-functions" "^7.23.3" - "@babel/plugin-transform-async-generator-functions" "^7.23.9" - "@babel/plugin-transform-async-to-generator" "^7.23.3" - "@babel/plugin-transform-block-scoped-functions" "^7.23.3" - "@babel/plugin-transform-block-scoping" "^7.23.4" - "@babel/plugin-transform-class-properties" "^7.23.3" - "@babel/plugin-transform-class-static-block" "^7.23.4" - "@babel/plugin-transform-classes" "^7.23.8" - "@babel/plugin-transform-computed-properties" "^7.23.3" - "@babel/plugin-transform-destructuring" "^7.23.3" - "@babel/plugin-transform-dotall-regex" "^7.23.3" - "@babel/plugin-transform-duplicate-keys" "^7.23.3" - "@babel/plugin-transform-dynamic-import" "^7.23.4" - "@babel/plugin-transform-exponentiation-operator" "^7.23.3" - "@babel/plugin-transform-export-namespace-from" "^7.23.4" - "@babel/plugin-transform-for-of" "^7.23.6" - "@babel/plugin-transform-function-name" "^7.23.3" - "@babel/plugin-transform-json-strings" "^7.23.4" - "@babel/plugin-transform-literals" "^7.23.3" - "@babel/plugin-transform-logical-assignment-operators" "^7.23.4" - "@babel/plugin-transform-member-expression-literals" "^7.23.3" - "@babel/plugin-transform-modules-amd" "^7.23.3" - "@babel/plugin-transform-modules-commonjs" "^7.23.3" - "@babel/plugin-transform-modules-systemjs" "^7.23.9" - "@babel/plugin-transform-modules-umd" "^7.23.3" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.22.5" - "@babel/plugin-transform-new-target" "^7.23.3" - "@babel/plugin-transform-nullish-coalescing-operator" "^7.23.4" - "@babel/plugin-transform-numeric-separator" "^7.23.4" - "@babel/plugin-transform-object-rest-spread" "^7.24.0" - "@babel/plugin-transform-object-super" "^7.23.3" - "@babel/plugin-transform-optional-catch-binding" "^7.23.4" - "@babel/plugin-transform-optional-chaining" "^7.23.4" - "@babel/plugin-transform-parameters" "^7.23.3" - "@babel/plugin-transform-private-methods" "^7.23.3" - "@babel/plugin-transform-private-property-in-object" "^7.23.4" - "@babel/plugin-transform-property-literals" "^7.23.3" - "@babel/plugin-transform-regenerator" "^7.23.3" - "@babel/plugin-transform-reserved-words" "^7.23.3" - "@babel/plugin-transform-shorthand-properties" "^7.23.3" - "@babel/plugin-transform-spread" "^7.23.3" - "@babel/plugin-transform-sticky-regex" "^7.23.3" - "@babel/plugin-transform-template-literals" "^7.23.3" - "@babel/plugin-transform-typeof-symbol" "^7.23.3" - "@babel/plugin-transform-unicode-escapes" "^7.23.3" - "@babel/plugin-transform-unicode-property-regex" "^7.23.3" - "@babel/plugin-transform-unicode-regex" "^7.23.3" - "@babel/plugin-transform-unicode-sets-regex" "^7.23.3" + "@babel/plugin-transform-arrow-functions" "^7.24.7" + "@babel/plugin-transform-async-generator-functions" "^7.25.0" + "@babel/plugin-transform-async-to-generator" "^7.24.7" + "@babel/plugin-transform-block-scoped-functions" "^7.24.7" + "@babel/plugin-transform-block-scoping" "^7.25.0" + "@babel/plugin-transform-class-properties" "^7.24.7" + "@babel/plugin-transform-class-static-block" "^7.24.7" + "@babel/plugin-transform-classes" "^7.25.0" + "@babel/plugin-transform-computed-properties" "^7.24.7" + "@babel/plugin-transform-destructuring" "^7.24.8" + "@babel/plugin-transform-dotall-regex" "^7.24.7" + "@babel/plugin-transform-duplicate-keys" "^7.24.7" + "@babel/plugin-transform-duplicate-named-capturing-groups-regex" "^7.25.0" + "@babel/plugin-transform-dynamic-import" "^7.24.7" + "@babel/plugin-transform-exponentiation-operator" "^7.24.7" + "@babel/plugin-transform-export-namespace-from" "^7.24.7" + "@babel/plugin-transform-for-of" "^7.24.7" + "@babel/plugin-transform-function-name" "^7.25.1" + "@babel/plugin-transform-json-strings" "^7.24.7" + "@babel/plugin-transform-literals" "^7.25.2" + "@babel/plugin-transform-logical-assignment-operators" "^7.24.7" + "@babel/plugin-transform-member-expression-literals" "^7.24.7" + "@babel/plugin-transform-modules-amd" "^7.24.7" + "@babel/plugin-transform-modules-commonjs" "^7.24.8" + "@babel/plugin-transform-modules-systemjs" "^7.25.0" + "@babel/plugin-transform-modules-umd" "^7.24.7" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.24.7" + "@babel/plugin-transform-new-target" "^7.24.7" + "@babel/plugin-transform-nullish-coalescing-operator" "^7.24.7" + "@babel/plugin-transform-numeric-separator" "^7.24.7" + "@babel/plugin-transform-object-rest-spread" "^7.24.7" + "@babel/plugin-transform-object-super" "^7.24.7" + "@babel/plugin-transform-optional-catch-binding" "^7.24.7" + "@babel/plugin-transform-optional-chaining" "^7.24.8" + "@babel/plugin-transform-parameters" "^7.24.7" + "@babel/plugin-transform-private-methods" "^7.24.7" + "@babel/plugin-transform-private-property-in-object" "^7.24.7" + "@babel/plugin-transform-property-literals" "^7.24.7" + "@babel/plugin-transform-regenerator" "^7.24.7" + "@babel/plugin-transform-reserved-words" "^7.24.7" + "@babel/plugin-transform-shorthand-properties" "^7.24.7" + "@babel/plugin-transform-spread" "^7.24.7" + "@babel/plugin-transform-sticky-regex" "^7.24.7" + "@babel/plugin-transform-template-literals" "^7.24.7" + "@babel/plugin-transform-typeof-symbol" "^7.24.8" + "@babel/plugin-transform-unicode-escapes" "^7.24.7" + "@babel/plugin-transform-unicode-property-regex" "^7.24.7" + "@babel/plugin-transform-unicode-regex" "^7.24.7" + "@babel/plugin-transform-unicode-sets-regex" "^7.24.7" "@babel/preset-modules" "0.1.6-no-external-plugins" - babel-plugin-polyfill-corejs2 "^0.4.8" - babel-plugin-polyfill-corejs3 "^0.9.0" - babel-plugin-polyfill-regenerator "^0.5.5" - core-js-compat "^3.31.0" + babel-plugin-polyfill-corejs2 "^0.4.10" + babel-plugin-polyfill-corejs3 "^0.10.4" + babel-plugin-polyfill-regenerator "^0.6.1" + core-js-compat "^3.37.1" semver "^6.3.1" "@babel/preset-modules@0.1.6-no-external-plugins": @@ -1112,27 +1108,27 @@ esutils "^2.0.2" "@babel/preset-react@^7.12.5", "@babel/preset-react@^7.16.0": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.23.3.tgz#f73ca07e7590f977db07eb54dbe46538cc015709" - integrity sha512-tbkHOS9axH6Ysf2OUEqoSZ6T3Fa2SrNH6WTWSPBboxKzdxNc9qOICeLXkNG0ZEwbQ1HY8liwOce4aN/Ceyuq6w== + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.24.7.tgz#480aeb389b2a798880bf1f889199e3641cbb22dc" + integrity sha512-AAH4lEkpmzFWrGVlHaxJB7RLH21uPQ9+He+eFLWHmF9IuFQVugz8eAsamaW0DXRrTfco5zj1wWtpdcXJUOfsag== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-validator-option" "^7.22.15" - "@babel/plugin-transform-react-display-name" "^7.23.3" - "@babel/plugin-transform-react-jsx" "^7.22.15" - "@babel/plugin-transform-react-jsx-development" "^7.22.5" - "@babel/plugin-transform-react-pure-annotations" "^7.23.3" + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-validator-option" "^7.24.7" + "@babel/plugin-transform-react-display-name" "^7.24.7" + "@babel/plugin-transform-react-jsx" "^7.24.7" + "@babel/plugin-transform-react-jsx-development" "^7.24.7" + "@babel/plugin-transform-react-pure-annotations" "^7.24.7" "@babel/preset-typescript@^7.16.0": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.23.3.tgz#14534b34ed5b6d435aa05f1ae1c5e7adcc01d913" - integrity sha512-17oIGVlqz6CchO9RFYn5U6ZpWRZIngayYCtrPRSgANSwC2V1Jb+iP74nVxzzXJte8b8BYxrL1yY96xfhTBrNNQ== + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.24.7.tgz#66cd86ea8f8c014855671d5ea9a737139cbbfef1" + integrity sha512-SyXRe3OdWwIwalxDg5UtJnJQO+YPcTfwiIY2B0Xlddh9o7jpWLvv8X1RthIeDOxQ+O1ML5BLPCONToObyVQVuQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-validator-option" "^7.22.15" - "@babel/plugin-syntax-jsx" "^7.23.3" - "@babel/plugin-transform-modules-commonjs" "^7.23.3" - "@babel/plugin-transform-typescript" "^7.23.3" + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-validator-option" "^7.24.7" + "@babel/plugin-syntax-jsx" "^7.24.7" + "@babel/plugin-transform-modules-commonjs" "^7.24.7" + "@babel/plugin-transform-typescript" "^7.24.7" "@babel/regjsgen@^0.8.0": version "0.8.0" @@ -1140,52 +1136,49 @@ integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== "@babel/runtime-corejs3@^7.10.2": - version "7.24.0" - resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.24.0.tgz#34243e29e369a762dd2a356fee65c3767973828a" - integrity sha512-HxiRMOncx3ly6f3fcZ1GVKf+/EROcI9qwPgmij8Czqy6Okm/0T37T4y2ZIlLUuEUFjtM7NRsfdCO8Y3tAiJZew== + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.25.0.tgz#0a318b66dfc765ad10562d829fea372ed7e1eb7d" + integrity sha512-BOehWE7MgQ8W8Qn0CQnMtg2tHPHPulcS/5AVpFvs2KCK1ET+0WqZqPvnpRpFN81gYoFopdIEJX9Sgjw3ZBccPg== dependencies: core-js-pure "^3.30.2" regenerator-runtime "^0.14.0" -"@babel/runtime@^7.10.2", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.5", "@babel/runtime@^7.16.3", "@babel/runtime@^7.23.2", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2": - version "7.24.0" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.0.tgz#584c450063ffda59697021430cb47101b085951e" - integrity sha512-Chk32uHMg6TnQdvw2e9IlqPpFX/6NLuK0Ys2PqLb7/gL5uFn9mXvK715FGLlOLQrcO4qIkNHkvPGktzzXexsFw== +"@babel/runtime@^7.10.2", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.5", "@babel/runtime@^7.16.3", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.25.0.tgz#3af9a91c1b739c569d5d80cc917280919c544ecb" + integrity sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw== dependencies: regenerator-runtime "^0.14.0" -"@babel/template@^7.22.15", "@babel/template@^7.24.0", "@babel/template@^7.3.3": - version "7.24.0" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.24.0.tgz#c6a524aa93a4a05d66aaf31654258fae69d87d50" - integrity sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA== - dependencies: - "@babel/code-frame" "^7.23.5" - "@babel/parser" "^7.24.0" - "@babel/types" "^7.24.0" - -"@babel/traverse@^7.24.0", "@babel/traverse@^7.7.2": - version "7.24.0" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.24.0.tgz#4a408fbf364ff73135c714a2ab46a5eab2831b1e" - integrity sha512-HfuJlI8qq3dEDmNU5ChzzpZRWq+oxCZQyMzIMEqLho+AQnhMnKQUzH6ydo3RBl/YjPCuk68Y6s0Gx0AeyULiWw== - dependencies: - "@babel/code-frame" "^7.23.5" - "@babel/generator" "^7.23.6" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-function-name" "^7.23.0" - "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.24.0" - "@babel/types" "^7.24.0" +"@babel/template@^7.24.7", "@babel/template@^7.25.0", "@babel/template@^7.3.3": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.25.0.tgz#e733dc3134b4fede528c15bc95e89cb98c52592a" + integrity sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q== + dependencies: + "@babel/code-frame" "^7.24.7" + "@babel/parser" "^7.25.0" + "@babel/types" "^7.25.0" + +"@babel/traverse@^7.24.7", "@babel/traverse@^7.24.8", "@babel/traverse@^7.25.0", "@babel/traverse@^7.25.1", "@babel/traverse@^7.25.2", "@babel/traverse@^7.25.3", "@babel/traverse@^7.7.2": + version "7.25.3" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.25.3.tgz#f1b901951c83eda2f3e29450ce92743783373490" + integrity sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ== + dependencies: + "@babel/code-frame" "^7.24.7" + "@babel/generator" "^7.25.0" + "@babel/parser" "^7.25.3" + "@babel/template" "^7.25.0" + "@babel/types" "^7.25.2" debug "^4.3.1" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.12.6", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.4", "@babel/types@^7.23.6", "@babel/types@^7.24.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": - version "7.24.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.24.0.tgz#3b951f435a92e7333eba05b7566fd297960ea1bf" - integrity sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w== +"@babel/types@^7.0.0", "@babel/types@^7.12.6", "@babel/types@^7.20.7", "@babel/types@^7.24.7", "@babel/types@^7.24.8", "@babel/types@^7.25.0", "@babel/types@^7.25.2", "@babel/types@^7.3.3", "@babel/types@^7.4.4": + version "7.25.2" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.25.2.tgz#55fb231f7dc958cd69ea141a4c2997e819646125" + integrity sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q== dependencies: - "@babel/helper-string-parser" "^7.23.4" - "@babel/helper-validator-identifier" "^7.22.20" + "@babel/helper-string-parser" "^7.24.8" + "@babel/helper-validator-identifier" "^7.24.7" to-fast-properties "^2.0.0" "@bcoe/v8-coverage@^0.2.3": @@ -1312,9 +1305,9 @@ eslint-visitor-keys "^3.3.0" "@eslint-community/regexpp@^4.4.0", "@eslint-community/regexpp@^4.6.1": - version "4.10.0" - resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.10.0.tgz#548f6de556857c8bb73bbee70c35dc82a2e74d63" - integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA== + version "4.11.0" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.11.0.tgz#b0ffd0312b4a3fd2d6f77237e7248a5ad3a680ae" + integrity sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A== "@eslint/eslintrc@^2.1.4": version "2.1.4" @@ -1336,161 +1329,162 @@ resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.0.tgz#a5417ae8427873f1dd08b70b3574b453e67b5f7f" integrity sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g== -"@fluentui/date-time-utilities@^8.5.16": - version "8.5.16" - resolved "https://registry.yarnpkg.com/@fluentui/date-time-utilities/-/date-time-utilities-8.5.16.tgz#cd8177baaaee57d147b30d621f453b68f502aae0" - integrity sha512-l+mLfJ2VhdHjBpELLLPDaWgT7GMLynm2aqR7SttbEb6Jh7hc/7ck1MWm93RTb3gYVHYai8SENqimNcvIxHt/zg== +"@fluentui/date-time-utilities@^8.6.9": + version "8.6.9" + resolved "https://registry.yarnpkg.com/@fluentui/date-time-utilities/-/date-time-utilities-8.6.9.tgz#97ff9b164aa45bf81fc145dd2e37751c5635c77f" + integrity sha512-dgOlVm4nXBWDLqijmvn4iAtyv1hVpQZjN6p0So74BW+7ASUTkQGe3lf8PHV/OjBiXfZa4qwONvmTQBGCheNU0w== dependencies: - "@fluentui/set-version" "^8.2.14" + "@fluentui/set-version" "^8.2.23" tslib "^2.1.0" -"@fluentui/dom-utilities@^2.2.14": - version "2.2.14" - resolved "https://registry.yarnpkg.com/@fluentui/dom-utilities/-/dom-utilities-2.2.14.tgz#3df0435e428d5e289b957425178749a94c545ea9" - integrity sha512-+4DVm5sNfJh+l8fM+7ylpOkGNZkNr4X1z1uKQPzRJ1PRhlnvc6vLpWNNicGwpjTbgufSrVtGKXwP5sf++r81lg== +"@fluentui/dom-utilities@^2.3.7": + version "2.3.7" + resolved "https://registry.yarnpkg.com/@fluentui/dom-utilities/-/dom-utilities-2.3.7.tgz#b7cf26716df38d1b543de20efe230f7371790552" + integrity sha512-AaTR9BhJEF0i042NS1Ju8l95f24p2tBMq6jVVbUEDtYnKaxWnpv8R9eYjOwy8SDniQc1ino+BkolIgCVXXvDmw== dependencies: - "@fluentui/set-version" "^8.2.14" + "@fluentui/set-version" "^8.2.23" tslib "^2.1.0" -"@fluentui/font-icons-mdl2@^8.5.32": - version "8.5.32" - resolved "https://registry.yarnpkg.com/@fluentui/font-icons-mdl2/-/font-icons-mdl2-8.5.32.tgz#5560fa74da3455a9da8e283637adb1d5464d2bd9" - integrity sha512-PCZMijJlDQ5Zy8oNb80vUD6I4ORiR03qFgDT8o08mAGu+KzQO96q4jm0rzPRQuI9CO7pDD/6naOo8UVrmhZ2Aw== +"@fluentui/font-icons-mdl2@^8.5.48": + version "8.5.48" + resolved "https://registry.yarnpkg.com/@fluentui/font-icons-mdl2/-/font-icons-mdl2-8.5.48.tgz#d3a4cbe4e8f3c5f731653b9d477aabdcb5598df8" + integrity sha512-gkmHbZ1YXrxbq6WpfyqP9rxY7fp8xsTF1cyj3e9Ke2Pl3t6up+LM1MBunMHbeCk9Z4jUAk4HNF6DQn+glF066A== dependencies: - "@fluentui/set-version" "^8.2.14" - "@fluentui/style-utilities" "^8.10.3" - "@fluentui/utilities" "^8.13.24" + "@fluentui/set-version" "^8.2.23" + "@fluentui/style-utilities" "^8.10.19" + "@fluentui/utilities" "^8.15.14" tslib "^2.1.0" -"@fluentui/foundation-legacy@^8.2.52": - version "8.2.52" - resolved "https://registry.yarnpkg.com/@fluentui/foundation-legacy/-/foundation-legacy-8.2.52.tgz#e73f54596b183c6f62755a179adda19065c2c3dd" - integrity sha512-tHCD0m58Zja7wN1FTsvj4Gaj0B22xOhRTpyDzyvxRfjFGYPpR2Jgx/y/KRB3JTOX5EfJHAVzInyWZBeN5IfsVA== +"@fluentui/foundation-legacy@^8.4.14": + version "8.4.14" + resolved "https://registry.yarnpkg.com/@fluentui/foundation-legacy/-/foundation-legacy-8.4.14.tgz#c589859dd4cc5a120aa804c69fd2c235a9bb5d7f" + integrity sha512-5EXKmQiYVqRKzAaxl6IJzATaW4ZDBBpS2DbOUQtCXjdKJaUVcdLqvm2IGtLQ4hPxIyp74li71ilEGL81NkLerw== dependencies: - "@fluentui/merge-styles" "^8.5.15" - "@fluentui/set-version" "^8.2.14" - "@fluentui/style-utilities" "^8.10.3" - "@fluentui/utilities" "^8.13.24" + "@fluentui/merge-styles" "^8.6.12" + "@fluentui/set-version" "^8.2.23" + "@fluentui/style-utilities" "^8.10.19" + "@fluentui/utilities" "^8.15.14" tslib "^2.1.0" -"@fluentui/keyboard-key@^0.4.14": - version "0.4.14" - resolved "https://registry.yarnpkg.com/@fluentui/keyboard-key/-/keyboard-key-0.4.14.tgz#858eb9599a29534363ebf5f4a79413a57e4477b5" - integrity sha512-XzZHcyFEM20H23h3i15UpkHi2AhRBriXPGAHq0Jm98TKFppXehedjjEFuUsh+CyU5JKBhDalWp8TAQ1ArpNzow== +"@fluentui/keyboard-key@^0.4.23": + version "0.4.23" + resolved "https://registry.yarnpkg.com/@fluentui/keyboard-key/-/keyboard-key-0.4.23.tgz#ebaa87b1dcdfb2a9ac805c678f9520e9d9194c3c" + integrity sha512-9GXeyUqNJUdg5JiQUZeGPiKnRzMRi9YEUn1l9zq6X/imYdMhxHrxpVZS12129cBfgvPyxt9ceJpywSfmLWqlKA== dependencies: tslib "^2.1.0" -"@fluentui/merge-styles@^8.5.15": - version "8.5.15" - resolved "https://registry.yarnpkg.com/@fluentui/merge-styles/-/merge-styles-8.5.15.tgz#8327b5ff264a9cd1a2d6a6fd780071914d30edb5" - integrity sha512-4CdKwo4k1Un2QLulpSVIz/KMgLNBMgin4NPyapmKDMVuO1OOxJUqfocubRGNO5x9mKgAMMYwBKGO9i0uxMMpJw== +"@fluentui/merge-styles@^8.6.12": + version "8.6.12" + resolved "https://registry.yarnpkg.com/@fluentui/merge-styles/-/merge-styles-8.6.12.tgz#1cb4fde2110fcdbc3443641fd159d0683d68bc23" + integrity sha512-v8njux9frUkoGGlBnQXKHaKCX2nLZVHPFMDMzibtAIt4vIkkv+oY2lFmJ2h96tSIkg4eVN7h5sSDTFVoAPwpYg== dependencies: - "@fluentui/set-version" "^8.2.14" + "@fluentui/set-version" "^8.2.23" tslib "^2.1.0" -"@fluentui/react-file-type-icons@^8.7.9": - version "8.11.3" - resolved "https://registry.yarnpkg.com/@fluentui/react-file-type-icons/-/react-file-type-icons-8.11.3.tgz#1a976653a28a7e0a0e327863d21d81b8728cfcce" - integrity sha512-WA4Y8GSwMJSPGE8SrXwJTNXr2Zhd1gnbnFWzTCqPt0qhEcJKjcapnvUJA3GgVFULYnQN83N5pen2HoZy70ZSWA== +"@fluentui/react-file-type-icons@^8.11.18": + version "8.11.19" + resolved "https://registry.yarnpkg.com/@fluentui/react-file-type-icons/-/react-file-type-icons-8.11.19.tgz#04c919d7e9e75183b8b8d75fa8d243ab2cadbd79" + integrity sha512-2n/BviDg25QqO7JaIWfPHQ2v9Lt58mT2x2JSWQeFTLxdVT6JMclCFsflToQmwr6kY4Rjc1XcQvK14uuSZfwKVg== dependencies: - "@fluentui/set-version" "^8.2.14" - "@fluentui/style-utilities" "^8.10.3" + "@fluentui/set-version" "^8.2.23" + "@fluentui/style-utilities" "^8.10.19" tslib "^2.1.0" -"@fluentui/react-focus@^8.8.40": - version "8.8.40" - resolved "https://registry.yarnpkg.com/@fluentui/react-focus/-/react-focus-8.8.40.tgz#2124a848673b2f35c5d8aac1360cc3eb45431ade" - integrity sha512-ha0CbLv5EIbjYCtQky6LVZObxOeMfhixrgrzfXm3Ta2eGs1NyZRDm1VeM6acOolWB/8QiN/CbdGckjALli8L2g== +"@fluentui/react-focus@^8.9.11": + version "8.9.11" + resolved "https://registry.yarnpkg.com/@fluentui/react-focus/-/react-focus-8.9.11.tgz#ad0813a3e6ab27d815c99fd9016df6b908876790" + integrity sha512-rydJUy8zkc2C7URdllG9O2+mtWYUnpx5vQ2At1ktq99grTmmsoB835kQRxfJuNJaSdKg48nSiXz9q8muitJ/rg== dependencies: - "@fluentui/keyboard-key" "^0.4.14" - "@fluentui/merge-styles" "^8.5.15" - "@fluentui/set-version" "^8.2.14" - "@fluentui/style-utilities" "^8.10.3" - "@fluentui/utilities" "^8.13.24" + "@fluentui/keyboard-key" "^0.4.23" + "@fluentui/merge-styles" "^8.6.12" + "@fluentui/set-version" "^8.2.23" + "@fluentui/style-utilities" "^8.10.19" + "@fluentui/utilities" "^8.15.14" tslib "^2.1.0" -"@fluentui/react-hooks@^8.6.36": - version "8.6.36" - resolved "https://registry.yarnpkg.com/@fluentui/react-hooks/-/react-hooks-8.6.36.tgz#d10b3ba289e38c489c238dd4f76b8fe2c469b81a" - integrity sha512-kI0Z4Q4xHUs4SOmmI5n5OH5fPckqMSCovTRpiuxzCO2TNzLmfC861+nqf4Ygw/ChqNm2gWNZZfUADfnNAEsq+Q== +"@fluentui/react-hooks@^8.8.11": + version "8.8.11" + resolved "https://registry.yarnpkg.com/@fluentui/react-hooks/-/react-hooks-8.8.11.tgz#1da1dffbca4bf64f010e6a22d1e8ee5024d570be" + integrity sha512-p+LeygeyydQH1jThwUlQ0sIRdY4DIuCw1Fn7GsF4LwhaZwZH69+dCUnyRTpmiLvfKgwsQJ00OdVdg+J0Ctuvdg== dependencies: - "@fluentui/react-window-provider" "^2.2.18" - "@fluentui/set-version" "^8.2.14" - "@fluentui/utilities" "^8.13.24" + "@fluentui/react-window-provider" "^2.2.28" + "@fluentui/set-version" "^8.2.23" + "@fluentui/utilities" "^8.15.14" tslib "^2.1.0" -"@fluentui/react-portal-compat-context@^9.0.11": - version "9.0.11" - resolved "https://registry.yarnpkg.com/@fluentui/react-portal-compat-context/-/react-portal-compat-context-9.0.11.tgz#5ed1ebc46b54b7192fe8d3948095506b78b05680" - integrity sha512-ubvW/ej0O+Pago9GH3mPaxzUgsNnBoqvghNamWjyKvZIViyaXUG6+sgcAl721R+qGAFac+A20akI5qDJz/xtdg== +"@fluentui/react-portal-compat-context@^9.0.12": + version "9.0.12" + resolved "https://registry.yarnpkg.com/@fluentui/react-portal-compat-context/-/react-portal-compat-context-9.0.12.tgz#e11d9049fa1e97a9b4f42d5989dc5ab13c00c4f5" + integrity sha512-5AVXWX9GnbvwnJZYUb4LSIF7BsI/N8oTI6+7Yn0w6B3yaWykA8Menlz757X5tgVBjouEj4Eom+AoVvA7u8gPDA== dependencies: "@swc/helpers" "^0.5.1" -"@fluentui/react-window-provider@^2.2.18": - version "2.2.18" - resolved "https://registry.yarnpkg.com/@fluentui/react-window-provider/-/react-window-provider-2.2.18.tgz#8881f1f5f5d70010d60f54965a7c6c917e3e0f39" - integrity sha512-nBKqxd0P8NmIR0qzFvka1urE2LVbUm6cse1I1T7TcOVNYa5jDf5BrO06+JRZfwbn00IJqOnIVoP0qONqceypWQ== +"@fluentui/react-window-provider@^2.2.28": + version "2.2.28" + resolved "https://registry.yarnpkg.com/@fluentui/react-window-provider/-/react-window-provider-2.2.28.tgz#6f1109a37f888ffba78cdf009772c642222132ed" + integrity sha512-YdZ74HTaoDwlvLDzoBST80/17ExIl93tLJpTxnqK5jlJOAUVQ+mxLPF2HQEJq+SZr5IMXHsQ56w/KaZVRn72YA== dependencies: - "@fluentui/set-version" "^8.2.14" + "@fluentui/set-version" "^8.2.23" tslib "^2.1.0" -"@fluentui/react@^8.114.1": - version "8.115.6" - resolved "https://registry.yarnpkg.com/@fluentui/react/-/react-8.115.6.tgz#59ff8f2455e93bc08cb87742ba04c36306c675f7" - integrity sha512-lao6u6AfA9uE+jWsmmRriCYXlQ9IU3W2jlapJiOJGyQvF9JGdVCyKDi2w4dIvsJyhA4ucfcKqg+9EgyrgbWcNg== - dependencies: - "@fluentui/date-time-utilities" "^8.5.16" - "@fluentui/font-icons-mdl2" "^8.5.32" - "@fluentui/foundation-legacy" "^8.2.52" - "@fluentui/merge-styles" "^8.5.15" - "@fluentui/react-focus" "^8.8.40" - "@fluentui/react-hooks" "^8.6.36" - "@fluentui/react-portal-compat-context" "^9.0.11" - "@fluentui/react-window-provider" "^2.2.18" - "@fluentui/set-version" "^8.2.14" - "@fluentui/style-utilities" "^8.10.3" - "@fluentui/theme" "^2.6.41" - "@fluentui/utilities" "^8.13.24" +"@fluentui/react@^8.119.1": + version "8.120.2" + resolved "https://registry.yarnpkg.com/@fluentui/react/-/react-8.120.2.tgz#b9db6aca4d1ce96b5ce8b9a6ee370a264496a2e8" + integrity sha512-OXXBSHhLJZs1vHFF/QloSsZ+UdzcgaiFj53xdoWs+Je2GA04+lmdYQVetS6aV9NZOgizm0fCoxYh4MegDJjwrg== + dependencies: + "@fluentui/date-time-utilities" "^8.6.9" + "@fluentui/font-icons-mdl2" "^8.5.48" + "@fluentui/foundation-legacy" "^8.4.14" + "@fluentui/merge-styles" "^8.6.12" + "@fluentui/react-focus" "^8.9.11" + "@fluentui/react-hooks" "^8.8.11" + "@fluentui/react-portal-compat-context" "^9.0.12" + "@fluentui/react-window-provider" "^2.2.28" + "@fluentui/set-version" "^8.2.23" + "@fluentui/style-utilities" "^8.10.19" + "@fluentui/theme" "^2.6.57" + "@fluentui/utilities" "^8.15.14" "@microsoft/load-themed-styles" "^1.10.26" tslib "^2.1.0" -"@fluentui/set-version@^8.2.14": - version "8.2.14" - resolved "https://registry.yarnpkg.com/@fluentui/set-version/-/set-version-8.2.14.tgz#e5e63e77e1016a910b8495dfa37505bdbe91059e" - integrity sha512-f/QWJnSeyfAjGAqq57yjMb6a5ejPlwfzdExPmzFBuEOuupi8hHbV8Yno12XJcTW4I0KXEQGw+PUaM1aOf/j7jw== +"@fluentui/set-version@^8.2.23": + version "8.2.23" + resolved "https://registry.yarnpkg.com/@fluentui/set-version/-/set-version-8.2.23.tgz#14032bc9a222a6e50a5cb166e1a39a527cfc69fd" + integrity sha512-VPXaBsiaa3Xn/AY40nLU9bvDQ62lpMVnFzFTlQ8CbpdwrjxNlRxDUY5vRToNzp1+Zu5gD/+CgsXqIZGcry5L5w== dependencies: tslib "^2.1.0" -"@fluentui/style-utilities@^8.10.3": - version "8.10.3" - resolved "https://registry.yarnpkg.com/@fluentui/style-utilities/-/style-utilities-8.10.3.tgz#3defa4653b6685f9fdfcc157a2357cf192c7da0b" - integrity sha512-pyO9BGkwIxXaIMVT6ma98GIZAgTjGc0LZ5iUai9GLIrFLQWnIKnS//hgUx8qG4AecUeqZ26Wb0e+Ale9NyPQCQ== +"@fluentui/style-utilities@^8.10.19": + version "8.10.19" + resolved "https://registry.yarnpkg.com/@fluentui/style-utilities/-/style-utilities-8.10.19.tgz#db8ecce46a93bc6f0c9da4eac6ab2b08875fcb7d" + integrity sha512-8cHkBblNb7c8HQL6jyz6prlK/JTH49LxiQIxMG5A+WnypVkwvu88BiEYv3mr+HfE+I39fhZnHq9bPV7tHfXcIw== dependencies: - "@fluentui/merge-styles" "^8.5.15" - "@fluentui/set-version" "^8.2.14" - "@fluentui/theme" "^2.6.41" - "@fluentui/utilities" "^8.13.24" + "@fluentui/merge-styles" "^8.6.12" + "@fluentui/set-version" "^8.2.23" + "@fluentui/theme" "^2.6.57" + "@fluentui/utilities" "^8.15.14" "@microsoft/load-themed-styles" "^1.10.26" tslib "^2.1.0" -"@fluentui/theme@^2.6.41": - version "2.6.41" - resolved "https://registry.yarnpkg.com/@fluentui/theme/-/theme-2.6.41.tgz#ab73cad6c0895b024c4f94d6f66945c8a91cb3bc" - integrity sha512-h9RguEzqzJ0+59ys5Kkp7JtsjhDUxBLmQunu5rpHp5Mp788OtEjI/n1a9FIcOAL/priPSQwXN7RbuDpeP7+aSw== +"@fluentui/theme@^2.6.57": + version "2.6.57" + resolved "https://registry.yarnpkg.com/@fluentui/theme/-/theme-2.6.57.tgz#31e57ae3483960ebe14def9e41b8789231f9a36f" + integrity sha512-mm6UJJeGCbySmYW61Wc91JZ0lNb3pUzJIXuLYIari/qhF4cXHU3DnGbIwUehzBSOh5X3PEFIuXbpbstis+JhqQ== dependencies: - "@fluentui/merge-styles" "^8.5.15" - "@fluentui/set-version" "^8.2.14" - "@fluentui/utilities" "^8.13.24" + "@fluentui/merge-styles" "^8.6.12" + "@fluentui/set-version" "^8.2.23" + "@fluentui/utilities" "^8.15.14" tslib "^2.1.0" -"@fluentui/utilities@^8.13.24": - version "8.13.24" - resolved "https://registry.yarnpkg.com/@fluentui/utilities/-/utilities-8.13.24.tgz#0f093889e88be817bd7f7c6a096d563063f7e3c8" - integrity sha512-/jo6hWCzTGCx06l2baAMwsjjBZ/dyMouls53uNaQLUGUUhUwXh/DcDDXMqLRJB3MaH9zvgfvRw61iKmm2s9fIA== +"@fluentui/utilities@^8.15.14": + version "8.15.14" + resolved "https://registry.yarnpkg.com/@fluentui/utilities/-/utilities-8.15.14.tgz#950ad4143fa9840ffb5d3b4f6127d68a74a9bc0b" + integrity sha512-TCOkX+1EN2UZKGdvaxaozjDbJcr+BhocdE23uZMZ+XphPW+2Dqij0+2k5jWO4UMCigKdcbLFZzhSc5YRpT+aFg== dependencies: - "@fluentui/dom-utilities" "^2.2.14" - "@fluentui/merge-styles" "^8.5.15" - "@fluentui/set-version" "^8.2.14" + "@fluentui/dom-utilities" "^2.3.7" + "@fluentui/merge-styles" "^8.6.12" + "@fluentui/react-window-provider" "^2.2.28" + "@fluentui/set-version" "^8.2.23" tslib "^2.1.0" "@gar/promisify@^1.0.1", "@gar/promisify@^1.1.3": @@ -1513,9 +1507,9 @@ integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== "@humanwhocodes/object-schema@^2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz#d9fae00a2d5cb40f92cfe64b47ad749fbc38f917" - integrity sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw== + version "2.0.3" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3" + integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA== "@isaacs/cliui@^8.0.2": version "8.0.2" @@ -1792,50 +1786,50 @@ "@types/yargs" "^17.0.8" chalk "^4.0.0" -"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": - version "0.3.4" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.4.tgz#9b18145d26cf33d08576cf4c7665b28554480ed7" - integrity sha512-Oud2QPM5dHviZNn4y/WhhYKSXksv+1xLEIsNrAbGcFzUN3ubqWRFT5gwPchNc5NuzILOU4tPBDTZ4VwhL8Y7cw== +"@jridgewell/gen-mapping@^0.3.2", "@jridgewell/gen-mapping@^0.3.5": + version "0.3.5" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36" + integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg== dependencies: - "@jridgewell/set-array" "^1.0.1" + "@jridgewell/set-array" "^1.2.1" "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.9" + "@jridgewell/trace-mapping" "^0.3.24" "@jridgewell/resolve-uri@^3.1.0": version "3.1.2" resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== -"@jridgewell/set-array@^1.0.1": +"@jridgewell/set-array@^1.2.1": version "1.2.1" resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== "@jridgewell/source-map@^0.3.3": - version "0.3.5" - resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.5.tgz#a3bb4d5c6825aab0d281268f47f6ad5853431e91" - integrity sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ== + version "0.3.6" + resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.6.tgz#9d71ca886e32502eb9362c9a74a46787c36df81a" + integrity sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ== dependencies: - "@jridgewell/gen-mapping" "^0.3.0" - "@jridgewell/trace-mapping" "^0.3.9" + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.25" "@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": - version "1.4.15" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" - integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + version "1.5.0" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" + integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== -"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.20", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.23" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.23.tgz#afc96847f3f07841477f303eed687707a5aacd80" - integrity sha512-9/4foRoUKp8s96tSkh8DlAAc5A0Ty8vLXld+l9gjKKY6ckwI8G15f0hskGmuLZu78ZlGa1vtsfOa+lnB4vG6Jg== +"@jridgewell/trace-mapping@^0.3.20", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": + version "0.3.25" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" + integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== dependencies: "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" "@leichtgewicht/ip-codec@^2.0.1": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz#b2ac626d6cb9c8718ab459166d4bb405b8ffa78b" - integrity sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A== + version "2.0.5" + resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz#4fc56c15c580b9adb7dc3c333a134e540b44bfb1" + integrity sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw== "@microsoft/load-themed-styles@^1.10.26": version "1.10.295" @@ -1908,18 +1902,16 @@ integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== "@pmmmwh/react-refresh-webpack-plugin@^0.5.3": - version "0.5.11" - resolved "https://registry.yarnpkg.com/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.11.tgz#7c2268cedaa0644d677e8c4f377bc8fb304f714a" - integrity sha512-7j/6vdTym0+qZ6u4XbSAxrWBGYSdCfTzySkj7WAFgDLmSyWlOrWvpyzxlFh5jtw9dn0oL/jtW+06XfFiisN3JQ== + version "0.5.15" + resolved "https://registry.yarnpkg.com/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.15.tgz#f126be97c30b83ed777e2aeabd518bc592e6e7c4" + integrity sha512-LFWllMA55pzB9D34w/wXUCf8+c+IYKuJDgxiZ3qMhl64KRMBHYM1I3VdGaD2BV5FNPV2/S2596bppxHbv2ZydQ== dependencies: - ansi-html-community "^0.0.8" - common-path-prefix "^3.0.0" + ansi-html "^0.0.9" core-js-pure "^3.23.3" error-stack-parser "^2.0.6" - find-up "^5.0.0" html-entities "^2.1.0" loader-utils "^2.0.4" - schema-utils "^3.0.0" + schema-utils "^4.2.0" source-map "^0.7.3" "@reduxjs/toolkit@^1.8.6": @@ -1999,9 +1991,9 @@ picomatch "^2.2.2" "@rushstack/eslint-patch@^1.1.0": - version "1.7.2" - resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.7.2.tgz#2d4260033e199b3032a08b41348ac10de21c47e9" - integrity sha512-RbhOOTCNoCrbfkRyoXODZp75MlpiHMgbE5MEBZAnnnLyQNgrigEj4p0lzsMDyc1zVsJDLrivB58tgg3emX0eEA== + version "1.10.4" + resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.10.4.tgz#427d5549943a9c6fce808e39ea64dbe60d4047f1" + integrity sha512-WJgX9nzTqknM393q1QJDJmoW28kUfEnybeTfVNcNAPnIx210RXm2DiXiHzfNPJNIUUb1tJnz/l4QGtJ30PgWmA== "@sinclair/typebox@^0.24.1": version "0.24.51" @@ -2141,9 +2133,9 @@ loader-utils "^2.0.0" "@swc/helpers@^0.5.1": - version "0.5.6" - resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.6.tgz#d16d8566b7aea2bef90d059757e2d77f48224160" - integrity sha512-aYX01Ke9hunpoCexYAgQucEpARGQ5w/cqHFrIR+e9gdKb1QWTsVJuTJ2ozQzIAxLyRQe/m+2RqzkyOOGiMKRQA== + version "0.5.12" + resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.12.tgz#37aaca95284019eb5d2207101249435659709f4b" + integrity sha512-KMZNXiGibsW9kvZAO1Pam2JPTDBm+KSHMMHWdsyI/1DbIZjT2A6Gy3hblVXUMEDvUAKq+e0vL0X0o54owWji7g== dependencies: tslib "^2.4.0" @@ -2176,23 +2168,23 @@ pretty-format "^27.0.2" "@testing-library/jest-dom@^6.2.0": - version "6.4.2" - resolved "https://registry.yarnpkg.com/@testing-library/jest-dom/-/jest-dom-6.4.2.tgz#38949f6b63722900e2d75ba3c6d9bf8cffb3300e" - integrity sha512-CzqH0AFymEMG48CpzXFriYYkOjk6ZGPCLMhW9e9jg3KMCn5OfJecF8GtGW7yGfR/IgCe3SX8BSwjdzI6BBbZLw== + version "6.4.8" + resolved "https://registry.yarnpkg.com/@testing-library/jest-dom/-/jest-dom-6.4.8.tgz#9c435742b20c6183d4e7034f2b329d562c079daa" + integrity sha512-JD0G+Zc38f5MBHA4NgxQMR5XtO5Jx9g86jqturNTt2WUfRmLDIY7iKkWHDCCTiDuFMre6nxAD5wHw9W5kI4rGw== dependencies: - "@adobe/css-tools" "^4.3.2" + "@adobe/css-tools" "^4.4.0" "@babel/runtime" "^7.9.2" aria-query "^5.0.0" chalk "^3.0.0" css.escape "^1.5.1" dom-accessibility-api "^0.6.3" - lodash "^4.17.15" + lodash "^4.17.21" redent "^3.0.0" "@testing-library/react@^14.0.0": - version "14.2.1" - resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-14.2.1.tgz#bf69aa3f71c36133349976a4a2da3687561d8310" - integrity sha512-sGdjws32ai5TLerhvzThYFbpnF9XtL65Cjf+gB0Dhr29BGqK+mAeN7SURSdu+eqgET4ANcWoC7FQpkaiGvBr+A== + version "14.3.1" + resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-14.3.1.tgz#29513fc3770d6fb75245c4e1245c470e4ffdd830" + integrity sha512-H99XjUhWQw0lTgyMN05W3xQG1Nh4lq574D8keFf1dDoNTJgp66VbJozRaczoF+wsiaPJNt/TcnfpLGufGxSrZQ== dependencies: "@babel/runtime" "^7.12.5" "@testing-library/dom" "^9.0.0" @@ -2255,9 +2247,9 @@ "@babel/types" "^7.0.0" "@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6": - version "7.20.5" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.5.tgz#7b7502be0aa80cc4ef22978846b983edaafcd4dd" - integrity sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ== + version "7.20.6" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.6.tgz#8dc9f0ae0f202c08d8d4dab648912c8d6038e3f7" + integrity sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg== dependencies: "@babel/types" "^7.20.7" @@ -2306,10 +2298,18 @@ "@types/eslint" "*" "@types/estree" "*" -"@types/eslint@*", "@types/eslint@^7.29.0 || ^8.4.1": - version "8.56.5" - resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.56.5.tgz#94b88cab77588fcecdd0771a6d576fa1c0af9d02" - integrity sha512-u5/YPJHo1tvkSF2CE0USEkxon82Z5DBy2xR+qfyYNszpX9qcs4sT6uq2kBbj4BXY1+DBGDPnrhMZV3pKWGNukw== +"@types/eslint@*": + version "9.6.0" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-9.6.0.tgz#51d4fe4d0316da9e9f2c80884f2c20ed5fb022ff" + integrity sha512-gi6WQJ7cHRgZxtkQEoyHMppPjq9Kxo5Tjn2prSKDSmZrCz8TZ3jSRCeTJm+WoM+oB0WG37bRqLzaaU3q7JypGg== + dependencies: + "@types/estree" "*" + "@types/json-schema" "*" + +"@types/eslint@^7.29.0 || ^8.4.1": + version "8.56.11" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.56.11.tgz#e2ff61510a3b9454b3329fe7731e3b4c6f780041" + integrity sha512-sVBpJMf7UPo/wGecYOpk2aQya2VUGeHhe38WG7/mN5FufNSubf5VT9Uh9Uyp8/eLJpu1/tuhJ/qTo4mhSB4V4Q== dependencies: "@types/estree" "*" "@types/json-schema" "*" @@ -2325,9 +2325,9 @@ integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== "@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.33": - version "4.17.43" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.43.tgz#10d8444be560cb789c4735aea5eac6e5af45df54" - integrity sha512-oaYtiBirUOPQGSWNGPWnzyAFJ0BP3cwvN4oWZQY+zUBwpVIGsKUkpBpSztp74drYcjavs7SKFZ4DX1V2QeN8rg== + version "4.19.5" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.19.5.tgz#218064e321126fcf9048d1ca25dd2465da55d9c6" + integrity sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg== dependencies: "@types/node" "*" "@types/qs" "*" @@ -2427,11 +2427,6 @@ dependencies: "@types/unist" "^2" -"@types/mime@*": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@types/mime/-/mime-3.0.4.tgz#2198ac274de6017b44d941e00261d5bc6a0e0a45" - integrity sha512-iJt33IQnVRkqeqC7PzBHPTC6fDlRNRW8vjrgqtScAhrmMwe8c4Eo7+fUGTa+XdWrpEgpyKWMYmi2dIwMAYRzPw== - "@types/mime@^1": version "1.3.5" resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.5.tgz#1ef302e01cf7d2b5a0fa526790c9123bf1d06690" @@ -2454,10 +2449,17 @@ dependencies: "@types/node" "*" -"@types/node@*", "@types/node@^20.4.2": - version "20.11.24" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.24.tgz#cc207511104694e84e9fb17f9a0c4c42d4517792" - integrity sha512-Kza43ewS3xoLgCEpQrsT+xRo/EJej1y0kVYGiLFE1NEODXGzTfwiC6tXTLMQskn1X4/Rjlh0MQUvx9W+L9long== +"@types/node@*": + version "22.1.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.1.0.tgz#6d6adc648b5e03f0e83c78dc788c2b037d0ad94b" + integrity sha512-AOmuRF0R2/5j1knA3c6G3HOk523Ga+l+ZXltX8SF1+5oqcXijjfTd8fY3XRZqSihEu9XhtQnKYLmkFaoxgsJHw== + dependencies: + undici-types "~6.13.0" + +"@types/node@^20.14.10": + version "20.14.14" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.14.14.tgz#6b655d4a88623b0edb98300bb9dd2107225f885e" + integrity sha512-d64f00982fS9YoOgJkAMolK7MN8Iq3TDdVjchbYHdEmjth/DHowx82GnoA+tVUAN+7vxfYUgAzi+JXbKNd2SDQ== dependencies: undici-types "~5.26.4" @@ -2477,9 +2479,9 @@ integrity sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA== "@types/prop-types@*", "@types/prop-types@^15.0.0": - version "15.7.11" - resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.11.tgz#2596fb352ee96a1379c657734d4b913a613ad563" - integrity sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng== + version "15.7.12" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.12.tgz#12bb1e2be27293c1406acb6af1c3f3a1481d98c6" + integrity sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q== "@types/q@^1.5.1": version "1.5.8" @@ -2487,9 +2489,9 @@ integrity sha512-hroOstUScF6zhIi+5+x0dzqrHA1EJi+Irri6b1fxolMTqqHIV/Cg77EtnQcZqZCu8hR3mX2BzIxN4/GzI68Kfw== "@types/qs@*": - version "6.9.12" - resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.12.tgz#afa96b383a3a6fdc859453a1892d41b607fc7756" - integrity sha512-bZcOkJ6uWrL0Qb2NAWKa7TBU+mJHPzhx9jjLL1KHF+XpzEcR7EXHvjbHlGtR/IsP1vyPrehuS6XqkmaePy//mg== + version "6.9.15" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.15.tgz#adde8a060ec9c305a82de1babc1056e73bd64dce" + integrity sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg== "@types/range-parser@*": version "1.2.7" @@ -2497,19 +2499,18 @@ integrity sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ== "@types/react-dom@^18.0.0", "@types/react-dom@^18.2.6": - version "18.2.19" - resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.2.19.tgz#b84b7c30c635a6c26c6a6dfbb599b2da9788be58" - integrity sha512-aZvQL6uUbIJpjZk4U8JZGbau9KDeAwMfmhyWorxgBkqDIEf6ROjRozcmPIicqsUwPUjbkDfHKgGee1Lq65APcA== + version "18.3.0" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.3.0.tgz#0cbc818755d87066ab6ca74fbedb2547d74a82b0" + integrity sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg== dependencies: "@types/react" "*" -"@types/react@*", "@types/react@^18.0.25": - version "18.2.61" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.61.tgz#5607308495037436779939ec0348a5816c08799d" - integrity sha512-NURTN0qNnJa7O/k4XUkEW2yfygA+NxS0V5h1+kp9jPwhzZy95q3ADoGMP0+JypMhrZBTTgjKAUlTctde1zzeQA== +"@types/react@*", "@types/react@^18.3.3": + version "18.3.3" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.3.3.tgz#9679020895318b0915d7a3ab004d92d33375c45f" + integrity sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw== dependencies: "@types/prop-types" "*" - "@types/scheduler" "*" csstype "^3.0.2" "@types/resolve@1.17.1": @@ -2524,11 +2525,6 @@ resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.0.tgz#2b35eccfcee7d38cd72ad99232fbd58bffb3c84d" integrity sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA== -"@types/scheduler@*": - version "0.16.8" - resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.8.tgz#ce5ace04cfeabe7ef87c0091e50752e36707deff" - integrity sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A== - "@types/semver@^7.3.12": version "7.5.8" resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.8.tgz#8268a8c57a3e4abd25c165ecd36237db7948a55e" @@ -2550,13 +2546,13 @@ "@types/express" "*" "@types/serve-static@*", "@types/serve-static@^1.13.10": - version "1.15.5" - resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.5.tgz#15e67500ec40789a1e8c9defc2d32a896f05b033" - integrity sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ== + version "1.15.7" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.7.tgz#22174bbd74fb97fe303109738e9b5c2f3064f714" + integrity sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw== dependencies: "@types/http-errors" "*" - "@types/mime" "*" "@types/node" "*" + "@types/send" "*" "@types/sockjs@^0.3.33": version "0.3.36" @@ -2586,9 +2582,9 @@ integrity sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA== "@types/ws@^8.5.5": - version "8.5.10" - resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.10.tgz#4acfb517970853fa6574a3a6886791d04a396787" - integrity sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A== + version "8.5.12" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.12.tgz#619475fe98f35ccca2a2f6c137702d85ec247b7e" + integrity sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ== dependencies: "@types/node" "*" @@ -2714,10 +2710,10 @@ resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== -"@webassemblyjs/ast@1.11.6", "@webassemblyjs/ast@^1.11.5": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.6.tgz#db046555d3c413f8966ca50a95176a0e2c642e24" - integrity sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q== +"@webassemblyjs/ast@1.12.1", "@webassemblyjs/ast@^1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.12.1.tgz#bb16a0e8b1914f979f45864c23819cc3e3f0d4bb" + integrity sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg== dependencies: "@webassemblyjs/helper-numbers" "1.11.6" "@webassemblyjs/helper-wasm-bytecode" "1.11.6" @@ -2732,10 +2728,10 @@ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz#6132f68c4acd59dcd141c44b18cbebbd9f2fa768" integrity sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q== -"@webassemblyjs/helper-buffer@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz#b66d73c43e296fd5e88006f18524feb0f2c7c093" - integrity sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA== +"@webassemblyjs/helper-buffer@1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz#6df20d272ea5439bf20ab3492b7fb70e9bfcb3f6" + integrity sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw== "@webassemblyjs/helper-numbers@1.11.6": version "1.11.6" @@ -2751,15 +2747,15 @@ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz#bb2ebdb3b83aa26d9baad4c46d4315283acd51e9" integrity sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA== -"@webassemblyjs/helper-wasm-section@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz#ff97f3863c55ee7f580fd5c41a381e9def4aa577" - integrity sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g== +"@webassemblyjs/helper-wasm-section@1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz#3da623233ae1a60409b509a52ade9bc22a37f7bf" + integrity sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g== dependencies: - "@webassemblyjs/ast" "1.11.6" - "@webassemblyjs/helper-buffer" "1.11.6" + "@webassemblyjs/ast" "1.12.1" + "@webassemblyjs/helper-buffer" "1.12.1" "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - "@webassemblyjs/wasm-gen" "1.11.6" + "@webassemblyjs/wasm-gen" "1.12.1" "@webassemblyjs/ieee754@1.11.6": version "1.11.6" @@ -2780,59 +2776,59 @@ resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.6.tgz#90f8bc34c561595fe156603be7253cdbcd0fab5a" integrity sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA== -"@webassemblyjs/wasm-edit@^1.11.5": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz#c72fa8220524c9b416249f3d94c2958dfe70ceab" - integrity sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw== +"@webassemblyjs/wasm-edit@^1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz#9f9f3ff52a14c980939be0ef9d5df9ebc678ae3b" + integrity sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g== dependencies: - "@webassemblyjs/ast" "1.11.6" - "@webassemblyjs/helper-buffer" "1.11.6" + "@webassemblyjs/ast" "1.12.1" + "@webassemblyjs/helper-buffer" "1.12.1" "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - "@webassemblyjs/helper-wasm-section" "1.11.6" - "@webassemblyjs/wasm-gen" "1.11.6" - "@webassemblyjs/wasm-opt" "1.11.6" - "@webassemblyjs/wasm-parser" "1.11.6" - "@webassemblyjs/wast-printer" "1.11.6" + "@webassemblyjs/helper-wasm-section" "1.12.1" + "@webassemblyjs/wasm-gen" "1.12.1" + "@webassemblyjs/wasm-opt" "1.12.1" + "@webassemblyjs/wasm-parser" "1.12.1" + "@webassemblyjs/wast-printer" "1.12.1" -"@webassemblyjs/wasm-gen@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz#fb5283e0e8b4551cc4e9c3c0d7184a65faf7c268" - integrity sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA== +"@webassemblyjs/wasm-gen@1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz#a6520601da1b5700448273666a71ad0a45d78547" + integrity sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w== dependencies: - "@webassemblyjs/ast" "1.11.6" + "@webassemblyjs/ast" "1.12.1" "@webassemblyjs/helper-wasm-bytecode" "1.11.6" "@webassemblyjs/ieee754" "1.11.6" "@webassemblyjs/leb128" "1.11.6" "@webassemblyjs/utf8" "1.11.6" -"@webassemblyjs/wasm-opt@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz#d9a22d651248422ca498b09aa3232a81041487c2" - integrity sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g== +"@webassemblyjs/wasm-opt@1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz#9e6e81475dfcfb62dab574ac2dda38226c232bc5" + integrity sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg== dependencies: - "@webassemblyjs/ast" "1.11.6" - "@webassemblyjs/helper-buffer" "1.11.6" - "@webassemblyjs/wasm-gen" "1.11.6" - "@webassemblyjs/wasm-parser" "1.11.6" + "@webassemblyjs/ast" "1.12.1" + "@webassemblyjs/helper-buffer" "1.12.1" + "@webassemblyjs/wasm-gen" "1.12.1" + "@webassemblyjs/wasm-parser" "1.12.1" -"@webassemblyjs/wasm-parser@1.11.6", "@webassemblyjs/wasm-parser@^1.11.5": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz#bb85378c527df824004812bbdb784eea539174a1" - integrity sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ== +"@webassemblyjs/wasm-parser@1.12.1", "@webassemblyjs/wasm-parser@^1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz#c47acb90e6f083391e3fa61d113650eea1e95937" + integrity sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ== dependencies: - "@webassemblyjs/ast" "1.11.6" + "@webassemblyjs/ast" "1.12.1" "@webassemblyjs/helper-api-error" "1.11.6" "@webassemblyjs/helper-wasm-bytecode" "1.11.6" "@webassemblyjs/ieee754" "1.11.6" "@webassemblyjs/leb128" "1.11.6" "@webassemblyjs/utf8" "1.11.6" -"@webassemblyjs/wast-printer@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz#a7bf8dd7e362aeb1668ff43f35cb849f188eff20" - integrity sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A== +"@webassemblyjs/wast-printer@1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz#bcecf661d7d1abdaf989d8341a4833e33e2b31ac" + integrity sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA== dependencies: - "@webassemblyjs/ast" "1.11.6" + "@webassemblyjs/ast" "1.12.1" "@xtuc/long" "4.2.2" "@xtuc/ieee754@^1.2.0": @@ -2871,10 +2867,10 @@ acorn-globals@^6.0.0: acorn "^7.1.1" acorn-walk "^7.1.1" -acorn-import-assertions@^1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz#507276249d684797c84e0734ef84860334cfb1ac" - integrity sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA== +acorn-import-attributes@^1.9.5: + version "1.9.5" + resolved "https://registry.yarnpkg.com/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz#7eb1557b1ba05ef18b5ed0ec67591bfab04688ef" + integrity sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ== acorn-jsx@^5.3.2: version "5.3.2" @@ -2892,9 +2888,9 @@ acorn@^7.1.1: integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== acorn@^8.2.4, acorn@^8.7.1, acorn@^8.8.2, acorn@^8.9.0: - version "8.11.3" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" - integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== + version "8.12.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.12.1.tgz#71616bdccbe25e27a54439e0046e89ca76df2248" + integrity sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg== address@^1.0.1, address@^1.1.2: version "1.2.2" @@ -2961,14 +2957,14 @@ ajv@^6.12.2, ajv@^6.12.4, ajv@^6.12.5, ajv@^6.7.0: uri-js "^4.2.2" ajv@^8.0.0, ajv@^8.6.0, ajv@^8.9.0: - version "8.12.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" - integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== + version "8.17.1" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.17.1.tgz#37d9a5c776af6bc92d7f4f9510eba4c0a60d11a6" + integrity sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g== dependencies: - fast-deep-equal "^3.1.1" + fast-deep-equal "^3.1.3" + fast-uri "^3.0.1" json-schema-traverse "^1.0.0" require-from-string "^2.0.2" - uri-js "^4.2.2" ansi-escapes@^4.2.1, ansi-escapes@^4.3.1: version "4.3.2" @@ -2982,6 +2978,11 @@ ansi-html-community@^0.0.8: resolved "https://registry.yarnpkg.com/ansi-html-community/-/ansi-html-community-0.0.8.tgz#69fbc4d6ccbe383f9736934ae34c3f8290f1bf41" integrity sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw== +ansi-html@^0.0.9: + version "0.0.9" + resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.9.tgz#6512d02342ae2cc68131952644a129cb734cd3f0" + integrity sha512-ozbS3LuenHVxNRh/wdnN16QapUHzauqSomAl1jwwJRRsGwFwtj644lIhxfWu0Fy0acCij2+AEgHvjscq3dlVXg== + ansi-regex@^5.0.0, ansi-regex@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" @@ -3059,7 +3060,7 @@ argparse@^2.0.1: resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== -aria-query@5.1.3: +aria-query@5.1.3, aria-query@~5.1.3: version "5.1.3" resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.1.3.tgz#19db27cd101152773631396f7a95a3b58c22c35e" integrity sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ== @@ -3074,7 +3075,7 @@ aria-query@^4.2.2: "@babel/runtime" "^7.10.2" "@babel/runtime-corejs3" "^7.10.2" -aria-query@^5.0.0, aria-query@^5.3.0: +aria-query@^5.0.0: version "5.3.0" resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.3.0.tgz#650c569e41ad90b51b3d7df5e5eed1c7549c103e" integrity sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A== @@ -3094,15 +3095,16 @@ array-flatten@1.1.1: resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== -array-includes@^3.1.6, array-includes@^3.1.7: - version "3.1.7" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.7.tgz#8cd2e01b26f7a3086cbc87271593fe921c62abda" - integrity sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ== +array-includes@^3.1.6, array-includes@^3.1.7, array-includes@^3.1.8: + version "3.1.8" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.8.tgz#5e370cbe172fdd5dd6530c1d4aadda25281ba97d" + integrity sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - get-intrinsic "^1.2.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-object-atoms "^1.0.0" + get-intrinsic "^1.2.4" is-string "^1.0.7" array-union@^2.1.0: @@ -3110,26 +3112,28 @@ array-union@^2.1.0: resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== -array.prototype.filter@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/array.prototype.filter/-/array.prototype.filter-1.0.3.tgz#423771edeb417ff5914111fff4277ea0624c0d0e" - integrity sha512-VizNcj/RGJiUyQBgzwxzE5oHdeuXY5hSbbmKMlphj1cy1Vl7Pn2asCGbSrru6hSQjmCzqTBPVWAF/whmEOVHbw== +array.prototype.findlast@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz#3e4fbcb30a15a7f5bf64cf2faae22d139c2e4904" + integrity sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - es-array-method-boxes-properly "^1.0.0" - is-string "^1.0.7" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + es-shim-unscopables "^1.0.2" array.prototype.findlastindex@^1.2.3: - version "1.2.4" - resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.4.tgz#d1c50f0b3a9da191981ff8942a0aedd82794404f" - integrity sha512-hzvSHUshSpCflDR1QMUBLHGHP1VIEBegT4pix9H/Z92Xw3ySoy6c2qh7lJWTJnRJ8JCZ9bJNCgTyYaJGcJu6xQ== + version "1.2.5" + resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz#8c35a755c72908719453f87145ca011e39334d0d" + integrity sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ== dependencies: - call-bind "^1.0.5" + call-bind "^1.0.7" define-properties "^1.2.1" - es-abstract "^1.22.3" + es-abstract "^1.23.2" es-errors "^1.3.0" + es-object-atoms "^1.0.0" es-shim-unscopables "^1.0.2" array.prototype.flat@^1.3.1, array.prototype.flat@^1.3.2: @@ -3142,7 +3146,7 @@ array.prototype.flat@^1.3.1, array.prototype.flat@^1.3.2: es-abstract "^1.22.1" es-shim-unscopables "^1.0.0" -array.prototype.flatmap@^1.3.1, array.prototype.flatmap@^1.3.2: +array.prototype.flatmap@^1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz#c9a7c6831db8e719d6ce639190146c24bbd3e527" integrity sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ== @@ -3153,25 +3157,27 @@ array.prototype.flatmap@^1.3.1, array.prototype.flatmap@^1.3.2: es-shim-unscopables "^1.0.0" array.prototype.reduce@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/array.prototype.reduce/-/array.prototype.reduce-1.0.6.tgz#63149931808c5fc1e1354814923d92d45f7d96d5" - integrity sha512-UW+Mz8LG/sPSU8jRDCjVr6J/ZKAGpHfwrZ6kWTG5qCxIEiXdVshqGnu5vEZA8S1y6X4aCSbQZ0/EEsfvEvBiSg== + version "1.0.7" + resolved "https://registry.yarnpkg.com/array.prototype.reduce/-/array.prototype.reduce-1.0.7.tgz#6aadc2f995af29cb887eb866d981dc85ab6f7dc7" + integrity sha512-mzmiUCVwtiD4lgxYP8g7IYy8El8p2CSMePvIbTS7gchKir/L1fgJrk0yDKmAX6mnRQFKNADYIk8nNlTris5H1Q== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" es-array-method-boxes-properly "^1.0.0" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" is-string "^1.0.7" -array.prototype.tosorted@^1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.3.tgz#c8c89348337e51b8a3c48a9227f9ce93ceedcba8" - integrity sha512-/DdH4TiTmOKzyQbp/eadcCVexiCb36xJg7HshYOYJnNZFDj33GEv0P7GxsynpShhq4OLYJzbGcBDkLsDt7MnNg== +array.prototype.tosorted@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz#fe954678ff53034e717ea3352a03f0b0b86f7ffc" + integrity sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA== dependencies: - call-bind "^1.0.5" + call-bind "^1.0.7" define-properties "^1.2.1" - es-abstract "^1.22.3" - es-errors "^1.1.0" + es-abstract "^1.23.3" + es-errors "^1.3.0" es-shim-unscopables "^1.0.2" arraybuffer.prototype.slice@^1.0.3: @@ -3213,13 +3219,6 @@ async@^3.2.3: resolved "https://registry.yarnpkg.com/async/-/async-3.2.5.tgz#ebd52a8fdaf7a2289a24df399f8d8485c8a46b66" integrity sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg== -asynciterator.prototype@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz#8c5df0514936cdd133604dfcc9d3fb93f09b2b62" - integrity sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg== - dependencies: - has-symbols "^1.0.3" - asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" @@ -3231,35 +3230,35 @@ at-least-node@^1.0.0: integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== autoprefixer@^10.4.13: - version "10.4.17" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.17.tgz#35cd5695cbbe82f536a50fa025d561b01fdec8be" - integrity sha512-/cpVNRLSfhOtcGflT13P2794gVSgmPgTR+erw5ifnMLZb0UnSlkK4tquLmkd3BhA+nLo5tX8Cu0upUsGKvKbmg== + version "10.4.20" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.20.tgz#5caec14d43976ef42e32dcb4bd62878e96be5b3b" + integrity sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g== dependencies: - browserslist "^4.22.2" - caniuse-lite "^1.0.30001578" + browserslist "^4.23.3" + caniuse-lite "^1.0.30001646" fraction.js "^4.3.7" normalize-range "^0.1.2" - picocolors "^1.0.0" + picocolors "^1.0.1" postcss-value-parser "^4.2.0" -available-typed-arrays@^1.0.6, available-typed-arrays@^1.0.7: +available-typed-arrays@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== dependencies: possible-typed-array-names "^1.0.0" -axe-core@=4.7.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.7.0.tgz#34ba5a48a8b564f67e103f0aa5768d76e15bbbbf" - integrity sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ== +axe-core@^4.9.1: + version "4.10.0" + resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.10.0.tgz#d9e56ab0147278272739a000880196cdfe113b59" + integrity sha512-Mr2ZakwQ7XUAjp7pAwQWRhhK8mQQ6JAaNWSjmjxil0R8BPioMtQsTLOolGYkji1rcL++3dCqZA3zWqpT+9Ew6g== -axobject-query@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-3.2.1.tgz#39c378a6e3b06ca679f29138151e45b2b32da62a" - integrity sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg== +axobject-query@~3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-3.1.1.tgz#3b6e5c6d4e43ca7ba51c5babf99d22a9c68485e1" + integrity sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg== dependencies: - dequal "^2.0.3" + deep-equal "^2.0.5" babel-jest@^27.4.2, babel-jest@^27.5.1: version "27.5.1" @@ -3320,29 +3319,29 @@ babel-plugin-named-asset-import@^0.3.8: resolved "https://registry.yarnpkg.com/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.8.tgz#6b7fa43c59229685368683c28bc9734f24524cc2" integrity sha512-WXiAc++qo7XcJ1ZnTYGtLxmBCVbddAml3CEXgWaBzNzLNoxtQ8AiGEFDMOhot9XjTCQbvP5E77Fj9Gk924f00Q== -babel-plugin-polyfill-corejs2@^0.4.8: - version "0.4.8" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.8.tgz#dbcc3c8ca758a290d47c3c6a490d59429b0d2269" - integrity sha512-OtIuQfafSzpo/LhnJaykc0R/MMnuLSSVjVYy9mHArIZ9qTCSZ6TpWCuEKZYVoN//t8HqBNScHrOtCrIK5IaGLg== +babel-plugin-polyfill-corejs2@^0.4.10: + version "0.4.11" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz#30320dfe3ffe1a336c15afdcdafd6fd615b25e33" + integrity sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q== dependencies: "@babel/compat-data" "^7.22.6" - "@babel/helper-define-polyfill-provider" "^0.5.0" + "@babel/helper-define-polyfill-provider" "^0.6.2" semver "^6.3.1" -babel-plugin-polyfill-corejs3@^0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.9.0.tgz#9eea32349d94556c2ad3ab9b82ebb27d4bf04a81" - integrity sha512-7nZPG1uzK2Ymhy/NbaOWTg3uibM2BmGASS4vHS4szRZAIR8R6GwA/xAujpdrXU5iyklrimWnLWU+BLF9suPTqg== +babel-plugin-polyfill-corejs3@^0.10.1, babel-plugin-polyfill-corejs3@^0.10.4: + version "0.10.6" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz#2deda57caef50f59c525aeb4964d3b2f867710c7" + integrity sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA== dependencies: - "@babel/helper-define-polyfill-provider" "^0.5.0" - core-js-compat "^3.34.0" + "@babel/helper-define-polyfill-provider" "^0.6.2" + core-js-compat "^3.38.0" -babel-plugin-polyfill-regenerator@^0.5.5: - version "0.5.5" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.5.tgz#8b0c8fc6434239e5d7b8a9d1f832bb2b0310f06a" - integrity sha512-OJGYZlhLqBh2DDHeqAxWB1XIvr49CxiJ2gIt61/PU55CQK4Z58OzMqjDe1zwQdQk+rBYsRc+1rJmdajM3gimHg== +babel-plugin-polyfill-regenerator@^0.6.1: + version "0.6.2" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz#addc47e240edd1da1058ebda03021f382bba785e" + integrity sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg== dependencies: - "@babel/helper-define-polyfill-provider" "^0.5.0" + "@babel/helper-define-polyfill-provider" "^0.6.2" babel-plugin-transform-react-remove-prop-types@^0.4.24: version "0.4.24" @@ -3429,9 +3428,9 @@ big.js@^5.2.2: integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + version "2.3.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" + integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== bluebird@^3.7.2: version "3.7.2" @@ -3484,7 +3483,7 @@ brace-expansion@^2.0.1: dependencies: balanced-match "^1.0.0" -braces@^3.0.2, braces@~3.0.2: +braces@^3.0.3, braces@~3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== @@ -3496,15 +3495,15 @@ browser-process-hrtime@^1.0.0: resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== -browserslist@^4.0.0, browserslist@^4.18.1, browserslist@^4.21.10, browserslist@^4.21.4, browserslist@^4.22.2, browserslist@^4.22.3: - version "4.23.0" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.0.tgz#8f3acc2bbe73af7213399430890f86c63a5674ab" - integrity sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ== +browserslist@^4.0.0, browserslist@^4.18.1, browserslist@^4.21.10, browserslist@^4.21.4, browserslist@^4.23.1, browserslist@^4.23.3: + version "4.23.3" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.3.tgz#debb029d3c93ebc97ffbc8d9cbb03403e227c800" + integrity sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA== dependencies: - caniuse-lite "^1.0.30001587" - electron-to-chromium "^1.4.668" - node-releases "^2.0.14" - update-browserslist-db "^1.0.13" + caniuse-lite "^1.0.30001646" + electron-to-chromium "^1.5.4" + node-releases "^2.0.18" + update-browserslist-db "^1.1.0" bser@2.1.1: version "2.1.1" @@ -3639,10 +3638,10 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001578, caniuse-lite@^1.0.30001587: - version "1.0.30001591" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001591.tgz#16745e50263edc9f395895a7cd468b9f3767cf33" - integrity sha512-PCzRMei/vXjJyL5mJtzNiUCKP59dm8Apqc3PH8gJkMnMXZGox93RbE76jHsmLwmIo6/3nsYIpJtx0O7u5PqFuQ== +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001646: + version "1.0.30001649" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001649.tgz#3ec700309ca0da2b0d3d5fb03c411b191761c992" + integrity sha512-fJegqZZ0ZX8HOWr6rcafGr72+xcgJKI9oWfDW5DrD7ExUtgZC7a7R7ZYmZqplh7XDocFdGeIFn7roAxhOeYrPQ== case-sensitive-paths-webpack-plugin@^2.4.0: version "2.4.0" @@ -3720,9 +3719,9 @@ chownr@^2.0.0: integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== chrome-trace-event@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" - integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== + version "1.0.4" + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz#05bffd7ff928465093314708c93bdfa9bd1f0f5b" + integrity sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ== ci-info@^3.2.0: version "3.9.0" @@ -3730,9 +3729,9 @@ ci-info@^3.2.0: integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== cjs-module-lexer@^1.0.0: - version "1.2.3" - resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz#6c370ab19f8a3394e318fe682686ec0ac684d107" - integrity sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ== + version "1.3.1" + resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.3.1.tgz#c485341ae8fd999ca4ee5af2d7a1c9ae01e0099c" + integrity sha512-a3KdPAANPbNE4ZUv9h6LckSl9zLsYOP4MBmhIPkRaeyybt+r4UghLvq+xw/YwUcC1gqylCkL4rdVs3Lwupjm4Q== clean-css@^5.2.2: version "5.3.3" @@ -3854,11 +3853,6 @@ commander@^8.3.0: resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== -common-path-prefix@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/common-path-prefix/-/common-path-prefix-3.0.0.tgz#7d007a7e07c58c4b4d5f433131a19141b29f11e0" - integrity sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w== - common-tags@^1.8.0: version "1.8.2" resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.2.tgz#94ebb3c076d26032745fd54face7f688ef5ac9c6" @@ -3960,22 +3954,22 @@ cookie@0.6.0: resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.6.0.tgz#2798b04b071b0ecbff0dbb62a505a8efa4e19051" integrity sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw== -core-js-compat@^3.31.0, core-js-compat@^3.34.0: - version "3.36.0" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.36.0.tgz#087679119bc2fdbdefad0d45d8e5d307d45ba190" - integrity sha512-iV9Pd/PsgjNWBXeq8XRtWVSgz2tKAfhfvBs7qxYty+RlRd+OCksaWmOnc4JKrTc1cToXL1N0s3l/vwlxPtdElw== +core-js-compat@^3.37.1, core-js-compat@^3.38.0: + version "3.38.0" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.38.0.tgz#d93393b1aa346b6ee683377b0c31172ccfe607aa" + integrity sha512-75LAicdLa4OJVwFxFbQR3NdnZjNgX6ILpVcVzcC4T2smerB5lELMrJQQQoWV6TiuC/vlaFqgU2tKQx9w5s0e0A== dependencies: - browserslist "^4.22.3" + browserslist "^4.23.3" core-js-pure@^3.23.3, core-js-pure@^3.30.2, core-js-pure@^3.6.5: - version "3.36.0" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.36.0.tgz#ffb34330b14e594d6a9835cf5843b4123f1d95db" - integrity sha512-cN28qmhRNgbMZZMc/RFu5w8pK9VJzpb2rJVR/lHuZJKwmXnoWOpXmMkxqBB514igkp1Hu8WGROsiOAzUcKdHOQ== + version "3.38.0" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.38.0.tgz#bc802cd152e33d5b0ec733b656c71cb847cac701" + integrity sha512-8balb/HAXo06aHP58mZMtXgD8vcnXz9tUDePgqBgJgKdmTlMt+jw3ujqniuBDQXMvTzxnMpxHFeuSM3g1jWQuQ== core-js@^3.19.2: - version "3.36.0" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.36.0.tgz#e752fa0b0b462a0787d56e9d73f80b0f7c0dde68" - integrity sha512-mt7+TUBbTFg5+GngsAxeKBTl5/VS0guFeJacYge9OmHb+m058UwwIm41SE9T4Den7ClatV57B6TYTuJ0CX1MAw== + version "3.38.0" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.38.0.tgz#8acb7c050bf2ccbb35f938c0d040132f6110f636" + integrity sha512-XPpwqEodRljce9KswjZShh95qJ1URisBeKCjUdq27YdenkslVe7OO0ZJhlYXAChW7OhXaRLl8AAba7IBfoIHug== core-util-is@~1.0.0: version "1.0.3" @@ -4038,15 +4032,15 @@ css-has-pseudo@^3.0.4: postcss-selector-parser "^6.0.9" css-loader@^6.5.1: - version "6.10.0" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-6.10.0.tgz#7c172b270ec7b833951b52c348861206b184a4b7" - integrity sha512-LTSA/jWbwdMlk+rhmElbDR2vbtQoTBPr7fkJE+mxrHj+7ru0hUmHafDRzWIjIHTwpitWVaqY2/UWGRca3yUgRw== + version "6.11.0" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-6.11.0.tgz#33bae3bf6363d0a7c2cf9031c96c744ff54d85ba" + integrity sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g== dependencies: icss-utils "^5.1.0" postcss "^8.4.33" - postcss-modules-extract-imports "^3.0.0" - postcss-modules-local-by-default "^4.0.4" - postcss-modules-scope "^3.1.1" + postcss-modules-extract-imports "^3.1.0" + postcss-modules-local-by-default "^4.0.5" + postcss-modules-scope "^3.2.0" postcss-modules-values "^4.0.0" postcss-value-parser "^4.2.0" semver "^7.5.4" @@ -4126,9 +4120,9 @@ css.escape@^1.5.1: integrity sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg== cssdb@^7.1.0: - version "7.11.1" - resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-7.11.1.tgz#491841b281d337d7e5332e43b282429dd241b377" - integrity sha512-F0nEoX/Rv8ENTHsjMPGHd9opdjGfXkgRBafSUGnQKPzGZFB7Lm0BbT10x21TMOCrKLbVsJ0NoCDMk6AfKqw8/A== + version "7.11.2" + resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-7.11.2.tgz#127a2f5b946ee653361a5af5333ea85a39df5ae5" + integrity sha512-lhQ32TFkc1X4eTefGfYPvgovRSzIMofHkigfH8nWtyRL4XJLsRhJFreRvEgKzept7x1rjBuy3J/MurXLaFxW/A== cssesc@^3.0.0: version "3.0.0" @@ -4227,6 +4221,33 @@ data-urls@^2.0.0: whatwg-mimetype "^2.3.0" whatwg-url "^8.0.0" +data-view-buffer@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/data-view-buffer/-/data-view-buffer-1.0.1.tgz#8ea6326efec17a2e42620696e671d7d5a8bc66b2" + integrity sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA== + dependencies: + call-bind "^1.0.6" + es-errors "^1.3.0" + is-data-view "^1.0.1" + +data-view-byte-length@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz#90721ca95ff280677eb793749fce1011347669e2" + integrity sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ== + dependencies: + call-bind "^1.0.7" + es-errors "^1.3.0" + is-data-view "^1.0.1" + +data-view-byte-offset@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz#5e0bbfb4828ed2d1b9b400cd8a7d119bca0ff18a" + integrity sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA== + dependencies: + call-bind "^1.0.6" + es-errors "^1.3.0" + is-data-view "^1.0.1" + debug@2.6.9, debug@^2.6.0: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" @@ -4235,9 +4256,9 @@ debug@2.6.9, debug@^2.6.0: ms "2.0.0" debug@4, debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: - version "4.3.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + version "4.3.6" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.6.tgz#2ab2c38fbaffebf8aa95fdfe6d88438c7a13c52b" + integrity sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg== dependencies: ms "2.1.2" @@ -4319,7 +4340,7 @@ default-gateway@^6.0.3: dependencies: execa "^5.0.0" -define-data-property@^1.0.1, define-data-property@^1.1.2, define-data-property@^1.1.4: +define-data-property@^1.0.1, define-data-property@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== @@ -4558,10 +4579,10 @@ ejs@^3.1.6: dependencies: jake "^10.8.5" -electron-to-chromium@^1.4.668: - version "1.4.687" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.687.tgz#8b80da91848c13a90802f840c7de96c8558fef52" - integrity sha512-Ic85cOuXSP6h7KM0AIJ2hpJ98Bo4hyTUjc4yjMbkvD+8yTxEhfK9+8exT2KKYsSjnCn2tGsKVSZwE7ZgTORQCw== +electron-to-chromium@^1.5.4: + version "1.5.5" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.5.tgz#03bfdf422bdd2c05ee2657efedde21264a1a566b" + integrity sha512-QR7/A7ZkMS8tZuoftC/jfqNkZLQO779SSW3YuZHP4eXpj3EffGLFcB/Xu9AAZQzLccTiCV+EmUo3ha4mQ9wnlA== emittery@^0.10.2: version "0.10.2" @@ -4600,10 +4621,10 @@ encoding@^0.1.12, encoding@^0.1.13: dependencies: iconv-lite "^0.6.2" -enhanced-resolve@^5.15.0: - version "5.15.1" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.15.1.tgz#384391e025f099e67b4b00bfd7f0906a408214e1" - integrity sha512-3d3JRbwsCLJsYgvb6NuWEG44jjPSOMuS73L/6+7BZuoKm3W+qXnSoIYVHi8dG7Qcg4inAY4jbzkZ7MnskePeDg== +enhanced-resolve@^5.17.0: + version "5.17.1" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz#67bfbbcc2f81d511be77d686a90267ef7f898a15" + integrity sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg== dependencies: graceful-fs "^4.2.4" tapable "^2.2.0" @@ -4637,17 +4658,21 @@ error-stack-parser@^2.0.6: dependencies: stackframe "^1.3.4" -es-abstract@^1.17.2, es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.22.4: - version "1.22.5" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.5.tgz#1417df4e97cc55f09bf7e58d1e614bc61cb8df46" - integrity sha512-oW69R+4q2wG+Hc3KZePPZxOiisRIqfKBVo/HLx94QcJeWGU/8sZhCvc829rd1kS366vlJbzBfXf9yWwf0+Ko7w== +es-abstract@^1.17.2, es-abstract@^1.17.5, es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23.0, es-abstract@^1.23.1, es-abstract@^1.23.2, es-abstract@^1.23.3: + version "1.23.3" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.23.3.tgz#8f0c5a35cd215312573c5a27c87dfd6c881a0aa0" + integrity sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A== dependencies: array-buffer-byte-length "^1.0.1" arraybuffer.prototype.slice "^1.0.3" available-typed-arrays "^1.0.7" call-bind "^1.0.7" + data-view-buffer "^1.0.1" + data-view-byte-length "^1.0.1" + data-view-byte-offset "^1.0.0" es-define-property "^1.0.0" es-errors "^1.3.0" + es-object-atoms "^1.0.0" es-set-tostringtag "^2.0.3" es-to-primitive "^1.2.1" function.prototype.name "^1.1.6" @@ -4658,10 +4683,11 @@ es-abstract@^1.17.2, es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.22 has-property-descriptors "^1.0.2" has-proto "^1.0.3" has-symbols "^1.0.3" - hasown "^2.0.1" + hasown "^2.0.2" internal-slot "^1.0.7" is-array-buffer "^3.0.4" is-callable "^1.2.7" + is-data-view "^1.0.1" is-negative-zero "^2.0.3" is-regex "^1.1.4" is-shared-array-buffer "^1.0.3" @@ -4672,17 +4698,17 @@ es-abstract@^1.17.2, es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.22 object-keys "^1.1.1" object.assign "^4.1.5" regexp.prototype.flags "^1.5.2" - safe-array-concat "^1.1.0" + safe-array-concat "^1.1.2" safe-regex-test "^1.0.3" - string.prototype.trim "^1.2.8" - string.prototype.trimend "^1.0.7" - string.prototype.trimstart "^1.0.7" + string.prototype.trim "^1.2.9" + string.prototype.trimend "^1.0.8" + string.prototype.trimstart "^1.0.8" typed-array-buffer "^1.0.2" typed-array-byte-length "^1.0.1" typed-array-byte-offset "^1.0.2" - typed-array-length "^1.0.5" + typed-array-length "^1.0.6" unbox-primitive "^1.0.2" - which-typed-array "^1.1.14" + which-typed-array "^1.1.15" es-array-method-boxes-properly@^1.0.0: version "1.0.0" @@ -4696,7 +4722,7 @@ es-define-property@^1.0.0: dependencies: get-intrinsic "^1.2.4" -es-errors@^1.0.0, es-errors@^1.1.0, es-errors@^1.2.1, es-errors@^1.3.0: +es-errors@^1.2.1, es-errors@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== @@ -4716,33 +4742,39 @@ es-get-iterator@^1.1.3: isarray "^2.0.5" stop-iteration-iterator "^1.0.0" -es-iterator-helpers@^1.0.12, es-iterator-helpers@^1.0.15: - version "1.0.17" - resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.0.17.tgz#123d1315780df15b34eb181022da43e734388bb8" - integrity sha512-lh7BsUqelv4KUbR5a/ZTaGGIMLCjPGPqJ6q+Oq24YP0RdyptX1uzm4vvaqzk7Zx3bpl/76YLTTDj9L7uYQ92oQ== +es-iterator-helpers@^1.0.19: + version "1.0.19" + resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.0.19.tgz#117003d0e5fec237b4b5c08aded722e0c6d50ca8" + integrity sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw== dependencies: - asynciterator.prototype "^1.0.0" call-bind "^1.0.7" define-properties "^1.2.1" - es-abstract "^1.22.4" + es-abstract "^1.23.3" es-errors "^1.3.0" - es-set-tostringtag "^2.0.2" + es-set-tostringtag "^2.0.3" function-bind "^1.1.2" get-intrinsic "^1.2.4" globalthis "^1.0.3" has-property-descriptors "^1.0.2" - has-proto "^1.0.1" + has-proto "^1.0.3" has-symbols "^1.0.3" internal-slot "^1.0.7" iterator.prototype "^1.1.2" - safe-array-concat "^1.1.0" + safe-array-concat "^1.1.2" es-module-lexer@^1.2.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.4.1.tgz#41ea21b43908fe6a287ffcbe4300f790555331f5" - integrity sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w== + version "1.5.4" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.5.4.tgz#a8efec3a3da991e60efa6b633a7cad6ab8d26b78" + integrity sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw== + +es-object-atoms@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.0.0.tgz#ddb55cd47ac2e240701260bc2a8e31ecb643d941" + integrity sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw== + dependencies: + es-errors "^1.3.0" -es-set-tostringtag@^2.0.2, es-set-tostringtag@^2.0.3: +es-set-tostringtag@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz#8bb60f0a440c2e4281962428438d58545af39777" integrity sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ== @@ -4767,7 +4799,7 @@ es-to-primitive@^1.2.1: is-date-object "^1.0.1" is-symbol "^1.0.2" -escalade@^3.1.1: +escalade@^3.1.1, escalade@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27" integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA== @@ -4895,53 +4927,55 @@ eslint-plugin-jest@^25.3.0: "@typescript-eslint/experimental-utils" "^5.0.0" eslint-plugin-jsx-a11y@^6.5.1: - version "6.8.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.8.0.tgz#2fa9c701d44fcd722b7c771ec322432857fcbad2" - integrity sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA== + version "6.9.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.9.0.tgz#67ab8ff460d4d3d6a0b4a570e9c1670a0a8245c8" + integrity sha512-nOFOCaJG2pYqORjK19lqPqxMO/JpvdCZdPtNdxY3kvom3jTvkAbOvQvD8wuD0G8BYR0IGAGYDlzqWJOh/ybn2g== dependencies: - "@babel/runtime" "^7.23.2" - aria-query "^5.3.0" - array-includes "^3.1.7" + aria-query "~5.1.3" + array-includes "^3.1.8" array.prototype.flatmap "^1.3.2" ast-types-flow "^0.0.8" - axe-core "=4.7.0" - axobject-query "^3.2.1" + axe-core "^4.9.1" + axobject-query "~3.1.1" damerau-levenshtein "^1.0.8" emoji-regex "^9.2.2" - es-iterator-helpers "^1.0.15" - hasown "^2.0.0" + es-iterator-helpers "^1.0.19" + hasown "^2.0.2" jsx-ast-utils "^3.3.5" language-tags "^1.0.9" minimatch "^3.1.2" - object.entries "^1.1.7" - object.fromentries "^2.0.7" + object.fromentries "^2.0.8" + safe-regex-test "^1.0.3" + string.prototype.includes "^2.0.0" eslint-plugin-react-hooks@^4.3.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz#4c3e697ad95b77e93f8646aaa1630c1ba607edd3" - integrity sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g== + version "4.6.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz#c829eb06c0e6f484b3fbb85a97e57784f328c596" + integrity sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ== eslint-plugin-react@^7.27.1: - version "7.33.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz#69ee09443ffc583927eafe86ffebb470ee737608" - integrity sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw== + version "7.35.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.35.0.tgz#00b1e4559896710e58af6358898f2ff917ea4c41" + integrity sha512-v501SSMOWv8gerHkk+IIQBkcGRGrO2nfybfj5pLxuJNFTPxxA3PSryhXTK+9pNbtkggheDdsC0E9Q8CuPk6JKA== dependencies: - array-includes "^3.1.6" - array.prototype.flatmap "^1.3.1" - array.prototype.tosorted "^1.1.1" + array-includes "^3.1.8" + array.prototype.findlast "^1.2.5" + array.prototype.flatmap "^1.3.2" + array.prototype.tosorted "^1.1.4" doctrine "^2.1.0" - es-iterator-helpers "^1.0.12" + es-iterator-helpers "^1.0.19" estraverse "^5.3.0" + hasown "^2.0.2" jsx-ast-utils "^2.4.1 || ^3.0.0" minimatch "^3.1.2" - object.entries "^1.1.6" - object.fromentries "^2.0.6" - object.hasown "^1.1.2" - object.values "^1.1.6" + object.entries "^1.1.8" + object.fromentries "^2.0.8" + object.values "^1.2.0" prop-types "^15.8.1" - resolve "^2.0.0-next.4" + resolve "^2.0.0-next.5" semver "^6.3.1" - string.prototype.matchall "^4.0.8" + string.prototype.matchall "^4.0.11" + string.prototype.repeat "^1.0.0" eslint-plugin-testing-library@^5.0.1: version "5.11.1" @@ -5051,9 +5085,9 @@ esprima@^4.0.0, esprima@^4.0.1: integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== esquery@^1.4.2: - version "1.5.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" - integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== + version "1.6.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.6.0.tgz#91419234f804d852a82dceec3e16cdc22cf9dae7" + integrity sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg== dependencies: estraverse "^5.1.0" @@ -5208,6 +5242,11 @@ fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== +fast-uri@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.0.1.tgz#cddd2eecfc83a71c1be2cc2ef2061331be8a7134" + integrity sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw== + fastq@^1.6.0: version "1.17.1" resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.17.1.tgz#2a523f07a4e7b1e81a42b91b8bf2254107753b47" @@ -5335,9 +5374,9 @@ for-each@^0.3.3: is-callable "^1.1.3" foreground-child@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d" - integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg== + version "3.2.1" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.2.1.tgz#767004ccf3a5b30df39bed90718bab43fe0a59f7" + integrity sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA== dependencies: cross-spawn "^7.0.0" signal-exit "^4.0.1" @@ -5412,9 +5451,9 @@ fs-minipass@^2.0.0, fs-minipass@^2.1.0: minipass "^3.0.0" fs-monkey@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.5.tgz#fe450175f0db0d7ea758102e1d84096acb925788" - integrity sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew== + version "1.0.6" + resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.6.tgz#8ead082953e88d992cf3ff844faa907b26756da2" + integrity sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg== fs.realpath@^1.0.0: version "1.0.0" @@ -5431,7 +5470,7 @@ function-bind@^1.1.2: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== -function.prototype.name@^1.1.5, function.prototype.name@^1.1.6: +function.prototype.name@^1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz#cdf315b7d90ee77a4c6ee216c3c3362da07533fd" integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg== @@ -5477,7 +5516,7 @@ get-caller-file@^2.0.5: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4: +get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== @@ -5537,15 +5576,16 @@ glob-to-regexp@^0.4.1: integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== glob@^10.3.10: - version "10.3.10" - resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.10.tgz#0351ebb809fd187fe421ab96af83d3a70715df4b" - integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g== + version "10.4.5" + resolved "https://registry.yarnpkg.com/glob/-/glob-10.4.5.tgz#f4d9f0b90ffdbab09c9d77f5f29b4262517b0956" + integrity sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg== dependencies: foreground-child "^3.1.0" - jackspeak "^2.3.5" - minimatch "^9.0.1" - minipass "^5.0.0 || ^6.0.2 || ^7.0.0" - path-scurry "^1.10.1" + jackspeak "^3.1.2" + minimatch "^9.0.4" + minipass "^7.1.2" + package-json-from-dist "^1.0.0" + path-scurry "^1.11.1" glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: version "7.2.3" @@ -5611,11 +5651,12 @@ globals@^13.19.0: type-fest "^0.20.2" globalthis@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" - integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== + version "1.0.4" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.4.tgz#7430ed3a975d97bfb59bcce41f5cabbafa651236" + integrity sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ== dependencies: - define-properties "^1.1.3" + define-properties "^1.2.1" + gopd "^1.0.1" globby@^11.0.4, globby@^11.1.0: version "11.1.0" @@ -5645,7 +5686,7 @@ gopd@^1.0.1: dependencies: get-intrinsic "^1.1.3" -graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.11, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: version "4.2.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== @@ -5692,7 +5733,7 @@ has-flag@^4.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.1, has-property-descriptors@^1.0.2: +has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== @@ -5709,7 +5750,7 @@ has-symbols@^1.0.1, has-symbols@^1.0.2, has-symbols@^1.0.3: resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== -has-tostringtag@^1.0.0, has-tostringtag@^1.0.1, has-tostringtag@^1.0.2: +has-tostringtag@^1.0.0, has-tostringtag@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== @@ -5721,10 +5762,10 @@ has-unicode@^2.0.1: resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== -hasown@^2.0.0, hasown@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.1.tgz#26f48f039de2c0f8d3356c223fb8d50253519faa" - integrity sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA== +hasown@^2.0.0, hasown@^2.0.1, hasown@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" + integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== dependencies: function-bind "^1.1.2" @@ -5780,9 +5821,9 @@ html-encoding-sniffer@^2.0.1: whatwg-encoding "^1.0.5" html-entities@^2.1.0, html-entities@^2.3.2: - version "2.4.0" - resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.4.0.tgz#edd0cee70402584c8c76cc2c0556db09d1f45061" - integrity sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ== + version "2.5.2" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.5.2.tgz#201a3cf95d3a15be7099521620d19dfb4f65359f" + integrity sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA== html-escaper@^2.0.0: version "2.0.2" @@ -5967,9 +6008,9 @@ import-fresh@^3.1.0, import-fresh@^3.2.1: resolve-from "^4.0.0" import-local@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" - integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== + version "3.2.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.2.0.tgz#c3d5c745798c02a6f8b897726aba5100186ee260" + integrity sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA== dependencies: pkg-dir "^4.2.0" resolve-cwd "^3.0.0" @@ -6017,7 +6058,7 @@ inline-style-parser@0.1.1: resolved "https://registry.yarnpkg.com/inline-style-parser/-/inline-style-parser-0.1.1.tgz#ec8a3b429274e9c0a1f1c4ffa9453a7fef72cea1" integrity sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q== -internal-slot@^1.0.4, internal-slot@^1.0.5, internal-slot@^1.0.7: +internal-slot@^1.0.4, internal-slot@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.7.tgz#c06dcca3ed874249881007b0a5523b172a190802" integrity sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g== @@ -6045,9 +6086,9 @@ ipaddr.js@1.9.1: integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== ipaddr.js@^2.0.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.1.0.tgz#2119bc447ff8c257753b196fc5f1ce08a4cdf39f" - integrity sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ== + version "2.2.0" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.2.0.tgz#d33fa7bac284f4de7af949638c9d68157c6b92e8" + integrity sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA== is-arguments@^1.1.1: version "1.1.1" @@ -6110,11 +6151,18 @@ is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== is-core-module@^2.13.0, is-core-module@^2.13.1, is-core-module@^2.5.0: - version "2.13.1" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" - integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== + version "2.15.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.15.0.tgz#71c72ec5442ace7e76b306e9d48db361f22699ea" + integrity sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA== dependencies: - hasown "^2.0.0" + hasown "^2.0.2" + +is-data-view@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-data-view/-/is-data-view-1.0.1.tgz#4b4d3a511b70f3dc26d42c03ca9ca515d847759f" + integrity sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w== + dependencies: + is-typed-array "^1.1.13" is-date-object@^1.0.1, is-date-object@^1.0.5: version "1.0.5" @@ -6169,10 +6217,10 @@ is-lambda@^1.0.1: resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== -is-map@^2.0.1, is-map@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127" - integrity sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg== +is-map@^2.0.2, is-map@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.3.tgz#ede96b7fe1e270b3c4465e3a465658764926d62e" + integrity sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw== is-module@^1.0.0: version "1.0.0" @@ -6244,10 +6292,10 @@ is-root@^2.1.0: resolved "https://registry.yarnpkg.com/is-root/-/is-root-2.1.0.tgz#809e18129cf1129644302a4f8544035d51984a9c" integrity sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg== -is-set@^2.0.1, is-set@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.2.tgz#90755fa4c2562dc1c5d4024760d6119b94ca18ec" - integrity sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g== +is-set@^2.0.2, is-set@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.3.tgz#8ab209ea424608141372ded6e0cb200ef1d9d01d" + integrity sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg== is-shared-array-buffer@^1.0.2, is-shared-array-buffer@^1.0.3: version "1.0.3" @@ -6287,10 +6335,10 @@ is-typedarray@^1.0.0: resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== -is-weakmap@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.1.tgz#5008b59bdc43b698201d18f62b37b2ca243e8cf2" - integrity sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA== +is-weakmap@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.2.tgz#bf72615d649dfe5f699079c54b83e47d1ae19cfd" + integrity sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w== is-weakref@^1.0.2: version "1.0.2" @@ -6299,13 +6347,13 @@ is-weakref@^1.0.2: dependencies: call-bind "^1.0.2" -is-weakset@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.2.tgz#4569d67a747a1ce5a994dfd4ef6dcea76e7c0a1d" - integrity sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg== +is-weakset@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.3.tgz#e801519df8c0c43e12ff2834eead84ec9e624007" + integrity sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ== dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.1" + call-bind "^1.0.7" + get-intrinsic "^1.2.4" is-wsl@^2.2.0: version "2.2.0" @@ -6382,19 +6430,19 @@ iterator.prototype@^1.1.2: reflect.getprototypeof "^1.0.4" set-function-name "^2.0.1" -jackspeak@^2.3.5: - version "2.3.6" - resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.6.tgz#647ecc472238aee4b06ac0e461acc21a8c505ca8" - integrity sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ== +jackspeak@^3.1.2: + version "3.4.3" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-3.4.3.tgz#8833a9d89ab4acde6188942bd1c53b6390ed5a8a" + integrity sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw== dependencies: "@isaacs/cliui" "^8.0.2" optionalDependencies: "@pkgjs/parseargs" "^0.11.0" jake@^10.8.5: - version "10.8.7" - resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.7.tgz#63a32821177940c33f356e0ba44ff9d34e1c7d8f" - integrity sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w== + version "10.9.2" + resolved "https://registry.yarnpkg.com/jake/-/jake-10.9.2.tgz#6ae487e6a69afec3a5e167628996b59f35ae2b7f" + integrity sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA== dependencies: async "^3.2.3" chalk "^4.0.2" @@ -6935,10 +6983,10 @@ jest@^27.4.3: import-local "^3.0.2" jest-cli "^27.5.1" -jiti@^1.19.1: - version "1.21.0" - resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.21.0.tgz#7c97f8fe045724e136a397f7340475244156105d" - integrity sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q== +jiti@^1.21.0: + version "1.21.6" + resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.21.6.tgz#6c7f7398dd4b3142767f9a168af2f317a428d268" + integrity sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w== js-base64@^2.4.9: version "2.6.4" @@ -7132,9 +7180,9 @@ klona@^2.0.4, klona@^2.0.5: integrity sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA== language-subtag-registry@^0.3.20: - version "0.3.22" - resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz#2e1500861b2e457eba7e7ae86877cbd08fa1fd1d" - integrity sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w== + version "0.3.23" + resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz#23529e04d9e3b74679d70142df3fd2eb6ec572e7" + integrity sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ== language-tags@^1.0.9: version "1.0.9" @@ -7144,9 +7192,9 @@ language-tags@^1.0.9: language-subtag-registry "^0.3.20" launch-editor@^2.6.0: - version "2.6.1" - resolved "https://registry.yarnpkg.com/launch-editor/-/launch-editor-2.6.1.tgz#f259c9ef95cbc9425620bbbd14b468fcdb4ffe3c" - integrity sha512-eB/uXmFVpY4zezmGp5XtU21kwo7GBbKB+EQ+UZeWtGb9yAM5xt/Evk+lYH3eRNAtId+ej4u7TYPFZ07w4s7rRw== + version "2.8.1" + resolved "https://registry.yarnpkg.com/launch-editor/-/launch-editor-2.8.1.tgz#3bda72af213ec9b46b170e39661916ec66c2f463" + integrity sha512-elBx2l/tp9z99X5H/qev8uyDywVh0VXAwEbjk8kJhnc5grOFkGh7aW6q55me9xnYbss261XtnUrysZ+XvGbhQA== dependencies: picocolors "^1.0.0" shell-quote "^1.8.1" @@ -7178,9 +7226,9 @@ lilconfig@^2.0.3, lilconfig@^2.1.0: integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ== lilconfig@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-3.1.1.tgz#9d8a246fa753106cfc205fd2d77042faca56e5e3" - integrity sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ== + version "3.1.2" + resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-3.1.2.tgz#e4a7c3cb549e3a606c8dcc32e5ae1005e62c05cb" + integrity sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow== lines-and-columns@^1.1.6: version "1.2.4" @@ -7202,9 +7250,9 @@ loader-utils@^2.0.0, loader-utils@^2.0.4: json5 "^2.1.2" loader-utils@^3.2.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-3.2.1.tgz#4fb104b599daafd82ef3e1a41fb9265f87e1f576" - integrity sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw== + version "3.3.1" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-3.3.1.tgz#735b9a19fd63648ca7adbd31c2327dfe281304e5" + integrity sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg== locate-path@^3.0.0: version "3.0.0" @@ -7282,6 +7330,11 @@ lower-case@^2.0.2: dependencies: tslib "^2.0.3" +lru-cache@^10.2.0: + version "10.4.3" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119" + integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== + lru-cache@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" @@ -7301,11 +7354,6 @@ lru-cache@^7.7.1: resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.18.3.tgz#f793896e0fd0e954a59dfdd82f0773808df6aa89" integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA== -"lru-cache@^9.1.1 || ^10.0.0": - version "10.2.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.0.tgz#0bd445ca57363465900f4d1f9bd8db343a4d95c3" - integrity sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q== - lz-string@^1.4.4, lz-string@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.5.0.tgz#c1ab50f77887b712621201ba9fd4e3a6ed099941" @@ -7870,18 +7918,23 @@ micromark@^3.0.0: uvu "^0.5.0" micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5: - version "4.0.5" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" - integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + version "4.0.7" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.7.tgz#33e8190d9fe474a9895525f5618eee136d46c2e5" + integrity sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q== dependencies: - braces "^3.0.2" + braces "^3.0.3" picomatch "^2.3.1" -mime-db@1.52.0, "mime-db@>= 1.43.0 < 2": +mime-db@1.52.0: version "1.52.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== +"mime-db@>= 1.43.0 < 2": + version "1.53.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.53.0.tgz#3cb63cd820fc29896d9d4e8c32ab4fcd74ccb447" + integrity sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg== + mime-types@^2.1.12, mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.17, mime-types@~2.1.24, mime-types@~2.1.34: version "2.1.35" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" @@ -7905,9 +7958,9 @@ min-indent@^1.0.0: integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== mini-css-extract-plugin@^2.4.5: - version "2.8.1" - resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.8.1.tgz#75245f3f30ce3a56dbdd478084df6fe475f02dc7" - integrity sha512-/1HDlyFRxWIZPI1ZpgqlZ8jMw/1Dp/dl3P0L1jtZ+zVcHqwPhGwaJwKL00WVgfnBy6PWCde9W65or7IIETImuA== + version "2.9.0" + resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.0.tgz#c73a1327ccf466f69026ac22a8e8fd707b78a235" + integrity sha512-Zs1YsZVfemekSZG+44vBsYTLQORkPMwnlv+aehcxK/NLKC+EGhDB39/YePYYqx/sTk6NnYpuqikhSn7+JIevTA== dependencies: schema-utils "^4.0.0" tapable "^2.2.1" @@ -7931,10 +7984,10 @@ minimatch@^5.0.1: dependencies: brace-expansion "^2.0.1" -minimatch@^9.0.1: - version "9.0.3" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" - integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== +minimatch@^9.0.4: + version "9.0.5" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" + integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== dependencies: brace-expansion "^2.0.1" @@ -8021,10 +8074,10 @@ minipass@^5.0.0: resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== -"minipass@^5.0.0 || ^6.0.2 || ^7.0.0": - version "7.0.4" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.4.tgz#dbce03740f50a4786ba994c1fb908844d27b038c" - integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ== +"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.1.2: + version "7.1.2" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707" + integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== minizlib@^2.0.0, minizlib@^2.1.1, minizlib@^2.1.2: version "2.1.2" @@ -8089,9 +8142,9 @@ mz@^2.7.0: thenify-all "^1.0.0" nan@^2.17.0: - version "2.18.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.18.0.tgz#26a6faae7ffbeb293a39660e88a76b82e30b7554" - integrity sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w== + version "2.20.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.20.0.tgz#08c5ea813dd54ed16e5bd6505bf42af4f7838ca3" + integrity sha512-bk3gXBZDGILuuo/6sKtr0DQmSThYHLtNCdSdXk9YkxD/jK6X2vmCyyXBBxyqZ4XcnzTyYEAThfX3DCEnLf6igw== nanoid@^3.1.23, nanoid@^3.3.7: version "3.3.7" @@ -8152,10 +8205,10 @@ node-int64@^0.4.0: resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== -node-releases@^2.0.14: - version "2.0.14" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" - integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== +node-releases@^2.0.18: + version "2.0.18" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.18.tgz#f010e8d35e2fe8d6b2944f03f70213ecedc4ca3f" + integrity sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g== node-sass@^8.0.0: version "8.0.0" @@ -8244,9 +8297,9 @@ nth-check@^1.0.2, nth-check@^2.0.1: boolbase "^1.0.0" nwsapi@^2.2.0: - version "2.2.7" - resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.7.tgz#738e0707d3128cb750dddcfe90e4610482df0f30" - integrity sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ== + version "2.2.12" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.12.tgz#fb6af5c0ec35b27b4581eb3bbad34ec9e5c696f8" + integrity sha512-qXDmcVlZV4XRtKFzddidpfVP4oMSGhga+xdMc25mv8kaLUHtgzCDhUxkrN8exkGdTlLNaXj7CV3GtON7zuGZ+w== object-assign@^4.0.1, object-assign@^4.1.1: version "4.1.1" @@ -8259,9 +8312,9 @@ object-hash@^3.0.0: integrity sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw== object-inspect@^1.13.1: - version "1.13.1" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" - integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== + version "1.13.2" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.2.tgz#dea0088467fb991e67af4058147a24824a3043ff" + integrity sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g== object-is@^1.1.5: version "1.1.6" @@ -8286,62 +8339,55 @@ object.assign@^4.1.4, object.assign@^4.1.5: has-symbols "^1.0.3" object-keys "^1.1.1" -object.entries@^1.1.6, object.entries@^1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.7.tgz#2b47760e2a2e3a752f39dd874655c61a7f03c131" - integrity sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA== +object.entries@^1.1.8: + version "1.1.8" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.8.tgz#bffe6f282e01f4d17807204a24f8edd823599c41" + integrity sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" -object.fromentries@^2.0.6, object.fromentries@^2.0.7: - version "2.0.7" - resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.7.tgz#71e95f441e9a0ea6baf682ecaaf37fa2a8d7e616" - integrity sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA== +object.fromentries@^2.0.7, object.fromentries@^2.0.8: + version "2.0.8" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.8.tgz#f7195d8a9b97bd95cbc1999ea939ecd1a2b00c65" + integrity sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-object-atoms "^1.0.0" object.getownpropertydescriptors@^2.1.0: - version "2.1.7" - resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.7.tgz#7a466a356cd7da4ba8b9e94ff6d35c3eeab5d56a" - integrity sha512-PrJz0C2xJ58FNn11XV2lr4Jt5Gzl94qpy9Lu0JlfEj14z88sqbSBJCBEzdlNUCzY2gburhbrwOZ5BHCmuNUy0g== + version "2.1.8" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.8.tgz#2f1fe0606ec1a7658154ccd4f728504f69667923" + integrity sha512-qkHIGe4q0lSYMv0XI4SsBTJz3WaURhLvd0lKSgtVuOsJ2krg4SgMw3PIRQFMp07yi++UR3se2mkcLqsBNpBb/A== dependencies: array.prototype.reduce "^1.0.6" - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - safe-array-concat "^1.0.0" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-object-atoms "^1.0.0" + gopd "^1.0.1" + safe-array-concat "^1.1.2" object.groupby@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.2.tgz#494800ff5bab78fd0eff2835ec859066e00192ec" - integrity sha512-bzBq58S+x+uo0VjurFT0UktpKHOZmv4/xePiOA1nbB9pMqpGK7rUPNgf+1YC+7mE+0HzhTMqNUuCqvKhj6FnBw== + version "1.0.3" + resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.3.tgz#9b125c36238129f6f7b61954a1e7176148d5002e" + integrity sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ== dependencies: - array.prototype.filter "^1.0.3" - call-bind "^1.0.5" + call-bind "^1.0.7" define-properties "^1.2.1" - es-abstract "^1.22.3" - es-errors "^1.0.0" + es-abstract "^1.23.2" -object.hasown@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.3.tgz#6a5f2897bb4d3668b8e79364f98ccf971bda55ae" - integrity sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA== - dependencies: - define-properties "^1.2.0" - es-abstract "^1.22.1" - -object.values@^1.1.0, object.values@^1.1.6, object.values@^1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.7.tgz#617ed13272e7e1071b43973aa1655d9291b8442a" - integrity sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng== +object.values@^1.1.0, object.values@^1.1.6, object.values@^1.1.7, object.values@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.2.0.tgz#65405a9d92cee68ac2d303002e0b8470a4d9ab1b" + integrity sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" obuf@^1.0.0, obuf@^1.1.2: version "1.1.2" @@ -8396,16 +8442,16 @@ optionator@^0.8.1: word-wrap "~1.2.3" optionator@^0.9.3: - version "0.9.3" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" - integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== + version "0.9.4" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734" + integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g== dependencies: - "@aashutoshrathi/word-wrap" "^1.2.3" deep-is "^0.1.3" fast-levenshtein "^2.0.6" levn "^0.4.1" prelude-ls "^1.2.1" type-check "^0.4.0" + word-wrap "^1.2.5" p-limit@^2.0.0, p-limit@^2.2.0: version "2.3.0" @@ -8462,6 +8508,11 @@ p-try@^2.0.0: resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== +package-json-from-dist@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz#e501cd3094b278495eb4258d4c9f6d5ac3019f00" + integrity sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw== + param-case@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5" @@ -8530,12 +8581,12 @@ path-parse@^1.0.7: resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== -path-scurry@^1.10.1: - version "1.10.1" - resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.1.tgz#9ba6bf5aa8500fe9fd67df4f0d9483b2b0bfc698" - integrity sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ== +path-scurry@^1.11.1: + version "1.11.1" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.11.1.tgz#7960a668888594a0720b12a911d1a742ab9f11d2" + integrity sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA== dependencies: - lru-cache "^9.1.1 || ^10.0.0" + lru-cache "^10.2.0" minipass "^5.0.0 || ^6.0.2 || ^7.0.0" path-to-regexp@0.1.7: @@ -8558,10 +8609,10 @@ picocolors@^0.2.1: resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-0.2.1.tgz#570670f793646851d1ba135996962abad587859f" integrity sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA== -picocolors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" - integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== +picocolors@^1.0.0, picocolors@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.1.tgz#a8ad579b571952f0e5d25892de5445bcfe25aaa1" + integrity sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew== picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.2.3, picomatch@^2.3.1: version "2.3.1" @@ -8868,24 +8919,24 @@ postcss-minify-selectors@^5.2.1: dependencies: postcss-selector-parser "^6.0.5" -postcss-modules-extract-imports@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz#cda1f047c0ae80c97dbe28c3e76a43b88025741d" - integrity sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw== +postcss-modules-extract-imports@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz#b4497cb85a9c0c4b5aabeb759bb25e8d89f15002" + integrity sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q== -postcss-modules-local-by-default@^4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.4.tgz#7cbed92abd312b94aaea85b68226d3dec39a14e6" - integrity sha512-L4QzMnOdVwRm1Qb8m4x8jsZzKAaPAgrUF1r/hjDR2Xj7R+8Zsf97jAlSQzWtKx5YNiNGN8QxmPFIc/sh+RQl+Q== +postcss-modules-local-by-default@^4.0.5: + version "4.0.5" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.5.tgz#f1b9bd757a8edf4d8556e8d0f4f894260e3df78f" + integrity sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw== dependencies: icss-utils "^5.0.0" postcss-selector-parser "^6.0.2" postcss-value-parser "^4.1.0" -postcss-modules-scope@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.1.1.tgz#32cfab55e84887c079a19bbb215e721d683ef134" - integrity sha512-uZgqzdTleelWjzJY+Fhti6F3C9iF1JR/dODLs/JDefozYcKTBCdD8BIl6nNPbTbcLnGrk56hzwZC2DaGNvYjzA== +postcss-modules-scope@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.2.0.tgz#a43d28289a169ce2c15c00c4e64c0858e43457d5" + integrity sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ== dependencies: postcss-selector-parser "^6.0.4" @@ -8897,11 +8948,11 @@ postcss-modules-values@^4.0.0: icss-utils "^5.0.0" postcss-nested@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/postcss-nested/-/postcss-nested-6.0.1.tgz#f83dc9846ca16d2f4fa864f16e9d9f7d0961662c" - integrity sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ== + version "6.2.0" + resolved "https://registry.yarnpkg.com/postcss-nested/-/postcss-nested-6.2.0.tgz#4c2d22ab5f20b9cb61e2c5c5915950784d068131" + integrity sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ== dependencies: - postcss-selector-parser "^6.0.11" + postcss-selector-parser "^6.1.1" postcss-nesting@^10.2.0: version "10.2.0" @@ -9104,10 +9155,10 @@ postcss-selector-not@^6.0.1: dependencies: postcss-selector-parser "^6.0.10" -postcss-selector-parser@^6.0.10, postcss-selector-parser@^6.0.11, postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.5, postcss-selector-parser@^6.0.9: - version "6.0.15" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz#11cc2b21eebc0b99ea374ffb9887174855a01535" - integrity sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw== +postcss-selector-parser@^6.0.10, postcss-selector-parser@^6.0.11, postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.5, postcss-selector-parser@^6.0.9, postcss-selector-parser@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.1.1.tgz#5be94b277b8955904476a2400260002ce6c56e38" + integrity sha512-b4dlw/9V8A71rLIDsSwVmak9z2DuBUB7CA1/wSdelNEzqsjoSPeADTWNO09lpH49Diy3/JIZ2bSPB1dI3LJCHg== dependencies: cssesc "^3.0.0" util-deprecate "^1.0.2" @@ -9141,13 +9192,13 @@ postcss@^7.0.35: source-map "^0.6.1" postcss@^8.3.5, postcss@^8.4.23, postcss@^8.4.33, postcss@^8.4.4: - version "8.4.35" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.35.tgz#60997775689ce09011edf083a549cea44aabe2f7" - integrity sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA== + version "8.4.41" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.41.tgz#d6104d3ba272d882fe18fc07d15dc2da62fa2681" + integrity sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ== dependencies: nanoid "^3.3.7" - picocolors "^1.0.0" - source-map-js "^1.0.2" + picocolors "^1.0.1" + source-map-js "^1.2.0" prelude-ls@^1.2.1: version "1.2.1" @@ -9253,9 +9304,9 @@ prop-types@^15.0.0, prop-types@^15.7.2, prop-types@^15.8.1: react-is "^16.13.1" property-information@^6.0.0: - version "6.4.1" - resolved "https://registry.yarnpkg.com/property-information/-/property-information-6.4.1.tgz#de8b79a7415fd2107dfbe65758bb2cc9dfcf60ac" - integrity sha512-OHYtXfu5aI2sS2LWFSN5rgJjrQ4pCy8i1jubJLe2QvMF8JJ++HXTUIVWFLfXJoaOfvYYjk2SN8J2wFUWIGXT4w== + version "6.5.0" + resolved "https://registry.yarnpkg.com/property-information/-/property-information-6.5.0.tgz#6212fbb52ba757e92ef4fb9d657563b933b7ffec" + integrity sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig== proxy-addr@~2.0.7: version "2.0.7" @@ -9402,9 +9453,9 @@ react-is@^17.0.1: integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== react-is@^18.0.0: - version "18.2.0" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" - integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== + version "18.3.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.3.1.tgz#e83557dc12eae63a99e003a46388b1dcbb44db7e" + integrity sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg== react-markdown@^8.0.3: version "8.0.7" @@ -9604,15 +9655,15 @@ redux@^4.2.1: "@babel/runtime" "^7.9.2" reflect.getprototypeof@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.5.tgz#e0bd28b597518f16edaf9c0e292c631eb13e0674" - integrity sha512-62wgfC8dJWrmxv44CA36pLDnP6KKl3Vhxb7PL+8+qrrFMMoJij4vgiMP8zV4O8+CBMXY1mHxI5fITGHXFHVmQQ== + version "1.0.6" + resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz#3ab04c32a8390b770712b7a8633972702d278859" + integrity sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg== dependencies: - call-bind "^1.0.5" + call-bind "^1.0.7" define-properties "^1.2.1" - es-abstract "^1.22.3" - es-errors "^1.0.0" - get-intrinsic "^1.2.3" + es-abstract "^1.23.1" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" globalthis "^1.0.3" which-builtin-type "^1.1.3" @@ -9650,7 +9701,7 @@ regex-parser@^2.2.11: resolved "https://registry.yarnpkg.com/regex-parser/-/regex-parser-2.3.0.tgz#4bb61461b1a19b8b913f3960364bb57887f920ee" integrity sha512-TVILVSz2jY5D47F4mA4MppkBrafEaiUWJO/TcZHEIuI13AqoZMkK1WMA4Om1YkYbTx+9Ki1/tSUXbceyr9saRg== -regexp.prototype.flags@^1.5.0, regexp.prototype.flags@^1.5.1, regexp.prototype.flags@^1.5.2: +regexp.prototype.flags@^1.5.1, regexp.prototype.flags@^1.5.2: version "1.5.2" resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz#138f644a3350f981a858c44f6bb1a61ff59be334" integrity sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw== @@ -9786,7 +9837,7 @@ resolve@^1.1.7, resolve@^1.10.0, resolve@^1.14.2, resolve@^1.19.0, resolve@^1.20 path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" -resolve@^2.0.0-next.4: +resolve@^2.0.0-next.5: version "2.0.0-next.5" resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.5.tgz#6b0ec3107e671e52b68cd068ef327173b90dc03c" integrity sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA== @@ -9848,13 +9899,13 @@ sade@^1.7.3: dependencies: mri "^1.1.0" -safe-array-concat@^1.0.0, safe-array-concat@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.0.tgz#8d0cae9cb806d6d1c06e08ab13d847293ebe0692" - integrity sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg== +safe-array-concat@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.2.tgz#81d77ee0c4e8b863635227c721278dd524c20edb" + integrity sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q== dependencies: - call-bind "^1.0.5" - get-intrinsic "^1.2.2" + call-bind "^1.0.7" + get-intrinsic "^1.2.4" has-symbols "^1.0.3" isarray "^2.0.5" @@ -9951,7 +10002,7 @@ schema-utils@^3.0.0, schema-utils@^3.1.1, schema-utils@^3.2.0: ajv "^6.12.5" ajv-keywords "^3.5.2" -schema-utils@^4.0.0: +schema-utils@^4.0.0, schema-utils@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.2.0.tgz#70d7c93e153a273a805801882ebd3bff20d89c8b" integrity sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw== @@ -9993,11 +10044,9 @@ semver@^6.0.0, semver@^6.3.0, semver@^6.3.1: integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.5.3, semver@^7.5.4: - version "7.6.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" - integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== - dependencies: - lru-cache "^6.0.0" + version "7.6.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" + integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== send@0.18.0: version "0.18.0" @@ -10061,18 +10110,18 @@ set-blocking@^2.0.0: integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== set-function-length@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.1.tgz#47cc5945f2c771e2cf261c6737cf9684a2a5e425" - integrity sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g== + version "1.2.2" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" + integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== dependencies: - define-data-property "^1.1.2" + define-data-property "^1.1.4" es-errors "^1.3.0" function-bind "^1.1.2" - get-intrinsic "^1.2.3" + get-intrinsic "^1.2.4" gopd "^1.0.1" - has-property-descriptors "^1.0.1" + has-property-descriptors "^1.0.2" -set-function-name@^2.0.0, set-function-name@^2.0.1: +set-function-name@^2.0.1, set-function-name@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.2.tgz#16a705c5a0dc2f5e638ca96d8a8cd4e1c2b90985" integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ== @@ -10109,12 +10158,12 @@ shell-quote@^1.7.3, shell-quote@^1.8.1: resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.1.tgz#6dbf4db75515ad5bac63b4f1894c3a154c766680" integrity sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA== -side-channel@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.5.tgz#9a84546599b48909fb6af1211708d23b1946221b" - integrity sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ== +side-channel@^1.0.4, side-channel@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2" + integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA== dependencies: - call-bind "^1.0.6" + call-bind "^1.0.7" es-errors "^1.3.0" get-intrinsic "^1.2.4" object-inspect "^1.13.1" @@ -10177,9 +10226,9 @@ socks-proxy-agent@^7.0.0: socks "^2.6.2" socks@^2.6.2: - version "2.8.1" - resolved "https://registry.yarnpkg.com/socks/-/socks-2.8.1.tgz#22c7d9dd7882649043cba0eafb49ae144e3457af" - integrity sha512-B6w7tkwNid7ToxjZ08rQMT8M9BJAf8DKx8Ft4NivzH0zBUfd6jldGcisJn/RLgxcX3FPNDdNQCUEMMT79b+oCQ== + version "2.8.3" + resolved "https://registry.yarnpkg.com/socks/-/socks-2.8.3.tgz#1ebd0f09c52ba95a09750afe3f3f9f724a800cb5" + integrity sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw== dependencies: ip-address "^9.0.5" smart-buffer "^4.2.0" @@ -10189,10 +10238,10 @@ source-list-map@^2.0.0, source-list-map@^2.0.1: resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== -source-map-js@^1.0.1, source-map-js@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" - integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== +source-map-js@^1.0.1, source-map-js@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.0.tgz#16b809c162517b5b8c3e7dcd315a2a5c2612b2af" + integrity sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg== source-map-loader@^3.0.0: version "3.0.2" @@ -10260,9 +10309,9 @@ spdx-expression-parse@^3.0.0: spdx-license-ids "^3.0.0" spdx-license-ids@^3.0.0: - version "3.0.17" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.17.tgz#887da8aa73218e51a1d917502d79863161a93f9c" - integrity sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg== + version "3.0.18" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.18.tgz#22aa922dcf2f2885a6494a261f2d8b75345d0326" + integrity sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ== spdy-transport@^3.0.0: version "3.0.0" @@ -10407,47 +10456,67 @@ string-width@^5.0.1, string-width@^5.1.2: emoji-regex "^9.2.2" strip-ansi "^7.0.1" -string.prototype.matchall@^4.0.6, string.prototype.matchall@^4.0.8: - version "4.0.10" - resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz#a1553eb532221d4180c51581d6072cd65d1ee100" - integrity sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ== +string.prototype.includes@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/string.prototype.includes/-/string.prototype.includes-2.0.0.tgz#8986d57aee66d5460c144620a6d873778ad7289f" + integrity sha512-E34CkBgyeqNDcrbU76cDjL5JLcVrtSdYq0MEh/B10r17pRP4ciHLwTgnuLV8Ay6cgEMLkcBkFCKyFZ43YldYzg== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - get-intrinsic "^1.2.1" + define-properties "^1.1.3" + es-abstract "^1.17.5" + +string.prototype.matchall@^4.0.11, string.prototype.matchall@^4.0.6: + version "4.0.11" + resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz#1092a72c59268d2abaad76582dccc687c0297e0a" + integrity sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + get-intrinsic "^1.2.4" + gopd "^1.0.1" has-symbols "^1.0.3" - internal-slot "^1.0.5" - regexp.prototype.flags "^1.5.0" - set-function-name "^2.0.0" - side-channel "^1.0.4" + internal-slot "^1.0.7" + regexp.prototype.flags "^1.5.2" + set-function-name "^2.0.2" + side-channel "^1.0.6" -string.prototype.trim@^1.2.8: - version "1.2.8" - resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz#f9ac6f8af4bd55ddfa8895e6aea92a96395393bd" - integrity sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ== +string.prototype.repeat@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz#e90872ee0308b29435aa26275f6e1b762daee01a" + integrity sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" + define-properties "^1.1.3" + es-abstract "^1.17.5" -string.prototype.trimend@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz#1bb3afc5008661d73e2dc015cd4853732d6c471e" - integrity sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA== +string.prototype.trim@^1.2.9: + version "1.2.9" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz#b6fa326d72d2c78b6df02f7759c73f8f6274faa4" + integrity sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.0" + es-object-atoms "^1.0.0" -string.prototype.trimstart@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz#d4cdb44b83a4737ffbac2d406e405d43d0184298" - integrity sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg== +string.prototype.trimend@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz#3651b8513719e8a9f48de7f2f77640b26652b229" + integrity sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + +string.prototype.trimstart@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz#7ee834dda8c7c17eff3118472bb35bfedaa34dde" + integrity sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" string_decoder@^1.1.1: version "1.3.0" @@ -10635,9 +10704,9 @@ symbol-tree@^3.2.4: integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== tailwindcss@^3.0.2: - version "3.4.1" - resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.4.1.tgz#f512ca5d1dd4c9503c7d3d28a968f1ad8f5c839d" - integrity sha512-qAYmXRfk3ENzuPBakNK0SRrUDipP8NQnEY6772uDhflcQz5EhRdD7JNZxyrFHVQNCwULPBn6FNPp9brpO7ctcA== + version "3.4.7" + resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.4.7.tgz#6092f18767f5933f59375b9afe558e592fc77201" + integrity sha512-rxWZbe87YJb4OcSopb7up2Ba4U82BoiSGUdoDr3Ydrg9ckxFS/YWsvhN323GMcddgU65QRy7JndC7ahhInhvlQ== dependencies: "@alloc/quick-lru" "^5.2.0" arg "^5.0.2" @@ -10647,7 +10716,7 @@ tailwindcss@^3.0.2: fast-glob "^3.3.0" glob-parent "^6.0.2" is-glob "^4.0.3" - jiti "^1.19.1" + jiti "^1.21.0" lilconfig "^2.1.0" micromatch "^4.0.5" normalize-path "^3.0.0" @@ -10719,9 +10788,9 @@ terser-webpack-plugin@^5.2.5, terser-webpack-plugin@^5.3.10: terser "^5.26.0" terser@^5.0.0, terser@^5.10.0, terser@^5.26.0: - version "5.28.1" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.28.1.tgz#bf00f7537fd3a798c352c2d67d67d65c915d1b28" - integrity sha512-wM+bZp54v/E9eRRGXb5ZFDvinrJIOaTapx3WUokyVGZu5ucVCK55zEgGd5Dl2fSr3jUo5sDiERErUWLY6QPFyA== + version "5.31.3" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.31.3.tgz#b24b7beb46062f4653f049eea4f0cd165d0f0c38" + integrity sha512-pAfYn3NIZLyZpa83ZKigvj6Rn9c/vd5KfYGX7cN1mnzqgDcxWvrU5ZtAfIKhEXz9nRecw4z3LXkjaq96/qZqAA== dependencies: "@jridgewell/source-map" "^0.3.3" acorn "^8.8.2" @@ -10789,9 +10858,9 @@ toidentifier@1.0.1: integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== tough-cookie@^4.0.0: - version "4.1.3" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.3.tgz#97b9adb0728b42280aa3d814b6b999b2ff0318bf" - integrity sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw== + version "4.1.4" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.4.tgz#945f1461b45b5a8c76821c33ea49c3ac192c1b36" + integrity sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag== dependencies: psl "^1.1.33" punycode "^2.1.1" @@ -10858,9 +10927,9 @@ tslib@^1.8.1: integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== tslib@^2.0.3, tslib@^2.1.0, tslib@^2.4.0: - version "2.6.2" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" - integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== + version "2.6.3" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.3.tgz#0438f810ad7a9edcde7a241c3d80db693c8cbfe0" + integrity sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ== tsutils@^3.21.0: version "3.21.0" @@ -10958,10 +11027,10 @@ typed-array-byte-offset@^1.0.2: has-proto "^1.0.3" is-typed-array "^1.1.13" -typed-array-length@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.5.tgz#57d44da160296d8663fd63180a1802ebf25905d5" - integrity sha512-yMi0PlwuznKHxKmcpoOdeLwxBoVPkqZxd7q2FgMkmD3bNwvF5VW0+UlUQ1k1vmktTu4Yu13Q0RIxEP8+B+wloA== +typed-array-length@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.6.tgz#57155207c76e64a3457482dfdc1c9d1d3c4c73a3" + integrity sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g== dependencies: call-bind "^1.0.7" for-each "^0.3.3" @@ -10977,10 +11046,10 @@ typedarray-to-buffer@^3.1.5: dependencies: is-typedarray "^1.0.0" -typescript@^5.4.5: - version "5.4.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.5.tgz#42ccef2c571fdbd0f6718b1d1f5e6e5ef006f611" - integrity sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ== +typescript@^5.5.3: + version "5.5.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.5.4.tgz#d9852d6c82bad2d2eda4fd74a5762a8f5909e9ba" + integrity sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q== unbox-primitive@^1.0.2: version "1.0.2" @@ -11002,6 +11071,11 @@ undici-types@~5.26.4: resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== +undici-types@~6.13.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.13.0.tgz#e3e79220ab8c81ed1496b5812471afd7cf075ea5" + integrity sha512-xtFJHudx8S2DSoujjMd1WeWvn7KKWFRESZTMeL1RptAYERu29D6jphMjjY+vn96jvN3kVPDNxU/E13VTaXj6jg== + unicode-canonical-property-names-ecmascript@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" @@ -11141,13 +11215,13 @@ upath@^1.2.0: resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== -update-browserslist-db@^1.0.13: - version "1.0.13" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz#3c5e4f5c083661bd38ef64b6328c26ed6c8248c4" - integrity sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg== +update-browserslist-db@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz#7ca61c0d8650766090728046e416a8cde682859e" + integrity sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ== dependencies: - escalade "^3.1.1" - picocolors "^1.0.0" + escalade "^3.1.2" + picocolors "^1.0.1" uri-js@^4.2.2: version "4.4.1" @@ -11165,9 +11239,9 @@ url-parse@^1.5.3: requires-port "^1.0.0" use-sync-external-store@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a" - integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA== + version "1.2.2" + resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.2.tgz#c3b6390f3a30eba13200d2302dcdf1e7b57b2ef9" + integrity sha512-PElTlVMwpblvbNqQ82d2n6RjStvdSoNe9FG28kNfz3WiXilJm4DdNkEzRhCZuIDwY8U08WVihhGR5iRqAwfDiw== util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: version "1.0.2" @@ -11300,10 +11374,10 @@ walker@^1.0.7: dependencies: makeerror "1.0.12" -watchpack@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.0.tgz#fa33032374962c78113f93c7f2fb4c54c9862a5d" - integrity sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg== +watchpack@^2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.1.tgz#29308f2cac150fa8e4c92f90e0ec954a9fed7fff" + integrity sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg== dependencies: glob-to-regexp "^0.4.1" graceful-fs "^4.1.2" @@ -11335,7 +11409,7 @@ webidl-conversions@^6.1.0: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== -webpack-dev-middleware@^5.3.1: +webpack-dev-middleware@^5.3.4: version "5.3.4" resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz#eb7b39281cbce10e104eb2b8bf2b63fce49a3517" integrity sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q== @@ -11347,9 +11421,9 @@ webpack-dev-middleware@^5.3.1: schema-utils "^4.0.0" webpack-dev-server@^4.6.0: - version "4.15.1" - resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-4.15.1.tgz#8944b29c12760b3a45bdaa70799b17cb91b03df7" - integrity sha512-5hbAst3h3C3L8w6W4P96L5vaV0PxSmJhxZvWKYIdgxOQm8pNZ5dEOmmSLBVpP85ReeyRt6AS1QJNyo/oFFPeVA== + version "4.15.2" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-4.15.2.tgz#9e0c70a42a012560860adb186986da1248333173" + integrity sha512-0XavAZbNJ5sDrCbkpWL8mia0o5WPOd2YGtxrEiZkBK9FjLppIUK2TgxK6qGD2P3hUXTJNNPVibrerKcx5WkR1g== dependencies: "@types/bonjour" "^3.5.9" "@types/connect-history-api-fallback" "^1.3.5" @@ -11379,7 +11453,7 @@ webpack-dev-server@^4.6.0: serve-index "^1.9.1" sockjs "^0.3.24" spdy "^4.0.2" - webpack-dev-middleware "^5.3.1" + webpack-dev-middleware "^5.3.4" ws "^8.13.0" webpack-manifest-plugin@^4.0.2: @@ -11412,25 +11486,25 @@ webpack-sources@^3.2.3: integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== webpack@^5.64.4: - version "5.90.3" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.90.3.tgz#37b8f74d3ded061ba789bb22b31e82eed75bd9ac" - integrity sha512-h6uDYlWCctQRuXBs1oYpVe6sFcWedl0dpcVaTf/YF67J9bKvwJajFulMVSYKHrksMB3I/pIagRzDxwxkebuzKA== + version "5.93.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.93.0.tgz#2e89ec7035579bdfba9760d26c63ac5c3462a5e5" + integrity sha512-Y0m5oEY1LRuwly578VqluorkXbvXKh7U3rLoQCEO04M97ScRr44afGVkI0FQFsXzysk5OgFAxjZAb9rsGQVihA== dependencies: "@types/eslint-scope" "^3.7.3" "@types/estree" "^1.0.5" - "@webassemblyjs/ast" "^1.11.5" - "@webassemblyjs/wasm-edit" "^1.11.5" - "@webassemblyjs/wasm-parser" "^1.11.5" + "@webassemblyjs/ast" "^1.12.1" + "@webassemblyjs/wasm-edit" "^1.12.1" + "@webassemblyjs/wasm-parser" "^1.12.1" acorn "^8.7.1" - acorn-import-assertions "^1.9.0" + acorn-import-attributes "^1.9.5" browserslist "^4.21.10" chrome-trace-event "^1.0.2" - enhanced-resolve "^5.15.0" + enhanced-resolve "^5.17.0" es-module-lexer "^1.2.1" eslint-scope "5.1.1" events "^3.2.0" glob-to-regexp "^0.4.1" - graceful-fs "^4.2.9" + graceful-fs "^4.2.11" json-parse-even-better-errors "^2.3.1" loader-runner "^4.2.0" mime-types "^2.1.27" @@ -11438,7 +11512,7 @@ webpack@^5.64.4: schema-utils "^3.2.0" tapable "^2.1.1" terser-webpack-plugin "^5.3.10" - watchpack "^2.4.0" + watchpack "^2.4.1" webpack-sources "^3.2.3" websocket-driver@>=0.5.1, websocket-driver@^0.7.4: @@ -11502,12 +11576,12 @@ which-boxed-primitive@^1.0.2: is-symbol "^1.0.3" which-builtin-type@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/which-builtin-type/-/which-builtin-type-1.1.3.tgz#b1b8443707cc58b6e9bf98d32110ff0c2cbd029b" - integrity sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw== + version "1.1.4" + resolved "https://registry.yarnpkg.com/which-builtin-type/-/which-builtin-type-1.1.4.tgz#592796260602fc3514a1b5ee7fa29319b72380c3" + integrity sha512-bppkmBSsHFmIMSl8BO9TbsyzsvGjVoppt8xUiGzwiu/bhDCGxnpOKCxgqj6GuyHE0mINMDecBFPlOm2hzY084w== dependencies: - function.prototype.name "^1.1.5" - has-tostringtag "^1.0.0" + function.prototype.name "^1.1.6" + has-tostringtag "^1.0.2" is-async-function "^2.0.0" is-date-object "^1.0.5" is-finalizationregistry "^1.0.2" @@ -11516,29 +11590,29 @@ which-builtin-type@^1.1.3: is-weakref "^1.0.2" isarray "^2.0.5" which-boxed-primitive "^1.0.2" - which-collection "^1.0.1" - which-typed-array "^1.1.9" + which-collection "^1.0.2" + which-typed-array "^1.1.15" -which-collection@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.1.tgz#70eab71ebbbd2aefaf32f917082fc62cdcb70906" - integrity sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A== +which-collection@^1.0.1, which-collection@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.2.tgz#627ef76243920a107e7ce8e96191debe4b16c2a0" + integrity sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw== dependencies: - is-map "^2.0.1" - is-set "^2.0.1" - is-weakmap "^2.0.1" - is-weakset "^2.0.1" + is-map "^2.0.3" + is-set "^2.0.3" + is-weakmap "^2.0.2" + is-weakset "^2.0.3" -which-typed-array@^1.1.13, which-typed-array@^1.1.14, which-typed-array@^1.1.9: - version "1.1.14" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.14.tgz#1f78a111aee1e131ca66164d8bdc3ab062c95a06" - integrity sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg== +which-typed-array@^1.1.13, which-typed-array@^1.1.14, which-typed-array@^1.1.15: + version "1.1.15" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.15.tgz#264859e9b11a649b388bfaaf4f767df1f779b38d" + integrity sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA== dependencies: - available-typed-arrays "^1.0.6" - call-bind "^1.0.5" + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" for-each "^0.3.3" gopd "^1.0.1" - has-tostringtag "^1.0.1" + has-tostringtag "^1.0.2" which@^1.3.1: version "1.3.1" @@ -11561,7 +11635,7 @@ wide-align@^1.1.5: dependencies: string-width "^1.0.2 || 2 || 3 || 4" -word-wrap@~1.2.3: +word-wrap@^1.2.5, word-wrap@~1.2.3: version "1.2.5" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== @@ -11783,9 +11857,9 @@ ws@^7.4.6: integrity sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ== ws@^8.13.0: - version "8.17.1" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.17.1.tgz#9293da530bb548febc95371d90f9c878727d919b" - integrity sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ== + version "8.18.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.0.tgz#0d7505a6eafe2b0e712d232b42279f53bc289bbc" + integrity sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw== xml-name-validator@^3.0.0: version "3.0.0" @@ -11818,9 +11892,9 @@ yaml@^1.10.0, yaml@^1.10.2, yaml@^1.7.2: integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== yaml@^2.3.4: - version "2.4.0" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.4.0.tgz#2376db1083d157f4b3a452995803dbcf43b08140" - integrity sha512-j9iR8g+/t0lArF4V6NE/QCfT+CO7iLqrXAHZbJdo+LfjqP1vR8Fg5bSiaq6Q2lOD1AUEVrEVIgABvBFYojJVYQ== + version "2.5.0" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.5.0.tgz#c6165a721cf8000e91c36490a41d7be25176cf5d" + integrity sha512-2wWLbGbYDiSqqIKoPjar3MPgB94ErzCtrNE1FdqGuaO0pi2JGjmE8aW8TDZwzU7vuxcGRdL/4gPQwQ7hD5AMSw== yargs-parser@^20.2.2, yargs-parser@^20.2.3: version "20.2.9" From e073613c7ff6ca3a3ab6379f00c36cc557a369a9 Mon Sep 17 00:00:00 2001 From: Tim Allen Date: Thu, 15 Aug 2024 11:38:46 +0100 Subject: [PATCH 66/79] Airlock notifier update (#4042) * airlock initial changes * add in upgrade script * update * update change log * remove local * update versions * update versions * update * porter version * update * update * update * updates * update * update core version * update * update * Update outputs.tf * update subnet --- CHANGELOG.md | 1 + Makefile | 7 + core/terraform/network/network.tf | 1 + core/terraform/network/outputs.tf | 4 + core/terraform/servicebus.tf | 4 + core/version.txt | 2 +- .../app/AirlockNotifier/workflow.json | 160 +++++++++++------- .../airlock_notifier/app/connections.json | 24 +-- .../airlock_notifier/app/host.json | 2 +- .../airlock_notifier/porter.yaml | 70 +++++++- .../airlock_notifier/template_schema.json | 22 +++ .../terraform/.terraform.lock.hcl | 64 +++---- .../terraform/airlock_notifier.tf | 25 ++- .../airlock_notifier/terraform/data.tf | 13 +- .../airlock_notifier/terraform/providers.tf | 7 +- .../airlock_notifier/terraform/rules.tf | 5 +- .../airlock_notifier/terraform/upgrade.sh | 13 ++ 17 files changed, 291 insertions(+), 133 deletions(-) create mode 100755 templates/shared_services/airlock_notifier/terraform/upgrade.sh diff --git a/CHANGELOG.md b/CHANGELOG.md index da63beea9e..2a9b150380 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ ENHANCEMENTS: * Add Case Study Docs ([#1366](https://github.com/microsoft/AzureTRE/issues/1366)) * Ability to host TRE on a custom domain ([#4014](https://github.com/microsoft/AzureTRE/pull/4014)) * Remove AppServiceFileAuditLogs diagnostic setting ([#4033](https://github.com/microsoft/AzureTRE/issues/4033)) +* Update to the Airlock Notifier Shared Service ([#3909](https://github.com/microsoft/AzureTRE/issues/3909)) BUG FIXES: * Removed 429 Error (Costs API) form presenting in UI ([#3929](https://github.com/microsoft/AzureTRE/issues/3929)) diff --git a/Makefile b/Makefile index f450e2a36f..4053dc3f9a 100644 --- a/Makefile +++ b/Makefile @@ -144,6 +144,13 @@ terraform-deploy: && . ${MAKEFILE_DIR}/devops/scripts/load_env.sh ${DIR}/.env \ && cd ${DIR}/terraform/ && ./deploy.sh +terraform-upgrade: + $(call target_title, "Upgrading ${DIR} with Terraform") \ + && . ${MAKEFILE_DIR}/devops/scripts/check_dependencies.sh env \ + && . ${MAKEFILE_DIR}/devops/scripts/load_and_validate_env.sh \ + && . ${MAKEFILE_DIR}/devops/scripts/load_env.sh ${DIR}/.env \ + && cd ${DIR}/terraform/ && ./upgrade.sh + terraform-import: $(call target_title, "Importing ${DIR} with Terraform") \ && . ${MAKEFILE_DIR}/devops/scripts/check_dependencies.sh env \ diff --git a/core/terraform/network/network.tf b/core/terraform/network/network.tf index 4cac338e35..c57b673dce 100644 --- a/core/terraform/network/network.tf +++ b/core/terraform/network/network.tf @@ -111,6 +111,7 @@ resource "azurerm_subnet" "airlock_notification" { actions = ["Microsoft.Network/virtualNetworks/subnets/action"] } } + service_endpoints = ["Microsoft.ServiceBus"] } resource "azurerm_subnet" "airlock_storage" { diff --git a/core/terraform/network/outputs.tf b/core/terraform/network/outputs.tf index 5864bc529e..3e0aab407d 100644 --- a/core/terraform/network/outputs.tf +++ b/core/terraform/network/outputs.tf @@ -38,6 +38,10 @@ output "resource_processor_subnet_id" { value = azurerm_subnet.resource_processor.id } +output "airlock_notification_subnet_id" { + value = azurerm_subnet.airlock_notification.id +} + # DNS Zones output "azure_monitor_dns_zone_id" { diff --git a/core/terraform/servicebus.tf b/core/terraform/servicebus.tf index 231594596b..c357046dbb 100644 --- a/core/terraform/servicebus.tf +++ b/core/terraform/servicebus.tf @@ -23,6 +23,10 @@ resource "azurerm_servicebus_namespace" "sb" { subnet_id = module.network.airlock_events_subnet_id ignore_missing_vnet_service_endpoint = false } + network_rules { + subnet_id = module.network.airlock_notification_subnet_id + ignore_missing_vnet_service_endpoint = false + } } lifecycle { ignore_changes = [tags] } diff --git a/core/version.txt b/core/version.txt index a67aac0904..daecfa5151 100644 --- a/core/version.txt +++ b/core/version.txt @@ -1 +1 @@ -__version__ = "0.10.5" +__version__ = "0.10.6" diff --git a/templates/shared_services/airlock_notifier/app/AirlockNotifier/workflow.json b/templates/shared_services/airlock_notifier/app/AirlockNotifier/workflow.json index 13c65a9964..9ea584c0a5 100644 --- a/templates/shared_services/airlock_notifier/app/AirlockNotifier/workflow.json +++ b/templates/shared_services/airlock_notifier/app/AirlockNotifier/workflow.json @@ -2,6 +2,23 @@ "definition": { "$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#", "actions": { + "Initialize_creator_variable": { + "inputs": { + "variables": [ + { + "name": "creator", + "type": "string", + "value": "@{body('Parse_JSON')?['data']?['request']?['created_by']?['name']}" + } + ] + }, + "runAfter": { + "Initialize_workspace_variable": [ + "SUCCEEDED" + ] + }, + "type": "InitializeVariable" + }, "Initialize_message_variable": { "inputs": { "variables": [ @@ -27,9 +44,26 @@ } ] }, + "runAfter": { + "Initialize_creator_variable": [ + "SUCCEEDED" + ] + }, + "type": "InitializeVariable" + }, + "Initialize_workspace_variable": { + "inputs": { + "variables": [ + { + "name": "workspace", + "type": "string", + "value": "@body('Parse_JSON')?['data']?['workspace']?['display_name']" + } + ] + }, "runAfter": { "Initialize_message_variable": [ - "Succeeded" + "SUCCEEDED" ] }, "type": "InitializeVariable" @@ -44,45 +78,49 @@ "event_type": { "type": "string" }, + "recipient_emails_by_role": { + "properties": { + "airlock_manager": { + "items": { + "type": "string" + }, + "type": "array" + }, + "workspace_owner": { + "items": { + "type": "string" + }, + "type": "array" + }, + "workspace_researcher": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, "request": { - "type": "object", "properties": { - "id": { + "business_justification": { "type": "string" }, - "createdWhen": { - "type": "number" - }, "createdBy": { - "type": "object", "properties": { - "name": { - "type": "string" - }, "email": { "type": "string" - } - } - }, - "updatedWhen": { - "type": "number" - }, - "updatedBy": { - "type": "object", - "properties": { - "name": { - "type": "string" }, - "email": { + "name": { "type": "string" } - } + }, + "type": "object" }, - "requestType": { - "type": "string" + "createdWhen": { + "type": "number" }, "files": { - "type": "array", "items": { "name": { "type": "string" @@ -90,52 +128,48 @@ "size": { "type": "number" } - } + }, + "type": "array" }, - "status": { + "id": { "type": "string" }, - "business_justification": { + "requestType": { + "type": "string" + }, + "status": { "type": "string" + }, + "updatedBy": { + "properties": { + "email": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "updatedWhen": { + "type": "number" } - } + }, + "type": "object" }, "workspace": { - "type": "object", "properties": { - "id": { + "description": { "type": "string" }, "display_name": { "type": "string" }, - "description": { + "id": { "type": "string" } - } - }, - "recipient_emails_by_role": { - "type": "object", - "properties": { - "workspace_researcher": { - "type": "array", - "items": { - "type": "string" - } - }, - "workspace_owner": { - "type": "array", - "items": { - "type": "string" - } - }, - "airlock_manager": { - "type": "array", - "items": { - "type": "string" - } - } - } + }, + "type": "object" } }, "type": "object" @@ -150,10 +184,11 @@ "Send_Email_with_SMTP": { "inputs": { "parameters": { - "body": "View the request", + "body": " @{variables('message')} @{variables('message')} ", "from": "@parameters('smtp_from_email')", "importance": "Normal", - "subject": "@variables('message')", + "isHTML": true, + "subject": "@replace(replace(variables('message'), '', ''), '', '')", "to": "@{join(variables('recipients'), ';')}" }, "serviceProviderConfiguration": { @@ -187,7 +222,7 @@ "Set_approved_message": { "inputs": { "name": "message", - "value": "Your Airlock request was approved" + "value": "Your Airlock request in @{variables('workspace')} workspace was approved" }, "runAfter": { "Set_recipients_as_researchers_emails": [ @@ -201,7 +236,6 @@ "name": "recipients", "value": "@body('Parse_JSON')?['data']?['recipient_emails_by_role']?['workspace_researcher']" }, - "runAfter": {}, "type": "SetVariable" } }, @@ -212,7 +246,7 @@ "Set_in_review_message": { "inputs": { "name": "message", - "value": "An Airlock request needs your review" + "value": "An Airlock request in @{variables('workspace')} workspace by @{variables('creator')} needs your review" }, "runAfter": { "Set_recipients_as_owners_emails": [ @@ -226,7 +260,6 @@ "name": "recipients", "value": "@body('Parse_JSON')?['data']?['recipient_emails_by_role']?['airlock_manager']" }, - "runAfter": {}, "type": "SetVariable" } }, @@ -239,7 +272,6 @@ "inputs": { "runStatus": "Cancelled" }, - "runAfter": {}, "type": "Terminate" } } diff --git a/templates/shared_services/airlock_notifier/app/connections.json b/templates/shared_services/airlock_notifier/app/connections.json index 56cd1dd9ad..b467a295b2 100644 --- a/templates/shared_services/airlock_notifier/app/connections.json +++ b/templates/shared_services/airlock_notifier/app/connections.json @@ -1,13 +1,17 @@ { "serviceProviderConnections": { "serviceBus": { + "displayName": "core-service-bus", + "parameterSetName": "ManagedServiceIdentity", "parameterValues": { - "connectionString": "@appsetting('serviceBus_connectionString')" + "authProvider": { + "Type": "ManagedServiceIdentity" + }, + "fullyQualifiedNamespace": "@appsetting('serviceBus_fullyQualifiedNamespace')" }, "serviceProvider": { "id": "/serviceProviders/serviceBus" - }, - "displayName": "core-service-bus" + } }, "Smtp": { "displayName": "smtp", @@ -22,19 +26,5 @@ "id": "/serviceProviders/Smtp" } } - }, - "managedApiConnections": { - "smtp": { - "api": { - "id": "/subscriptions/@appsetting('subscription')/providers/Microsoft.Web/locations/westeurope/managedApis/smtp" - }, - "connection": { - "id": "/subscriptions/@appsetting('subscription')/resourceGroups/@appsetting('resource_group')/providers/Microsoft.Web/connections/smtp" - }, - "authentication": { - "type": "ManagedServiceIdentity" - }, - "connectionRuntimeUrl": "@appsetting('smtp_connection_runtime_url')" - } } } diff --git a/templates/shared_services/airlock_notifier/app/host.json b/templates/shared_services/airlock_notifier/app/host.json index 89ab59eca1..c7f5bba4c3 100644 --- a/templates/shared_services/airlock_notifier/app/host.json +++ b/templates/shared_services/airlock_notifier/app/host.json @@ -2,6 +2,6 @@ "version": "2.0", "extensionBundle": { "id": "Microsoft.Azure.Functions.ExtensionBundle.Workflows", - "version": "[1.*, 2.0.0)" + "version": "[4.0.0, 5.0.0)" } } diff --git a/templates/shared_services/airlock_notifier/porter.yaml b/templates/shared_services/airlock_notifier/porter.yaml index c287b8677c..500cd3cc86 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: 0.9.0 +version: 1.0.1 description: "A shared service notifying on Airlock Operations" registry: azuretre dockerfile: Dockerfile.tmpl @@ -149,11 +149,73 @@ install: upgrade: + - terraform: + description: "Update shared service" + vars: + tre_id: ${ bundle.parameters.tre_id } + tre_resource_id: ${ bundle.parameters.id } + tre_url: ${ bundle.parameters.tre_url } + smtp_server_address: ${ bundle.parameters.smtp_server_address } + smtp_server_port: ${ bundle.parameters.smtp_server_port } + smtp_username: ${ bundle.parameters.smtp_username } + smtp_password: ${ bundle.parameters.smtpPassword } + smtp_server_enable_ssl: ${ bundle.parameters.smtp_server_enable_ssl } + smtp_from_email: ${ bundle.parameters.smtp_from_email } + backendConfig: + resource_group_name: ${ bundle.parameters.tfstate_resource_group_name } + storage_account_name: ${ bundle.parameters.tfstate_storage_account_name } + container_name: ${ bundle.parameters.tfstate_container_name } + key: ${ bundle.parameters.tre_id }-shared-airlock-notifier + outputs: + - name: airlock_notifier_logic_app_name + - name: airlock_notifier_logic_app_resource_group_name + + - az: + description: "Set Azure Cloud Environment" + arguments: + - cloud + - set + flags: + name: ${ bundle.parameters.azure_environment } + + - az: + description: "Login to Azure" + arguments: + - login + flags: + identity: + username: ${ bundle.credentials.azure_client_id } + + - az: + arguments: + - resource + - update + flags: + resource-group: ${ bundle.outputs.airlock_notifier_logic_app_resource_group_name } + name: scm + namespace: Microsoft.Web + resource-type: basicPublishingCredentialsPolicies + parent: sites/${ bundle.outputs.airlock_notifier_logic_app_name } + set: "properties.allow=true" + - exec: - description: "Upgrade shared service" - command: echo + description: Wait for SCM Auth settings to kick in + command: sleep + arguments: + - "60" + + - az: + description: "Deploy logic app update" arguments: - - "This shared service does not implement upgrade action" + - functionapp + - deployment + - source + - config-zip + flags: + name: ${ bundle.outputs.airlock_notifier_logic_app_name } + resource-group: ${ bundle.outputs.airlock_notifier_logic_app_resource_group_name } + subscription: ${ bundle.credentials.azure_subscription_id } + src: /cnab/app/LogicApp.zip uninstall: diff --git a/templates/shared_services/airlock_notifier/template_schema.json b/templates/shared_services/airlock_notifier/template_schema.json index 251f8ee7e4..fb22366da2 100644 --- a/templates/shared_services/airlock_notifier/template_schema.json +++ b/templates/shared_services/airlock_notifier/template_schema.json @@ -6,6 +6,20 @@ "description": "A shared service notifying on Airlock operations", "required": ["smtp_server_address", "smtp_username", "smtpPassword", "smtp_from_email"], "properties": { + "display_name": { + "type": "string", + "title": "Name for the workspace service", + "description": "The name of the workspace service to be displayed to users", + "default": "Airlock Notifier", + "updateable": true + }, + "description": { + "type": "string", + "title": "Description of the workspace service", + "description": "Description of the workspace service", + "default": "A shared service notifying on Airlock operations", + "updateable": true + }, "smtp_server_address": { "$id": "#/properties/smtp_server_address", "type": "string", @@ -77,5 +91,13 @@ "stepId": "main" } ] + }, + "uiSchema": { + "smtpPassword" : { + "ui:widget": "password" + }, + "smtp_from_email" : { + "ui:widget": "email" + } } } diff --git a/templates/shared_services/airlock_notifier/terraform/.terraform.lock.hcl b/templates/shared_services/airlock_notifier/terraform/.terraform.lock.hcl index 7ff7df02ee..91cd480c91 100644 --- a/templates/shared_services/airlock_notifier/terraform/.terraform.lock.hcl +++ b/templates/shared_services/airlock_notifier/terraform/.terraform.lock.hcl @@ -1,42 +1,42 @@ # This file is maintained automatically by "terraform init". # Manual edits may be lost in future updates. -provider "registry.terraform.io/hashicorp/azurerm" { - version = "3.57.0" - constraints = "3.57.0" +provider "registry.terraform.io/azure/azapi" { + version = "1.14.0" + constraints = "1.14.0" hashes = [ - "h1:SOBKU/ioGnpuQpAx6dgaD0EzfAM2W+uS9e6p59viSxs=", - "zh:028202b0ae01f1262dac076b383cb68b5dd624977669b6db833418c215eb8401", - "zh:26fcf9e9b73cb3bbf87a048361a89050d2e52bdc91190a305e624a62be26a3f4", - "zh:2f381103953e4513068eee62089a0ec8c60a18ecef2235138b6c29a45920d6a2", - "zh:376f016f4b449b2cf38f75e27e7a9157fdcfc925f28198124a30e316abb54f3d", - "zh:7d491bab94d5aba91cd9c307dbd4b655dcdc0a6212541e7800b9a902be98befe", - "zh:85fa7d8339efd15494f947cda02e9ed127eafa32652e568f54261b2e97d2b3ee", - "zh:950e079e55a7e321adbd2f6a0639a4b3b0fac47d2e4bb3a12791e0817b694238", - "zh:975260e09379c5c97cad3171327db2f0b4914909861d4c24ab784b0ecd79c54a", - "zh:a26bb67ab2d2f20e5fee4d41110584af17357f4b4266d80f9debfad61fa0a4fd", - "zh:da0e5d1ec301c69b6fae684e55059fc5e1b91699ed3696229f599d558401556b", - "zh:ea11e62ce53caec240cb3a1da25d248805387fa246314001ed3e07e9105f6e12", - "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", + "h1:D8AhiIgpSH6pG05WuslOg3XS0O9I5VxOoD3W3i8N+Xo=", + "zh:083709be750b878dfb33747ba1d326d23619a0ed654f95bce9c808e424923c90", + "zh:261b5060297b732d97b4363ad753355bfee00e93d773fd329023a5619b964c39", + "zh:51adfdaeb1b2c3d9e7aeba97c9c73d469712223dd125b14d90377d445d1cd3df", + "zh:5bcbedc9eeefa5e6267042604af20f93cadceba41d8d90a91040f60f6c5e38a9", + "zh:6da127f306083e740767f53dd0cc8787166a8af4f44519873dd8775ca981ddef", + "zh:7604cf377b8ea31a5a44db5b8566f5eea4d73acdfaaeb8ba10fcac46cbf4a738", + "zh:77789ef8906acabbf7eb55378e1f9c407499bb765811f193d256897d2925d66d", + "zh:8a333c53279b3b0b65519191dbba8ef7dc390f5d96216e4e6f165cac8b3e5dc2", + "zh:8c0dfe57dc2c29f8953db3037144d2254ce28bfa55dae537707ae4bdb4460f64", + "zh:debdeabcbcb6b421c2cdf2093d520c67e75a11d28d357b0ba32dd748105a5460", + "zh:e252ee062513904836fcc5e6548243429819e68aa7cfaeac7da8d816c4c4d1e8", + "zh:f48d1fd67b463d2121516911b5d20f8a72217e43e7740bb74929a17dbd43bb59", ] } -provider "registry.terraform.io/hashicorp/local" { - version = "2.4.0" - constraints = "2.4.0" +provider "registry.terraform.io/hashicorp/azurerm" { + version = "3.113.0" + constraints = "3.113.0" hashes = [ - "h1:R97FTYETo88sT2VHfMgkPU3lzCsZLunPftjSI5vfKe8=", - "zh:53604cd29cb92538668fe09565c739358dc53ca56f9f11312b9d7de81e48fab9", - "zh:66a46e9c508716a1c98efbf793092f03d50049fa4a83cd6b2251e9a06aca2acf", - "zh:70a6f6a852dd83768d0778ce9817d81d4b3f073fab8fa570bff92dcb0824f732", - "zh:78d5eefdd9e494defcb3c68d282b8f96630502cac21d1ea161f53cfe9bb483b3", - "zh:82a803f2f484c8b766e2e9c32343e9c89b91997b9f8d2697f9f3837f62926b35", - "zh:9708a4e40d6cc4b8afd1352e5186e6e1502f6ae599867c120967aebe9d90ed04", - "zh:973f65ce0d67c585f4ec250c1e634c9b22d9c4288b484ee2a871d7fa1e317406", - "zh:c8fa0f98f9316e4cfef082aa9b785ba16e36ff754d6aba8b456dab9500e671c6", - "zh:cfa5342a5f5188b20db246c73ac823918c189468e1382cb3c48a9c0c08fc5bf7", - "zh:e0e2b477c7e899c63b06b38cd8684a893d834d6d0b5e9b033cedc06dd7ffe9e2", - "zh:f62d7d05ea1ee566f732505200ab38d94315a4add27947a60afa29860822d3fc", - "zh:fa7ce69dde358e172bd719014ad637634bbdabc49363104f4fca759b4b73f2ce", + "h1:eEUtt0lrLdpVaF6FiDq8BGQPgEcykmhj0aNIL7hTOGw=", + "zh:12479f5664288943400447b55e50df675c28ae82ad8d373cc2e5682f3a3411f0", + "zh:1b42a14e80e568429d3b55fed753ca3ef0df9dcdfa107890d7264599c020940f", + "zh:381be6ca617f848de3baa3985a6e1788e91a803afe04a3c5c727453528b6310d", + "zh:3e70e2e07b6db1c363de3e5d0ca47f27fc956473df03329c7d2e54d3ac29176b", + "zh:87c7633aeaa828098c6055da9e67d4acaf4b46748b6b3f0267e105e55f05de25", + "zh:8d0d98226901f874770dd5220d4701a12ae8bd586994615aa7dcba12b9736bec", + "zh:9fd913acd42a60c3a90a18ce803567ef861db8779a59aacced91f2cbd86de9d9", + "zh:b6f3f7ae0a055437fb36c139af9bb3135e7f4dad172157ae1eb0177dc74d703f", + "zh:b927027ba2bf40d34e03d742fd2b6c5299023b5ab8e6f05e50aac76a46ad1094", + "zh:ceb5187b9d2a439f4e48944f3ffeeeaf47a03dbe6f3325ea1775bf659ce0aa88", + "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", + "zh:fb9d78dfeca7489bffca9b1a1f3abee7f16dbbcba31388aea1102062c1d6dce8", ] } diff --git a/templates/shared_services/airlock_notifier/terraform/airlock_notifier.tf b/templates/shared_services/airlock_notifier/terraform/airlock_notifier.tf index 5e495a920d..b17a9a06b2 100644 --- a/templates/shared_services/airlock_notifier/terraform/airlock_notifier.tf +++ b/templates/shared_services/airlock_notifier/terraform/airlock_notifier.tf @@ -2,9 +2,10 @@ resource "azurerm_service_plan" "notifier_plan" { name = "airlock-notifier-plan-${var.tre_id}" resource_group_name = data.azurerm_resource_group.core.name location = data.azurerm_resource_group.core.location - sku_name = "WS1" os_type = "Windows" - tags = local.tre_shared_service_tags + sku_name = "WS1" + + tags = local.tre_shared_service_tags lifecycle { ignore_changes = [tags] } } @@ -28,6 +29,12 @@ resource "azurerm_eventgrid_event_subscription" "airlock_notification" { } } +resource "azurerm_role_assignment" "servicebus_logic_app" { + scope = data.azurerm_servicebus_namespace.core.id + role_definition_name = "Azure Service Bus Data Owner" + principal_id = azurerm_logic_app_standard.logic_app.identity[0].principal_id +} + resource "azurerm_logic_app_standard" "logic_app" { name = "airlock-notifier-app-${var.tre_id}" location = data.azurerm_resource_group.core.location @@ -36,11 +43,16 @@ resource "azurerm_logic_app_standard" "logic_app" { storage_account_name = data.azurerm_storage_account.storage.name storage_account_access_key = data.azurerm_storage_account.storage.primary_access_key virtual_network_subnet_id = data.azurerm_subnet.airlock_notification.id + version = "~4" + bundle_version = "[1.*, 2.0.0)" app_settings = { "FUNCTIONS_WORKER_RUNTIME" = "node" - "WEBSITE_NODE_DEFAULT_VERSION" = "~12" + "WEBSITE_NODE_DEFAULT_VERSION" = "~20" "serviceBus_connectionString" = data.azurerm_servicebus_namespace.core.default_primary_connection_string + "serviceBus_fullyQualifiedNamespace" = data.azurerm_servicebus_namespace.core.endpoint + "serviceBus_queueName" = azurerm_servicebus_queue.notifications_queue.name "subscription" = data.azurerm_subscription.current.subscription_id + "location" = data.azurerm_resource_group.core.location "resource_group" = data.azurerm_resource_group.core.name "smtp_server_address" = var.smtp_server_address "smtp_server_port" = var.smtp_server_port @@ -52,9 +64,10 @@ resource "azurerm_logic_app_standard" "logic_app" { "APPLICATIONINSIGHTS_CONNECTION_STRING" = data.azurerm_application_insights.core.connection_string } site_config { - ftps_state = "Disabled" - vnet_route_all_enabled = true - elastic_instance_minimum = 1 + ftps_state = "Disabled" + vnet_route_all_enabled = true + elastic_instance_minimum = 1 + runtime_scale_monitoring_enabled = true } identity { type = "SystemAssigned" diff --git a/templates/shared_services/airlock_notifier/terraform/data.tf b/templates/shared_services/airlock_notifier/terraform/data.tf index 88d69fbf85..c70fd542fa 100644 --- a/templates/shared_services/airlock_notifier/terraform/data.tf +++ b/templates/shared_services/airlock_notifier/terraform/data.tf @@ -8,7 +8,6 @@ data "azurerm_servicebus_namespace" "core" { resource_group_name = local.core_resource_group_name } - data "azurerm_storage_account" "storage" { name = local.storage_account_name resource_group_name = local.core_resource_group_name @@ -46,3 +45,15 @@ data "azurerm_ip_group" "resource_processor" { name = "ipg-resource-processor" resource_group_name = local.core_resource_group_name } + +# tflint-ignore: terraform_unused_declarations +data "azurerm_managed_api" "servicebus" { + name = "servicebus" + location = data.azurerm_resource_group.core.location +} + +# tflint-ignore: terraform_unused_declarations +data "azurerm_managed_api" "smtp" { + name = "smtp" + location = data.azurerm_resource_group.core.location +} diff --git a/templates/shared_services/airlock_notifier/terraform/providers.tf b/templates/shared_services/airlock_notifier/terraform/providers.tf index 4de8a68839..7cb01d360f 100644 --- a/templates/shared_services/airlock_notifier/terraform/providers.tf +++ b/templates/shared_services/airlock_notifier/terraform/providers.tf @@ -3,14 +3,9 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "=3.57.0" - } - local = { - source = "hashicorp/local" - version = "=2.4.0" + version = "=3.113.0" } } - backend "azurerm" {} } diff --git a/templates/shared_services/airlock_notifier/terraform/rules.tf b/templates/shared_services/airlock_notifier/terraform/rules.tf index 32723c675a..371ce07bb6 100644 --- a/templates/shared_services/airlock_notifier/terraform/rules.tf +++ b/templates/shared_services/airlock_notifier/terraform/rules.tf @@ -14,7 +14,10 @@ resource "azurerm_firewall_policy_rule_collection_group" "core_airlock_notifier" "TCP" ] destination_addresses = [ - "AppService" + "AppService", + "AzureConnectors", + "LogicApps", + "LogicAppsManagement" ] destination_ports = [ "443" diff --git a/templates/shared_services/airlock_notifier/terraform/upgrade.sh b/templates/shared_services/airlock_notifier/terraform/upgrade.sh new file mode 100755 index 0000000000..72785516f5 --- /dev/null +++ b/templates/shared_services/airlock_notifier/terraform/upgrade.sh @@ -0,0 +1,13 @@ +#!/bin/bash +set -e + +# This script is used to install the bundle directly without having to interact with Porter + +# This script assumes you have created an .env from the sample and the variables +# will come from there. +# shellcheck disable=SC2154 +terraform init -upgrade -reconfigure -input=false -backend=true \ + -backend-config="resource_group_name=${TF_VAR_mgmt_resource_group_name}" \ + -backend-config="storage_account_name=${TF_VAR_mgmt_storage_account_name}" \ + -backend-config="container_name=${TF_VAR_terraform_state_container_name}" \ + -backend-config="key=${TF_VAR_tre_resource_id}-shared-airlock-notifier" From 59bd365d08ec67bb6fb371f0989e0a939a24799d Mon Sep 17 00:00:00 2001 From: Tim Allen Date: Mon, 19 Aug 2024 10:06:39 +0100 Subject: [PATCH 67/79] Update .NET version on Linux VM (#4069) * update .net version * update --- CHANGELOG.md | 1 + .../guacamole-azure-linuxvm/porter.yaml | 2 +- .../guacamole-azure-linuxvm/terraform/vm_config.sh | 14 +++++++++++++- 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2a9b150380..a7bfdd28ba 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,7 @@ BUG FIXES: * Update API and Resource Processor opentelemetry versions ([#4052](https://github.com/microsoft/AzureTRE/issues/4052)) * Fix broken links in new Case Study Docs * Update Linux VM to stop screensaver locking out the user ([#4065](https://github.com/microsoft/AzureTRE/issues/4065)) +* Update .NET version on Linux VMs ([#4067](https://github.com/microsoft/AzureTRE/issues/4067)) COMPONENTS: 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 992cb02481..2aa89135b4 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.0.1 +version: 1.0.2 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/terraform/vm_config.sh b/templates/workspace_services/guacamole/user_resources/guacamole-azure-linuxvm/terraform/vm_config.sh index 944f7f25ac..7adec00c34 100644 --- a/templates/workspace_services/guacamole/user_resources/guacamole-azure-linuxvm/terraform/vm_config.sh +++ b/templates/workspace_services/guacamole/user_resources/guacamole-azure-linuxvm/terraform/vm_config.sh @@ -58,7 +58,19 @@ sudo apt install azure-cli -y # code --extensions-dir="/opt/vscode/extensions" --user-data-dir="/opt/vscode/user-data" --install-extension RDebugger.r-debugger # Azure Storage Explorer -sudo apt install gnome-keyring dotnet-sdk-7.0 -y +sudo apt-get remove -y dotnet-host-7.0 +sudo apt-get remove -y dotnet-sdk-7.0 +sudo apt-get install -y dotnet-sdk-8.0 +sudo apt install gnome-keyring -y + +sudo chmod 666 /etc/profile + +echo "export DOTNET_ROOT=/usr/share/dotnet +export PATH=$PATH:/usr/share/dotnet +" | sudo tee -a /etc/profile + +sudo chmod 644 /etc/profile + wget -q "${NEXUS_PROXY_URL}"/repository/microsoft-download/A/E/3/AE32C485-B62B-4437-92F7-8B6B2C48CB40/StorageExplorer-linux-x64.tar.gz -P /tmp sudo mkdir /opt/storage-explorer sudo tar xvf /tmp/StorageExplorer-linux-x64.tar.gz -C /opt/storage-explorer From c3e4c8db9b8e548c2d498e34a6aa4a5796852401 Mon Sep 17 00:00:00 2001 From: Tim Allen Date: Tue, 27 Aug 2024 14:24:23 +0100 Subject: [PATCH 68/79] Prep for release v0.19.0 (#4073) * update Changelog * add in components * update * update versions --- CHANGELOG.md | 43 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a7bfdd28ba..a5bbe62148 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,8 +1,18 @@ -## 0.19.0 (Unreleased) +## 0.20.0 (Unreleased) **BREAKING CHANGES & MIGRATIONS**: +FEATURES: + +ENHANCEMENTS: + +BUG FIXES: + +COMPONENTS: + +## 0.19.0 + FEATURES: * Azure SQL Workspace Service ([#3969](https://github.com/microsoft/AzureTRE/issues/3969)) @@ -25,6 +35,37 @@ BUG FIXES: * Update .NET version on Linux VMs ([#4067](https://github.com/microsoft/AzureTRE/issues/4067)) COMPONENTS: +| name | version | +| ----- | ----- | +| devops | 0.5.1 | +| core | 0.10.6 | +| ui | 0.5.28 | +| tre-service-guacamole-linuxvm | 1.0.2 | +| tre-service-guacamole-import-reviewvm | 0.2.8 | +| tre-service-guacamole-export-reviewvm | 0.1.8 | +| tre-service-guacamole-windowsvm | 1.0.0 | +| tre-service-guacamole | 0.10.8 | +| tre-service-databricks | 1.0.3 | +| tre-service-mlflow | 0.7.8 | +| tre-service-innereye | 0.6.4 | +| tre-workspace-service-ohdsi | 0.2.4 | +| tre-workspace-service-gitea | 1.0.3 | +| tre-workspace-service-mysql | 1.0.2 | +| tre-workspace-service-azuresql | 1.0.9 | +| tre-user-resource-aml-compute-instance | 0.5.7 | +| tre-service-azureml | 0.8.10 | +| tre-workspace-service-health | 0.2.5 | +| tre-workspace-airlock-import-review | 0.12.16 | +| tre-workspace-unrestricted | 0.11.4 | +| tre-workspace-base | 1.5.4 | +| tre-shared-service-cyclecloud | 0.5.5 | +| tre-shared-service-databricks-private-auth | 0.1.5 | +| tre-shared-service-sonatype-nexus | 3.0.0 | +| tre-shared-service-admin-vm | 0.4.3 | +| tre-shared-service-firewall | 1.2.0 | +| tre-shared-service-gitea | 1.0.2 | +| tre-shared-service-certs | 0.5.1 | +| tre-shared-service-airlock-notifier | 1.0.1 | ## 0.18.0 From 4040e7249b1e984a50d6aca0a700b62dc2d41582 Mon Sep 17 00:00:00 2001 From: Harrison Young <36235438+harryy94@users.noreply.github.com> Date: Mon, 16 Sep 2024 09:23:59 +0100 Subject: [PATCH 69/79] Open AI Workspace Service (#4075) * Port over draft PR for OpenAI * Fixes to get OpenAI to install * Temporary hack fix for the privatelink URLS for openai * Use forked repo instead of the hack * Re-add private DNS to list * Change github URL temporarily in openai terraform as well * Parameterise OpenAI model name and version (locals for now but should be vars) * Fix private DNS links and add public access variable * Fix template schema * Open AI Model and version configurable * Terraform format * Revert back to microsoft environment configuration with new version * Remove commented code * Make parameters updateable and output the deployment id * Update porter file * Bump core version * More version bumps and documentation * Some fixes based on linting results * Remove tag lifecycle from the OpenAI deployment as it is not supported * Add tags to OpenAI instance --- .github/workflows/deploy_tre_reusable.yml | 2 + CHANGELOG.md | 1 + core/terraform/dns_zones_non_core.tf | 20 +++ core/terraform/locals.tf | 4 +- core/terraform/main.tf | 2 +- core/version.txt | 2 +- .../workspace-services/openai.md | 22 ++++ e2e_tests/resources/strings.py | 1 + e2e_tests/test_workspace_services.py | 3 +- mkdocs.yml | 1 + .../workspace_services/openai/.env.sample | 4 + .../workspace_services/openai/Dockerfile.tmpl | 15 +++ .../workspace_services/openai/parameters.json | 62 +++++++++ .../workspace_services/openai/porter.yaml | 122 ++++++++++++++++++ .../openai/template_schema.json | 56 ++++++++ .../openai/terraform/.terraform.lock.hcl | 22 ++++ .../openai/terraform/locals.tf | 17 +++ .../openai/terraform/main.tf | 59 +++++++++ .../openai/terraform/openai.tf | 60 +++++++++ .../openai/terraform/outputs.tf | 7 + .../openai/terraform/variables.tf | 21 +++ templates/workspaces/base/porter.yaml | 2 +- .../workspaces/base/terraform/network/data.tf | 10 ++ .../base/terraform/network/network.tf | 2 +- .../base/terraform/network/zone_links.tf | 20 +++ 25 files changed, 531 insertions(+), 6 deletions(-) create mode 100644 docs/tre-templates/workspace-services/openai.md create mode 100644 templates/workspace_services/openai/.env.sample create mode 100644 templates/workspace_services/openai/Dockerfile.tmpl create mode 100644 templates/workspace_services/openai/parameters.json create mode 100644 templates/workspace_services/openai/porter.yaml create mode 100644 templates/workspace_services/openai/template_schema.json create mode 100644 templates/workspace_services/openai/terraform/.terraform.lock.hcl create mode 100644 templates/workspace_services/openai/terraform/locals.tf create mode 100644 templates/workspace_services/openai/terraform/main.tf create mode 100644 templates/workspace_services/openai/terraform/openai.tf create mode 100644 templates/workspace_services/openai/terraform/outputs.tf create mode 100644 templates/workspace_services/openai/terraform/variables.tf diff --git a/.github/workflows/deploy_tre_reusable.yml b/.github/workflows/deploy_tre_reusable.yml index 8c022360da..1ab13c964a 100644 --- a/.github/workflows/deploy_tre_reusable.yml +++ b/.github/workflows/deploy_tre_reusable.yml @@ -401,6 +401,8 @@ jobs: BUNDLE_DIR: "./templates/workspace_services/ohdsi"} - {BUNDLE_TYPE: "workspace_service", BUNDLE_DIR: "./templates/workspace_services/azuresql"} + - {BUNDLE_TYPE: "workspace_service", + BUNDLE_DIR: "./templates/workspace_services/openai"} - {BUNDLE_TYPE: "user_resource", BUNDLE_DIR: "./templates/workspace_services/guacamole/user_resources/guacamole-azure-windowsvm"} - {BUNDLE_TYPE: "user_resource", diff --git a/CHANGELOG.md b/CHANGELOG.md index a5bbe62148..71469af663 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ COMPONENTS: FEATURES: * Azure SQL Workspace Service ([#3969](https://github.com/microsoft/AzureTRE/issues/3969)) +* OpenAI Workspace Service ([#3810](https://github.com/microsoft/AzureTRE/issues/3810)) ENHANCEMENTS: * Add Case Study Docs ([#1366](https://github.com/microsoft/AzureTRE/issues/1366)) diff --git a/core/terraform/dns_zones_non_core.tf b/core/terraform/dns_zones_non_core.tf index d2b044b349..0f6ee7338e 100644 --- a/core/terraform/dns_zones_non_core.tf +++ b/core/terraform/dns_zones_non_core.tf @@ -32,6 +32,26 @@ resource "azurerm_private_dns_zone_virtual_network_link" "azuresql" { lifecycle { ignore_changes = [tags] } } +resource "azurerm_private_dns_zone_virtual_network_link" "openai" { + resource_group_name = azurerm_resource_group.core.name + virtual_network_id = module.network.core_vnet_id + private_dns_zone_name = azurerm_private_dns_zone.non_core["privatelink.openai.azure.com"].name + name = azurerm_private_dns_zone.non_core["privatelink.openai.azure.com"].name + registration_enabled = false + tags = local.tre_core_tags + lifecycle { ignore_changes = [tags] } +} + +resource "azurerm_private_dns_zone_virtual_network_link" "cognitivesearch" { + resource_group_name = azurerm_resource_group.core.name + virtual_network_id = module.network.core_vnet_id + private_dns_zone_name = azurerm_private_dns_zone.non_core["privatelink.cognitiveservices.azure.com"].name + name = azurerm_private_dns_zone.non_core["privatelink.cognitiveservices.azure.com"].name + registration_enabled = false + tags = local.tre_core_tags + lifecycle { ignore_changes = [tags] } +} + # Once the deployment of the app gateway is complete, we can proceed to include the required DNS zone for Nexus, which is dependent on the FQDN of the app gateway. resource "azurerm_private_dns_zone" "nexus" { name = "nexus-${module.appgateway.app_gateway_fqdn}" diff --git a/core/terraform/locals.tf b/core/terraform/locals.tf index 8937bf980d..c3539c9fb3 100644 --- a/core/terraform/locals.tf +++ b/core/terraform/locals.tf @@ -33,7 +33,9 @@ locals { "privatelink.postgres.database.azure.com", "privatelink.mysql.database.azure.com", "privatelink.database.windows.net", - "privatelink.azuredatabricks.net" + "privatelink.azuredatabricks.net", + "privatelink.openai.azure.com", + "privatelink.cognitiveservices.azure.com" ]) # The followig regex extracts different parts of the service bus endpoint: scheme, fqdn, port, path, query and fragment. This allows us to extract the needed fqdn part. diff --git a/core/terraform/main.tf b/core/terraform/main.tf index 4e8fa6932f..d35cabd876 100644 --- a/core/terraform/main.tf +++ b/core/terraform/main.tf @@ -179,6 +179,6 @@ module "resource_processor_vmss_porter" { } module "terraform_azurerm_environment_configuration" { - source = "git::https://github.com/microsoft/terraform-azurerm-environment-configuration.git?ref=0.5.0" + source = "git::https://github.com/microsoft/terraform-azurerm-environment-configuration.git?ref=0.6.0" arm_environment = var.arm_environment } diff --git a/core/version.txt b/core/version.txt index daecfa5151..5b0f7f2fcf 100644 --- a/core/version.txt +++ b/core/version.txt @@ -1 +1 @@ -__version__ = "0.10.6" +__version__ = "0.10.7" diff --git a/docs/tre-templates/workspace-services/openai.md b/docs/tre-templates/workspace-services/openai.md new file mode 100644 index 0000000000..5ad0b57395 --- /dev/null +++ b/docs/tre-templates/workspace-services/openai.md @@ -0,0 +1,22 @@ +# OpenAI Workspace Service + +See: [Azure OpenAI Service](https://learn.microsoft.com/en-us/azure/ai-services/openai/overview) + +## Prerequisites + +- [A base workspace deployed](../workspaces/base.md) + +- The OpenAI workspace service container image needs building and pushing: + + `make workspace_service_bundle BUNDLE=openai` + +## Authenticating + +1. The open AI domain and deployment id can be found from the details tab. +2. When communicating with the API, an "api_key" is required. This can be found in the Key Vault. + +## Properties +- `is_exposed_externally` - If `True`, the OpenAI workspace is accessible from outside of the workspace virtual network. +- `openai_model` - The model to use for the OpenAI deployment ` | `. The default is `gpt-35-turbo | 0301`. +- Important note: Models are subject to different quota and region availability and the deployment may fail if you don't have the correct quota. +Please review this link on current limits and how to request increases: [Open AI Quotas](https://learn.microsoft.com/en-us/azure/ai-services/openai/quotas-limits) diff --git a/e2e_tests/resources/strings.py b/e2e_tests/resources/strings.py index 2821407a68..8e690aa6a5 100644 --- a/e2e_tests/resources/strings.py +++ b/e2e_tests/resources/strings.py @@ -20,6 +20,7 @@ MYSQL_SERVICE = "tre-workspace-service-mysql" HEALTH_SERVICE = "tre-workspace-service-health" AZURESQL_SERVICE = "tre-workspace-service-azuresql" +OPENAI_SERVICE = "tre-workspace-service-openai" FIREWALL_SHARED_SERVICE = "tre-shared-service-firewall" GITEA_SHARED_SERVICE = "tre-shared-service-gitea" diff --git a/e2e_tests/test_workspace_services.py b/e2e_tests/test_workspace_services.py index c6d8f1429b..cd48910817 100644 --- a/e2e_tests/test_workspace_services.py +++ b/e2e_tests/test_workspace_services.py @@ -13,7 +13,8 @@ strings.MLFLOW_SERVICE, strings.MYSQL_SERVICE, strings.HEALTH_SERVICE, - strings.AZURESQL_SERVICE + strings.AZURESQL_SERVICE, + strings.OPENAI_SERVICE ] diff --git a/mkdocs.yml b/mkdocs.yml index b1b2679ce3..edd9c4da74 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -104,6 +104,7 @@ nav: - OHDSI: tre-templates/workspace-services/ohdsi.md - MySQL: tre-templates/workspace-services/mysql.md - Azure SQL: tre-templates/workspace-services/azuresql.md + - Open AI: tre-templates/workspace-services/openai.md - Shared Services: - Gitea (Source Mirror): tre-templates/shared-services/gitea.md - Nexus (Package Mirror): tre-templates/shared-services/nexus.md diff --git a/templates/workspace_services/openai/.env.sample b/templates/workspace_services/openai/.env.sample new file mode 100644 index 0000000000..4123a21e4d --- /dev/null +++ b/templates/workspace_services/openai/.env.sample @@ -0,0 +1,4 @@ +ID="__CHANGE_ME__" +WORKSPACE_ID="__CHANGE_ME__" +IS_EXPOSED_EXTERNALLY="__CHANGE_ME__" +OPENAI_MODEL="__CHANGE_ME__" diff --git a/templates/workspace_services/openai/Dockerfile.tmpl b/templates/workspace_services/openai/Dockerfile.tmpl new file mode 100644 index 0000000000..c584174140 --- /dev/null +++ b/templates/workspace_services/openai/Dockerfile.tmpl @@ -0,0 +1,15 @@ +# syntax=docker/dockerfile-upstream:1.4.0 +FROM --platform=linux/amd64 debian:bullseye-slim + +# PORTER_INIT + +RUN rm -f /etc/apt/apt.conf.d/docker-clean; echo 'Binary::apt::APT::Keep-Downloaded-Packages "true";' > /etc/apt/apt.conf.d/keep-cache + +# Git is required for terraform_azurerm_environment_configuration +RUN --mount=type=cache,target=/var/cache/apt --mount=type=cache,target=/var/lib/apt \ + apt-get update && apt-get install -y git --no-install-recommends + +# PORTER_MIXINS + +# Use the BUNDLE_DIR build argument to copy files into the bundle +COPY --link . ${BUNDLE_DIR}/ diff --git a/templates/workspace_services/openai/parameters.json b/templates/workspace_services/openai/parameters.json new file mode 100644 index 0000000000..9ba32fb8e1 --- /dev/null +++ b/templates/workspace_services/openai/parameters.json @@ -0,0 +1,62 @@ +{ + "schemaType": "ParameterSet", + "schemaVersion": "1.0.0", + "namespace": "", + "name": "tre-workspace-service-openai", + "parameters": [ + { + "name": "tre_id", + "source": { + "env": "TRE_ID" + } + }, + { + "name": "id", + "source": { + "env": "ID" + } + }, + { + "name": "tfstate_container_name", + "source": { + "env": "TERRAFORM_STATE_CONTAINER_NAME" + } + }, + { + "name": "tfstate_resource_group_name", + "source": { + "env": "MGMT_RESOURCE_GROUP_NAME" + } + }, + { + "name": "tfstate_storage_account_name", + "source": { + "env": "MGMT_STORAGE_ACCOUNT_NAME" + } + }, + { + "name": "workspace_id", + "source": { + "env": "WORKSPACE_ID" + } + }, + { + "name": "arm_environment", + "source": { + "env": "ARM_ENVIRONMENT" + } + }, + { + "name": "is_exposed_externally", + "source": { + "env": "IS_EXPOSED_EXTERNALLY" + } + }, + { + "name": "openai_model", + "source": { + "env": "OPENAI_MODEL" + } + } + ] +} diff --git a/templates/workspace_services/openai/porter.yaml b/templates/workspace_services/openai/porter.yaml new file mode 100644 index 0000000000..a65c75f8df --- /dev/null +++ b/templates/workspace_services/openai/porter.yaml @@ -0,0 +1,122 @@ +--- +schemaVersion: 1.0.0 +name: tre-workspace-service-openai +version: 1.0.0 +description: "An OpenAI workspace service" +registry: azuretre +dockerfile: Dockerfile.tmpl + +credentials: + - name: azure_tenant_id + env: ARM_TENANT_ID + - name: azure_subscription_id + env: ARM_SUBSCRIPTION_ID + - name: azure_client_id + env: ARM_CLIENT_ID + - name: azure_client_secret + env: ARM_CLIENT_SECRET +parameters: + - name: workspace_id + type: string + - name: tre_id + type: string + + # the following are added automatically by the resource processor + - name: id + type: string + description: "Resource ID" + env: id + - name: tfstate_resource_group_name + type: string + description: "Resource group containing the Terraform state storage account" + - name: tfstate_storage_account_name + type: string + description: "The name of the Terraform state storage account" + - name: tfstate_container_name + env: tfstate_container_name + type: string + default: "tfstate" + description: "The name of the Terraform state storage container" + - name: arm_use_msi + env: ARM_USE_MSI + type: boolean + default: false + - name: arm_environment + env: ARM_ENVIRONMENT + type: string + default: "public" + - name: is_exposed_externally + env: IS_EXPOSED_EXTERNALLY + type: boolean + - name: openai_model + env: OPENAI_MODEL + type: string + +mixins: + - exec + - terraform: + clientVersion: 1.3.6 + +outputs: + - name: openai_fqdn + type: string + applyTo: + - install + - upgrade + - name: openai_deployment_id + type: string + applyTo: + - install + - upgrade + +install: + - terraform: + description: "Deploy OpenAI workspace service" + vars: + workspace_id: ${ bundle.parameters.workspace_id } + tre_id: ${ bundle.parameters.tre_id } + tre_resource_id: ${ bundle.parameters.id } + arm_environment: ${ bundle.parameters.arm_environment } + is_exposed_externally: ${ bundle.parameters.is_exposed_externally } + openai_model: ${ bundle.parameters.openai_model } + backendConfig: + resource_group_name: ${ bundle.parameters.tfstate_resource_group_name } + storage_account_name: ${ bundle.parameters.tfstate_storage_account_name } + container_name: ${ bundle.parameters.tfstate_container_name } + key: tre-workspace-service-openai-${ bundle.parameters.id } + outputs: + - name: openai_fqdn + - name: openai_deployment_id +upgrade: + - terraform: + description: "Upgrade OpenAI workspace service" + vars: + workspace_id: ${ bundle.parameters.workspace_id } + tre_id: ${ bundle.parameters.tre_id } + tre_resource_id: ${ bundle.parameters.id } + arm_environment: ${ bundle.parameters.arm_environment } + is_exposed_externally: ${ bundle.parameters.is_exposed_externally } + openai_model: ${ bundle.parameters.openai_model } + backendConfig: + resource_group_name: ${ bundle.parameters.tfstate_resource_group_name } + storage_account_name: ${ bundle.parameters.tfstate_storage_account_name } + container_name: ${ bundle.parameters.tfstate_container_name } + key: tre-workspace-service-openai-${ bundle.parameters.id } + outputs: + - name: openai_fqdn + - name: openai_deployment_id +uninstall: + - terraform: + description: "Tear down OpenAI workspace service" + vars: + workspace_id: ${ bundle.parameters.workspace_id } + tre_id: ${ bundle.parameters.tre_id } + tre_resource_id: ${ bundle.parameters.id } + arm_environment: ${ bundle.parameters.arm_environment } + is_exposed_externally: ${ bundle.parameters.is_exposed_externally } + openai_model: ${ bundle.parameters.openai_model } + backendConfig: + resource_group_name: ${ bundle.parameters.tfstate_resource_group_name } + storage_account_name: ${ bundle.parameters.tfstate_storage_account_name } + container_name: ${ bundle.parameters.tfstate_container_name } + key: tre-workspace-service-openai-${ bundle.parameters.id } diff --git a/templates/workspace_services/openai/template_schema.json b/templates/workspace_services/openai/template_schema.json new file mode 100644 index 0000000000..da2cf39f92 --- /dev/null +++ b/templates/workspace_services/openai/template_schema.json @@ -0,0 +1,56 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema", + "$id": "https://github.com/microsoft/AzureTRE/templates/workspace_services/sql/template_schema.json", + "type": "object", + "title": "OpenAI Workspace Service", + "description": "Provides OpenAI within the workspace", + "required": [], + "properties": { + "display_name": { + "type": "string", + "title": "Name for the workspace service", + "description": "The name of the workspace service to be displayed to users", + "default": "Azure OpenAI Service", + "updateable": true + }, + "description": { + "type": "string", + "title": "Description of the workspace service", + "description": "Description of the workspace service", + "default": "Build your own copilot and generative AI applications", + "updateable": true + }, + "overview": { + "type": "string", + "title": "Workspace Service Overview", + "description": "Long form description of the workspace service, in markdown syntax", + "default": "Azure OpenAI Service provides REST API access to OpenAI's powerful language models including the GPT-4, GPT-4 Turbo with Vision, GPT-3.5-Turbo, and Embeddings model series. For more information, see the [Azure OpenAI Service documentation](https://learn.microsoft.com/en-us/azure/ai-services/openai/overview).", + "updateable": true + }, + "is_exposed_externally": { + "$id": "#/properties/is_exposed_externally", + "type": "boolean", + "title": "Expose externally", + "description": "Should the OpenAI instance be publicly accessible?", + "default": false, + "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)", + "enum": [ + "gpt-35-turbo | 0301", + "gpt-35-turbo | 1106", + "gpt-35-turbo | 0163", + "gpt-35-turbo | 0125", + "gpt-4 | 0613", + "gpt-4 | turbo-2024-04-09", + "gpt-4o | 2024-05-13" + ], + "default": "gpt-35-turbo | 0301", + "updateable": true + } + } +} diff --git a/templates/workspace_services/openai/terraform/.terraform.lock.hcl b/templates/workspace_services/openai/terraform/.terraform.lock.hcl new file mode 100644 index 0000000000..600efbeb36 --- /dev/null +++ b/templates/workspace_services/openai/terraform/.terraform.lock.hcl @@ -0,0 +1,22 @@ +# This file is maintained automatically by "terraform init". +# Manual edits may be lost in future updates. + +provider "registry.terraform.io/hashicorp/azurerm" { + version = "3.84.0" + constraints = "3.84.0" + hashes = [ + "h1:aoqNC2sfLKyblgQh0SfQW0BHl3UP1mMAUJLYLGG3PxE=", + "zh:14a96daf672541dbc27137d9cc0a96a737710597262ecaaa64a328eb1174e5df", + "zh:16d8e794fdd87ed8e64291fe8a617f420d8263f21672033333a020d06f4c9618", + "zh:64e5cd1bb6a81bccffff0d1f77790286ab46179cf12442134c3f3bca722afc1b", + "zh:7010ada67fbae971ac8b7204a30b1317aee7ccac7227afc6ac27277c642996a1", + "zh:77c2616ecd29685d2a4dc3ec3e9771e5ecf652e127946767d9b7ef19bbf58a21", + "zh:861922cfae724eacf1bd915efd5dbf6c23e4e762a2bbe60993099648e64aedb5", + "zh:8fb797c98bb08e7342995317810d28c41bb519fbc128adaa170896356b9eaebd", + "zh:982e85a4a9d282e3c8f7d7836037ccc98ff3ef50af246fad2e04684a81d16201", + "zh:a2ef29ff907cf6622e58afa0a27e23a3160ba3d70d531795b4d9a6c42c354630", + "zh:c46ccc4eecb79d096bcb652af0cffe300ec480d80a13a5b302c71b1aac9f9f1c", + "zh:cc6a06bf6d5e811fe8c0d9ad652e143b4e94bd16a03fb8a86f5086f0ae5abfa9", + "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", + ] +} diff --git a/templates/workspace_services/openai/terraform/locals.tf b/templates/workspace_services/openai/terraform/locals.tf new file mode 100644 index 0000000000..f168ee887e --- /dev/null +++ b/templates/workspace_services/openai/terraform/locals.tf @@ -0,0 +1,17 @@ +locals { + short_service_id = substr(var.tre_resource_id, -4, -1) + short_workspace_id = substr(var.workspace_id, -4, -1) + workspace_resource_name_suffix = "${var.tre_id}-ws-${local.short_workspace_id}" + service_resource_name_suffix = "${var.tre_id}-ws-${local.short_workspace_id}-svc-${local.short_service_id}" + keyvault_name = lower("kv-${substr(local.workspace_resource_name_suffix, -20, -1)}") + core_resource_group_name = "rg-${var.tre_id}" + workspace_service_tags = { + tre_id = var.tre_id + tre_workspace_id = var.workspace_id + tre_workspace_service_id = var.tre_resource_id + } + openai_model = { + name = trimspace(split("|", var.openai_model)[0]) + version = trimspace(split("|", var.openai_model)[1]) + } +} diff --git a/templates/workspace_services/openai/terraform/main.tf b/templates/workspace_services/openai/terraform/main.tf new file mode 100644 index 0000000000..d35ee5f90e --- /dev/null +++ b/templates/workspace_services/openai/terraform/main.tf @@ -0,0 +1,59 @@ +# Azure Provider source and version being used +terraform { + required_providers { + azurerm = { + source = "hashicorp/azurerm" + version = "3.84.0" + } + } + + backend "azurerm" {} +} + +provider "azurerm" { + features { + key_vault { + # Don't purge on destroy (this would fail due to purge protection being enabled on keyvault) + purge_soft_delete_on_destroy = false + purge_soft_deleted_secrets_on_destroy = false + purge_soft_deleted_certificates_on_destroy = false + purge_soft_deleted_keys_on_destroy = false + # When recreating an environment, recover any previously soft deleted secrets - set to true by default + recover_soft_deleted_key_vaults = true + recover_soft_deleted_secrets = true + recover_soft_deleted_certificates = true + recover_soft_deleted_keys = true + } + } +} + +module "terraform_azurerm_environment_configuration" { + source = "git::https://github.com/microsoft/terraform-azurerm-environment-configuration.git?ref=0.6.0" + arm_environment = var.arm_environment +} + + +data "azurerm_resource_group" "ws" { + name = "rg-${var.tre_id}-ws-${local.short_workspace_id}" +} + +data "azurerm_virtual_network" "ws" { + name = "vnet-${var.tre_id}-ws-${local.short_workspace_id}" + resource_group_name = "rg-${var.tre_id}-ws-${local.short_workspace_id}" +} + +data "azurerm_key_vault" "ws" { + name = local.keyvault_name + resource_group_name = data.azurerm_resource_group.ws.name +} + +data "azurerm_subnet" "services" { + name = "ServicesSubnet" + virtual_network_name = data.azurerm_virtual_network.ws.name + resource_group_name = data.azurerm_resource_group.ws.name +} + +data "azurerm_private_dns_zone" "openai" { + name = module.terraform_azurerm_environment_configuration.private_links["privatelink.openai.azure.com"] + resource_group_name = local.core_resource_group_name +} diff --git a/templates/workspace_services/openai/terraform/openai.tf b/templates/workspace_services/openai/terraform/openai.tf new file mode 100644 index 0000000000..44a0061c9c --- /dev/null +++ b/templates/workspace_services/openai/terraform/openai.tf @@ -0,0 +1,60 @@ +# openai cognitive services account + +resource "azurerm_cognitive_account" "openai" { + kind = "OpenAI" + name = "openai-${local.service_resource_name_suffix}" + resource_group_name = data.azurerm_resource_group.ws.name + location = data.azurerm_resource_group.ws.location + sku_name = "S0" + custom_subdomain_name = "openai-${local.service_resource_name_suffix}" + public_network_access_enabled = var.is_exposed_externally + tags = local.workspace_service_tags + + lifecycle { ignore_changes = [tags] } +} + +resource "azurerm_cognitive_deployment" "openai" { + name = "openai-${local.openai_model.name}-${local.openai_model.version}-${local.service_resource_name_suffix}" + cognitive_account_id = azurerm_cognitive_account.openai.id + + model { + format = "OpenAI" + name = local.openai_model.name + version = local.openai_model.version + } + + scale { + type = "Standard" + } +} + +resource "azurerm_private_endpoint" "openai_private_endpoint" { + name = "pe-${azurerm_cognitive_account.openai.name}" + location = data.azurerm_resource_group.ws.location + resource_group_name = data.azurerm_resource_group.ws.name + subnet_id = data.azurerm_subnet.services.id + tags = local.workspace_service_tags + + private_service_connection { + private_connection_resource_id = azurerm_cognitive_account.openai.id + name = "psc-${azurerm_cognitive_account.openai.name}" + subresource_names = ["account"] + is_manual_connection = false + } + + private_dns_zone_group { + name = module.terraform_azurerm_environment_configuration.private_links["privatelink.openai.azure.com"] + private_dns_zone_ids = [data.azurerm_private_dns_zone.openai.id] + } + + lifecycle { ignore_changes = [tags] } +} + +resource "azurerm_key_vault_secret" "db_password" { + name = "${azurerm_cognitive_account.openai.name}-access-key" + value = azurerm_cognitive_account.openai.primary_access_key + key_vault_id = data.azurerm_key_vault.ws.id + tags = local.workspace_service_tags + + lifecycle { ignore_changes = [tags] } +} diff --git a/templates/workspace_services/openai/terraform/outputs.tf b/templates/workspace_services/openai/terraform/outputs.tf new file mode 100644 index 0000000000..1c65c49512 --- /dev/null +++ b/templates/workspace_services/openai/terraform/outputs.tf @@ -0,0 +1,7 @@ +output "openai_fqdn" { + value = azurerm_cognitive_account.openai.endpoint +} + +output "openai_deployment_id" { + value = azurerm_cognitive_deployment.openai.name +} diff --git a/templates/workspace_services/openai/terraform/variables.tf b/templates/workspace_services/openai/terraform/variables.tf new file mode 100644 index 0000000000..73f111ec44 --- /dev/null +++ b/templates/workspace_services/openai/terraform/variables.tf @@ -0,0 +1,21 @@ +variable "workspace_id" { + type = string +} +variable "tre_id" { + type = string +} +variable "tre_resource_id" { + type = string +} + +variable "arm_environment" { + type = string +} + +variable "openai_model" { + type = string +} + +variable "is_exposed_externally" { + type = bool +} diff --git a/templates/workspaces/base/porter.yaml b/templates/workspaces/base/porter.yaml index 81297e717d..430fab4513 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: 1.5.4 +version: 1.5.5 description: "A base Azure TRE workspace" dockerfile: Dockerfile.tmpl registry: azuretre diff --git a/templates/workspaces/base/terraform/network/data.tf b/templates/workspaces/base/terraform/network/data.tf index 48dee597b7..e05015f0e3 100644 --- a/templates/workspaces/base/terraform/network/data.tf +++ b/templates/workspaces/base/terraform/network/data.tf @@ -98,6 +98,16 @@ data "azurerm_private_dns_zone" "azuresql" { resource_group_name = local.core_resource_group_name } +data "azurerm_private_dns_zone" "openai" { + name = module.terraform_azurerm_environment_configuration.private_links["privatelink.openai.azure.com"] + resource_group_name = local.core_resource_group_name +} + +data "azurerm_private_dns_zone" "cognitiveservices" { + name = module.terraform_azurerm_environment_configuration.private_links["privatelink.cognitiveservices.azure.com"] + resource_group_name = local.core_resource_group_name +} + data "azurerm_public_ip" "app_gateway_ip" { name = "pip-agw-${var.tre_id}" resource_group_name = local.core_resource_group_name diff --git a/templates/workspaces/base/terraform/network/network.tf b/templates/workspaces/base/terraform/network/network.tf index c50ebff6f2..bc9e5fadb3 100644 --- a/templates/workspaces/base/terraform/network/network.tf +++ b/templates/workspaces/base/terraform/network/network.tf @@ -105,6 +105,6 @@ resource "azurerm_subnet_route_table_association" "rt_webapps_subnet_association } module "terraform_azurerm_environment_configuration" { - source = "git::https://github.com/microsoft/terraform-azurerm-environment-configuration.git?ref=0.5.0" + source = "git::https://github.com/microsoft/terraform-azurerm-environment-configuration.git?ref=0.6.0" arm_environment = var.arm_environment } diff --git a/templates/workspaces/base/terraform/network/zone_links.tf b/templates/workspaces/base/terraform/network/zone_links.tf index e5a0f60781..1b8bcc91dd 100644 --- a/templates/workspaces/base/terraform/network/zone_links.tf +++ b/templates/workspaces/base/terraform/network/zone_links.tf @@ -158,3 +158,23 @@ resource "azurerm_private_dns_zone_virtual_network_link" "databrickslink" { lifecycle { ignore_changes = [tags] } } + +resource "azurerm_private_dns_zone_virtual_network_link" "openailink" { + name = "openailink-${local.workspace_resource_name_suffix}" + resource_group_name = local.core_resource_group_name + private_dns_zone_name = data.azurerm_private_dns_zone.openai.name + virtual_network_id = azurerm_virtual_network.ws.id + tags = var.tre_workspace_tags + + lifecycle { ignore_changes = [tags] } +} + +resource "azurerm_private_dns_zone_virtual_network_link" "cognitveserviceslink" { + name = "cognitiveserviceslink-${local.workspace_resource_name_suffix}" + resource_group_name = local.core_resource_group_name + private_dns_zone_name = data.azurerm_private_dns_zone.cognitiveservices.name + virtual_network_id = azurerm_virtual_network.ws.id + tags = var.tre_workspace_tags + + lifecycle { ignore_changes = [tags] } +} From 7dd1915ca4a350ebc6c34282078965a127d058b0 Mon Sep 17 00:00:00 2001 From: Jonny Rylands Date: Thu, 19 Sep 2024 14:18:16 +0100 Subject: [PATCH 70/79] Update unrestricted & airlock review workspace base version (#4087) * Update Unrestricted and Airlock Import Review workspaces to be built off the Base workspace 0.19.0 * Remove workaround in airlock import review * Update CHANGELOG.md --- CHANGELOG.md | 1 + templates/workspaces/airlock-import-review/Dockerfile.tmpl | 4 +--- templates/workspaces/airlock-import-review/porter.yaml | 2 +- .../airlock-import-review/terraform/network_output.terraform | 4 ---- templates/workspaces/unrestricted/Dockerfile.tmpl | 2 +- templates/workspaces/unrestricted/porter.yaml | 2 +- 6 files changed, 5 insertions(+), 10 deletions(-) delete mode 100644 templates/workspaces/airlock-import-review/terraform/network_output.terraform diff --git a/CHANGELOG.md b/CHANGELOG.md index 71469af663..7623b90f3c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ FEATURES: ENHANCEMENTS: +* Update Unrestricted and Airlock Import Review workspaces to be built off the Base workspace 0.19.0 ([#4087](https://github.com/microsoft/AzureTRE/pull/4087)) BUG FIXES: diff --git a/templates/workspaces/airlock-import-review/Dockerfile.tmpl b/templates/workspaces/airlock-import-review/Dockerfile.tmpl index b572098d23..057038c25c 100644 --- a/templates/workspaces/airlock-import-review/Dockerfile.tmpl +++ b/templates/workspaces/airlock-import-review/Dockerfile.tmpl @@ -9,7 +9,7 @@ RUN rm -f /etc/apt/apt.conf.d/docker-clean; echo 'Binary::apt::APT::Keep-Downloa RUN --mount=type=cache,target=/var/cache/apt --mount=type=cache,target=/var/lib/apt \ apt-get update && apt-get install -y git jq curl ca-certificates patch --no-install-recommends -ARG AZURE_TRE_VERSION="0.15.2" +ARG AZURE_TRE_VERSION="0.19.0" WORKDIR ${BUNDLE_DIR} @@ -20,8 +20,6 @@ RUN curl -o azuretre.tar.gz -L "https://github.com/microsoft/AzureTRE/archive/re # Copy and change the file extension of .terraform file to .tf COPY ./terraform/import_review_resources.terraform "${BUNDLE_DIR}"/terraform/import_review_resources.tf -# HACK: PR #3769: Remove once base workspace includes this change -COPY ./terraform/network_output.terraform "${BUNDLE_DIR}"/terraform/network/temp_output.tf # PORTER_MIXINS diff --git a/templates/workspaces/airlock-import-review/porter.yaml b/templates/workspaces/airlock-import-review/porter.yaml index 5943388107..9ab7fe1685 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.12.16 +version: 0.13.0 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/terraform/network_output.terraform b/templates/workspaces/airlock-import-review/terraform/network_output.terraform deleted file mode 100644 index 67d264f66b..0000000000 --- a/templates/workspaces/airlock-import-review/terraform/network_output.terraform +++ /dev/null @@ -1,4 +0,0 @@ -# HACK: PR #3769: Remove file when base workspace release updated -output "vnet_id" { - value = azurerm_virtual_network.ws.id -} diff --git a/templates/workspaces/unrestricted/Dockerfile.tmpl b/templates/workspaces/unrestricted/Dockerfile.tmpl index 53d78008f2..ffe968ddb9 100644 --- a/templates/workspaces/unrestricted/Dockerfile.tmpl +++ b/templates/workspaces/unrestricted/Dockerfile.tmpl @@ -9,7 +9,7 @@ RUN rm -f /etc/apt/apt.conf.d/docker-clean; echo 'Binary::apt::APT::Keep-Downloa RUN --mount=type=cache,target=/var/cache/apt --mount=type=cache,target=/var/lib/apt \ apt-get update && apt-get install -y git jq curl ca-certificates patch --no-install-recommends -ARG AZURE_TRE_VERSION="0.14.0" +ARG AZURE_TRE_VERSION="0.19.0" WORKDIR $BUNDLE_DIR diff --git a/templates/workspaces/unrestricted/porter.yaml b/templates/workspaces/unrestricted/porter.yaml index fd3a07583c..bccd58e790 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.11.4 +version: 0.12.0 description: "A base Azure TRE workspace" dockerfile: Dockerfile.tmpl registry: azuretre From 55a10016135e4f57ae870979bd803d1e820af5a2 Mon Sep 17 00:00:00 2001 From: Jonny Rylands Date: Tue, 24 Sep 2024 16:50:36 +0100 Subject: [PATCH 71/79] Workspace creation blocked due to Azure API depreciation - base workspace only (#4096) --- CHANGELOG.md | 1 + templates/workspaces/base/porter.yaml | 2 +- .../base/terraform/.terraform.lock.hcl | 28 +++++++++---------- .../terraform/azure-monitor/azure-monitor.tf | 2 +- .../workspaces/base/terraform/providers.tf | 2 +- 5 files changed, 18 insertions(+), 17 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7623b90f3c..67a1052f2d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ ENHANCEMENTS: * Update Unrestricted and Airlock Import Review workspaces to be built off the Base workspace 0.19.0 ([#4087](https://github.com/microsoft/AzureTRE/pull/4087)) BUG FIXES: +* Workspace creation blocked due to Azure API depreciation ([#4095](https://github.com/microsoft/AzureTRE/issues/4095)) COMPONENTS: diff --git a/templates/workspaces/base/porter.yaml b/templates/workspaces/base/porter.yaml index 430fab4513..d701e8d7f2 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: 1.5.5 +version: 1.5.6 description: "A base Azure TRE workspace" dockerfile: Dockerfile.tmpl registry: azuretre diff --git a/templates/workspaces/base/terraform/.terraform.lock.hcl b/templates/workspaces/base/terraform/.terraform.lock.hcl index 075c233137..1924d14a51 100644 --- a/templates/workspaces/base/terraform/.terraform.lock.hcl +++ b/templates/workspaces/base/terraform/.terraform.lock.hcl @@ -42,22 +42,22 @@ provider "registry.terraform.io/hashicorp/azuread" { } provider "registry.terraform.io/hashicorp/azurerm" { - version = "3.73.0" - constraints = ">= 3.8.0, >= 3.33.0, 3.73.0" + version = "3.108.0" + constraints = ">= 3.8.0, >= 3.33.0, 3.108.0" hashes = [ - "h1:+Z5ZcAQO4e6aWh1N7zX4JqyV/xnDkTRYoCa8pEtNR20=", - "zh:068dfe743c9486d09eeaf97eb7817870b932ecb8132b92b8e0d96eadcf51b349", - "zh:2a16b0d50feb80919880d32cc12d636c37918bbc9133d7b3ff0d610bac1bee86", - "zh:2a77e0deabd3d0f83974125cedca7871add825bf4470688f117a35b6964916cf", - "zh:3ade6f3b9483746f168e7daf5223fd65d5d26313616bca37d9117d5b4fba2b66", - "zh:44554a1fc5f69a1069bbac3fbe1122794943692f81fc2aabda435740f5e10a67", - "zh:69d41ad1073f274548bca763a1ed14813388e5b9b702c15fdc78f2b22b082a09", - "zh:8cf5ce91432fc5ed1b9906bca14ab6f0d3b18e78a9f25e00b1de632ae7669645", - "zh:b70c294e7d55c3404c40ae18e54113e625ee975e80e3f7d558f3fedde89b038e", - "zh:cadab8bc17685a239f45438c555fba156baa709803da55f59cce8c7f1cb70fc1", - "zh:cb74e02e1495df938d464e233a41aa5ffab9f0fd79079016d0a630955ce92b6d", - "zh:cd7a68c03005116fe40542d312d0236ab5bfdd20a2bb6bdf6398d64945c25ef8", + "h1:RIFBFTXz4X48JDHjbQHX4y400ax1/uEzMVFZgX3/z3w=", + "zh:2afecf948fd702bc08c87d9114595809d011f99a70a12dbf6bc67a12d0bee5fc", + "zh:395b6d1384a579867064e62d49b0b91e15919c33b03ea8b5031c2779bfa16b3d", + "zh:3e5594c59b6b02bc6e0f4c3de71aa2ab992494c53725fb3c64d36745f3814ef3", + "zh:4613e190609377309f6a4ac44f631c9469efab3ae148dbb09e73718201dc4f42", + "zh:624f01cb7604d58100068401bd07ab09a141e7bd318f8214127838cf202e4868", + "zh:65709950c9933e38704e2075a2339951e1259a6e882f35d390be36e1844ebc72", + "zh:af82657fad4e3a177f2ebb8035b45bda40f8856eb999288533321028794d03e5", + "zh:c40b331eba08830d16c0e6795fa7cbf08231073df2cfdb0f34e9d908a915981a", + "zh:d6ccd533a0bd984ca7ed1ae860e057e9e2f88468745be9712236d2d240353de4", + "zh:f361fd398e8772f8554a010331d161d6f7284a43238fd28bfa7b41795a5538b8", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", + "zh:f8c2132c77d35930203ec66f1bf9bbf633a2406e9f7b572ff425d65b8aa8c492", ] } diff --git a/templates/workspaces/base/terraform/azure-monitor/azure-monitor.tf b/templates/workspaces/base/terraform/azure-monitor/azure-monitor.tf index 49acc8a4fe..e6d8688568 100644 --- a/templates/workspaces/base/terraform/azure-monitor/azure-monitor.tf +++ b/templates/workspaces/base/terraform/azure-monitor/azure-monitor.tf @@ -136,7 +136,7 @@ resource "azurerm_monitor_private_link_scoped_service" "ampls_app_insights" { scope_name = azapi_resource.ampls_workspace.name # linked_resource_id = azurerm_application_insights.workspace.id - linked_resource_id = jsondecode(azapi_resource.appinsights.output).id + linked_resource_id = replace(jsondecode(azapi_resource.appinsights.output).id, "microsoft.insights", "Microsoft.Insights") } resource "azurerm_private_endpoint" "azure_monitor_private_endpoint" { diff --git a/templates/workspaces/base/terraform/providers.tf b/templates/workspaces/base/terraform/providers.tf index 9f293ecb82..98ae22d24a 100644 --- a/templates/workspaces/base/terraform/providers.tf +++ b/templates/workspaces/base/terraform/providers.tf @@ -2,7 +2,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "=3.73.0" + version = "=3.108.0" } azuread = { source = "hashicorp/azuread" From 0af4c94053e46082cafa7789b647ad8bba365861 Mon Sep 17 00:00:00 2001 From: Danny Cooke <136708214+Danny-Cooke-CK@users.noreply.github.com> Date: Thu, 26 Sep 2024 14:23:44 +0100 Subject: [PATCH 72/79] Provider upgrades for Microsoft.TimeSeriesInsights fix (#4097) * changes made to fix the recent provider issues * Update deploy_tre.yml * Update deploy_tre.yml * update to missing values * Update deploy_tre.yml * Update Dockerfile.tmpl * Update Dockerfile.tmpl * Create config.sample.yaml * Update porter files * update certs template --------- Co-authored-by: danny-cooke-icl <138700430+danny-cooke-icl@users.noreply.github.com> Co-authored-by: tim-allen-ck --- core/terraform/.terraform.lock.hcl | 106 +++++++++--------- core/terraform/airlock/main.tf | 2 +- core/terraform/appgateway/main.tf | 2 +- core/terraform/azure-monitor/main.tf | 2 +- core/terraform/main.tf | 2 +- core/terraform/network/main.tf | 2 +- .../resource_processor/vmss_porter/main.tf | 2 +- core/terraform/upgrade.sh | 13 +++ core/version.txt | 2 +- devops/terraform/.terraform.lock.hcl | 28 ++--- devops/terraform/terraform.tf | 2 +- devops/terraform/upgrade.sh | 13 +++ devops/version.txt | 2 +- .../shared_services/admin-vm/porter.yaml | 2 +- .../admin-vm/terraform/.terraform.lock.hcl | 28 ++--- .../admin-vm/terraform/main.tf | 2 +- .../admin-vm/terraform/upgrade.sh | 13 +++ .../airlock_notifier/porter.yaml | 2 +- .../terraform/.terraform.lock.hcl | 48 +++----- .../airlock_notifier/terraform/providers.tf | 2 +- templates/shared_services/certs/.gitignore | 2 +- templates/shared_services/certs/porter.yaml | 2 +- .../certs/terraform/.terraform.lock.hcl | 22 ++++ .../shared_services/certs/terraform/main.tf | 2 +- .../certs/terraform/upgrade.sh | 13 +++ .../shared_services/cyclecloud/porter.yaml | 2 +- .../cyclecloud/terraform/.terraform.lock.hcl | 28 ++--- .../cyclecloud/terraform/main.tf | 2 +- .../cyclecloud/terraform/upgrade.sh | 13 +++ .../databricks-auth/porter.yaml | 2 +- .../terraform/.terraform.lock.hcl | 28 ++--- .../databricks-auth/terraform/providers.tf | 2 +- .../databricks-auth/terraform/upgrade.sh | 13 +++ .../shared_services/firewall/porter.yaml | 2 +- .../firewall/terraform/.terraform.lock.hcl | 28 ++--- .../firewall/terraform/providers.tf | 2 +- .../firewall/terraform/upgrade.sh | 13 +++ templates/shared_services/gitea/porter.yaml | 2 +- .../gitea/terraform/.terraform.lock.hcl | 28 ++--- .../shared_services/gitea/terraform/main.tf | 2 +- .../gitea/terraform/upgrade.sh | 13 +++ .../sonatype-nexus-vm/porter.yaml | 2 +- .../terraform/.terraform.lock.hcl | 28 ++--- .../sonatype-nexus-vm/terraform/main.tf | 2 +- .../sonatype-nexus-vm/terraform/upgrade.sh | 13 +++ .../workspace_services/azureml/porter.yaml | 2 +- .../azureml/terraform/.terraform.lock.hcl | 31 ++--- .../azureml/terraform/providers.tf | 2 +- .../azureml/terraform/upgrade.sh | 13 +++ .../aml_compute/terraform/.terraform.lock.hcl | 28 ++--- .../aml_compute/terraform/providers.tf | 2 +- .../aml_compute/terraform/upgrade.sh | 13 +++ .../workspace_services/azuresql/porter.yaml | 2 +- .../azuresql/terraform/.terraform.lock.hcl | 28 ++--- .../azuresql/terraform/main.tf | 2 +- .../azuresql/terraform/upgrade.sh | 13 +++ .../workspace_services/databricks/porter.yaml | 2 +- .../databricks/terraform/.terraform.lock.hcl | 28 ++--- .../databricks/terraform/providers.tf | 2 +- .../databricks/terraform/upgrade.sh | 13 +++ .../workspace_services/gitea/porter.yaml | 2 +- .../gitea/terraform/.terraform.lock.hcl | 31 ++--- .../gitea/terraform/main.tf | 2 +- .../gitea/terraform/upgrade.sh | 13 +++ .../workspace_services/guacamole/porter.yaml | 2 +- .../guacamole/terraform/.terraform.lock.hcl | 28 ++--- .../guacamole/terraform/providers.tf | 2 +- .../guacamole/terraform/upgrade.sh | 13 +++ .../porter.yaml | 2 +- .../terraform/.terraform.lock.hcl | 28 ++--- .../terraform/main.tf | 2 +- .../terraform/upgrade.sh | 13 +++ .../porter.yaml | 2 +- .../terraform/.terraform.lock.hcl | 28 ++--- .../terraform/main.tf | 2 +- .../terraform/upgrade.sh | 13 +++ .../guacamole-azure-linuxvm/porter.yaml | 2 +- .../terraform/.terraform.lock.hcl | 30 ++--- .../guacamole-azure-linuxvm/terraform/main.tf | 2 +- .../terraform/upgrade.sh | 13 +++ .../guacamole-azure-windowsvm/porter.yaml | 2 +- .../terraform/.terraform.lock.hcl | 28 ++--- .../terraform/main.tf | 2 +- .../terraform/upgrade.sh | 13 +++ .../health-services/porter.yaml | 2 +- .../health-services/terraform/providers.tf | 2 +- .../workspace_services/innereye/porter.yaml | 2 +- .../innereye/terraform/.terraform.lock.hcl | 81 ++++++------- .../innereye/terraform/main.tf | 2 +- .../innereye/terraform/upgrade.sh | 13 +++ .../workspace_services/mlflow/porter.yaml | 2 +- .../mlflow/terraform/.terraform.lock.hcl | 28 ++--- .../mlflow/terraform/main.tf | 2 +- .../mlflow/terraform/upgrade.sh | 13 +++ .../workspace_services/mysql/porter.yaml | 2 +- .../mysql/terraform/.terraform.lock.hcl | 28 ++--- .../mysql/terraform/main.tf | 2 +- .../mysql/terraform/upgrade.sh | 13 +++ .../workspace_services/ohdsi/porter.yaml | 2 +- .../ohdsi/terraform/.terraform.lock.hcl | 28 ++--- .../ohdsi/terraform/providers.tf | 2 +- .../ohdsi/terraform/upgrade.sh | 13 +++ .../workspace_services/openai/porter.yaml | 2 +- .../openai/terraform/.terraform.lock.hcl | 28 ++--- .../openai/terraform/main.tf | 2 +- .../openai/terraform/upgrade.sh | 13 +++ .../airlock-import-review/Dockerfile.tmpl | 2 +- .../airlock-import-review/porter.yaml | 2 +- templates/workspaces/base/porter.yaml | 2 +- .../base/terraform/.terraform.lock.hcl | 28 ++--- .../base/terraform/aad/providers.tf | 2 +- .../base/terraform/airlock/providers.tf | 2 +- .../base/terraform/azure-monitor/providers.tf | 2 +- .../base/terraform/network/providers.tf | 2 +- .../workspaces/base/terraform/providers.tf | 2 +- .../workspaces/base/terraform/upgrade.sh | 13 +++ .../workspaces/unrestricted/Dockerfile.tmpl | 2 +- templates/workspaces/unrestricted/porter.yaml | 2 +- 118 files changed, 835 insertions(+), 505 deletions(-) create mode 100644 core/terraform/upgrade.sh create mode 100644 devops/terraform/upgrade.sh create mode 100644 templates/shared_services/admin-vm/terraform/upgrade.sh create mode 100644 templates/shared_services/certs/terraform/.terraform.lock.hcl create mode 100644 templates/shared_services/certs/terraform/upgrade.sh create mode 100644 templates/shared_services/cyclecloud/terraform/upgrade.sh create mode 100644 templates/shared_services/databricks-auth/terraform/upgrade.sh create mode 100644 templates/shared_services/firewall/terraform/upgrade.sh create mode 100644 templates/shared_services/gitea/terraform/upgrade.sh create mode 100644 templates/shared_services/sonatype-nexus-vm/terraform/upgrade.sh create mode 100644 templates/workspace_services/azureml/terraform/upgrade.sh create mode 100644 templates/workspace_services/azureml/user_resources/aml_compute/terraform/upgrade.sh create mode 100644 templates/workspace_services/azuresql/terraform/upgrade.sh create mode 100644 templates/workspace_services/databricks/terraform/upgrade.sh create mode 100644 templates/workspace_services/gitea/terraform/upgrade.sh create mode 100644 templates/workspace_services/guacamole/terraform/upgrade.sh create mode 100644 templates/workspace_services/guacamole/user_resources/guacamole-azure-export-reviewvm/terraform/upgrade.sh create mode 100644 templates/workspace_services/guacamole/user_resources/guacamole-azure-import-reviewvm/terraform/upgrade.sh create mode 100644 templates/workspace_services/guacamole/user_resources/guacamole-azure-linuxvm/terraform/upgrade.sh create mode 100644 templates/workspace_services/guacamole/user_resources/guacamole-azure-windowsvm/terraform/upgrade.sh create mode 100644 templates/workspace_services/innereye/terraform/upgrade.sh create mode 100644 templates/workspace_services/mlflow/terraform/upgrade.sh create mode 100644 templates/workspace_services/mysql/terraform/upgrade.sh create mode 100644 templates/workspace_services/ohdsi/terraform/upgrade.sh create mode 100644 templates/workspace_services/openai/terraform/upgrade.sh create mode 100644 templates/workspaces/base/terraform/upgrade.sh diff --git a/core/terraform/.terraform.lock.hcl b/core/terraform/.terraform.lock.hcl index 6b17e557fb..ca3c1389d8 100644 --- a/core/terraform/.terraform.lock.hcl +++ b/core/terraform/.terraform.lock.hcl @@ -22,82 +22,82 @@ provider "registry.terraform.io/azure/azapi" { } provider "registry.terraform.io/hashicorp/azurerm" { - version = "3.108.0" - constraints = ">= 3.8.0, >= 3.16.0, 3.108.0" + version = "3.112.0" + constraints = ">= 3.112.0, 3.112.0" hashes = [ - "h1:RIFBFTXz4X48JDHjbQHX4y400ax1/uEzMVFZgX3/z3w=", - "zh:2afecf948fd702bc08c87d9114595809d011f99a70a12dbf6bc67a12d0bee5fc", - "zh:395b6d1384a579867064e62d49b0b91e15919c33b03ea8b5031c2779bfa16b3d", - "zh:3e5594c59b6b02bc6e0f4c3de71aa2ab992494c53725fb3c64d36745f3814ef3", - "zh:4613e190609377309f6a4ac44f631c9469efab3ae148dbb09e73718201dc4f42", - "zh:624f01cb7604d58100068401bd07ab09a141e7bd318f8214127838cf202e4868", - "zh:65709950c9933e38704e2075a2339951e1259a6e882f35d390be36e1844ebc72", - "zh:af82657fad4e3a177f2ebb8035b45bda40f8856eb999288533321028794d03e5", - "zh:c40b331eba08830d16c0e6795fa7cbf08231073df2cfdb0f34e9d908a915981a", - "zh:d6ccd533a0bd984ca7ed1ae860e057e9e2f88468745be9712236d2d240353de4", - "zh:f361fd398e8772f8554a010331d161d6f7284a43238fd28bfa7b41795a5538b8", + "h1:5KSVV/O2eG6ty/3/qpOLQFQqJd96KEPzsTHItslJaMw=", + "zh:341c22454d24a75792aa99fbbc0c156f368534b7bb04eef4701b85995c7526a4", + "zh:3708656d75061c92f7208cc731b946c991ad343a443f8ff0ef082f077b7580b9", + "zh:38ca06f9f45705c648f04f272bd9483397693ea8da6db788cd7955f49ab79d6b", + "zh:3f305adb5ee0032e0ea68d198a089ecfd0127092930e99fa51377a250292b592", + "zh:4ae2fc6065164a819f576f705e634ebf5059f983149a41dad909719fea96145a", + "zh:5d376ac7dd71898a94038d6b6b8036dfec4c0216d832ec1135c855bf3e58eb5f", + "zh:63d2ff296d3aee5787e12c759a6a3d5aa15a574456aebbe11b833f01adf3faef", + "zh:8ad8746741f7f0ac10da6f1d105f26ebeb6e4d944f58ba749e86d7c9a67da3db", + "zh:abec182594ee8a21d72a5f23d3aa7fa45247488539fce6ed648c9c255d8bf972", + "zh:bf704b400be4181333b38c0306949f26326a9aa5ae68b4167e2fb8ee7fb13618", + "zh:c072938f8695f725fc5fbe986a54890f00d520cce570006390dc5bbc51b2a4ea", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", - "zh:f8c2132c77d35930203ec66f1bf9bbf633a2406e9f7b572ff425d65b8aa8c492", ] } provider "registry.terraform.io/hashicorp/http" { - version = "3.4.3" + version = "3.4.5" constraints = "~> 3.4" hashes = [ - "h1:WUwrzNfcBamA4mm3Stzt6+GcwTosQv2T0CEmZefPBAo=", - "zh:001e12b8079955a9fa7f8fcd515ae665b2e1087107fd337c4b872e88a86d540b", - "zh:0874fb3f870b2ac24c967a9685f2da641079589024109340389694696301a85b", - "zh:3b5e533c3d2859575945568aad0aac66b71bfc709706231fc2de94e01ca76d7f", - "zh:622ee28d42ed9d4b1399dde377db515e62cac08bd65bb2455068621f7a42d90d", - "zh:6dea688d78840a3f678e06ee602d37c766ce2ee625dcdce0c6658116ebcbde8e", + "h1:ceAVZEuaQd7jQX13qf5w7hy3ioiXpuwUaaDRsnAiMLM=", + "zh:2072006c177efc101471f3d5eb8e1d8e6c68778cbfd6db3d3f22f59cfe6ce6ae", + "zh:3ac4cc0efe11ee054300769cfcc37491433937a8824621d1f8f7a18e7401da87", + "zh:63997e5457c9ddf9cfff17bd7bf9f083cbeff3105452045662109dd6be499ef9", "zh:78d5eefdd9e494defcb3c68d282b8f96630502cac21d1ea161f53cfe9bb483b3", - "zh:7f57a1436a464bc2e1698457b402ff0fd98ef9e7dcf6707d6bd0debc67fad164", - "zh:829d89d82e6fc3c89714950dc8afa51d622bb8e4f4bd5c73037505fb55a67834", - "zh:e453202d09b62531ed3278926307d315276e05784e7c6448a2c21c6a2da6e48f", - "zh:e76edc035240b4ad9334b4a0282b44a086e001df3007a2fc51f6262c4db032d1", - "zh:eeb0379da9093e155a193f666079de6baf8ed02855bf2a443448903f7cfef378", - "zh:fcb00eeb665ccae383645173d8e10c3071946396629a7797db39c798997f21b0", + "zh:826819bb8ab7d6e3095f597083d5b1ab93d1854312b9e1b6c18288fff9664f34", + "zh:8ad74e7d8ec2e226a73d49c7c317108f61a4cb803972fb3f945d1709d5115fcd", + "zh:a609ca9e0c91d250ac80295e39d5f524e8c0872d33ba8fde3c3e41893b4b015d", + "zh:ae07d19babc452f63f6a6511b944990e819dc20687b6c8f01d1676812f5ada53", + "zh:b7c827dc32a1a5d77185a78cd391b01217894b384f58169f98a96d683730d8ce", + "zh:d045e3db9f5e39ce78860d3fd94e04604fcbe246f6fe346ee50a971f936e9ccd", + "zh:ec28f9b52c74edd47eebbb5c254a6df5706360cde5ccd65097976efca23a2977", + "zh:f24982eaa7d34fd66554c3cf94873713a0dff14da9ea4c4be0cc76f1a6146d59", ] } provider "registry.terraform.io/hashicorp/local" { - version = "2.5.1" + version = "2.5.2" constraints = ">= 2.2.0, ~> 2.5" hashes = [ - "h1:8oTPe2VUL6E2d3OcrvqyjI4Nn/Y/UEQN26WLk5O/B0g=", - "zh:0af29ce2b7b5712319bf6424cb58d13b852bf9a777011a545fac99c7fdcdf561", - "zh:126063ea0d79dad1f68fa4e4d556793c0108ce278034f101d1dbbb2463924561", - "zh:196bfb49086f22fd4db46033e01655b0e5e036a5582d250412cc690fa7995de5", - "zh:37c92ec084d059d37d6cffdb683ccf68e3a5f8d2eb69dd73c8e43ad003ef8d24", - "zh:4269f01a98513651ad66763c16b268f4c2da76cc892ccfd54b401fff6cc11667", - "zh:51904350b9c728f963eef0c28f1d43e73d010333133eb7f30999a8fb6a0cc3d8", - "zh:73a66611359b83d0c3fcba2984610273f7954002febb8a57242bbb86d967b635", + "h1:JlMZD6nYqJ8sSrFfEAH0Vk/SL8WLZRmFaMUF9PJK5wM=", + "zh:136299545178ce281c56f36965bf91c35407c11897f7082b3b983d86cb79b511", + "zh:3b4486858aa9cb8163378722b642c57c529b6c64bfbfc9461d940a84cd66ebea", + "zh:4855ee628ead847741aa4f4fc9bed50cfdbf197f2912775dd9fe7bc43fa077c0", + "zh:4b8cd2583d1edcac4011caafe8afb7a95e8110a607a1d5fb87d921178074a69b", + "zh:52084ddaff8c8cd3f9e7bcb7ce4dc1eab00602912c96da43c29b4762dc376038", + "zh:71562d330d3f92d79b2952ffdda0dad167e952e46200c767dd30c6af8d7c0ed3", "zh:78d5eefdd9e494defcb3c68d282b8f96630502cac21d1ea161f53cfe9bb483b3", - "zh:7ae387993a92bcc379063229b3cce8af7eaf082dd9306598fcd42352994d2de0", - "zh:9e0f365f807b088646db6e4a8d4b188129d9ebdbcf2568c8ab33bddd1b82c867", - "zh:b5263acbd8ae51c9cbffa79743fbcadcb7908057c87eb22fd9048268056efbc4", - "zh:dfcd88ac5f13c0d04e24be00b686d069b4879cc4add1b7b1a8ae545783d97520", + "zh:805f81ade06ff68fa8b908d31892eaed5c180ae031c77ad35f82cb7a74b97cf4", + "zh:8b6b3ebeaaa8e38dd04e56996abe80db9be6f4c1df75ac3cccc77642899bd464", + "zh:ad07750576b99248037b897de71113cc19b1a8d0bc235eb99173cc83d0de3b1b", + "zh:b9f1c3bfadb74068f5c205292badb0661e17ac05eb23bfe8bd809691e4583d0e", + "zh:cc4cbcd67414fefb111c1bf7ab0bc4beb8c0b553d01719ad17de9a047adff4d1", ] } provider "registry.terraform.io/hashicorp/random" { - version = "3.6.2" + version = "3.6.3" constraints = ">= 3.0.0, ~> 3.6" hashes = [ - "h1:wmG0QFjQ2OfyPy6BB7mQ57WtoZZGGV07uAPQeDmIrAE=", - "zh:0ef01a4f81147b32c1bea3429974d4d104bbc4be2ba3cfa667031a8183ef88ec", - "zh:1bcd2d8161e89e39886119965ef0f37fcce2da9c1aca34263dd3002ba05fcb53", - "zh:37c75d15e9514556a5f4ed02e1548aaa95c0ecd6ff9af1119ac905144c70c114", - "zh:4210550a767226976bc7e57d988b9ce48f4411fa8a60cd74a6b246baf7589dad", - "zh:562007382520cd4baa7320f35e1370ffe84e46ed4e2071fdc7e4b1a9b1f8ae9b", - "zh:5efb9da90f665e43f22c2e13e0ce48e86cae2d960aaf1abf721b497f32025916", - "zh:6f71257a6b1218d02a573fc9bff0657410404fb2ef23bc66ae8cd968f98d5ff6", + "h1:Fnaec9vA8sZ8BXVlN3Xn9Jz3zghSETIKg7ch8oXhxno=", + "zh:04ceb65210251339f07cd4611885d242cd4d0c7306e86dda9785396807c00451", + "zh:448f56199f3e99ff75d5c0afacae867ee795e4dfda6cb5f8e3b2a72ec3583dd8", + "zh:4b4c11ccfba7319e901df2dac836b1ae8f12185e37249e8d870ee10bb87a13fe", + "zh:4fa45c44c0de582c2edb8a2e054f55124520c16a39b2dfc0355929063b6395b1", + "zh:588508280501a06259e023b0695f6a18149a3816d259655c424d068982cbdd36", + "zh:737c4d99a87d2a4d1ac0a54a73d2cb62974ccb2edbd234f333abd079a32ebc9e", "zh:78d5eefdd9e494defcb3c68d282b8f96630502cac21d1ea161f53cfe9bb483b3", - "zh:9647e18f221380a85f2f0ab387c68fdafd58af6193a932417299cdcae4710150", - "zh:bb6297ce412c3c2fa9fec726114e5e0508dd2638cad6a0cb433194930c97a544", - "zh:f83e925ed73ff8a5ef6e3608ad9225baa5376446349572c2449c0c0b3cf184b7", - "zh:fbef0781cb64de76b1df1ca11078aecba7800d82fd4a956302734999cfd9a4af", + "zh:a357ab512e5ebc6d1fda1382503109766e21bbfdfaa9ccda43d313c122069b30", + "zh:c51bfb15e7d52cc1a2eaec2a903ac2aff15d162c172b1b4c17675190e8147615", + "zh:e0951ee6fa9df90433728b96381fb867e3db98f66f735e0c3e24f8f16903f0ad", + "zh:e3cdcb4e73740621dabd82ee6a37d6cfce7fee2a03d8074df65086760f5cf556", + "zh:eff58323099f1bd9a0bec7cb04f717e7f1b2774c7d612bf7581797e1622613a0", ] } diff --git a/core/terraform/airlock/main.tf b/core/terraform/airlock/main.tf index cea72a09e8..78b0227762 100644 --- a/core/terraform/airlock/main.tf +++ b/core/terraform/airlock/main.tf @@ -3,7 +3,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = ">= 3.16" + version = ">= 3.112" } azapi = { source = "Azure/azapi" diff --git a/core/terraform/appgateway/main.tf b/core/terraform/appgateway/main.tf index 14942d6fd9..c77ae64ef3 100644 --- a/core/terraform/appgateway/main.tf +++ b/core/terraform/appgateway/main.tf @@ -3,7 +3,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = ">= 3.8" + version = ">= 3.112" } } } diff --git a/core/terraform/azure-monitor/main.tf b/core/terraform/azure-monitor/main.tf index 14942d6fd9..c77ae64ef3 100644 --- a/core/terraform/azure-monitor/main.tf +++ b/core/terraform/azure-monitor/main.tf @@ -3,7 +3,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = ">= 3.8" + version = ">= 3.112" } } } diff --git a/core/terraform/main.tf b/core/terraform/main.tf index d35cabd876..bca551c234 100644 --- a/core/terraform/main.tf +++ b/core/terraform/main.tf @@ -3,7 +3,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "=3.108.0" + version = "=3.112.0" } random = { source = "hashicorp/random" diff --git a/core/terraform/network/main.tf b/core/terraform/network/main.tf index 14942d6fd9..c77ae64ef3 100644 --- a/core/terraform/network/main.tf +++ b/core/terraform/network/main.tf @@ -3,7 +3,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = ">= 3.8" + version = ">= 3.112" } } } diff --git a/core/terraform/resource_processor/vmss_porter/main.tf b/core/terraform/resource_processor/vmss_porter/main.tf index a361a42faa..83c0e4cadc 100644 --- a/core/terraform/resource_processor/vmss_porter/main.tf +++ b/core/terraform/resource_processor/vmss_porter/main.tf @@ -3,7 +3,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = ">= 3.8" + version = ">= 3.112" } random = { source = "hashicorp/random" diff --git a/core/terraform/upgrade.sh b/core/terraform/upgrade.sh new file mode 100644 index 0000000000..861e28d2f1 --- /dev/null +++ b/core/terraform/upgrade.sh @@ -0,0 +1,13 @@ +#!/bin/bash +set -e + +# This script is used to install the bundle directly without having to interact with Porter + +# This script assumes you have created an .env from the sample and the variables +# will come from there. +# shellcheck disable=SC2154 +terraform init -upgrade -reconfigure -input=false -backend=true \ + -backend-config="resource_group_name=${TF_VAR_mgmt_resource_group_name}" \ + -backend-config="storage_account_name=${TF_VAR_mgmt_storage_account_name}" \ + -backend-config="container_name=${TF_VAR_terraform_state_container_name}" \ + -backend-config="key=${TF_VAR_tre_resource_id}-core" diff --git a/core/version.txt b/core/version.txt index 5b0f7f2fcf..cdf3f12638 100644 --- a/core/version.txt +++ b/core/version.txt @@ -1 +1 @@ -__version__ = "0.10.7" +__version__ = "0.10.8" diff --git a/devops/terraform/.terraform.lock.hcl b/devops/terraform/.terraform.lock.hcl index f1c5328dff..b76fcebd94 100644 --- a/devops/terraform/.terraform.lock.hcl +++ b/devops/terraform/.terraform.lock.hcl @@ -2,21 +2,21 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/azurerm" { - version = "3.51.0" - constraints = "3.51.0" + version = "3.112.0" + constraints = "3.112.0" hashes = [ - "h1:X13zyweEi+honSpCdijEJBawbG6m1NmGyWDccICIKXs=", - "zh:045a56f984882b8cf111301550e14a51346c817ec0b3d6dc752f7533585ed99b", - "zh:102fa2fb9213f20c2834b7abb51d44f1c766bb28ad4f14c98d2c149faba0a911", - "zh:173e38d128bf559b4a3e4bf5511974ab87951ffad9460f769067f62edc66acc7", - "zh:22b7f74a6bf86fa4f735783331335b9c4783d5437c672a7d2579cedea8463e3b", - "zh:3e37e83a5f39f73fa3b310162ef9fc58449445aaeb2ddad66404251ceb6908a5", - "zh:6609b1c63ea9466bea599f6e1e32573a13889db6be89dd068c0eb114f7de50d5", - "zh:6a2cc4ab06a467369f03c4e1fb1eeb23f0ea8a98fb1c0651284fe45ca3d5b02f", - "zh:91885a417d4fd1cdc81b64d26330dacf608ef2f9d272b8f7073d93e71d6bccef", - "zh:96d1879e52f399f3c813bcf36c7ceee72273a3e020077d09b03f6b7fdef4430c", - "zh:dcdae19688d83dbf5dbc4c75d4c5f2d6d8abeb4fddc404c20880f9f3fa22c3ed", - "zh:e2e11ffae353f43f4bf4bb88fa386fb214b8dd4aebfe7665b3142484652f9651", + "h1:5KSVV/O2eG6ty/3/qpOLQFQqJd96KEPzsTHItslJaMw=", + "zh:341c22454d24a75792aa99fbbc0c156f368534b7bb04eef4701b85995c7526a4", + "zh:3708656d75061c92f7208cc731b946c991ad343a443f8ff0ef082f077b7580b9", + "zh:38ca06f9f45705c648f04f272bd9483397693ea8da6db788cd7955f49ab79d6b", + "zh:3f305adb5ee0032e0ea68d198a089ecfd0127092930e99fa51377a250292b592", + "zh:4ae2fc6065164a819f576f705e634ebf5059f983149a41dad909719fea96145a", + "zh:5d376ac7dd71898a94038d6b6b8036dfec4c0216d832ec1135c855bf3e58eb5f", + "zh:63d2ff296d3aee5787e12c759a6a3d5aa15a574456aebbe11b833f01adf3faef", + "zh:8ad8746741f7f0ac10da6f1d105f26ebeb6e4d944f58ba749e86d7c9a67da3db", + "zh:abec182594ee8a21d72a5f23d3aa7fa45247488539fce6ed648c9c255d8bf972", + "zh:bf704b400be4181333b38c0306949f26326a9aa5ae68b4167e2fb8ee7fb13618", + "zh:c072938f8695f725fc5fbe986a54890f00d520cce570006390dc5bbc51b2a4ea", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", ] } diff --git a/devops/terraform/terraform.tf b/devops/terraform/terraform.tf index 278773faf6..c65c843d00 100644 --- a/devops/terraform/terraform.tf +++ b/devops/terraform/terraform.tf @@ -4,7 +4,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "3.51.0" + version = "3.112.0" } } } diff --git a/devops/terraform/upgrade.sh b/devops/terraform/upgrade.sh new file mode 100644 index 0000000000..a05032d544 --- /dev/null +++ b/devops/terraform/upgrade.sh @@ -0,0 +1,13 @@ +#!/bin/bash +set -e + +# This script is used to install the bundle directly without having to interact with Porter + +# This script assumes you have created an .env from the sample and the variables +# will come from there. +# shellcheck disable=SC2154 +terraform init -upgrade -reconfigure -input=false -backend=true \ + -backend-config="resource_group_name=${TF_VAR_mgmt_resource_group_name}" \ + -backend-config="storage_account_name=${TF_VAR_mgmt_storage_account_name}" \ + -backend-config="container_name=${TF_VAR_terraform_state_container_name}" \ + -backend-config="key=${TF_VAR_tre_resource_id}-devops" diff --git a/devops/version.txt b/devops/version.txt index dd9b22cccc..722515271f 100644 --- a/devops/version.txt +++ b/devops/version.txt @@ -1 +1 @@ -__version__ = "0.5.1" +__version__ = "0.5.2" diff --git a/templates/shared_services/admin-vm/porter.yaml b/templates/shared_services/admin-vm/porter.yaml index a32187f47a..de1d0ce744 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.4.3 +version: 0.4.4 description: "An admin vm shared service" dockerfile: Dockerfile.tmpl registry: azuretre diff --git a/templates/shared_services/admin-vm/terraform/.terraform.lock.hcl b/templates/shared_services/admin-vm/terraform/.terraform.lock.hcl index aeef325d7f..6b3604f3c1 100644 --- a/templates/shared_services/admin-vm/terraform/.terraform.lock.hcl +++ b/templates/shared_services/admin-vm/terraform/.terraform.lock.hcl @@ -2,21 +2,21 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/azurerm" { - version = "3.23.0" - constraints = "3.23.0" + version = "3.112.0" + constraints = "3.112.0" hashes = [ - "h1:gL/GB7M9xFNr8SxyalWCkTUaYach2k1/0voy6hAqA0A=", - "zh:5856ee393eea2c5807d71794020ec16492b6a219c50fec816376c9c4c50d964a", - "zh:58883757371208106ae56b591759a7c308d9a3fd74fb38aefaebe00fee4e380f", - "zh:69aca3a6929e629d6fe1dc0c0ff105ee943e5d0f95fe0d8abb89965d5dbc07ce", - "zh:6cf146b28a5b82da39ee9b5def88e649ed831824b4e669aa60884743d4b08200", - "zh:756dfe6d54e54879bed340f0e05e72a3882a7e8f8f2e783b2064d8c27c9fa1c1", - "zh:76ed418c25160fe0be9158c82c425375d79e2427f4a8adbac061d4540c56de79", - "zh:8c4f42f67157619fdd21525049f5daf9eb4eb3681b43603570a65bd5d52939ff", - "zh:ae15665e0ebe6cb40894cd6b7b7345fe4a7d46ca024fc209e03caee3dff6b51d", - "zh:ba21ef2d27e6f96fccfa234201151e0ad195ec798cb5486fa70664e0f707b48a", - "zh:d0d9b21b65c7b110e599b78abfdc90cec0bafe2d1b1e0bb36c3a3d5d12ad63b4", - "zh:ea02b2e6de9ea4184db300903d75871b16b7e240f6b38c46f8b149878f47c739", + "h1:5KSVV/O2eG6ty/3/qpOLQFQqJd96KEPzsTHItslJaMw=", + "zh:341c22454d24a75792aa99fbbc0c156f368534b7bb04eef4701b85995c7526a4", + "zh:3708656d75061c92f7208cc731b946c991ad343a443f8ff0ef082f077b7580b9", + "zh:38ca06f9f45705c648f04f272bd9483397693ea8da6db788cd7955f49ab79d6b", + "zh:3f305adb5ee0032e0ea68d198a089ecfd0127092930e99fa51377a250292b592", + "zh:4ae2fc6065164a819f576f705e634ebf5059f983149a41dad909719fea96145a", + "zh:5d376ac7dd71898a94038d6b6b8036dfec4c0216d832ec1135c855bf3e58eb5f", + "zh:63d2ff296d3aee5787e12c759a6a3d5aa15a574456aebbe11b833f01adf3faef", + "zh:8ad8746741f7f0ac10da6f1d105f26ebeb6e4d944f58ba749e86d7c9a67da3db", + "zh:abec182594ee8a21d72a5f23d3aa7fa45247488539fce6ed648c9c255d8bf972", + "zh:bf704b400be4181333b38c0306949f26326a9aa5ae68b4167e2fb8ee7fb13618", + "zh:c072938f8695f725fc5fbe986a54890f00d520cce570006390dc5bbc51b2a4ea", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", ] } diff --git a/templates/shared_services/admin-vm/terraform/main.tf b/templates/shared_services/admin-vm/terraform/main.tf index 393dd7beb0..610c771db8 100644 --- a/templates/shared_services/admin-vm/terraform/main.tf +++ b/templates/shared_services/admin-vm/terraform/main.tf @@ -3,7 +3,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "=3.23.0" + version = "=3.112.0" } random = { source = "hashicorp/random" diff --git a/templates/shared_services/admin-vm/terraform/upgrade.sh b/templates/shared_services/admin-vm/terraform/upgrade.sh new file mode 100644 index 0000000000..12597ee325 --- /dev/null +++ b/templates/shared_services/admin-vm/terraform/upgrade.sh @@ -0,0 +1,13 @@ +#!/bin/bash +set -e + +# This script is used to install the bundle directly without having to interact with Porter + +# This script assumes you have created an .env from the sample and the variables +# will come from there. +# shellcheck disable=SC2154 +terraform init -upgrade -reconfigure -input=false -backend=true \ + -backend-config="resource_group_name=${TF_VAR_mgmt_resource_group_name}" \ + -backend-config="storage_account_name=${TF_VAR_mgmt_storage_account_name}" \ + -backend-config="container_name=${TF_VAR_terraform_state_container_name}" \ + -backend-config="key=${TF_VAR_tre_resource_id}-shared-adminvm" diff --git a/templates/shared_services/airlock_notifier/porter.yaml b/templates/shared_services/airlock_notifier/porter.yaml index 500cd3cc86..d90205e531 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.1 +version: 1.0.2 description: "A shared service notifying on Airlock Operations" registry: azuretre dockerfile: Dockerfile.tmpl diff --git a/templates/shared_services/airlock_notifier/terraform/.terraform.lock.hcl b/templates/shared_services/airlock_notifier/terraform/.terraform.lock.hcl index 91cd480c91..b76fcebd94 100644 --- a/templates/shared_services/airlock_notifier/terraform/.terraform.lock.hcl +++ b/templates/shared_services/airlock_notifier/terraform/.terraform.lock.hcl @@ -1,42 +1,22 @@ # This file is maintained automatically by "terraform init". # Manual edits may be lost in future updates. -provider "registry.terraform.io/azure/azapi" { - version = "1.14.0" - constraints = "1.14.0" - hashes = [ - "h1:D8AhiIgpSH6pG05WuslOg3XS0O9I5VxOoD3W3i8N+Xo=", - "zh:083709be750b878dfb33747ba1d326d23619a0ed654f95bce9c808e424923c90", - "zh:261b5060297b732d97b4363ad753355bfee00e93d773fd329023a5619b964c39", - "zh:51adfdaeb1b2c3d9e7aeba97c9c73d469712223dd125b14d90377d445d1cd3df", - "zh:5bcbedc9eeefa5e6267042604af20f93cadceba41d8d90a91040f60f6c5e38a9", - "zh:6da127f306083e740767f53dd0cc8787166a8af4f44519873dd8775ca981ddef", - "zh:7604cf377b8ea31a5a44db5b8566f5eea4d73acdfaaeb8ba10fcac46cbf4a738", - "zh:77789ef8906acabbf7eb55378e1f9c407499bb765811f193d256897d2925d66d", - "zh:8a333c53279b3b0b65519191dbba8ef7dc390f5d96216e4e6f165cac8b3e5dc2", - "zh:8c0dfe57dc2c29f8953db3037144d2254ce28bfa55dae537707ae4bdb4460f64", - "zh:debdeabcbcb6b421c2cdf2093d520c67e75a11d28d357b0ba32dd748105a5460", - "zh:e252ee062513904836fcc5e6548243429819e68aa7cfaeac7da8d816c4c4d1e8", - "zh:f48d1fd67b463d2121516911b5d20f8a72217e43e7740bb74929a17dbd43bb59", - ] -} - provider "registry.terraform.io/hashicorp/azurerm" { - version = "3.113.0" - constraints = "3.113.0" + version = "3.112.0" + constraints = "3.112.0" hashes = [ - "h1:eEUtt0lrLdpVaF6FiDq8BGQPgEcykmhj0aNIL7hTOGw=", - "zh:12479f5664288943400447b55e50df675c28ae82ad8d373cc2e5682f3a3411f0", - "zh:1b42a14e80e568429d3b55fed753ca3ef0df9dcdfa107890d7264599c020940f", - "zh:381be6ca617f848de3baa3985a6e1788e91a803afe04a3c5c727453528b6310d", - "zh:3e70e2e07b6db1c363de3e5d0ca47f27fc956473df03329c7d2e54d3ac29176b", - "zh:87c7633aeaa828098c6055da9e67d4acaf4b46748b6b3f0267e105e55f05de25", - "zh:8d0d98226901f874770dd5220d4701a12ae8bd586994615aa7dcba12b9736bec", - "zh:9fd913acd42a60c3a90a18ce803567ef861db8779a59aacced91f2cbd86de9d9", - "zh:b6f3f7ae0a055437fb36c139af9bb3135e7f4dad172157ae1eb0177dc74d703f", - "zh:b927027ba2bf40d34e03d742fd2b6c5299023b5ab8e6f05e50aac76a46ad1094", - "zh:ceb5187b9d2a439f4e48944f3ffeeeaf47a03dbe6f3325ea1775bf659ce0aa88", + "h1:5KSVV/O2eG6ty/3/qpOLQFQqJd96KEPzsTHItslJaMw=", + "zh:341c22454d24a75792aa99fbbc0c156f368534b7bb04eef4701b85995c7526a4", + "zh:3708656d75061c92f7208cc731b946c991ad343a443f8ff0ef082f077b7580b9", + "zh:38ca06f9f45705c648f04f272bd9483397693ea8da6db788cd7955f49ab79d6b", + "zh:3f305adb5ee0032e0ea68d198a089ecfd0127092930e99fa51377a250292b592", + "zh:4ae2fc6065164a819f576f705e634ebf5059f983149a41dad909719fea96145a", + "zh:5d376ac7dd71898a94038d6b6b8036dfec4c0216d832ec1135c855bf3e58eb5f", + "zh:63d2ff296d3aee5787e12c759a6a3d5aa15a574456aebbe11b833f01adf3faef", + "zh:8ad8746741f7f0ac10da6f1d105f26ebeb6e4d944f58ba749e86d7c9a67da3db", + "zh:abec182594ee8a21d72a5f23d3aa7fa45247488539fce6ed648c9c255d8bf972", + "zh:bf704b400be4181333b38c0306949f26326a9aa5ae68b4167e2fb8ee7fb13618", + "zh:c072938f8695f725fc5fbe986a54890f00d520cce570006390dc5bbc51b2a4ea", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", - "zh:fb9d78dfeca7489bffca9b1a1f3abee7f16dbbcba31388aea1102062c1d6dce8", ] } diff --git a/templates/shared_services/airlock_notifier/terraform/providers.tf b/templates/shared_services/airlock_notifier/terraform/providers.tf index 7cb01d360f..3142553a58 100644 --- a/templates/shared_services/airlock_notifier/terraform/providers.tf +++ b/templates/shared_services/airlock_notifier/terraform/providers.tf @@ -3,7 +3,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "=3.113.0" + version = "=3.112.0" } } backend "azurerm" {} diff --git a/templates/shared_services/certs/.gitignore b/templates/shared_services/certs/.gitignore index 73a68e4976..806df7d1b9 100644 --- a/templates/shared_services/certs/.gitignore +++ b/templates/shared_services/certs/.gitignore @@ -1,2 +1,2 @@ .cnab/ -.terraform* +.terraform/ diff --git a/templates/shared_services/certs/porter.yaml b/templates/shared_services/certs/porter.yaml index c97210c145..f66f3689fe 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.5.1 +version: 0.5.2 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/terraform/.terraform.lock.hcl b/templates/shared_services/certs/terraform/.terraform.lock.hcl new file mode 100644 index 0000000000..b76fcebd94 --- /dev/null +++ b/templates/shared_services/certs/terraform/.terraform.lock.hcl @@ -0,0 +1,22 @@ +# This file is maintained automatically by "terraform init". +# Manual edits may be lost in future updates. + +provider "registry.terraform.io/hashicorp/azurerm" { + version = "3.112.0" + constraints = "3.112.0" + hashes = [ + "h1:5KSVV/O2eG6ty/3/qpOLQFQqJd96KEPzsTHItslJaMw=", + "zh:341c22454d24a75792aa99fbbc0c156f368534b7bb04eef4701b85995c7526a4", + "zh:3708656d75061c92f7208cc731b946c991ad343a443f8ff0ef082f077b7580b9", + "zh:38ca06f9f45705c648f04f272bd9483397693ea8da6db788cd7955f49ab79d6b", + "zh:3f305adb5ee0032e0ea68d198a089ecfd0127092930e99fa51377a250292b592", + "zh:4ae2fc6065164a819f576f705e634ebf5059f983149a41dad909719fea96145a", + "zh:5d376ac7dd71898a94038d6b6b8036dfec4c0216d832ec1135c855bf3e58eb5f", + "zh:63d2ff296d3aee5787e12c759a6a3d5aa15a574456aebbe11b833f01adf3faef", + "zh:8ad8746741f7f0ac10da6f1d105f26ebeb6e4d944f58ba749e86d7c9a67da3db", + "zh:abec182594ee8a21d72a5f23d3aa7fa45247488539fce6ed648c9c255d8bf972", + "zh:bf704b400be4181333b38c0306949f26326a9aa5ae68b4167e2fb8ee7fb13618", + "zh:c072938f8695f725fc5fbe986a54890f00d520cce570006390dc5bbc51b2a4ea", + "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", + ] +} diff --git a/templates/shared_services/certs/terraform/main.tf b/templates/shared_services/certs/terraform/main.tf index 373f9143ab..c894c3de5f 100644 --- a/templates/shared_services/certs/terraform/main.tf +++ b/templates/shared_services/certs/terraform/main.tf @@ -3,7 +3,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "=3.22.0" + version = "=3.112.0" } } diff --git a/templates/shared_services/certs/terraform/upgrade.sh b/templates/shared_services/certs/terraform/upgrade.sh new file mode 100644 index 0000000000..aae4c58cef --- /dev/null +++ b/templates/shared_services/certs/terraform/upgrade.sh @@ -0,0 +1,13 @@ +#!/bin/bash +set -e + +# This script is used to install the bundle directly without having to interact with Porter + +# This script assumes you have created an .env from the sample and the variables +# will come from there. +# shellcheck disable=SC2154 +terraform init -upgrade -reconfigure -input=false -backend=true \ + -backend-config="resource_group_name=${TF_VAR_mgmt_resource_group_name}" \ + -backend-config="storage_account_name=${TF_VAR_mgmt_storage_account_name}" \ + -backend-config="container_name=${TF_VAR_terraform_state_container_name}" \ + -backend-config="key=${TRE_ID}-certs" diff --git a/templates/shared_services/cyclecloud/porter.yaml b/templates/shared_services/cyclecloud/porter.yaml index 489142decb..6e539d1e62 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.5.5 +version: 0.5.6 description: "An Azure TRE Shared Service Template for Azure Cyclecloud" registry: azuretre dockerfile: Dockerfile.tmpl diff --git a/templates/shared_services/cyclecloud/terraform/.terraform.lock.hcl b/templates/shared_services/cyclecloud/terraform/.terraform.lock.hcl index d9aa3a16b3..66c2832260 100644 --- a/templates/shared_services/cyclecloud/terraform/.terraform.lock.hcl +++ b/templates/shared_services/cyclecloud/terraform/.terraform.lock.hcl @@ -2,21 +2,21 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/azurerm" { - version = "3.5.0" - constraints = "3.5.0" + version = "3.112.0" + constraints = "3.112.0" hashes = [ - "h1:T4XsCHDT839VehWKdxbVsLn0ECjcQaUTzbSGW055pgM=", - "zh:0d8ae6d6e87f44ed4a178be03d6466339b0bb578ab54c2677e365a8281b0bb7d", - "zh:29d250d1a18d49652b28f234ecd17687b36c875dc47877a678e587d5d136b054", - "zh:2e69ba373cf009e8a60b36d04f3dbc4638708d1bf88be9f96b3e52cbf8f47f31", - "zh:53d525dd84ac63b5f749bfbc6b70a202dacf29597664d2ab1165efea6f24f630", - "zh:a25024d574ccd5ae6c2962f3bb71d510f62899f493b1ed096f2f7f0e2b18f975", - "zh:aabc64fe64319b95aaba1d1866f87abc7b10adae37d2eafa2f85f37317fdd49f", - "zh:acc6a977814897cb23d3b3753213281334238f8bce6d2b21e9f04fc4087ee980", - "zh:b24987e9416c39cd59c0fa41c139a97406b9955f0607fcafbf3315014456338a", - "zh:c550eae45fd32acdbe32b4e5c450ae95df6cb18903ac7216b1b07b23a16ce045", - "zh:c8f83b763b643893dcb6933a6bcee824cb514e06e7e5c5f5ac4ba187e66d7e22", - "zh:dcdac07e7ea18464dea729717870c275de9453775243c231e1fb305cad0ee597", + "h1:5KSVV/O2eG6ty/3/qpOLQFQqJd96KEPzsTHItslJaMw=", + "zh:341c22454d24a75792aa99fbbc0c156f368534b7bb04eef4701b85995c7526a4", + "zh:3708656d75061c92f7208cc731b946c991ad343a443f8ff0ef082f077b7580b9", + "zh:38ca06f9f45705c648f04f272bd9483397693ea8da6db788cd7955f49ab79d6b", + "zh:3f305adb5ee0032e0ea68d198a089ecfd0127092930e99fa51377a250292b592", + "zh:4ae2fc6065164a819f576f705e634ebf5059f983149a41dad909719fea96145a", + "zh:5d376ac7dd71898a94038d6b6b8036dfec4c0216d832ec1135c855bf3e58eb5f", + "zh:63d2ff296d3aee5787e12c759a6a3d5aa15a574456aebbe11b833f01adf3faef", + "zh:8ad8746741f7f0ac10da6f1d105f26ebeb6e4d944f58ba749e86d7c9a67da3db", + "zh:abec182594ee8a21d72a5f23d3aa7fa45247488539fce6ed648c9c255d8bf972", + "zh:bf704b400be4181333b38c0306949f26326a9aa5ae68b4167e2fb8ee7fb13618", + "zh:c072938f8695f725fc5fbe986a54890f00d520cce570006390dc5bbc51b2a4ea", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", ] } diff --git a/templates/shared_services/cyclecloud/terraform/main.tf b/templates/shared_services/cyclecloud/terraform/main.tf index 2e11680924..d2c5a0829f 100644 --- a/templates/shared_services/cyclecloud/terraform/main.tf +++ b/templates/shared_services/cyclecloud/terraform/main.tf @@ -3,7 +3,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "=3.5.0" + version = "=3.112.0" } random = { source = "hashicorp/random" diff --git a/templates/shared_services/cyclecloud/terraform/upgrade.sh b/templates/shared_services/cyclecloud/terraform/upgrade.sh new file mode 100644 index 0000000000..5368cb1a55 --- /dev/null +++ b/templates/shared_services/cyclecloud/terraform/upgrade.sh @@ -0,0 +1,13 @@ +#!/bin/bash +set -e + +# This script is used to install the bundle directly without having to interact with Porter + +# This script assumes you have created an .env from the sample and the variables +# will come from there. +# shellcheck disable=SC2154 +terraform init -upgrade -reconfigure -input=false -backend=true \ + -backend-config="resource_group_name=${TF_VAR_mgmt_resource_group_name}" \ + -backend-config="storage_account_name=${TF_VAR_mgmt_storage_account_name}" \ + -backend-config="container_name=${TF_VAR_terraform_state_container_name}" \ + -backend-config="key=${TF_VAR_tre_resource_id}-${ID}" diff --git a/templates/shared_services/databricks-auth/porter.yaml b/templates/shared_services/databricks-auth/porter.yaml index b14922cedc..c35b660e81 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.5 +version: 0.1.6 description: "An Azure TRE shared service for Azure Databricks authentication." registry: azuretre dockerfile: Dockerfile.tmpl diff --git a/templates/shared_services/databricks-auth/terraform/.terraform.lock.hcl b/templates/shared_services/databricks-auth/terraform/.terraform.lock.hcl index e76942a368..57c968ed2c 100644 --- a/templates/shared_services/databricks-auth/terraform/.terraform.lock.hcl +++ b/templates/shared_services/databricks-auth/terraform/.terraform.lock.hcl @@ -20,21 +20,21 @@ provider "registry.terraform.io/databricks/databricks" { } provider "registry.terraform.io/hashicorp/azurerm" { - version = "3.40.0" - constraints = "3.40.0" + version = "3.112.0" + constraints = "3.112.0" hashes = [ - "h1:/Jbhw/zNAsDYDoASaG6w+0KZyay9BkUVOpR8b7m0CsA=", - "zh:00fa6dc05bf2643c6a3c741edb7d88263698086835a8a613f1d7bd76d1b918fd", - "zh:0da9b788e773272a7aa9d59bd9e3d5842edd4acc8c3895bea469e66dc14205a0", - "zh:25a8c39d1f042fc7c83ba9dd745c3569ea9e577fadb57563a575fb115ac2b9f1", - "zh:4423666dbeae8bc22c6e8898ffbb88745681dc27668ca9104b665dd7f3d7292c", - "zh:78c07308e7407b558d15737a98fb5eaf15529d297fc3798de6a7d61e0466e2e3", - "zh:894aca7e6f4f331ee8eb51957a180dc03d399d2b1727e0d7842e9b3f022a8c6a", - "zh:bb0e620c2161b4c4892a6f50b1c4c69ed70f66bb5e92543a03d79d0e4b1d9441", - "zh:c7d8e6a791159ca63b30908c9efe72ab65f60d64b30f0c1eb5a64972f4994844", - "zh:d04c11bfd346c1ac34d16bbdca70b23b006e822f6beb236b85375e8343888eb4", - "zh:f4edea9660327c7c70a823d786fd1b1c1b186c8759770447f63da72f23e1a73c", + "h1:5KSVV/O2eG6ty/3/qpOLQFQqJd96KEPzsTHItslJaMw=", + "zh:341c22454d24a75792aa99fbbc0c156f368534b7bb04eef4701b85995c7526a4", + "zh:3708656d75061c92f7208cc731b946c991ad343a443f8ff0ef082f077b7580b9", + "zh:38ca06f9f45705c648f04f272bd9483397693ea8da6db788cd7955f49ab79d6b", + "zh:3f305adb5ee0032e0ea68d198a089ecfd0127092930e99fa51377a250292b592", + "zh:4ae2fc6065164a819f576f705e634ebf5059f983149a41dad909719fea96145a", + "zh:5d376ac7dd71898a94038d6b6b8036dfec4c0216d832ec1135c855bf3e58eb5f", + "zh:63d2ff296d3aee5787e12c759a6a3d5aa15a574456aebbe11b833f01adf3faef", + "zh:8ad8746741f7f0ac10da6f1d105f26ebeb6e4d944f58ba749e86d7c9a67da3db", + "zh:abec182594ee8a21d72a5f23d3aa7fa45247488539fce6ed648c9c255d8bf972", + "zh:bf704b400be4181333b38c0306949f26326a9aa5ae68b4167e2fb8ee7fb13618", + "zh:c072938f8695f725fc5fbe986a54890f00d520cce570006390dc5bbc51b2a4ea", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", - "zh:f986e268949cf445ff53a66af48a87c6f6dba5964e8a5b1dc0ea02afabdd71f7", ] } diff --git a/templates/shared_services/databricks-auth/terraform/providers.tf b/templates/shared_services/databricks-auth/terraform/providers.tf index 6b77c3bb03..8277a60ac5 100644 --- a/templates/shared_services/databricks-auth/terraform/providers.tf +++ b/templates/shared_services/databricks-auth/terraform/providers.tf @@ -2,7 +2,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "=3.40.0" + version = "=3.112.0" } databricks = { source = "databricks/databricks" diff --git a/templates/shared_services/databricks-auth/terraform/upgrade.sh b/templates/shared_services/databricks-auth/terraform/upgrade.sh new file mode 100644 index 0000000000..70b3863871 --- /dev/null +++ b/templates/shared_services/databricks-auth/terraform/upgrade.sh @@ -0,0 +1,13 @@ +#!/bin/bash +set -e + +# This script is used to install the bundle directly without having to interact with Porter + +# This script assumes you have created an .env from the sample and the variables +# will come from there. +# shellcheck disable=SC2154 +terraform init -upgrade -reconfigure -input=false -backend=true \ + -backend-config="resource_group_name=${TF_VAR_mgmt_resource_group_name}" \ + -backend-config="storage_account_name=${TF_VAR_mgmt_storage_account_name}" \ + -backend-config="container_name=${TF_VAR_terraform_state_container_name}" \ + -backend-config="key=tre-workspace-service-gitea-${TF_VAR_id}" diff --git a/templates/shared_services/firewall/porter.yaml b/templates/shared_services/firewall/porter.yaml index d84fcb2cd1..f4370e214d 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.2.0 +version: 1.2.1 description: "An Azure TRE Firewall shared service" dockerfile: Dockerfile.tmpl registry: azuretre diff --git a/templates/shared_services/firewall/terraform/.terraform.lock.hcl b/templates/shared_services/firewall/terraform/.terraform.lock.hcl index 617d685d57..b76fcebd94 100644 --- a/templates/shared_services/firewall/terraform/.terraform.lock.hcl +++ b/templates/shared_services/firewall/terraform/.terraform.lock.hcl @@ -2,21 +2,21 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/azurerm" { - version = "3.53.0" - constraints = "3.53.0" + version = "3.112.0" + constraints = "3.112.0" hashes = [ - "h1:bK70LV1NldhodSm58cUpawKwdUL1A5AKKglAV2wZ/QY=", - "zh:078ece8318ad7d6c1cd2e5f2044188e74af63921b93223c7f8d477539fa91888", - "zh:1bdc98ff8c2d3f3e81a746762e03d39794b2f5c90dc478cdb23dcc3d3f9947b6", - "zh:20b51cfc0ffc4ff368e6eb2eaece0b6bb99ade09e4b91b3444b50e94fc54c119", - "zh:233eed91279a9473825ba02d66487388d66dfc719b7249112d085dece0c2b594", - "zh:397ac8194ecc2f8d34d42600d6bf9e20399b222170dc1443b5800db3135ebc99", - "zh:3af3a2d8485d6c1ffcd26848af9ab087dfcb6cb045cc624e51f4db5144b53a9c", - "zh:5d0b9a346b57cccc369e2076556274225ec7f1c9044a2503dcfd8c117cdc2f79", - "zh:6e762dcef4ba14985f93af5f3fd195c9ee7d27de8de3bebdeefe761e53e79bb9", - "zh:73f9be719aa867985b1744c1f4fab834d01eb2069ec7a78b3a1bfa87c8256a40", - "zh:756deed30c20ffc9b4756c239e1675d3693f7175851e5ef946948a8bfb0b7935", - "zh:c279f99902a45a5b88d25d609a73709d101af3ce71222efbab9d4706c8a538b4", + "h1:5KSVV/O2eG6ty/3/qpOLQFQqJd96KEPzsTHItslJaMw=", + "zh:341c22454d24a75792aa99fbbc0c156f368534b7bb04eef4701b85995c7526a4", + "zh:3708656d75061c92f7208cc731b946c991ad343a443f8ff0ef082f077b7580b9", + "zh:38ca06f9f45705c648f04f272bd9483397693ea8da6db788cd7955f49ab79d6b", + "zh:3f305adb5ee0032e0ea68d198a089ecfd0127092930e99fa51377a250292b592", + "zh:4ae2fc6065164a819f576f705e634ebf5059f983149a41dad909719fea96145a", + "zh:5d376ac7dd71898a94038d6b6b8036dfec4c0216d832ec1135c855bf3e58eb5f", + "zh:63d2ff296d3aee5787e12c759a6a3d5aa15a574456aebbe11b833f01adf3faef", + "zh:8ad8746741f7f0ac10da6f1d105f26ebeb6e4d944f58ba749e86d7c9a67da3db", + "zh:abec182594ee8a21d72a5f23d3aa7fa45247488539fce6ed648c9c255d8bf972", + "zh:bf704b400be4181333b38c0306949f26326a9aa5ae68b4167e2fb8ee7fb13618", + "zh:c072938f8695f725fc5fbe986a54890f00d520cce570006390dc5bbc51b2a4ea", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", ] } diff --git a/templates/shared_services/firewall/terraform/providers.tf b/templates/shared_services/firewall/terraform/providers.tf index a9a55fbbf7..59e931d77e 100644 --- a/templates/shared_services/firewall/terraform/providers.tf +++ b/templates/shared_services/firewall/terraform/providers.tf @@ -3,7 +3,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "=3.53.0" + version = "=3.112.0" } } diff --git a/templates/shared_services/firewall/terraform/upgrade.sh b/templates/shared_services/firewall/terraform/upgrade.sh new file mode 100644 index 0000000000..d690d433a7 --- /dev/null +++ b/templates/shared_services/firewall/terraform/upgrade.sh @@ -0,0 +1,13 @@ +#!/bin/bash +set -e + +# This script is used to install the bundle directly without having to interact with Porter + +# This script assumes you have created an .env from the sample and the variables +# will come from there. +# shellcheck disable=SC2154 +terraform init -upgrade -reconfigure -input=false -backend=true \ + -backend-config="resource_group_name=${TF_VAR_mgmt_resource_group_name}" \ + -backend-config="storage_account_name=${TF_VAR_mgmt_storage_account_name}" \ + -backend-config="container_name=${TF_VAR_terraform_state_container_name}" \ + -backend-config="key=${TRE_ID}-shared-service-firewall" diff --git a/templates/shared_services/gitea/porter.yaml b/templates/shared_services/gitea/porter.yaml index 5c49293e65..384ba69b4d 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.0.2 +version: 1.0.3 description: "A Gitea shared service" dockerfile: Dockerfile.tmpl registry: azuretre diff --git a/templates/shared_services/gitea/terraform/.terraform.lock.hcl b/templates/shared_services/gitea/terraform/.terraform.lock.hcl index 7addb0336b..18dd46c782 100644 --- a/templates/shared_services/gitea/terraform/.terraform.lock.hcl +++ b/templates/shared_services/gitea/terraform/.terraform.lock.hcl @@ -2,22 +2,22 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/azurerm" { - version = "3.33.0" - constraints = "3.33.0" + version = "3.112.0" + constraints = "3.112.0" hashes = [ - "h1:pXB6SKE4NKdf+LepsQjrLcBnVTL5ejeKvx/kyojai6c=", - "zh:136d9c642746d8d84e62ecd8ab0c7dc015eac504c1f068e06fad438ae222d934", - "zh:266e64b8e32a94ddcc20954ebad1d8ff3921d318addf576e981b1390e5d5ba79", - "zh:3bd84a1e5b3bbe34a5870f271d6a5bf9b35a4c924db32b450a1fb53bc910c37a", - "zh:3c6604041472bb4691b502877cf9d886ed9f973fbadf11389ec9499fdc66045e", - "zh:680c00a73c8054c36a58115a44d02d1ebb675c2ad3afaaab2d74a01f978f16ce", - "zh:6dab47ef64f90e43b75ed240a974c4119f5268be4433f3c1c3e97559e7ef2f38", - "zh:9f73f19fdc340c443693dc03f1a145c6bd0ee5fd425eab7473d06abbe39b99d7", - "zh:9ff008b6737e880f191b4be6dfcef95ff019969dd787c44a58c2d7d6aaf6623b", - "zh:be297f1515e9ac63886e3e092a0bcd10aa8aa2b69c2b0995ce4e069176b07a95", + "h1:5KSVV/O2eG6ty/3/qpOLQFQqJd96KEPzsTHItslJaMw=", + "zh:341c22454d24a75792aa99fbbc0c156f368534b7bb04eef4701b85995c7526a4", + "zh:3708656d75061c92f7208cc731b946c991ad343a443f8ff0ef082f077b7580b9", + "zh:38ca06f9f45705c648f04f272bd9483397693ea8da6db788cd7955f49ab79d6b", + "zh:3f305adb5ee0032e0ea68d198a089ecfd0127092930e99fa51377a250292b592", + "zh:4ae2fc6065164a819f576f705e634ebf5059f983149a41dad909719fea96145a", + "zh:5d376ac7dd71898a94038d6b6b8036dfec4c0216d832ec1135c855bf3e58eb5f", + "zh:63d2ff296d3aee5787e12c759a6a3d5aa15a574456aebbe11b833f01adf3faef", + "zh:8ad8746741f7f0ac10da6f1d105f26ebeb6e4d944f58ba749e86d7c9a67da3db", + "zh:abec182594ee8a21d72a5f23d3aa7fa45247488539fce6ed648c9c255d8bf972", + "zh:bf704b400be4181333b38c0306949f26326a9aa5ae68b4167e2fb8ee7fb13618", + "zh:c072938f8695f725fc5fbe986a54890f00d520cce570006390dc5bbc51b2a4ea", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", - "zh:fb29a566e7698cfae477f3efa3bba38526ec8343355763178c6e9c96e51399f3", - "zh:fbc3b625733ce5f0970fa8d9743f6db51064c168d6be5fc7a5e3d1a54af28bb7", ] } diff --git a/templates/shared_services/gitea/terraform/main.tf b/templates/shared_services/gitea/terraform/main.tf index 8c2b304321..6fd7fe4331 100644 --- a/templates/shared_services/gitea/terraform/main.tf +++ b/templates/shared_services/gitea/terraform/main.tf @@ -3,7 +3,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "=3.33.0" + version = "=3.112.0" } local = { source = "hashicorp/local" diff --git a/templates/shared_services/gitea/terraform/upgrade.sh b/templates/shared_services/gitea/terraform/upgrade.sh new file mode 100644 index 0000000000..6618fcb445 --- /dev/null +++ b/templates/shared_services/gitea/terraform/upgrade.sh @@ -0,0 +1,13 @@ +#!/bin/bash +set -e + +# This script is used to install the bundle directly without having to interact with Porter + +# This script assumes you have created an .env from the sample and the variables +# will come from there. +# shellcheck disable=SC2154 +terraform init -upgrade -reconfigure -input=false -backend=true \ + -backend-config="resource_group_name=${TF_VAR_mgmt_resource_group_name}" \ + -backend-config="storage_account_name=${TF_VAR_mgmt_storage_account_name}" \ + -backend-config="container_name=${TF_VAR_terraform_state_container_name}" \ + -backend-config="key=${TRE_ID}-gitea" diff --git a/templates/shared_services/sonatype-nexus-vm/porter.yaml b/templates/shared_services/sonatype-nexus-vm/porter.yaml index f46a419468..79ea23c4be 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.0.0 +version: 3.0.1 description: "A Sonatype Nexus shared service" dockerfile: Dockerfile.tmpl registry: azuretre diff --git a/templates/shared_services/sonatype-nexus-vm/terraform/.terraform.lock.hcl b/templates/shared_services/sonatype-nexus-vm/terraform/.terraform.lock.hcl index 721b3646a3..819c124189 100644 --- a/templates/shared_services/sonatype-nexus-vm/terraform/.terraform.lock.hcl +++ b/templates/shared_services/sonatype-nexus-vm/terraform/.terraform.lock.hcl @@ -2,21 +2,21 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/azurerm" { - version = "3.53.0" - constraints = "3.53.0" + version = "3.112.0" + constraints = "3.112.0" hashes = [ - "h1:bK70LV1NldhodSm58cUpawKwdUL1A5AKKglAV2wZ/QY=", - "zh:078ece8318ad7d6c1cd2e5f2044188e74af63921b93223c7f8d477539fa91888", - "zh:1bdc98ff8c2d3f3e81a746762e03d39794b2f5c90dc478cdb23dcc3d3f9947b6", - "zh:20b51cfc0ffc4ff368e6eb2eaece0b6bb99ade09e4b91b3444b50e94fc54c119", - "zh:233eed91279a9473825ba02d66487388d66dfc719b7249112d085dece0c2b594", - "zh:397ac8194ecc2f8d34d42600d6bf9e20399b222170dc1443b5800db3135ebc99", - "zh:3af3a2d8485d6c1ffcd26848af9ab087dfcb6cb045cc624e51f4db5144b53a9c", - "zh:5d0b9a346b57cccc369e2076556274225ec7f1c9044a2503dcfd8c117cdc2f79", - "zh:6e762dcef4ba14985f93af5f3fd195c9ee7d27de8de3bebdeefe761e53e79bb9", - "zh:73f9be719aa867985b1744c1f4fab834d01eb2069ec7a78b3a1bfa87c8256a40", - "zh:756deed30c20ffc9b4756c239e1675d3693f7175851e5ef946948a8bfb0b7935", - "zh:c279f99902a45a5b88d25d609a73709d101af3ce71222efbab9d4706c8a538b4", + "h1:5KSVV/O2eG6ty/3/qpOLQFQqJd96KEPzsTHItslJaMw=", + "zh:341c22454d24a75792aa99fbbc0c156f368534b7bb04eef4701b85995c7526a4", + "zh:3708656d75061c92f7208cc731b946c991ad343a443f8ff0ef082f077b7580b9", + "zh:38ca06f9f45705c648f04f272bd9483397693ea8da6db788cd7955f49ab79d6b", + "zh:3f305adb5ee0032e0ea68d198a089ecfd0127092930e99fa51377a250292b592", + "zh:4ae2fc6065164a819f576f705e634ebf5059f983149a41dad909719fea96145a", + "zh:5d376ac7dd71898a94038d6b6b8036dfec4c0216d832ec1135c855bf3e58eb5f", + "zh:63d2ff296d3aee5787e12c759a6a3d5aa15a574456aebbe11b833f01adf3faef", + "zh:8ad8746741f7f0ac10da6f1d105f26ebeb6e4d944f58ba749e86d7c9a67da3db", + "zh:abec182594ee8a21d72a5f23d3aa7fa45247488539fce6ed648c9c255d8bf972", + "zh:bf704b400be4181333b38c0306949f26326a9aa5ae68b4167e2fb8ee7fb13618", + "zh:c072938f8695f725fc5fbe986a54890f00d520cce570006390dc5bbc51b2a4ea", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", ] } diff --git a/templates/shared_services/sonatype-nexus-vm/terraform/main.tf b/templates/shared_services/sonatype-nexus-vm/terraform/main.tf index a7de42460d..bc5244c1ff 100644 --- a/templates/shared_services/sonatype-nexus-vm/terraform/main.tf +++ b/templates/shared_services/sonatype-nexus-vm/terraform/main.tf @@ -3,7 +3,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "=3.53.0" + version = "=3.112.0" } random = { source = "hashicorp/random" diff --git a/templates/shared_services/sonatype-nexus-vm/terraform/upgrade.sh b/templates/shared_services/sonatype-nexus-vm/terraform/upgrade.sh new file mode 100644 index 0000000000..f15b4a2ee6 --- /dev/null +++ b/templates/shared_services/sonatype-nexus-vm/terraform/upgrade.sh @@ -0,0 +1,13 @@ +#!/bin/bash +set -e + +# This script is used to install the bundle directly without having to interact with Porter + +# This script assumes you have created an .env from the sample and the variables +# will come from there. +# shellcheck disable=SC2154 +terraform init -upgrade -reconfigure -input=false -backend=true \ + -backend-config="resource_group_name=${TF_VAR_mgmt_resource_group_name}" \ + -backend-config="storage_account_name=${TF_VAR_mgmt_storage_account_name}" \ + -backend-config="container_name=${TF_VAR_terraform_state_container_name}" \ + -backend-config="key=${TRE_ID:?}-shared-service-sonatype-nexus" diff --git a/templates/workspace_services/azureml/porter.yaml b/templates/workspace_services/azureml/porter.yaml index 1d4b45d7b8..abda2f0faa 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: 0.8.10 +version: 0.8.11 description: "An Azure TRE service for Azure Machine Learning" registry: azuretre dockerfile: Dockerfile.tmpl diff --git a/templates/workspace_services/azureml/terraform/.terraform.lock.hcl b/templates/workspace_services/azureml/terraform/.terraform.lock.hcl index 86741fbb56..8558821b90 100644 --- a/templates/workspace_services/azureml/terraform/.terraform.lock.hcl +++ b/templates/workspace_services/azureml/terraform/.terraform.lock.hcl @@ -22,21 +22,21 @@ provider "registry.terraform.io/azure/azapi" { } provider "registry.terraform.io/hashicorp/azurerm" { - version = "3.37.0" - constraints = "3.37.0" + version = "3.112.0" + constraints = "3.112.0" hashes = [ - "h1:83XTgyPKUKt706IjTLHo9HL0KN5m+DwmSKuVQv6dNb4=", - "zh:2a7bda0b7679d1c791c762103a22f333b544b6e6776c4177f33bafc9cc28c919", - "zh:49ff49670c349f918017315838a43ece09bf6f1bf7721b992f1cadbceb273c62", - "zh:55c9346d03380585e17616b79c4233b726d6fb9efa1921848834fc881e5d7d54", - "zh:5ab117b56a4236ea29926e9d95c27d7bf8ae6706d0fffb76c0b1bfe67bf3a78e", - "zh:5cfc086d5d56308edb3e68aac5f8a448ddc6e56541be7b152ae886399e9b2c69", - "zh:7a8929ed38152aac6652711f32193c8582bc996f8fa73879a3ac7a9bf88d2460", - "zh:895294e90a37f719975fcd2269b95e973147e48ec0ebb9c2fe472bc93531b49c", - "zh:8baa5e2b6e5b02df5b45d253a3aea93f22619920cf9577290d682b59a6d5664b", - "zh:b146a732c7909238c10d216b92a35092be4f72a0509a4c6742cc3245bf3b3bf3", - "zh:cedef898ccd512a6519eae3dff7eb0d581d2c3dad8e0001992da16ad1d7fded8", - "zh:f016d9ba94ea88476883b4d63cff88a0225974e0a8b8c3e8555f73c5de6f7119", + "h1:5KSVV/O2eG6ty/3/qpOLQFQqJd96KEPzsTHItslJaMw=", + "zh:341c22454d24a75792aa99fbbc0c156f368534b7bb04eef4701b85995c7526a4", + "zh:3708656d75061c92f7208cc731b946c991ad343a443f8ff0ef082f077b7580b9", + "zh:38ca06f9f45705c648f04f272bd9483397693ea8da6db788cd7955f49ab79d6b", + "zh:3f305adb5ee0032e0ea68d198a089ecfd0127092930e99fa51377a250292b592", + "zh:4ae2fc6065164a819f576f705e634ebf5059f983149a41dad909719fea96145a", + "zh:5d376ac7dd71898a94038d6b6b8036dfec4c0216d832ec1135c855bf3e58eb5f", + "zh:63d2ff296d3aee5787e12c759a6a3d5aa15a574456aebbe11b833f01adf3faef", + "zh:8ad8746741f7f0ac10da6f1d105f26ebeb6e4d944f58ba749e86d7c9a67da3db", + "zh:abec182594ee8a21d72a5f23d3aa7fa45247488539fce6ed648c9c255d8bf972", + "zh:bf704b400be4181333b38c0306949f26326a9aa5ae68b4167e2fb8ee7fb13618", + "zh:c072938f8695f725fc5fbe986a54890f00d520cce570006390dc5bbc51b2a4ea", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", ] } @@ -62,7 +62,8 @@ provider "registry.terraform.io/hashicorp/external" { } provider "registry.terraform.io/hashicorp/random" { - version = "3.4.3" + version = "3.4.3" + constraints = "3.4.3" hashes = [ "h1:xZGZf18JjMS06pFa4NErzANI98qi59SEcBsOcS2P2yQ=", "zh:41c53ba47085d8261590990f8633c8906696fa0a3c4b384ff6a7ecbf84339752", diff --git a/templates/workspace_services/azureml/terraform/providers.tf b/templates/workspace_services/azureml/terraform/providers.tf index 9c5e1d1ff3..27fc4f7b9d 100644 --- a/templates/workspace_services/azureml/terraform/providers.tf +++ b/templates/workspace_services/azureml/terraform/providers.tf @@ -2,7 +2,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "=3.37.0" + version = "=3.112.0" } azapi = { source = "Azure/azapi" diff --git a/templates/workspace_services/azureml/terraform/upgrade.sh b/templates/workspace_services/azureml/terraform/upgrade.sh new file mode 100644 index 0000000000..65dd6f75dd --- /dev/null +++ b/templates/workspace_services/azureml/terraform/upgrade.sh @@ -0,0 +1,13 @@ +#!/bin/bash +set -e + +# This script is used to install the bundle directly without having to interact with Porter + +# This script assumes you have created an .env from the sample and the variables +# will come from there. +# shellcheck disable=SC2154 +terraform init -upgrade -reconfigure -input=false -backend=true \ + -backend-config="resource_group_name=${TF_VAR_mgmt_resource_group_name}" \ + -backend-config="storage_account_name=${TF_VAR_mgmt_storage_account_name}" \ + -backend-config="container_name=${TF_VAR_terraform_state_container_name}" \ + -backend-config="key=${TRE_ID?}_azureml" diff --git a/templates/workspace_services/azureml/user_resources/aml_compute/terraform/.terraform.lock.hcl b/templates/workspace_services/azureml/user_resources/aml_compute/terraform/.terraform.lock.hcl index 2d50ab9ef5..17f348fd95 100644 --- a/templates/workspace_services/azureml/user_resources/aml_compute/terraform/.terraform.lock.hcl +++ b/templates/workspace_services/azureml/user_resources/aml_compute/terraform/.terraform.lock.hcl @@ -22,21 +22,21 @@ provider "registry.terraform.io/azure/azapi" { } provider "registry.terraform.io/hashicorp/azurerm" { - version = "3.37.0" - constraints = "3.37.0" + version = "3.112.0" + constraints = "3.112.0" hashes = [ - "h1:83XTgyPKUKt706IjTLHo9HL0KN5m+DwmSKuVQv6dNb4=", - "zh:2a7bda0b7679d1c791c762103a22f333b544b6e6776c4177f33bafc9cc28c919", - "zh:49ff49670c349f918017315838a43ece09bf6f1bf7721b992f1cadbceb273c62", - "zh:55c9346d03380585e17616b79c4233b726d6fb9efa1921848834fc881e5d7d54", - "zh:5ab117b56a4236ea29926e9d95c27d7bf8ae6706d0fffb76c0b1bfe67bf3a78e", - "zh:5cfc086d5d56308edb3e68aac5f8a448ddc6e56541be7b152ae886399e9b2c69", - "zh:7a8929ed38152aac6652711f32193c8582bc996f8fa73879a3ac7a9bf88d2460", - "zh:895294e90a37f719975fcd2269b95e973147e48ec0ebb9c2fe472bc93531b49c", - "zh:8baa5e2b6e5b02df5b45d253a3aea93f22619920cf9577290d682b59a6d5664b", - "zh:b146a732c7909238c10d216b92a35092be4f72a0509a4c6742cc3245bf3b3bf3", - "zh:cedef898ccd512a6519eae3dff7eb0d581d2c3dad8e0001992da16ad1d7fded8", - "zh:f016d9ba94ea88476883b4d63cff88a0225974e0a8b8c3e8555f73c5de6f7119", + "h1:5KSVV/O2eG6ty/3/qpOLQFQqJd96KEPzsTHItslJaMw=", + "zh:341c22454d24a75792aa99fbbc0c156f368534b7bb04eef4701b85995c7526a4", + "zh:3708656d75061c92f7208cc731b946c991ad343a443f8ff0ef082f077b7580b9", + "zh:38ca06f9f45705c648f04f272bd9483397693ea8da6db788cd7955f49ab79d6b", + "zh:3f305adb5ee0032e0ea68d198a089ecfd0127092930e99fa51377a250292b592", + "zh:4ae2fc6065164a819f576f705e634ebf5059f983149a41dad909719fea96145a", + "zh:5d376ac7dd71898a94038d6b6b8036dfec4c0216d832ec1135c855bf3e58eb5f", + "zh:63d2ff296d3aee5787e12c759a6a3d5aa15a574456aebbe11b833f01adf3faef", + "zh:8ad8746741f7f0ac10da6f1d105f26ebeb6e4d944f58ba749e86d7c9a67da3db", + "zh:abec182594ee8a21d72a5f23d3aa7fa45247488539fce6ed648c9c255d8bf972", + "zh:bf704b400be4181333b38c0306949f26326a9aa5ae68b4167e2fb8ee7fb13618", + "zh:c072938f8695f725fc5fbe986a54890f00d520cce570006390dc5bbc51b2a4ea", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", ] } diff --git a/templates/workspace_services/azureml/user_resources/aml_compute/terraform/providers.tf b/templates/workspace_services/azureml/user_resources/aml_compute/terraform/providers.tf index ae58c6f613..00c3c81e53 100644 --- a/templates/workspace_services/azureml/user_resources/aml_compute/terraform/providers.tf +++ b/templates/workspace_services/azureml/user_resources/aml_compute/terraform/providers.tf @@ -2,7 +2,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "=3.37.0" + version = "=3.112.0" } azapi = { source = "Azure/azapi" diff --git a/templates/workspace_services/azureml/user_resources/aml_compute/terraform/upgrade.sh b/templates/workspace_services/azureml/user_resources/aml_compute/terraform/upgrade.sh new file mode 100644 index 0000000000..bc6c8cb219 --- /dev/null +++ b/templates/workspace_services/azureml/user_resources/aml_compute/terraform/upgrade.sh @@ -0,0 +1,13 @@ +#!/bin/bash +set -e + +# This script is used to install the bundle directly without having to interact with Porter + +# This script assumes you have created an .env from the sample and the variables +# will come from there. +# shellcheck disable=SC2154 +terraform init -upgrade -reconfigure -input=false -backend=true \ + -backend-config="resource_group_name=${TF_VAR_mgmt_resource_group_name}" \ + -backend-config="storage_account_name=${TF_VAR_mgmt_storage_account_name}" \ + -backend-config="container_name=${TF_VAR_terraform_state_container_name}" \ + -backend-config="key=tre-user-resource-aml-compute-instance" diff --git a/templates/workspace_services/azuresql/porter.yaml b/templates/workspace_services/azuresql/porter.yaml index 1316577ac5..4ec1e99a5d 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.9 +version: 1.0.10 description: "An Azure SQL workspace service" registry: azuretre dockerfile: Dockerfile.tmpl diff --git a/templates/workspace_services/azuresql/terraform/.terraform.lock.hcl b/templates/workspace_services/azuresql/terraform/.terraform.lock.hcl index fae00c026f..0e171bd3f0 100644 --- a/templates/workspace_services/azuresql/terraform/.terraform.lock.hcl +++ b/templates/workspace_services/azuresql/terraform/.terraform.lock.hcl @@ -2,21 +2,21 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/azurerm" { - version = "3.111.0" - constraints = "3.111.0" + version = "3.112.0" + constraints = "3.112.0" hashes = [ - "h1:vgrdy5JWGAK5N44/V75etoHIAMvXKNlMrIHTaWApehA=", - "zh:0db8afb9278993df7e74796bdd125153b07a7045e5ca1756783a8b8cfec564f4", - "zh:22c424fcfda13dc720caa289248c1b71b2ad20e329fd4a52cc6be7e45f795a4a", - "zh:471a2c1d7353bc21ef28963f006d2cf5276e7885b423fc0b73f2d8ce6cde72dd", - "zh:68bf81cb353c755d48792e881b6405919daa041e35de1d510209237d90d6c21f", - "zh:841d8664955bbc77f12095c9b1a4b3923362564a790fd945337759e9bc95d07e", - "zh:86e92f959056c573bf4b2be1d6cfa838dab06d3e5a944f371a1131e4c6477d88", - "zh:95a096ced57616659687970b5d618c2ce3cd54fa0311b7a7569435cacf39f26f", - "zh:c5656a11253ffdaee973e7292dd3c10a1db81f1fc9ee2d3041ae1182f7d25379", - "zh:cd6a1049de69280f339d6f83f30a9006bbe003a840a39eb7b5900990c5aadbb0", - "zh:e7b3d96f0c9ea47261dbd015f1f64fdb43c8ccb196afda862c0865e30d88245c", - "zh:f1ec7da6ab5526845274bff77e023b9faec71c2cf38bd18587274932b2aa2e89", + "h1:5KSVV/O2eG6ty/3/qpOLQFQqJd96KEPzsTHItslJaMw=", + "zh:341c22454d24a75792aa99fbbc0c156f368534b7bb04eef4701b85995c7526a4", + "zh:3708656d75061c92f7208cc731b946c991ad343a443f8ff0ef082f077b7580b9", + "zh:38ca06f9f45705c648f04f272bd9483397693ea8da6db788cd7955f49ab79d6b", + "zh:3f305adb5ee0032e0ea68d198a089ecfd0127092930e99fa51377a250292b592", + "zh:4ae2fc6065164a819f576f705e634ebf5059f983149a41dad909719fea96145a", + "zh:5d376ac7dd71898a94038d6b6b8036dfec4c0216d832ec1135c855bf3e58eb5f", + "zh:63d2ff296d3aee5787e12c759a6a3d5aa15a574456aebbe11b833f01adf3faef", + "zh:8ad8746741f7f0ac10da6f1d105f26ebeb6e4d944f58ba749e86d7c9a67da3db", + "zh:abec182594ee8a21d72a5f23d3aa7fa45247488539fce6ed648c9c255d8bf972", + "zh:bf704b400be4181333b38c0306949f26326a9aa5ae68b4167e2fb8ee7fb13618", + "zh:c072938f8695f725fc5fbe986a54890f00d520cce570006390dc5bbc51b2a4ea", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", ] } diff --git a/templates/workspace_services/azuresql/terraform/main.tf b/templates/workspace_services/azuresql/terraform/main.tf index 6ea4d2d51a..09c798dd1a 100644 --- a/templates/workspace_services/azuresql/terraform/main.tf +++ b/templates/workspace_services/azuresql/terraform/main.tf @@ -3,7 +3,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "3.111.0" + version = "3.112.0" } random = { source = "hashicorp/random" diff --git a/templates/workspace_services/azuresql/terraform/upgrade.sh b/templates/workspace_services/azuresql/terraform/upgrade.sh new file mode 100644 index 0000000000..d694a0fd3e --- /dev/null +++ b/templates/workspace_services/azuresql/terraform/upgrade.sh @@ -0,0 +1,13 @@ +#!/bin/bash +set -e + +# This script is used to install the bundle directly without having to interact with Porter + +# This script assumes you have created an .env from the sample and the variables +# will come from there. +# shellcheck disable=SC2154 +terraform init -upgrade -reconfigure -input=false -backend=true \ + -backend-config="resource_group_name=${TF_VAR_mgmt_resource_group_name}" \ + -backend-config="storage_account_name=${TF_VAR_mgmt_storage_account_name}" \ + -backend-config="container_name=${TF_VAR_terraform_state_container_name}" \ + -backend-config="key=${TF_VAR_tre_resource_id}-shared-azuresql" diff --git a/templates/workspace_services/databricks/porter.yaml b/templates/workspace_services/databricks/porter.yaml index d54a446c1f..61926c4052 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.3 +version: 1.0.4 description: "An Azure TRE service for Azure Databricks." registry: azuretre dockerfile: Dockerfile.tmpl diff --git a/templates/workspace_services/databricks/terraform/.terraform.lock.hcl b/templates/workspace_services/databricks/terraform/.terraform.lock.hcl index 450f2307b5..a39351fc0e 100644 --- a/templates/workspace_services/databricks/terraform/.terraform.lock.hcl +++ b/templates/workspace_services/databricks/terraform/.terraform.lock.hcl @@ -36,22 +36,22 @@ provider "registry.terraform.io/databricks/databricks" { } provider "registry.terraform.io/hashicorp/azurerm" { - version = "3.108.0" - constraints = "3.108.0" + version = "3.112.0" + constraints = "3.112.0" hashes = [ - "h1:RIFBFTXz4X48JDHjbQHX4y400ax1/uEzMVFZgX3/z3w=", - "zh:2afecf948fd702bc08c87d9114595809d011f99a70a12dbf6bc67a12d0bee5fc", - "zh:395b6d1384a579867064e62d49b0b91e15919c33b03ea8b5031c2779bfa16b3d", - "zh:3e5594c59b6b02bc6e0f4c3de71aa2ab992494c53725fb3c64d36745f3814ef3", - "zh:4613e190609377309f6a4ac44f631c9469efab3ae148dbb09e73718201dc4f42", - "zh:624f01cb7604d58100068401bd07ab09a141e7bd318f8214127838cf202e4868", - "zh:65709950c9933e38704e2075a2339951e1259a6e882f35d390be36e1844ebc72", - "zh:af82657fad4e3a177f2ebb8035b45bda40f8856eb999288533321028794d03e5", - "zh:c40b331eba08830d16c0e6795fa7cbf08231073df2cfdb0f34e9d908a915981a", - "zh:d6ccd533a0bd984ca7ed1ae860e057e9e2f88468745be9712236d2d240353de4", - "zh:f361fd398e8772f8554a010331d161d6f7284a43238fd28bfa7b41795a5538b8", + "h1:5KSVV/O2eG6ty/3/qpOLQFQqJd96KEPzsTHItslJaMw=", + "zh:341c22454d24a75792aa99fbbc0c156f368534b7bb04eef4701b85995c7526a4", + "zh:3708656d75061c92f7208cc731b946c991ad343a443f8ff0ef082f077b7580b9", + "zh:38ca06f9f45705c648f04f272bd9483397693ea8da6db788cd7955f49ab79d6b", + "zh:3f305adb5ee0032e0ea68d198a089ecfd0127092930e99fa51377a250292b592", + "zh:4ae2fc6065164a819f576f705e634ebf5059f983149a41dad909719fea96145a", + "zh:5d376ac7dd71898a94038d6b6b8036dfec4c0216d832ec1135c855bf3e58eb5f", + "zh:63d2ff296d3aee5787e12c759a6a3d5aa15a574456aebbe11b833f01adf3faef", + "zh:8ad8746741f7f0ac10da6f1d105f26ebeb6e4d944f58ba749e86d7c9a67da3db", + "zh:abec182594ee8a21d72a5f23d3aa7fa45247488539fce6ed648c9c255d8bf972", + "zh:bf704b400be4181333b38c0306949f26326a9aa5ae68b4167e2fb8ee7fb13618", + "zh:c072938f8695f725fc5fbe986a54890f00d520cce570006390dc5bbc51b2a4ea", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", - "zh:f8c2132c77d35930203ec66f1bf9bbf633a2406e9f7b572ff425d65b8aa8c492", ] } diff --git a/templates/workspace_services/databricks/terraform/providers.tf b/templates/workspace_services/databricks/terraform/providers.tf index e0fd9fc550..14d5a8f256 100644 --- a/templates/workspace_services/databricks/terraform/providers.tf +++ b/templates/workspace_services/databricks/terraform/providers.tf @@ -2,7 +2,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "=3.108.0" + version = "=3.112.0" } azapi = { source = "Azure/azapi" diff --git a/templates/workspace_services/databricks/terraform/upgrade.sh b/templates/workspace_services/databricks/terraform/upgrade.sh new file mode 100644 index 0000000000..70b3863871 --- /dev/null +++ b/templates/workspace_services/databricks/terraform/upgrade.sh @@ -0,0 +1,13 @@ +#!/bin/bash +set -e + +# This script is used to install the bundle directly without having to interact with Porter + +# This script assumes you have created an .env from the sample and the variables +# will come from there. +# shellcheck disable=SC2154 +terraform init -upgrade -reconfigure -input=false -backend=true \ + -backend-config="resource_group_name=${TF_VAR_mgmt_resource_group_name}" \ + -backend-config="storage_account_name=${TF_VAR_mgmt_storage_account_name}" \ + -backend-config="container_name=${TF_VAR_terraform_state_container_name}" \ + -backend-config="key=tre-workspace-service-gitea-${TF_VAR_id}" diff --git a/templates/workspace_services/gitea/porter.yaml b/templates/workspace_services/gitea/porter.yaml index e4780f0228..a951670425 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.0.3 +version: 1.0.5 description: "A Gitea workspace service" dockerfile: Dockerfile.tmpl registry: azuretre diff --git a/templates/workspace_services/gitea/terraform/.terraform.lock.hcl b/templates/workspace_services/gitea/terraform/.terraform.lock.hcl index 2f4c9d22e5..360080ee10 100644 --- a/templates/workspace_services/gitea/terraform/.terraform.lock.hcl +++ b/templates/workspace_services/gitea/terraform/.terraform.lock.hcl @@ -2,27 +2,28 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/azurerm" { - version = "3.22.0" - constraints = "3.22.0" + version = "3.112.0" + constraints = "3.112.0" hashes = [ - "h1:bxkMviG7vvNV2aPZQPall0mdIGOojsYeJvKbscPCZeM=", - "zh:03441438f73965fef3a60582573dc9137baf3142d157f16a8c187f7995bf968e", - "zh:1a45946e3ad479745e01eb28283beba4b7c63a94d29ccd3afa3adb8aac41ffa7", - "zh:457352525d3744a9f5d809a68e61ba51ad022fa012d0f092f04e31730700977d", - "zh:48c4ac83fbf5c7295ffe9b8f6a2f3e25d40361b53a8c77f1516973c714862805", - "zh:48c503892d780977405b4ef23db55d1216bbe96a592de63769f827cf3d5e092a", - "zh:5d5935681f91af8a44772262d7f6f1ed0a4b4e113236cc166559ff57b2c936c4", - "zh:61377b5edefdfe96b160a10b1b86b6faef02b813ea7d3d9cbcd8bc664c3293ed", - "zh:73b0696146afd6ff360138425973b3349cb2a45f13094a861d9c162c23e0d796", - "zh:8b2178ca3e1618107a7d5d68f57ca239c68b70a60cdae1c0a3e3ba867282ba25", - "zh:a4021c34ee777863f032425774485adab1d4aba10ce38eb415b5c3a3179423a4", - "zh:c66daaf59d5750b1e49706ffa052cb4467280b0cb481fdd4f7618bb8b9d1edb1", + "h1:5KSVV/O2eG6ty/3/qpOLQFQqJd96KEPzsTHItslJaMw=", + "zh:341c22454d24a75792aa99fbbc0c156f368534b7bb04eef4701b85995c7526a4", + "zh:3708656d75061c92f7208cc731b946c991ad343a443f8ff0ef082f077b7580b9", + "zh:38ca06f9f45705c648f04f272bd9483397693ea8da6db788cd7955f49ab79d6b", + "zh:3f305adb5ee0032e0ea68d198a089ecfd0127092930e99fa51377a250292b592", + "zh:4ae2fc6065164a819f576f705e634ebf5059f983149a41dad909719fea96145a", + "zh:5d376ac7dd71898a94038d6b6b8036dfec4c0216d832ec1135c855bf3e58eb5f", + "zh:63d2ff296d3aee5787e12c759a6a3d5aa15a574456aebbe11b833f01adf3faef", + "zh:8ad8746741f7f0ac10da6f1d105f26ebeb6e4d944f58ba749e86d7c9a67da3db", + "zh:abec182594ee8a21d72a5f23d3aa7fa45247488539fce6ed648c9c255d8bf972", + "zh:bf704b400be4181333b38c0306949f26326a9aa5ae68b4167e2fb8ee7fb13618", + "zh:c072938f8695f725fc5fbe986a54890f00d520cce570006390dc5bbc51b2a4ea", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", ] } provider "registry.terraform.io/hashicorp/local" { - version = "2.2.3" + version = "2.2.3" + constraints = "2.2.3" hashes = [ "h1:aWp5iSUxBGgPv1UnV5yag9Pb0N+U1I0sZb38AXBFO8A=", "zh:04f0978bb3e052707b8e82e46780c371ac1c66b689b4a23bbc2f58865ab7d5c0", diff --git a/templates/workspace_services/gitea/terraform/main.tf b/templates/workspace_services/gitea/terraform/main.tf index 4ddd7e825f..8f9d00ee62 100644 --- a/templates/workspace_services/gitea/terraform/main.tf +++ b/templates/workspace_services/gitea/terraform/main.tf @@ -3,7 +3,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "=3.22.0" + version = "=3.112.0" } random = { source = "hashicorp/random" diff --git a/templates/workspace_services/gitea/terraform/upgrade.sh b/templates/workspace_services/gitea/terraform/upgrade.sh new file mode 100644 index 0000000000..70b3863871 --- /dev/null +++ b/templates/workspace_services/gitea/terraform/upgrade.sh @@ -0,0 +1,13 @@ +#!/bin/bash +set -e + +# This script is used to install the bundle directly without having to interact with Porter + +# This script assumes you have created an .env from the sample and the variables +# will come from there. +# shellcheck disable=SC2154 +terraform init -upgrade -reconfigure -input=false -backend=true \ + -backend-config="resource_group_name=${TF_VAR_mgmt_resource_group_name}" \ + -backend-config="storage_account_name=${TF_VAR_mgmt_storage_account_name}" \ + -backend-config="container_name=${TF_VAR_terraform_state_container_name}" \ + -backend-config="key=tre-workspace-service-gitea-${TF_VAR_id}" diff --git a/templates/workspace_services/guacamole/porter.yaml b/templates/workspace_services/guacamole/porter.yaml index 910efe2baa..4bd9428616 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.10.8 +version: 0.10.9 description: "An Azure TRE service for Guacamole" dockerfile: Dockerfile.tmpl registry: azuretre diff --git a/templates/workspace_services/guacamole/terraform/.terraform.lock.hcl b/templates/workspace_services/guacamole/terraform/.terraform.lock.hcl index 7ff7df02ee..8066c24cc3 100644 --- a/templates/workspace_services/guacamole/terraform/.terraform.lock.hcl +++ b/templates/workspace_services/guacamole/terraform/.terraform.lock.hcl @@ -2,21 +2,21 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/azurerm" { - version = "3.57.0" - constraints = "3.57.0" + version = "3.112.0" + constraints = "3.112.0" hashes = [ - "h1:SOBKU/ioGnpuQpAx6dgaD0EzfAM2W+uS9e6p59viSxs=", - "zh:028202b0ae01f1262dac076b383cb68b5dd624977669b6db833418c215eb8401", - "zh:26fcf9e9b73cb3bbf87a048361a89050d2e52bdc91190a305e624a62be26a3f4", - "zh:2f381103953e4513068eee62089a0ec8c60a18ecef2235138b6c29a45920d6a2", - "zh:376f016f4b449b2cf38f75e27e7a9157fdcfc925f28198124a30e316abb54f3d", - "zh:7d491bab94d5aba91cd9c307dbd4b655dcdc0a6212541e7800b9a902be98befe", - "zh:85fa7d8339efd15494f947cda02e9ed127eafa32652e568f54261b2e97d2b3ee", - "zh:950e079e55a7e321adbd2f6a0639a4b3b0fac47d2e4bb3a12791e0817b694238", - "zh:975260e09379c5c97cad3171327db2f0b4914909861d4c24ab784b0ecd79c54a", - "zh:a26bb67ab2d2f20e5fee4d41110584af17357f4b4266d80f9debfad61fa0a4fd", - "zh:da0e5d1ec301c69b6fae684e55059fc5e1b91699ed3696229f599d558401556b", - "zh:ea11e62ce53caec240cb3a1da25d248805387fa246314001ed3e07e9105f6e12", + "h1:5KSVV/O2eG6ty/3/qpOLQFQqJd96KEPzsTHItslJaMw=", + "zh:341c22454d24a75792aa99fbbc0c156f368534b7bb04eef4701b85995c7526a4", + "zh:3708656d75061c92f7208cc731b946c991ad343a443f8ff0ef082f077b7580b9", + "zh:38ca06f9f45705c648f04f272bd9483397693ea8da6db788cd7955f49ab79d6b", + "zh:3f305adb5ee0032e0ea68d198a089ecfd0127092930e99fa51377a250292b592", + "zh:4ae2fc6065164a819f576f705e634ebf5059f983149a41dad909719fea96145a", + "zh:5d376ac7dd71898a94038d6b6b8036dfec4c0216d832ec1135c855bf3e58eb5f", + "zh:63d2ff296d3aee5787e12c759a6a3d5aa15a574456aebbe11b833f01adf3faef", + "zh:8ad8746741f7f0ac10da6f1d105f26ebeb6e4d944f58ba749e86d7c9a67da3db", + "zh:abec182594ee8a21d72a5f23d3aa7fa45247488539fce6ed648c9c255d8bf972", + "zh:bf704b400be4181333b38c0306949f26326a9aa5ae68b4167e2fb8ee7fb13618", + "zh:c072938f8695f725fc5fbe986a54890f00d520cce570006390dc5bbc51b2a4ea", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", ] } diff --git a/templates/workspace_services/guacamole/terraform/providers.tf b/templates/workspace_services/guacamole/terraform/providers.tf index 54b8e17efe..09af63a4d1 100644 --- a/templates/workspace_services/guacamole/terraform/providers.tf +++ b/templates/workspace_services/guacamole/terraform/providers.tf @@ -2,7 +2,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "=3.57.0" + version = "=3.112.0" } local = { source = "hashicorp/local" diff --git a/templates/workspace_services/guacamole/terraform/upgrade.sh b/templates/workspace_services/guacamole/terraform/upgrade.sh new file mode 100644 index 0000000000..edf24afb36 --- /dev/null +++ b/templates/workspace_services/guacamole/terraform/upgrade.sh @@ -0,0 +1,13 @@ +#!/bin/bash +set -e + +# This script is used to install the bundle directly without having to interact with Porter + +# This script assumes you have created an .env from the sample and the variables +# will come from there. +# shellcheck disable=SC2154 +terraform init -upgrade -reconfigure -input=false -backend=true \ + -backend-config="resource_group_name=${TF_VAR_mgmt_resource_group_name}" \ + -backend-config="storage_account_name=${TF_VAR_mgmt_storage_account_name}" \ + -backend-config="container_name=${TF_VAR_terraform_state_container_name}" \ + -backend-config="key=${TRE_ID}${TF_VAR_workspace_id}guacamole" 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 f7fbc9a3ce..8e2f939c54 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: 0.1.8 +version: 0.1.9 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/terraform/.terraform.lock.hcl b/templates/workspace_services/guacamole/user_resources/guacamole-azure-export-reviewvm/terraform/.terraform.lock.hcl index c0fa94cf6c..d4260fd975 100644 --- a/templates/workspace_services/guacamole/user_resources/guacamole-azure-export-reviewvm/terraform/.terraform.lock.hcl +++ b/templates/workspace_services/guacamole/user_resources/guacamole-azure-export-reviewvm/terraform/.terraform.lock.hcl @@ -2,22 +2,22 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/azurerm" { - version = "3.41.0" - constraints = "3.41.0" + version = "3.112.0" + constraints = "3.112.0" hashes = [ - "h1:Kn7sqPk/YpsvORFEd/zHXa8U7KkVB551DXUMwvqiU0s=", - "zh:123838b581a27499d0a1e3a9804a6f57304969f58c4ea7fbd938ae2a795b2a19", - "zh:761a7bff3872a192202411aa62e3e6aedc3046f0df86967a1f9ed5a74207f451", - "zh:83092681a9e14d5e548edccece5086d822f86de6ff8227bb78706b41f0041697", - "zh:95fd6be4a3b995dc8ad40054646e2261e01365af7e8f8ebe0e62133cee8250cd", - "zh:995c3eb0aa23fc6948f45e68173034facc4bd92f4865abc3bba4bd305596fc86", - "zh:9f7b158d39f3e9fbc01ee27e6a63600838e34b7364715ebeea7d62717e48cb56", - "zh:b23193883592a4889942e82e73782e70dfbb517561a4f24b09f8ab6cbdc46866", - "zh:c4884d654d03a0546ec78f348563e32220ae35a2c76f22cb3c960f989dc6be48", - "zh:dda1c6720c6cef052db2fb4886a9cd46dee849e4367d6d66b45ad9d5bb607b94", - "zh:f0bc878d67785343bfc36a7d14ec58a67fa436f5b8b497221aea3931e3dccefd", + "h1:5KSVV/O2eG6ty/3/qpOLQFQqJd96KEPzsTHItslJaMw=", + "zh:341c22454d24a75792aa99fbbc0c156f368534b7bb04eef4701b85995c7526a4", + "zh:3708656d75061c92f7208cc731b946c991ad343a443f8ff0ef082f077b7580b9", + "zh:38ca06f9f45705c648f04f272bd9483397693ea8da6db788cd7955f49ab79d6b", + "zh:3f305adb5ee0032e0ea68d198a089ecfd0127092930e99fa51377a250292b592", + "zh:4ae2fc6065164a819f576f705e634ebf5059f983149a41dad909719fea96145a", + "zh:5d376ac7dd71898a94038d6b6b8036dfec4c0216d832ec1135c855bf3e58eb5f", + "zh:63d2ff296d3aee5787e12c759a6a3d5aa15a574456aebbe11b833f01adf3faef", + "zh:8ad8746741f7f0ac10da6f1d105f26ebeb6e4d944f58ba749e86d7c9a67da3db", + "zh:abec182594ee8a21d72a5f23d3aa7fa45247488539fce6ed648c9c255d8bf972", + "zh:bf704b400be4181333b38c0306949f26326a9aa5ae68b4167e2fb8ee7fb13618", + "zh:c072938f8695f725fc5fbe986a54890f00d520cce570006390dc5bbc51b2a4ea", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", - "zh:f6aa3c25f7106619cc6760e1d34b29b0956c50f285994f009939890a85e7b058", ] } diff --git a/templates/workspace_services/guacamole/user_resources/guacamole-azure-export-reviewvm/terraform/main.tf b/templates/workspace_services/guacamole/user_resources/guacamole-azure-export-reviewvm/terraform/main.tf index 3644542804..31a0f73c5b 100644 --- a/templates/workspace_services/guacamole/user_resources/guacamole-azure-export-reviewvm/terraform/main.tf +++ b/templates/workspace_services/guacamole/user_resources/guacamole-azure-export-reviewvm/terraform/main.tf @@ -3,7 +3,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "=3.41.0" + version = "=3.112.0" } random = { source = "hashicorp/random" diff --git a/templates/workspace_services/guacamole/user_resources/guacamole-azure-export-reviewvm/terraform/upgrade.sh b/templates/workspace_services/guacamole/user_resources/guacamole-azure-export-reviewvm/terraform/upgrade.sh new file mode 100644 index 0000000000..e5bbe41a91 --- /dev/null +++ b/templates/workspace_services/guacamole/user_resources/guacamole-azure-export-reviewvm/terraform/upgrade.sh @@ -0,0 +1,13 @@ +#!/bin/bash +set -e + +# This script is used to install the bundle directly without having to interact with Porter + +# This script assumes you have created an .env from the sample and the variables +# will come from there. +# shellcheck disable=SC2154 +terraform init -upgrade -reconfigure -input=false -backend=true \ + -backend-config="resource_group_name=${TF_VAR_mgmt_resource_group_name}" \ + -backend-config="storage_account_name=${TF_VAR_mgmt_storage_account_name}" \ + -backend-config="container_name=${TF_VAR_terraform_state_container_name}" \ + -backend-config="key=${TRE_ID}${TF_VAR_workspace_id}${TF_VAR_parent_service_id}guacamolewindowsvm" 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 e048a667dd..c2587b3140 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: 0.2.8 +version: 0.2.9 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/terraform/.terraform.lock.hcl b/templates/workspace_services/guacamole/user_resources/guacamole-azure-import-reviewvm/terraform/.terraform.lock.hcl index c0fa94cf6c..d4260fd975 100644 --- a/templates/workspace_services/guacamole/user_resources/guacamole-azure-import-reviewvm/terraform/.terraform.lock.hcl +++ b/templates/workspace_services/guacamole/user_resources/guacamole-azure-import-reviewvm/terraform/.terraform.lock.hcl @@ -2,22 +2,22 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/azurerm" { - version = "3.41.0" - constraints = "3.41.0" + version = "3.112.0" + constraints = "3.112.0" hashes = [ - "h1:Kn7sqPk/YpsvORFEd/zHXa8U7KkVB551DXUMwvqiU0s=", - "zh:123838b581a27499d0a1e3a9804a6f57304969f58c4ea7fbd938ae2a795b2a19", - "zh:761a7bff3872a192202411aa62e3e6aedc3046f0df86967a1f9ed5a74207f451", - "zh:83092681a9e14d5e548edccece5086d822f86de6ff8227bb78706b41f0041697", - "zh:95fd6be4a3b995dc8ad40054646e2261e01365af7e8f8ebe0e62133cee8250cd", - "zh:995c3eb0aa23fc6948f45e68173034facc4bd92f4865abc3bba4bd305596fc86", - "zh:9f7b158d39f3e9fbc01ee27e6a63600838e34b7364715ebeea7d62717e48cb56", - "zh:b23193883592a4889942e82e73782e70dfbb517561a4f24b09f8ab6cbdc46866", - "zh:c4884d654d03a0546ec78f348563e32220ae35a2c76f22cb3c960f989dc6be48", - "zh:dda1c6720c6cef052db2fb4886a9cd46dee849e4367d6d66b45ad9d5bb607b94", - "zh:f0bc878d67785343bfc36a7d14ec58a67fa436f5b8b497221aea3931e3dccefd", + "h1:5KSVV/O2eG6ty/3/qpOLQFQqJd96KEPzsTHItslJaMw=", + "zh:341c22454d24a75792aa99fbbc0c156f368534b7bb04eef4701b85995c7526a4", + "zh:3708656d75061c92f7208cc731b946c991ad343a443f8ff0ef082f077b7580b9", + "zh:38ca06f9f45705c648f04f272bd9483397693ea8da6db788cd7955f49ab79d6b", + "zh:3f305adb5ee0032e0ea68d198a089ecfd0127092930e99fa51377a250292b592", + "zh:4ae2fc6065164a819f576f705e634ebf5059f983149a41dad909719fea96145a", + "zh:5d376ac7dd71898a94038d6b6b8036dfec4c0216d832ec1135c855bf3e58eb5f", + "zh:63d2ff296d3aee5787e12c759a6a3d5aa15a574456aebbe11b833f01adf3faef", + "zh:8ad8746741f7f0ac10da6f1d105f26ebeb6e4d944f58ba749e86d7c9a67da3db", + "zh:abec182594ee8a21d72a5f23d3aa7fa45247488539fce6ed648c9c255d8bf972", + "zh:bf704b400be4181333b38c0306949f26326a9aa5ae68b4167e2fb8ee7fb13618", + "zh:c072938f8695f725fc5fbe986a54890f00d520cce570006390dc5bbc51b2a4ea", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", - "zh:f6aa3c25f7106619cc6760e1d34b29b0956c50f285994f009939890a85e7b058", ] } diff --git a/templates/workspace_services/guacamole/user_resources/guacamole-azure-import-reviewvm/terraform/main.tf b/templates/workspace_services/guacamole/user_resources/guacamole-azure-import-reviewvm/terraform/main.tf index 3644542804..31a0f73c5b 100644 --- a/templates/workspace_services/guacamole/user_resources/guacamole-azure-import-reviewvm/terraform/main.tf +++ b/templates/workspace_services/guacamole/user_resources/guacamole-azure-import-reviewvm/terraform/main.tf @@ -3,7 +3,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "=3.41.0" + version = "=3.112.0" } random = { source = "hashicorp/random" diff --git a/templates/workspace_services/guacamole/user_resources/guacamole-azure-import-reviewvm/terraform/upgrade.sh b/templates/workspace_services/guacamole/user_resources/guacamole-azure-import-reviewvm/terraform/upgrade.sh new file mode 100644 index 0000000000..e5bbe41a91 --- /dev/null +++ b/templates/workspace_services/guacamole/user_resources/guacamole-azure-import-reviewvm/terraform/upgrade.sh @@ -0,0 +1,13 @@ +#!/bin/bash +set -e + +# This script is used to install the bundle directly without having to interact with Porter + +# This script assumes you have created an .env from the sample and the variables +# will come from there. +# shellcheck disable=SC2154 +terraform init -upgrade -reconfigure -input=false -backend=true \ + -backend-config="resource_group_name=${TF_VAR_mgmt_resource_group_name}" \ + -backend-config="storage_account_name=${TF_VAR_mgmt_storage_account_name}" \ + -backend-config="container_name=${TF_VAR_terraform_state_container_name}" \ + -backend-config="key=${TRE_ID}${TF_VAR_workspace_id}${TF_VAR_parent_service_id}guacamolewindowsvm" 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 2aa89135b4..adb0c94ccf 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.0.2 +version: 1.0.3 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/terraform/.terraform.lock.hcl b/templates/workspace_services/guacamole/user_resources/guacamole-azure-linuxvm/terraform/.terraform.lock.hcl index 7e4f9d968a..d4260fd975 100644 --- a/templates/workspace_services/guacamole/user_resources/guacamole-azure-linuxvm/terraform/.terraform.lock.hcl +++ b/templates/workspace_services/guacamole/user_resources/guacamole-azure-linuxvm/terraform/.terraform.lock.hcl @@ -2,22 +2,22 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/azurerm" { - version = "3.41.0" - constraints = "3.41.0" + version = "3.112.0" + constraints = "3.112.0" hashes = [ - "h1:Kn7sqPk/YpsvORFEd/zHXa8U7KkVB551DXUMwvqiU0s=", - "zh:123838b581a27499d0a1e3a9804a6f57304969f58c4ea7fbd938ae2a795b2a19", - "zh:761a7bff3872a192202411aa62e3e6aedc3046f0df86967a1f9ed5a74207f451", - "zh:83092681a9e14d5e548edccece5086d822f86de6ff8227bb78706b41f0041697", - "zh:95fd6be4a3b995dc8ad40054646e2261e01365af7e8f8ebe0e62133cee8250cd", - "zh:995c3eb0aa23fc6948f45e68173034facc4bd92f4865abc3bba4bd305596fc86", - "zh:9f7b158d39f3e9fbc01ee27e6a63600838e34b7364715ebeea7d62717e48cb56", - "zh:b23193883592a4889942e82e73782e70dfbb517561a4f24b09f8ab6cbdc46866", - "zh:c4884d654d03a0546ec78f348563e32220ae35a2c76f22cb3c960f989dc6be48", - "zh:dda1c6720c6cef052db2fb4886a9cd46dee849e4367d6d66b45ad9d5bb607b94", - "zh:f0bc878d67785343bfc36a7d14ec58a67fa436f5b8b497221aea3931e3dccefd", + "h1:5KSVV/O2eG6ty/3/qpOLQFQqJd96KEPzsTHItslJaMw=", + "zh:341c22454d24a75792aa99fbbc0c156f368534b7bb04eef4701b85995c7526a4", + "zh:3708656d75061c92f7208cc731b946c991ad343a443f8ff0ef082f077b7580b9", + "zh:38ca06f9f45705c648f04f272bd9483397693ea8da6db788cd7955f49ab79d6b", + "zh:3f305adb5ee0032e0ea68d198a089ecfd0127092930e99fa51377a250292b592", + "zh:4ae2fc6065164a819f576f705e634ebf5059f983149a41dad909719fea96145a", + "zh:5d376ac7dd71898a94038d6b6b8036dfec4c0216d832ec1135c855bf3e58eb5f", + "zh:63d2ff296d3aee5787e12c759a6a3d5aa15a574456aebbe11b833f01adf3faef", + "zh:8ad8746741f7f0ac10da6f1d105f26ebeb6e4d944f58ba749e86d7c9a67da3db", + "zh:abec182594ee8a21d72a5f23d3aa7fa45247488539fce6ed648c9c255d8bf972", + "zh:bf704b400be4181333b38c0306949f26326a9aa5ae68b4167e2fb8ee7fb13618", + "zh:c072938f8695f725fc5fbe986a54890f00d520cce570006390dc5bbc51b2a4ea", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", - "zh:f6aa3c25f7106619cc6760e1d34b29b0956c50f285994f009939890a85e7b058", ] } @@ -43,7 +43,7 @@ provider "registry.terraform.io/hashicorp/random" { provider "registry.terraform.io/hashicorp/template" { version = "2.2.0" - constraints = "~> 2.2.0" + constraints = "2.2.0" hashes = [ "h1:94qn780bi1qjrbC3uQtjJh3Wkfwd5+tTtJHOb7KTg9w=", "zh:01702196f0a0492ec07917db7aaa595843d8f171dc195f4c988d2ffca2a06386", diff --git a/templates/workspace_services/guacamole/user_resources/guacamole-azure-linuxvm/terraform/main.tf b/templates/workspace_services/guacamole/user_resources/guacamole-azure-linuxvm/terraform/main.tf index eb0ba0fac3..922baa6969 100644 --- a/templates/workspace_services/guacamole/user_resources/guacamole-azure-linuxvm/terraform/main.tf +++ b/templates/workspace_services/guacamole/user_resources/guacamole-azure-linuxvm/terraform/main.tf @@ -3,7 +3,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "=3.41.0" + version = "=3.112.0" } template = { source = "hashicorp/template" diff --git a/templates/workspace_services/guacamole/user_resources/guacamole-azure-linuxvm/terraform/upgrade.sh b/templates/workspace_services/guacamole/user_resources/guacamole-azure-linuxvm/terraform/upgrade.sh new file mode 100644 index 0000000000..f6d9bbcefe --- /dev/null +++ b/templates/workspace_services/guacamole/user_resources/guacamole-azure-linuxvm/terraform/upgrade.sh @@ -0,0 +1,13 @@ +#!/bin/bash +set -e + +# This script is used to install the bundle directly without having to interact with Porter + +# This script assumes you have created an .env from the sample and the variables +# will come from there. +# shellcheck disable=SC2154 +terraform init -upgrade -reconfigure -input=false -backend=true \ + -backend-config="resource_group_name=${TF_VAR_mgmt_resource_group_name}" \ + -backend-config="storage_account_name=${TF_VAR_mgmt_storage_account_name}" \ + -backend-config="container_name=${TF_VAR_terraform_state_container_name}" \ + -backend-config="key=${TF_VAR_tre_id}${TF_VAR_workspace_id}${TF_VAR_parent_service_id}guacamolelinuxvm" 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 2a6e633040..7a7b11c5e4 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: 1.0.0 +version: 1.0.1 description: "An Azure TRE User Resource Template for Guacamole (Windows 10)" dockerfile: Dockerfile.tmpl registry: azuretre diff --git a/templates/workspace_services/guacamole/user_resources/guacamole-azure-windowsvm/terraform/.terraform.lock.hcl b/templates/workspace_services/guacamole/user_resources/guacamole-azure-windowsvm/terraform/.terraform.lock.hcl index 1306331e37..e23be37b77 100644 --- a/templates/workspace_services/guacamole/user_resources/guacamole-azure-windowsvm/terraform/.terraform.lock.hcl +++ b/templates/workspace_services/guacamole/user_resources/guacamole-azure-windowsvm/terraform/.terraform.lock.hcl @@ -2,21 +2,21 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/azurerm" { - version = "3.57.0" - constraints = "3.57.0" + version = "3.112.0" + constraints = "3.112.0" hashes = [ - "h1:SOBKU/ioGnpuQpAx6dgaD0EzfAM2W+uS9e6p59viSxs=", - "zh:028202b0ae01f1262dac076b383cb68b5dd624977669b6db833418c215eb8401", - "zh:26fcf9e9b73cb3bbf87a048361a89050d2e52bdc91190a305e624a62be26a3f4", - "zh:2f381103953e4513068eee62089a0ec8c60a18ecef2235138b6c29a45920d6a2", - "zh:376f016f4b449b2cf38f75e27e7a9157fdcfc925f28198124a30e316abb54f3d", - "zh:7d491bab94d5aba91cd9c307dbd4b655dcdc0a6212541e7800b9a902be98befe", - "zh:85fa7d8339efd15494f947cda02e9ed127eafa32652e568f54261b2e97d2b3ee", - "zh:950e079e55a7e321adbd2f6a0639a4b3b0fac47d2e4bb3a12791e0817b694238", - "zh:975260e09379c5c97cad3171327db2f0b4914909861d4c24ab784b0ecd79c54a", - "zh:a26bb67ab2d2f20e5fee4d41110584af17357f4b4266d80f9debfad61fa0a4fd", - "zh:da0e5d1ec301c69b6fae684e55059fc5e1b91699ed3696229f599d558401556b", - "zh:ea11e62ce53caec240cb3a1da25d248805387fa246314001ed3e07e9105f6e12", + "h1:5KSVV/O2eG6ty/3/qpOLQFQqJd96KEPzsTHItslJaMw=", + "zh:341c22454d24a75792aa99fbbc0c156f368534b7bb04eef4701b85995c7526a4", + "zh:3708656d75061c92f7208cc731b946c991ad343a443f8ff0ef082f077b7580b9", + "zh:38ca06f9f45705c648f04f272bd9483397693ea8da6db788cd7955f49ab79d6b", + "zh:3f305adb5ee0032e0ea68d198a089ecfd0127092930e99fa51377a250292b592", + "zh:4ae2fc6065164a819f576f705e634ebf5059f983149a41dad909719fea96145a", + "zh:5d376ac7dd71898a94038d6b6b8036dfec4c0216d832ec1135c855bf3e58eb5f", + "zh:63d2ff296d3aee5787e12c759a6a3d5aa15a574456aebbe11b833f01adf3faef", + "zh:8ad8746741f7f0ac10da6f1d105f26ebeb6e4d944f58ba749e86d7c9a67da3db", + "zh:abec182594ee8a21d72a5f23d3aa7fa45247488539fce6ed648c9c255d8bf972", + "zh:bf704b400be4181333b38c0306949f26326a9aa5ae68b4167e2fb8ee7fb13618", + "zh:c072938f8695f725fc5fbe986a54890f00d520cce570006390dc5bbc51b2a4ea", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", ] } diff --git a/templates/workspace_services/guacamole/user_resources/guacamole-azure-windowsvm/terraform/main.tf b/templates/workspace_services/guacamole/user_resources/guacamole-azure-windowsvm/terraform/main.tf index 54e5baef02..9fa8d7ba0f 100644 --- a/templates/workspace_services/guacamole/user_resources/guacamole-azure-windowsvm/terraform/main.tf +++ b/templates/workspace_services/guacamole/user_resources/guacamole-azure-windowsvm/terraform/main.tf @@ -3,7 +3,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "=3.57.0" + version = "=3.112.0" } random = { source = "hashicorp/random" diff --git a/templates/workspace_services/guacamole/user_resources/guacamole-azure-windowsvm/terraform/upgrade.sh b/templates/workspace_services/guacamole/user_resources/guacamole-azure-windowsvm/terraform/upgrade.sh new file mode 100644 index 0000000000..e5bbe41a91 --- /dev/null +++ b/templates/workspace_services/guacamole/user_resources/guacamole-azure-windowsvm/terraform/upgrade.sh @@ -0,0 +1,13 @@ +#!/bin/bash +set -e + +# This script is used to install the bundle directly without having to interact with Porter + +# This script assumes you have created an .env from the sample and the variables +# will come from there. +# shellcheck disable=SC2154 +terraform init -upgrade -reconfigure -input=false -backend=true \ + -backend-config="resource_group_name=${TF_VAR_mgmt_resource_group_name}" \ + -backend-config="storage_account_name=${TF_VAR_mgmt_storage_account_name}" \ + -backend-config="container_name=${TF_VAR_terraform_state_container_name}" \ + -backend-config="key=${TRE_ID}${TF_VAR_workspace_id}${TF_VAR_parent_service_id}guacamolewindowsvm" diff --git a/templates/workspace_services/health-services/porter.yaml b/templates/workspace_services/health-services/porter.yaml index 6667359afa..6bf8303b56 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.2.5 +version: 0.2.6 description: "An Azure Data Health Services workspace service" registry: azuretre dockerfile: Dockerfile.tmpl diff --git a/templates/workspace_services/health-services/terraform/providers.tf b/templates/workspace_services/health-services/terraform/providers.tf index d69423d2a1..cb2ad99d74 100644 --- a/templates/workspace_services/health-services/terraform/providers.tf +++ b/templates/workspace_services/health-services/terraform/providers.tf @@ -3,7 +3,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "3.37.0" + version = "3.112.0" } external = { source = "hashicorp/external" diff --git a/templates/workspace_services/innereye/porter.yaml b/templates/workspace_services/innereye/porter.yaml index 9c5b9133fc..ef4f7f480b 100644 --- a/templates/workspace_services/innereye/porter.yaml +++ b/templates/workspace_services/innereye/porter.yaml @@ -1,7 +1,7 @@ --- schemaVersion: 1.0.0 name: tre-service-innereye -version: 0.6.4 +version: 0.6.5 description: "An Azure TRE service for InnerEye Deep Learning" registry: azuretre dockerfile: Dockerfile.tmpl diff --git a/templates/workspace_services/innereye/terraform/.terraform.lock.hcl b/templates/workspace_services/innereye/terraform/.terraform.lock.hcl index 1260ac6c2c..c1f5dc3d58 100644 --- a/templates/workspace_services/innereye/terraform/.terraform.lock.hcl +++ b/templates/workspace_services/innereye/terraform/.terraform.lock.hcl @@ -2,40 +2,41 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/azurerm" { - version = "2.97.0" - constraints = "2.97.0" + version = "3.112.0" + constraints = "3.112.0" hashes = [ - "h1:XxT+XM/leTXa21aTnJjPBfNBQ8cLE4gYDg01WEZsV1U=", - "zh:0aac80e6d2b8ddf33d558ac893d52688e8abf8a0b995cfc3c35eb84afbf432a3", - "zh:11191068cb732208ebc8662651782f63db329a25f7ea1cd50cd91622a2c247b7", - "zh:36c8334194e7d605682053c7c70fbb2a650d9b0a7bcc44d5cdda4f205818438a", - "zh:3a5e01276added995e875b42ecc6b36ff73d267f0c096c87195bd2b1fff4f5b2", - "zh:557e38371657e6ed8aae9192d01480c4cca7c0f7ade6022f1aec247a6384922b", - "zh:67b913c280c5858549477a4b05e77078b1a5234de77c7bddd4ee1e8e237d5665", - "zh:7aeca864ce45b295db734cd968f7596ff12cd7c522ee89d53f432dae7c2b5d18", - "zh:b6127d7a796eaf9756dd212667eb48f79c0e78729589ec8ccf68e0b36ebb4e54", - "zh:bed448238740f897d1b399e5123b3a9eba256b981846f9ee92b71493446ca684", - "zh:c351a1bba34c3bd06fff75e4c15e4db0456268479463c2471598068ea1c5c884", - "zh:d073c24d0a4756e79b39f41f552d526800f9fb0ad0a74f742ac8de61b6416a3a", + "h1:5KSVV/O2eG6ty/3/qpOLQFQqJd96KEPzsTHItslJaMw=", + "zh:341c22454d24a75792aa99fbbc0c156f368534b7bb04eef4701b85995c7526a4", + "zh:3708656d75061c92f7208cc731b946c991ad343a443f8ff0ef082f077b7580b9", + "zh:38ca06f9f45705c648f04f272bd9483397693ea8da6db788cd7955f49ab79d6b", + "zh:3f305adb5ee0032e0ea68d198a089ecfd0127092930e99fa51377a250292b592", + "zh:4ae2fc6065164a819f576f705e634ebf5059f983149a41dad909719fea96145a", + "zh:5d376ac7dd71898a94038d6b6b8036dfec4c0216d832ec1135c855bf3e58eb5f", + "zh:63d2ff296d3aee5787e12c759a6a3d5aa15a574456aebbe11b833f01adf3faef", + "zh:8ad8746741f7f0ac10da6f1d105f26ebeb6e4d944f58ba749e86d7c9a67da3db", + "zh:abec182594ee8a21d72a5f23d3aa7fa45247488539fce6ed648c9c255d8bf972", + "zh:bf704b400be4181333b38c0306949f26326a9aa5ae68b4167e2fb8ee7fb13618", + "zh:c072938f8695f725fc5fbe986a54890f00d520cce570006390dc5bbc51b2a4ea", + "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", ] } provider "registry.terraform.io/hashicorp/external" { - version = "2.3.1" + version = "2.3.4" hashes = [ - "h1:bROCw6g5D/3fFnWeJ01L4IrdnJl1ILU8DGDgXCtYzaY=", - "zh:001e2886dc81fc98cf17cf34c0d53cb2dae1e869464792576e11b0f34ee92f54", - "zh:2eeac58dd75b1abdf91945ac4284c9ccb2bfb17fa9bdb5f5d408148ff553b3ee", - "zh:2fc39079ba61411a737df2908942e6970cb67ed2f4fb19090cd44ce2082903dd", - "zh:472a71c624952cff7aa98a7b967f6c7bb53153dbd2b8f356ceb286e6743bb4e2", - "zh:4cff06d31272aac8bc35e9b7faec42cf4554cbcbae1092eaab6ab7f643c215d9", + "h1:XWkRZOLKMjci9/JAtE8X8fWOt7A4u+9mgXSUjc4Wuyo=", + "zh:037fd82cd86227359bc010672cd174235e2d337601d4686f526d0f53c87447cb", + "zh:0ea1db63d6173d01f2fa8eb8989f0809a55135a0d8d424b08ba5dabad73095fa", + "zh:17a4d0a306566f2e45778fbac48744b6fd9c958aaa359e79f144c6358cb93af0", + "zh:298e5408ab17fd2e90d2cd6d406c6d02344fe610de5b7dae943a58b958e76691", + "zh:38ecfd29ee0785fd93164812dcbe0664ebbe5417473f3b2658087ca5a0286ecb", + "zh:59f6a6f31acf66f4ea3667a555a70eba5d406c6e6d93c2c641b81d63261eeace", "zh:78d5eefdd9e494defcb3c68d282b8f96630502cac21d1ea161f53cfe9bb483b3", - "zh:7ed16ccd2049fa089616b98c0bd57219f407958f318f3c697843e2397ddf70df", - "zh:842696362c92bf2645eb85c739410fd51376be6c488733efae44f4ce688da50e", - "zh:8985129f2eccfd7f1841ce06f3bf2bbede6352ec9e9f926fbaa6b1a05313b326", - "zh:a5f0602d8ec991a5411ef42f872aa90f6347e93886ce67905c53cfea37278e05", - "zh:bf4ab82cbe5256dcef16949973bf6aa1a98c2c73a98d6a44ee7bc40809d002b8", - "zh:e70770be62aa70198fa899526d671643ff99eecf265bf1a50e798fc3480bd417", + "zh:ad0279dfd09d713db0c18469f585e58d04748ca72d9ada83883492e0dd13bd58", + "zh:c69f66fd21f5e2c8ecf7ca68d9091c40f19ad913aef21e3ce23836e91b8cbb5f", + "zh:d4a56f8c48aa86fc8e0c233d56850f5783f322d6336f3bf1916e293246b6b5d4", + "zh:f2b394ebd4af33f343835517e80fc876f79361f4688220833bc3c77655dd2202", + "zh:f31982f29f12834e5d21e010856eddd19d59cd8f449adf470655bfd19354377e", ] } @@ -60,21 +61,21 @@ provider "registry.terraform.io/hashicorp/local" { } provider "registry.terraform.io/hashicorp/null" { - version = "3.2.1" + version = "3.2.3" hashes = [ - "h1:FbGfc+muBsC17Ohy5g806iuI1hQc4SIexpYCrQHQd8w=", - "zh:58ed64389620cc7b82f01332e27723856422820cfd302e304b5f6c3436fb9840", - "zh:62a5cc82c3b2ddef7ef3a6f2fedb7b9b3deff4ab7b414938b08e51d6e8be87cb", - "zh:63cff4de03af983175a7e37e52d4bd89d990be256b16b5c7f919aff5ad485aa5", - "zh:74cb22c6700e48486b7cabefa10b33b801dfcab56f1a6ac9b6624531f3d36ea3", + "h1:+AnORRgFbRO6qqcfaQyeX80W0eX3VmjadjnUFUJTiXo=", + "zh:22d062e5278d872fe7aed834f5577ba0a5afe34a3bdac2b81f828d8d3e6706d2", + "zh:23dead00493ad863729495dc212fd6c29b8293e707b055ce5ba21ee453ce552d", + "zh:28299accf21763ca1ca144d8f660688d7c2ad0b105b7202554ca60b02a3856d3", + "zh:55c9e8a9ac25a7652df8c51a8a9a422bd67d784061b1de2dc9fe6c3cb4e77f2f", + "zh:756586535d11698a216291c06b9ed8a5cc6a4ec43eee1ee09ecd5c6a9e297ac1", "zh:78d5eefdd9e494defcb3c68d282b8f96630502cac21d1ea161f53cfe9bb483b3", - "zh:79e553aff77f1cfa9012a2218b8238dd672ea5e1b2924775ac9ac24d2a75c238", - "zh:a1e06ddda0b5ac48f7e7c7d59e1ab5a4073bbcf876c73c0299e4610ed53859dc", - "zh:c37a97090f1a82222925d45d84483b2aa702ef7ab66532af6cbcfb567818b970", - "zh:e4453fbebf90c53ca3323a92e7ca0f9961427d2f0ce0d2b65523cc04d5d999c2", - "zh:e80a746921946d8b6761e77305b752ad188da60688cfd2059322875d363be5f5", - "zh:fbdb892d9822ed0e4cb60f2fedbdbb556e4da0d88d3b942ae963ed6ff091e48f", - "zh:fca01a623d90d0cad0843102f9b8b9fe0d3ff8244593bd817f126582b52dd694", + "zh:9d5eea62fdb587eeb96a8c4d782459f4e6b73baeece4d04b4a40e44faaee9301", + "zh:a6355f596a3fb8fc85c2fb054ab14e722991533f87f928e7169a486462c74670", + "zh:b5a65a789cff4ada58a5baffc76cb9767dc26ec6b45c00d2ec8b1b027f6db4ed", + "zh:db5ab669cf11d0e9f81dc380a6fdfcac437aea3d69109c7aef1a5426639d2d65", + "zh:de655d251c470197bcbb5ac45d289595295acb8f829f6c781d4a75c8c8b7c7dd", + "zh:f5c68199f2e6076bce92a12230434782bf768103a427e9bb9abee99b116af7b5", ] } diff --git a/templates/workspace_services/innereye/terraform/main.tf b/templates/workspace_services/innereye/terraform/main.tf index 6aadeaf4c8..821be7d1bb 100644 --- a/templates/workspace_services/innereye/terraform/main.tf +++ b/templates/workspace_services/innereye/terraform/main.tf @@ -3,7 +3,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "=2.97.0" + version = "=3.112.0" } random = { source = "hashicorp/random" diff --git a/templates/workspace_services/innereye/terraform/upgrade.sh b/templates/workspace_services/innereye/terraform/upgrade.sh new file mode 100644 index 0000000000..9bf7c5612b --- /dev/null +++ b/templates/workspace_services/innereye/terraform/upgrade.sh @@ -0,0 +1,13 @@ +#!/bin/bash +set -e + +# This script is used to install the bundle directly without having to interact with Porter + +# This script assumes you have created an .env from the sample and the variables +# will come from there. +# shellcheck disable=SC2154 +terraform init -upgrade -reconfigure -input=false -backend=true \ + -backend-config="resource_group_name=${TF_VAR_mgmt_resource_group_name}" \ + -backend-config="storage_account_name=${TF_VAR_mgmt_storage_account_name}" \ + -backend-config="container_name=${TF_VAR_terraform_state_container_name}" \ + -backend-config="key=tre-service-innereye-${TF_VAR_id}" diff --git a/templates/workspace_services/mlflow/porter.yaml b/templates/workspace_services/mlflow/porter.yaml index 6f12152f0a..75a6800c9e 100644 --- a/templates/workspace_services/mlflow/porter.yaml +++ b/templates/workspace_services/mlflow/porter.yaml @@ -1,7 +1,7 @@ --- schemaVersion: 1.0.0 name: tre-service-mlflow -version: 0.7.8 +version: 0.7.9 description: "An Azure TRE service for MLflow machine learning lifecycle" dockerfile: Dockerfile.tmpl registry: azuretre diff --git a/templates/workspace_services/mlflow/terraform/.terraform.lock.hcl b/templates/workspace_services/mlflow/terraform/.terraform.lock.hcl index 6ec8bee9ec..c5a68211eb 100644 --- a/templates/workspace_services/mlflow/terraform/.terraform.lock.hcl +++ b/templates/workspace_services/mlflow/terraform/.terraform.lock.hcl @@ -2,22 +2,22 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/azurerm" { - version = "3.33.0" - constraints = "3.33.0" + version = "3.112.0" + constraints = "3.112.0" hashes = [ - "h1:pXB6SKE4NKdf+LepsQjrLcBnVTL5ejeKvx/kyojai6c=", - "zh:136d9c642746d8d84e62ecd8ab0c7dc015eac504c1f068e06fad438ae222d934", - "zh:266e64b8e32a94ddcc20954ebad1d8ff3921d318addf576e981b1390e5d5ba79", - "zh:3bd84a1e5b3bbe34a5870f271d6a5bf9b35a4c924db32b450a1fb53bc910c37a", - "zh:3c6604041472bb4691b502877cf9d886ed9f973fbadf11389ec9499fdc66045e", - "zh:680c00a73c8054c36a58115a44d02d1ebb675c2ad3afaaab2d74a01f978f16ce", - "zh:6dab47ef64f90e43b75ed240a974c4119f5268be4433f3c1c3e97559e7ef2f38", - "zh:9f73f19fdc340c443693dc03f1a145c6bd0ee5fd425eab7473d06abbe39b99d7", - "zh:9ff008b6737e880f191b4be6dfcef95ff019969dd787c44a58c2d7d6aaf6623b", - "zh:be297f1515e9ac63886e3e092a0bcd10aa8aa2b69c2b0995ce4e069176b07a95", + "h1:5KSVV/O2eG6ty/3/qpOLQFQqJd96KEPzsTHItslJaMw=", + "zh:341c22454d24a75792aa99fbbc0c156f368534b7bb04eef4701b85995c7526a4", + "zh:3708656d75061c92f7208cc731b946c991ad343a443f8ff0ef082f077b7580b9", + "zh:38ca06f9f45705c648f04f272bd9483397693ea8da6db788cd7955f49ab79d6b", + "zh:3f305adb5ee0032e0ea68d198a089ecfd0127092930e99fa51377a250292b592", + "zh:4ae2fc6065164a819f576f705e634ebf5059f983149a41dad909719fea96145a", + "zh:5d376ac7dd71898a94038d6b6b8036dfec4c0216d832ec1135c855bf3e58eb5f", + "zh:63d2ff296d3aee5787e12c759a6a3d5aa15a574456aebbe11b833f01adf3faef", + "zh:8ad8746741f7f0ac10da6f1d105f26ebeb6e4d944f58ba749e86d7c9a67da3db", + "zh:abec182594ee8a21d72a5f23d3aa7fa45247488539fce6ed648c9c255d8bf972", + "zh:bf704b400be4181333b38c0306949f26326a9aa5ae68b4167e2fb8ee7fb13618", + "zh:c072938f8695f725fc5fbe986a54890f00d520cce570006390dc5bbc51b2a4ea", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", - "zh:fb29a566e7698cfae477f3efa3bba38526ec8343355763178c6e9c96e51399f3", - "zh:fbc3b625733ce5f0970fa8d9743f6db51064c168d6be5fc7a5e3d1a54af28bb7", ] } diff --git a/templates/workspace_services/mlflow/terraform/main.tf b/templates/workspace_services/mlflow/terraform/main.tf index d6c44c428c..8ce90e3020 100644 --- a/templates/workspace_services/mlflow/terraform/main.tf +++ b/templates/workspace_services/mlflow/terraform/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "=3.33.0" + version = "=3.112.0" } random = { source = "hashicorp/random" diff --git a/templates/workspace_services/mlflow/terraform/upgrade.sh b/templates/workspace_services/mlflow/terraform/upgrade.sh new file mode 100644 index 0000000000..1bbb26cfa8 --- /dev/null +++ b/templates/workspace_services/mlflow/terraform/upgrade.sh @@ -0,0 +1,13 @@ +#!/bin/bash +set -e + +# This script is used to install the bundle directly without having to interact with Porter + +# This script assumes you have created an .env from the sample and the variables +# will come from there. +# shellcheck disable=SC2154 +terraform init -upgrade -reconfigure -input=false -backend=true \ + -backend-config="resource_group_name=${TF_VAR_mgmt_resource_group_name}" \ + -backend-config="storage_account_name=${TF_VAR_mgmt_storage_account_name}" \ + -backend-config="container_name=${TF_VAR_terraform_state_container_name}" \ + -backend-config="key=tre-service-mlflow-$TF_VAR_ID" diff --git a/templates/workspace_services/mysql/porter.yaml b/templates/workspace_services/mysql/porter.yaml index 69f24158b0..79bb8a29ef 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.2 +version: 1.0.4 description: "A MySQL workspace service" registry: azuretre dockerfile: Dockerfile.tmpl diff --git a/templates/workspace_services/mysql/terraform/.terraform.lock.hcl b/templates/workspace_services/mysql/terraform/.terraform.lock.hcl index a4b727c000..66c2832260 100644 --- a/templates/workspace_services/mysql/terraform/.terraform.lock.hcl +++ b/templates/workspace_services/mysql/terraform/.terraform.lock.hcl @@ -2,22 +2,22 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/azurerm" { - version = "3.18.0" - constraints = "3.18.0" + version = "3.112.0" + constraints = "3.112.0" hashes = [ - "h1:JP1ql3IvCpG1f88Zfb+W0Gm9kRKHg2c+VXOfVKpHZTY=", - "zh:038d308618653e999070f437d42c009d191abbd5c585deff3217ad46676d213e", - "zh:7377c1e66d143db3c8a4a24bb45956dd71fb75c4a62863ff6a372ea66bd1501a", - "zh:8219107a8d8482691c23b6a96a97232741b38b80d0ad195af31c0f6de85f457e", - "zh:9f497110c35615917f772331abeaaa3a3e694f7f300e79dd1886259601f4d159", - "zh:a5137efd8fc2c84cfc4b865bb55c166d7c9370ff606962d60b5cded787af253d", - "zh:a554206ac0f7f859fb5a9a9b42c80903d3ca3ea13082cc6e5f79f672df9efa89", - "zh:bda8971b09fb271c58f13cc97bbd50055a70bab35c9ec6471cd8b7c4c7613767", - "zh:d831b429fd4376f609898c82154e832abd1281e4ccb72a44e7560ccbb21cbeb1", - "zh:e45d58c341e7b58c82e19fbb2517e6fdd7cac111c776968ad03a3cf0882994da", - "zh:ed613a7237c031f3b93e1fa659f1d80b5774d845f25d86eb87560dba44762dd5", + "h1:5KSVV/O2eG6ty/3/qpOLQFQqJd96KEPzsTHItslJaMw=", + "zh:341c22454d24a75792aa99fbbc0c156f368534b7bb04eef4701b85995c7526a4", + "zh:3708656d75061c92f7208cc731b946c991ad343a443f8ff0ef082f077b7580b9", + "zh:38ca06f9f45705c648f04f272bd9483397693ea8da6db788cd7955f49ab79d6b", + "zh:3f305adb5ee0032e0ea68d198a089ecfd0127092930e99fa51377a250292b592", + "zh:4ae2fc6065164a819f576f705e634ebf5059f983149a41dad909719fea96145a", + "zh:5d376ac7dd71898a94038d6b6b8036dfec4c0216d832ec1135c855bf3e58eb5f", + "zh:63d2ff296d3aee5787e12c759a6a3d5aa15a574456aebbe11b833f01adf3faef", + "zh:8ad8746741f7f0ac10da6f1d105f26ebeb6e4d944f58ba749e86d7c9a67da3db", + "zh:abec182594ee8a21d72a5f23d3aa7fa45247488539fce6ed648c9c255d8bf972", + "zh:bf704b400be4181333b38c0306949f26326a9aa5ae68b4167e2fb8ee7fb13618", + "zh:c072938f8695f725fc5fbe986a54890f00d520cce570006390dc5bbc51b2a4ea", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", - "zh:fd486a50adcb424499e2b7b980faaf910337f913adf08b158b6c0ce3cb015c8f", ] } diff --git a/templates/workspace_services/mysql/terraform/main.tf b/templates/workspace_services/mysql/terraform/main.tf index 45f14ea336..8bccf10e21 100644 --- a/templates/workspace_services/mysql/terraform/main.tf +++ b/templates/workspace_services/mysql/terraform/main.tf @@ -3,7 +3,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "3.18.0" + version = "3.112.0" } random = { source = "hashicorp/random" diff --git a/templates/workspace_services/mysql/terraform/upgrade.sh b/templates/workspace_services/mysql/terraform/upgrade.sh new file mode 100644 index 0000000000..baae96d5e8 --- /dev/null +++ b/templates/workspace_services/mysql/terraform/upgrade.sh @@ -0,0 +1,13 @@ +#!/bin/bash +set -e + +# This script is used to install the bundle directly without having to interact with Porter + +# This script assumes you have created an .env from the sample and the variables +# will come from there. +# shellcheck disable=SC2154 +terraform init -upgrade -reconfigure -input=false -backend=true \ + -backend-config="resource_group_name=${TF_VAR_mgmt_resource_group_name}" \ + -backend-config="storage_account_name=${TF_VAR_mgmt_storage_account_name}" \ + -backend-config="container_name=${TF_VAR_terraform_state_container_name}" \ + -backend-config="key=${TF_VAR_tre_resource_id}-mysql" diff --git a/templates/workspace_services/ohdsi/porter.yaml b/templates/workspace_services/ohdsi/porter.yaml index 88e9e458cd..34b3d8bc72 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.2.4 +version: 0.2.5 description: "An OHDSI workspace service" registry: azuretre dockerfile: Dockerfile.tmpl diff --git a/templates/workspace_services/ohdsi/terraform/.terraform.lock.hcl b/templates/workspace_services/ohdsi/terraform/.terraform.lock.hcl index b824c1032e..970ec99a31 100644 --- a/templates/workspace_services/ohdsi/terraform/.terraform.lock.hcl +++ b/templates/workspace_services/ohdsi/terraform/.terraform.lock.hcl @@ -2,22 +2,22 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/azurerm" { - version = "3.58.0" - constraints = "3.58.0" + version = "3.112.0" + constraints = "3.112.0" hashes = [ - "h1:Hvlt3hgTiip6xMeq8/EDGqF8NoVuZjYdTZdO79YNXsw=", - "zh:22b19802605ca3e2b811e33650438be3647748cf8f75474c78448c30ac1cad0b", - "zh:402ce010f4b68337abaccf8059c37294cabcbdbc3cefd9491dcd312e36ceea3c", - "zh:53d2cd15f1631c7ffb47918064d644899cc671d47c72f4dafee4e2a5e69afd14", - "zh:5a6b1c55629cff555472d1d43ad6e802693f7fd046c7d37718d4de6f52dbf66b", - "zh:6181dccb7bca7cd84b0295a0332f19a7347a9586101f0a5e51b53bda1ec74651", - "zh:854181d6a8821b3707775c913e91dd7944fcb55098953ef030168fa3cd0224aa", - "zh:b44c758424d1a037fd833e0c69b29e3ac4047ab95653bb3e080835e55bd9badb", - "zh:b6ee916a1579bba29b1aacce8897c6733fa97ba0dba2808f1ffa9ab492743fab", - "zh:b7ab57044649578410dadfdf4412fc5f8aa085a25ea0b061393e843b49b43b63", - "zh:cb68ddb922eb4be74dedf58c953d7f778b4e5f3cdcbe2ea83e02b12296ce4969", + "h1:5KSVV/O2eG6ty/3/qpOLQFQqJd96KEPzsTHItslJaMw=", + "zh:341c22454d24a75792aa99fbbc0c156f368534b7bb04eef4701b85995c7526a4", + "zh:3708656d75061c92f7208cc731b946c991ad343a443f8ff0ef082f077b7580b9", + "zh:38ca06f9f45705c648f04f272bd9483397693ea8da6db788cd7955f49ab79d6b", + "zh:3f305adb5ee0032e0ea68d198a089ecfd0127092930e99fa51377a250292b592", + "zh:4ae2fc6065164a819f576f705e634ebf5059f983149a41dad909719fea96145a", + "zh:5d376ac7dd71898a94038d6b6b8036dfec4c0216d832ec1135c855bf3e58eb5f", + "zh:63d2ff296d3aee5787e12c759a6a3d5aa15a574456aebbe11b833f01adf3faef", + "zh:8ad8746741f7f0ac10da6f1d105f26ebeb6e4d944f58ba749e86d7c9a67da3db", + "zh:abec182594ee8a21d72a5f23d3aa7fa45247488539fce6ed648c9c255d8bf972", + "zh:bf704b400be4181333b38c0306949f26326a9aa5ae68b4167e2fb8ee7fb13618", + "zh:c072938f8695f725fc5fbe986a54890f00d520cce570006390dc5bbc51b2a4ea", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", - "zh:fe9e86173134cd9dc8ed65eae8634abc6d6f6806b5b412f54fccf4047052daa0", ] } diff --git a/templates/workspace_services/ohdsi/terraform/providers.tf b/templates/workspace_services/ohdsi/terraform/providers.tf index 6244ce95d9..90aaa8ce92 100644 --- a/templates/workspace_services/ohdsi/terraform/providers.tf +++ b/templates/workspace_services/ohdsi/terraform/providers.tf @@ -2,7 +2,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "=3.58.0" + version = "=3.112.0" } local = { source = "hashicorp/local" diff --git a/templates/workspace_services/ohdsi/terraform/upgrade.sh b/templates/workspace_services/ohdsi/terraform/upgrade.sh new file mode 100644 index 0000000000..1d65e728d8 --- /dev/null +++ b/templates/workspace_services/ohdsi/terraform/upgrade.sh @@ -0,0 +1,13 @@ +#!/bin/bash +set -e + +# This script is used to install the bundle directly without having to interact with Porter + +# This script assumes you have created an .env from the sample and the variables +# will come from there. +# shellcheck disable=SC2154 +terraform init -upgrade -reconfigure -input=false -backend=true \ + -backend-config="resource_group_name=${TF_VAR_mgmt_resource_group_name}" \ + -backend-config="storage_account_name=${TF_VAR_mgmt_storage_account_name}" \ + -backend-config="container_name=${TF_VAR_terraform_state_container_name}" \ + -backend-config="key=tre-workspace-service-ohdsi-${TF_VAR_tre_resource_id}" diff --git a/templates/workspace_services/openai/porter.yaml b/templates/workspace_services/openai/porter.yaml index a65c75f8df..874fa38fc1 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.0 +version: 1.0.1 description: "An OpenAI workspace service" registry: azuretre dockerfile: Dockerfile.tmpl diff --git a/templates/workspace_services/openai/terraform/.terraform.lock.hcl b/templates/workspace_services/openai/terraform/.terraform.lock.hcl index 600efbeb36..b76fcebd94 100644 --- a/templates/workspace_services/openai/terraform/.terraform.lock.hcl +++ b/templates/workspace_services/openai/terraform/.terraform.lock.hcl @@ -2,21 +2,21 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/azurerm" { - version = "3.84.0" - constraints = "3.84.0" + version = "3.112.0" + constraints = "3.112.0" hashes = [ - "h1:aoqNC2sfLKyblgQh0SfQW0BHl3UP1mMAUJLYLGG3PxE=", - "zh:14a96daf672541dbc27137d9cc0a96a737710597262ecaaa64a328eb1174e5df", - "zh:16d8e794fdd87ed8e64291fe8a617f420d8263f21672033333a020d06f4c9618", - "zh:64e5cd1bb6a81bccffff0d1f77790286ab46179cf12442134c3f3bca722afc1b", - "zh:7010ada67fbae971ac8b7204a30b1317aee7ccac7227afc6ac27277c642996a1", - "zh:77c2616ecd29685d2a4dc3ec3e9771e5ecf652e127946767d9b7ef19bbf58a21", - "zh:861922cfae724eacf1bd915efd5dbf6c23e4e762a2bbe60993099648e64aedb5", - "zh:8fb797c98bb08e7342995317810d28c41bb519fbc128adaa170896356b9eaebd", - "zh:982e85a4a9d282e3c8f7d7836037ccc98ff3ef50af246fad2e04684a81d16201", - "zh:a2ef29ff907cf6622e58afa0a27e23a3160ba3d70d531795b4d9a6c42c354630", - "zh:c46ccc4eecb79d096bcb652af0cffe300ec480d80a13a5b302c71b1aac9f9f1c", - "zh:cc6a06bf6d5e811fe8c0d9ad652e143b4e94bd16a03fb8a86f5086f0ae5abfa9", + "h1:5KSVV/O2eG6ty/3/qpOLQFQqJd96KEPzsTHItslJaMw=", + "zh:341c22454d24a75792aa99fbbc0c156f368534b7bb04eef4701b85995c7526a4", + "zh:3708656d75061c92f7208cc731b946c991ad343a443f8ff0ef082f077b7580b9", + "zh:38ca06f9f45705c648f04f272bd9483397693ea8da6db788cd7955f49ab79d6b", + "zh:3f305adb5ee0032e0ea68d198a089ecfd0127092930e99fa51377a250292b592", + "zh:4ae2fc6065164a819f576f705e634ebf5059f983149a41dad909719fea96145a", + "zh:5d376ac7dd71898a94038d6b6b8036dfec4c0216d832ec1135c855bf3e58eb5f", + "zh:63d2ff296d3aee5787e12c759a6a3d5aa15a574456aebbe11b833f01adf3faef", + "zh:8ad8746741f7f0ac10da6f1d105f26ebeb6e4d944f58ba749e86d7c9a67da3db", + "zh:abec182594ee8a21d72a5f23d3aa7fa45247488539fce6ed648c9c255d8bf972", + "zh:bf704b400be4181333b38c0306949f26326a9aa5ae68b4167e2fb8ee7fb13618", + "zh:c072938f8695f725fc5fbe986a54890f00d520cce570006390dc5bbc51b2a4ea", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", ] } diff --git a/templates/workspace_services/openai/terraform/main.tf b/templates/workspace_services/openai/terraform/main.tf index d35ee5f90e..5a0db1722f 100644 --- a/templates/workspace_services/openai/terraform/main.tf +++ b/templates/workspace_services/openai/terraform/main.tf @@ -3,7 +3,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "3.84.0" + version = "3.112.0" } } diff --git a/templates/workspace_services/openai/terraform/upgrade.sh b/templates/workspace_services/openai/terraform/upgrade.sh new file mode 100644 index 0000000000..576c6764a9 --- /dev/null +++ b/templates/workspace_services/openai/terraform/upgrade.sh @@ -0,0 +1,13 @@ +#!/bin/bash +set -e + +# This script is used to install the bundle directly without having to interact with Porter + +# This script assumes you have created an .env from the sample and the variables +# will come from there. +# shellcheck disable=SC2154 +terraform init -upgrade -reconfigure -input=false -backend=true \ + -backend-config="resource_group_name=${TF_VAR_mgmt_resource_group_name}" \ + -backend-config="storage_account_name=${TF_VAR_mgmt_storage_account_name}" \ + -backend-config="container_name=${TF_VAR_terraform_state_container_name}" \ + -backend-config="key=tre-workspace-service-openai-${TF_VAR_tre_resource_id}" diff --git a/templates/workspaces/airlock-import-review/Dockerfile.tmpl b/templates/workspaces/airlock-import-review/Dockerfile.tmpl index 057038c25c..14a2ec8469 100644 --- a/templates/workspaces/airlock-import-review/Dockerfile.tmpl +++ b/templates/workspaces/airlock-import-review/Dockerfile.tmpl @@ -9,7 +9,7 @@ RUN rm -f /etc/apt/apt.conf.d/docker-clean; echo 'Binary::apt::APT::Keep-Downloa RUN --mount=type=cache,target=/var/cache/apt --mount=type=cache,target=/var/lib/apt \ apt-get update && apt-get install -y git jq curl ca-certificates patch --no-install-recommends -ARG AZURE_TRE_VERSION="0.19.0" +ARG AZURE_TRE_VERSION="0.19.1" WORKDIR ${BUNDLE_DIR} diff --git a/templates/workspaces/airlock-import-review/porter.yaml b/templates/workspaces/airlock-import-review/porter.yaml index 9ab7fe1685..c2f0bb52f2 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.13.0 +version: 0.13.1 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 d701e8d7f2..072d22760a 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: 1.5.6 +version: 1.5.7 description: "A base Azure TRE workspace" dockerfile: Dockerfile.tmpl registry: azuretre diff --git a/templates/workspaces/base/terraform/.terraform.lock.hcl b/templates/workspaces/base/terraform/.terraform.lock.hcl index 1924d14a51..61052ab39a 100644 --- a/templates/workspaces/base/terraform/.terraform.lock.hcl +++ b/templates/workspaces/base/terraform/.terraform.lock.hcl @@ -42,22 +42,22 @@ provider "registry.terraform.io/hashicorp/azuread" { } provider "registry.terraform.io/hashicorp/azurerm" { - version = "3.108.0" - constraints = ">= 3.8.0, >= 3.33.0, 3.108.0" + version = "3.112.0" + constraints = ">= 3.112.0, 3.112.0" hashes = [ - "h1:RIFBFTXz4X48JDHjbQHX4y400ax1/uEzMVFZgX3/z3w=", - "zh:2afecf948fd702bc08c87d9114595809d011f99a70a12dbf6bc67a12d0bee5fc", - "zh:395b6d1384a579867064e62d49b0b91e15919c33b03ea8b5031c2779bfa16b3d", - "zh:3e5594c59b6b02bc6e0f4c3de71aa2ab992494c53725fb3c64d36745f3814ef3", - "zh:4613e190609377309f6a4ac44f631c9469efab3ae148dbb09e73718201dc4f42", - "zh:624f01cb7604d58100068401bd07ab09a141e7bd318f8214127838cf202e4868", - "zh:65709950c9933e38704e2075a2339951e1259a6e882f35d390be36e1844ebc72", - "zh:af82657fad4e3a177f2ebb8035b45bda40f8856eb999288533321028794d03e5", - "zh:c40b331eba08830d16c0e6795fa7cbf08231073df2cfdb0f34e9d908a915981a", - "zh:d6ccd533a0bd984ca7ed1ae860e057e9e2f88468745be9712236d2d240353de4", - "zh:f361fd398e8772f8554a010331d161d6f7284a43238fd28bfa7b41795a5538b8", + "h1:5KSVV/O2eG6ty/3/qpOLQFQqJd96KEPzsTHItslJaMw=", + "zh:341c22454d24a75792aa99fbbc0c156f368534b7bb04eef4701b85995c7526a4", + "zh:3708656d75061c92f7208cc731b946c991ad343a443f8ff0ef082f077b7580b9", + "zh:38ca06f9f45705c648f04f272bd9483397693ea8da6db788cd7955f49ab79d6b", + "zh:3f305adb5ee0032e0ea68d198a089ecfd0127092930e99fa51377a250292b592", + "zh:4ae2fc6065164a819f576f705e634ebf5059f983149a41dad909719fea96145a", + "zh:5d376ac7dd71898a94038d6b6b8036dfec4c0216d832ec1135c855bf3e58eb5f", + "zh:63d2ff296d3aee5787e12c759a6a3d5aa15a574456aebbe11b833f01adf3faef", + "zh:8ad8746741f7f0ac10da6f1d105f26ebeb6e4d944f58ba749e86d7c9a67da3db", + "zh:abec182594ee8a21d72a5f23d3aa7fa45247488539fce6ed648c9c255d8bf972", + "zh:bf704b400be4181333b38c0306949f26326a9aa5ae68b4167e2fb8ee7fb13618", + "zh:c072938f8695f725fc5fbe986a54890f00d520cce570006390dc5bbc51b2a4ea", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", - "zh:f8c2132c77d35930203ec66f1bf9bbf633a2406e9f7b572ff425d65b8aa8c492", ] } diff --git a/templates/workspaces/base/terraform/aad/providers.tf b/templates/workspaces/base/terraform/aad/providers.tf index 5361d62965..1e5c3de630 100644 --- a/templates/workspaces/base/terraform/aad/providers.tf +++ b/templates/workspaces/base/terraform/aad/providers.tf @@ -3,7 +3,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = ">= 3.8.0" + version = ">= 3.112.0" } azuread = { source = "hashicorp/azuread" diff --git a/templates/workspaces/base/terraform/airlock/providers.tf b/templates/workspaces/base/terraform/airlock/providers.tf index 700915c3d0..66749ee4e0 100644 --- a/templates/workspaces/base/terraform/airlock/providers.tf +++ b/templates/workspaces/base/terraform/airlock/providers.tf @@ -3,7 +3,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = ">= 3.8.0" + version = ">= 3.112.0" } } } diff --git a/templates/workspaces/base/terraform/azure-monitor/providers.tf b/templates/workspaces/base/terraform/azure-monitor/providers.tf index 22a7546d7c..49937ec5f4 100644 --- a/templates/workspaces/base/terraform/azure-monitor/providers.tf +++ b/templates/workspaces/base/terraform/azure-monitor/providers.tf @@ -3,7 +3,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = ">= 3.8.0" + version = ">= 3.112.0" } azapi = { diff --git a/templates/workspaces/base/terraform/network/providers.tf b/templates/workspaces/base/terraform/network/providers.tf index 3b6b727025..70f3cb4865 100644 --- a/templates/workspaces/base/terraform/network/providers.tf +++ b/templates/workspaces/base/terraform/network/providers.tf @@ -3,7 +3,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = ">=3.33.0" + version = ">=3.112.0" } } } diff --git a/templates/workspaces/base/terraform/providers.tf b/templates/workspaces/base/terraform/providers.tf index 98ae22d24a..7f08ada424 100644 --- a/templates/workspaces/base/terraform/providers.tf +++ b/templates/workspaces/base/terraform/providers.tf @@ -2,7 +2,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "=3.108.0" + version = "=3.112.0" } azuread = { source = "hashicorp/azuread" diff --git a/templates/workspaces/base/terraform/upgrade.sh b/templates/workspaces/base/terraform/upgrade.sh new file mode 100644 index 0000000000..d6fbd13c9e --- /dev/null +++ b/templates/workspaces/base/terraform/upgrade.sh @@ -0,0 +1,13 @@ +#!/bin/bash +set -e + +# This script is used to install the bundle directly without having to interact with Porter + +# This script assumes you have created an .env from the sample and the variables +# will come from there. +# shellcheck disable=SC2154 +terraform init -upgrade -reconfigure -input=false -backend=true \ + -backend-config="resource_group_name=${TF_VAR_mgmt_resource_group_name}" \ + -backend-config="storage_account_name=${TF_VAR_mgmt_storage_account_name}" \ + -backend-config="container_name=${TF_VAR_terraform_state_container_name}" \ + -backend-config="key=${TF_VAR_tre_id}-ws-${TF_VAR_tre_resource_id}" diff --git a/templates/workspaces/unrestricted/Dockerfile.tmpl b/templates/workspaces/unrestricted/Dockerfile.tmpl index ffe968ddb9..c9320805e7 100644 --- a/templates/workspaces/unrestricted/Dockerfile.tmpl +++ b/templates/workspaces/unrestricted/Dockerfile.tmpl @@ -9,7 +9,7 @@ RUN rm -f /etc/apt/apt.conf.d/docker-clean; echo 'Binary::apt::APT::Keep-Downloa RUN --mount=type=cache,target=/var/cache/apt --mount=type=cache,target=/var/lib/apt \ apt-get update && apt-get install -y git jq curl ca-certificates patch --no-install-recommends -ARG AZURE_TRE_VERSION="0.19.0" +ARG AZURE_TRE_VERSION="0.19.1" WORKDIR $BUNDLE_DIR diff --git a/templates/workspaces/unrestricted/porter.yaml b/templates/workspaces/unrestricted/porter.yaml index bccd58e790..6bb4135dae 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.12.0 +version: 0.12.1 description: "A base Azure TRE workspace" dockerfile: Dockerfile.tmpl registry: azuretre From 87cb4f01d46cf84b9f2eba0c5fd44c8ee97aae5a Mon Sep 17 00:00:00 2001 From: Tim Allen Date: Thu, 26 Sep 2024 14:35:37 +0100 Subject: [PATCH 73/79] Update Workspace limit in docs (#4098) update files --- CHANGELOG.md | 1 + docs/using-tre/terms-definitions.md | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 67a1052f2d..95e53b2ea5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ FEATURES: ENHANCEMENTS: * Update Unrestricted and Airlock Import Review workspaces to be built off the Base workspace 0.19.0 ([#4087](https://github.com/microsoft/AzureTRE/pull/4087)) +* Add info regarding workspace limit into docs ([#3920](https://github.com/microsoft/AzureTRE/issues/3920)) BUG FIXES: * Workspace creation blocked due to Azure API depreciation ([#4095](https://github.com/microsoft/AzureTRE/issues/4095)) diff --git a/docs/using-tre/terms-definitions.md b/docs/using-tre/terms-definitions.md index c78766a1b2..b2d60bd685 100644 --- a/docs/using-tre/terms-definitions.md +++ b/docs/using-tre/terms-definitions.md @@ -46,6 +46,10 @@ Multiple workspaces can be created within a single Trusted Research Environment Each workspace has [workspace users](../azure-tre-overview/user-roles.md): a **workspace owner** (normally only one), and one or more **workspace researchers** that can access the data and workspace services in the workspace. The workspace owner is also considered a workspace researcher. +!!! important + The TRE has a soft limit of 32 projects, it can be increased to 70 by updating the storage account limit in your subscription to 500. + See issue [#3920](https://github.com/microsoft/AzureTRE/issues/3920) for more info. + ## Workspace Service A workspace service is a service, created as a building block, with pre-configured set of resources that can be applied to a workspace. From 92f1033b2dae7474a4cb344d8f724b20b06f57f9 Mon Sep 17 00:00:00 2001 From: Marcus Robinson Date: Thu, 26 Sep 2024 14:44:25 +0100 Subject: [PATCH 74/79] Fix CycleCloud and SLURM deployment issues (#4050) * Verify CycleCloud deployment Fixes #2406 * fix linting * Update providers.tf --------- Co-authored-by: Tim Allen --- .../shared-services/cyclecloud.md | 4 +- .../shared_services/cyclecloud/porter.yaml | 21 +- .../cyclecloud/template_schema.json | 196 +++++++++++++++++- .../cyclecloud/terraform/outputs.tf | 4 + 4 files changed, 209 insertions(+), 16 deletions(-) diff --git a/docs/tre-templates/shared-services/cyclecloud.md b/docs/tre-templates/shared-services/cyclecloud.md index e92f67ea29..147d136354 100644 --- a/docs/tre-templates/shared-services/cyclecloud.md +++ b/docs/tre-templates/shared-services/cyclecloud.md @@ -64,7 +64,7 @@ ls /etc/yum.repos.d/*.repo | xargs sed -i "s,# baseurl=https://repo.almalinux.or yum -y install epel-release ls /etc/yum.repos.d/*.repo | xargs sed -i 's/metalink/# metalink/g' -ls /etc/yum.repos.d/*.repo | xargs sed -i "s,#baseurl=https://download.fedoraproject.org/,baseurl=https://nexus-$TRE_ID.$REGION.cloudapp.azure.com/repository/fedoraproject/,g" +ls /etc/yum.repos.d/*.repo | xargs sed -i "s,#baseurl=https://download.example/pub/epel/,baseurl=https://nexus-$TRE_ID.$REGION.cloudapp.azure.com/repository/fedoraproject/pub/epel/,g" yum -y install python3 python3-pip @@ -83,6 +83,8 @@ gpgcheck=1 gpgkey=https://nexus-$TRE_ID.$REGION.cloudapp.azure.com/repository/microsoft-keys/microsoft.asc EOF +rpm --import https://nexus-$TRE_ID.$REGION.cloudapp.azure.com/repository/almalinux/almalinux/RPM-GPG-KEY-AlmaLinux + ``` - Click Save. diff --git a/templates/shared_services/cyclecloud/porter.yaml b/templates/shared_services/cyclecloud/porter.yaml index 6e539d1e62..df1a57d4eb 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.5.6 +version: 0.6.3 description: "An Azure TRE Shared Service Template for Azure Cyclecloud" registry: azuretre dockerfile: Dockerfile.tmpl @@ -53,6 +53,11 @@ outputs: applyTo: - install - upgrade + - name: shared_subnet_address_prefixes + type: string + applyTo: + - install + - upgrade mixins: @@ -67,10 +72,6 @@ install: description: "Deploy Cyclecloud shared service" vars: tre_id: ${ bundle.parameters.tre_id } - arm_client_id: ${ bundle.credentials.azure_client_id } - arm_client_secret: ${ bundle.credentials.azure_client_secret } - arm_tenant_id: ${ bundle.credentials.azure_tenant_id } - arm_use_msi: ${ bundle.parameters.arm_use_msi } tre_resource_id: ${ bundle.parameters.id } arm_environment: ${ bundle.parameters.arm_environment } backendConfig: @@ -80,16 +81,13 @@ install: key: ${ bundle.parameters.id } outputs: - name: connection_uri + - name: shared_subnet_address_prefixes upgrade: - terraform: description: "Update Cyclecloud shared service" vars: tre_id: ${ bundle.parameters.tre_id } - arm_client_id: ${ bundle.credentials.azure_client_id } - arm_client_secret: ${ bundle.credentials.azure_client_secret } - arm_tenant_id: ${ bundle.credentials.azure_tenant_id } - arm_use_msi: ${ bundle.parameters.arm_use_msi } tre_resource_id: ${ bundle.parameters.id } arm_environment: ${ bundle.parameters.arm_environment } backendConfig: @@ -99,16 +97,13 @@ upgrade: key: ${ bundle.parameters.id } outputs: - name: connection_uri + - name: shared_subnet_address_prefixes uninstall: - terraform: description: "Delete the Cyclecloud shared service" vars: tre_id: ${ bundle.parameters.tre_id } - arm_client_id: ${ bundle.credentials.azure_client_id } - arm_client_secret: ${ bundle.credentials.azure_client_secret } - arm_tenant_id: ${ bundle.credentials.azure_tenant_id } - arm_use_msi: ${ bundle.parameters.arm_use_msi } tre_resource_id: ${ bundle.parameters.id } arm_environment: ${ bundle.parameters.arm_environment } backendConfig: diff --git a/templates/shared_services/cyclecloud/template_schema.json b/templates/shared_services/cyclecloud/template_schema.json index cc2b88dd80..8a5031a514 100644 --- a/templates/shared_services/cyclecloud/template_schema.json +++ b/templates/shared_services/cyclecloud/template_schema.json @@ -4,8 +4,200 @@ "type": "object", "title": "Azure CycleCloud", "description": "Azure CycleCloud is an enterprise-friendly tool for orchestrating and managing High Performance Computing (HPC) environments on Azure.", - "required": [ - ], + "required": [], "properties": { + "display_name": { + "type": "string", + "title": "Name for the shared service", + "description": "The name of the shared service to be displayed to users", + "default": "CycleCloud", + "updateable": true + }, + "description": { + "type": "string", + "title": "Description of the shared service", + "description": "Description of the shared service", + "default": "Manage HPC environments on Azure", + "updateable": true + }, + "overview": { + "type": "string", + "title": "Workspace Service Overview", + "description": "Long form description of the shared service, in markdown syntax", + "default": "Azure CycleCloud is an enterprise-friendly tool for orchestrating and managing High Performance Computing (HPC) environments on Azure.", + "updateable": true + } + }, + "pipeline": { + "install": [ + { + "stepId": "main" + }, + { + "stepId": "42024559-3a88-4518-b1ea-713aebc91cfd", + "stepTitle": "Add CycleCloud rule collection to firewall", + "resourceTemplateName": "tre-shared-service-firewall", + "resourceType": "shared-service", + "resourceAction": "upgrade", + "properties": [ + { + "name": "network_rule_collections", + "type": "array", + "arraySubstitutionAction": "replace", + "arrayMatchField": "name", + "value": { + "name": "nrc_svc_{{ resource.id }}_cyclecloud", + "action": "Allow", + "rules": [ + { + "name": "Cyclecloud_Dependancies", + "description": "Cyclecloud Dependancies", + "source_addresses": "{{ resource.properties.shared_subnet_address_prefixes }}", + "destination_addresses": [ + "AzureResourceManager" + ], + "destination_ports": [ + "443" + ], + "protocols": [ + "TCP" + ] + } + ] + } + }, + { + "name": "rule_collections", + "type": "array", + "arraySubstitutionAction": "replace", + "arrayMatchField": "name", + "value": { + "name": "arc_svc_{{ resource.id }}_cyclecloud", + "action": "Allow", + "rules": [ + { + "name": "cyclecloud", + "description": "CycleCloud", + "protocols": [ + { + "port": "443", + "type": "Https" + } + ], + "target_fqdns": [ + "github.com", + "api.github.com", + "codeload.github.com", + "objects.githubusercontent.com" + ], + "source_addresses": "{{ resource.properties.shared_subnet_address_prefixes }}" + } + ] + } + } + ] + } + ], + "upgrade": [ + { + "stepId": "main" + }, + { + "stepId": "c3f95f9f-d125-4937-9403-84e4957a26b8", + "stepTitle": "Add CycleCloud rule collection from firewall", + "resourceTemplateName": "tre-shared-service-firewall", + "resourceType": "shared-service", + "resourceAction": "upgrade", + "properties": [ + { + "name": "network_rule_collections", + "type": "array", + "arraySubstitutionAction": "replace", + "arrayMatchField": "name", + "value": { + "name": "nrc_svc_{{ resource.id }}_cyclecloud", + "action": "Allow", + "rules": [ + { + "name": "Cyclecloud_Dependancies", + "description": "Cyclecloud Dependancies", + "source_addresses": "{{ resource.properties.shared_subnet_address_prefixes }}", + "destination_addresses": [ + "AzureResourceManager" + ], + "destination_ports": [ + "443" + ], + "protocols": [ + "TCP" + ] + } + ] + } + }, + { + "name": "rule_collections", + "type": "array", + "arraySubstitutionAction": "replace", + "arrayMatchField": "name", + "value": { + "name": "arc_svc_{{ resource.id }}_cyclecloud", + "action": "Allow", + "rules": [ + { + "name": "cyclecloud", + "description": "CycleCloud", + "protocols": [ + { + "port": "443", + "type": "Https" + } + ], + "target_fqdns": [ + "github.com", + "api.github.com", + "codeload.github.com", + "objects.githubusercontent.com" + ], + "source_addresses": "{{ resource.properties.shared_subnet_address_prefixes }}" + } + ] + } + } + ] + } + ], + "uninstall": [ + { + "stepId": "c3f95f9f-d125-4937-9403-84e4957a26a8", + "stepTitle": "Remove CycleCloud rule collection from firewall", + "resourceTemplateName": "tre-shared-service-firewall", + "resourceType": "shared-service", + "resourceAction": "upgrade", + "properties": [ + { + "name": "network_rule_collections", + "type": "array", + "arraySubstitutionAction": "remove", + "arrayMatchField": "name", + "value": { + "name": "nrc_svc_{{ resource.id }}_cyclecloud" + } + }, + { + "name": "rule_collections", + "type": "array", + "arraySubstitutionAction": "remove", + "arrayMatchField": "name", + "value": { + "name": "arc_svc_{{ resource.id }}_cyclecloud" + } + } + ] + }, + { + "stepId": "main" + } + ] } } diff --git a/templates/shared_services/cyclecloud/terraform/outputs.tf b/templates/shared_services/cyclecloud/terraform/outputs.tf index d30aeb6dbf..d6b7b5c87d 100644 --- a/templates/shared_services/cyclecloud/terraform/outputs.tf +++ b/templates/shared_services/cyclecloud/terraform/outputs.tf @@ -1,3 +1,7 @@ output "connection_uri" { value = "https://${azurerm_private_dns_zone.cyclecloud.name}" } + +output "shared_subnet_address_prefixes" { + value = data.azurerm_subnet.shared.address_prefixes +} From 89b55cbed3d00fad0abb1366eafdadc8a36d4fd7 Mon Sep 17 00:00:00 2001 From: Tim Allen Date: Thu, 26 Sep 2024 15:23:47 +0100 Subject: [PATCH 75/79] Update to Release Docs (#4015) * update * update * update * update * update * update --- CHANGELOG.md | 1 + docs/tre-developers/release.md | 15 ++++++++------- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 95e53b2ea5..818bd8a5e0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ FEATURES: ENHANCEMENTS: * Update Unrestricted and Airlock Import Review workspaces to be built off the Base workspace 0.19.0 ([#4087](https://github.com/microsoft/AzureTRE/pull/4087)) +* Update Release Docs (part of [#2727](https://github.com/microsoft/AzureTRE/issues/2727)) * Add info regarding workspace limit into docs ([#3920](https://github.com/microsoft/AzureTRE/issues/3920)) BUG FIXES: diff --git a/docs/tre-developers/release.md b/docs/tre-developers/release.md index ce7a362566..19aeb12866 100644 --- a/docs/tre-developers/release.md +++ b/docs/tre-developers/release.md @@ -5,13 +5,14 @@ A release is created when enough changes have been made and the main branch is s The process follows these steps: 1. Create a `Prep for Release v0...` issue to track. -2. Create PR linked to the `Prep...` issue and open in Dev Container. +2. Create a new branch for the release prep and open in Dev Container. 3. Update `CHANGELOG.md` in a PR with the following: - 1. Rename the top-most version noted as unreleased with the version number that makes sense. Note that you don't have to keep the one that is currently in the file as the version number chosen should reflect the changes made (major, minor, etc.) + 1. Rename the top-most version noted as unreleased with the version number that makes sense. Note that you don't have to keep the one that is currently in the file as the version number chosen should reflect the changes made (major, minor, etc.). 2. Create a new section for the next-unreleased version so that future changes will be placed there. - 3. Run `devops/scripts/list_versions.sh` and include the output in the change log for the version you're about the release -4. Merge the PR -5. Create GitHub Release in `Pre Release` state. + 3. Run `devops/scripts/list_versions.sh` and include the output in the change log for the version you're about the release. +4. Create PR and link to the `Prep...` issue. +5. Merge the PR. +6. Create GitHub Release in `Pre Release` state. 1. Go to https://github.com/microsoft/AzureTRE/releases/new 2. Click on `Choose a tag` and type a new one for you version. It should be in the form of `v0.9.2` - note the "v" in the beginning. @@ -20,10 +21,10 @@ The process follows these steps: 5. Include a final line with a link to the full changelog similar to this: **Full Changelog**: https://github.com/microsoft/AzureTRE/compare/v0.9.1...v0.9.2 -6. Update [AzureTRE-Deployment](https://github.com/microsoft/AzureTRE-Deployment). The procedure may vary depending on the level of changes introduced in the new version but should include the following steps: +7. Update [AzureTRE-Deployment](https://github.com/microsoft/AzureTRE-Deployment). The procedure may vary depending on the level of changes introduced in the new version but should include the following steps: 1. Update the tag used in [devcontainer.json](https://github.com/microsoft/AzureTRE-Deployment/blob/main/.devcontainer/devcontainer.json). 2. Rebuild the container. 3. Compare both `.devcontainer` and `.github` folders of the new release with the ones in the repo and make required updates so that only required difference exist. The compare can be done with VSCode [Compare Folders extension](https://marketplace.visualstudio.com/items?itemName=moshfeu.compare-folders) as you have both the old version (under to root folder) and the "new" one inside the _AzureTRE_ symlink. 4. With all changes made, rebuild the container to verify it's working and that AzureTRE folder has been populated correctly. -7. Once tests have been complete edit GitHub Release to `Set as the latest release`. +8. Once tests have been complete edit GitHub Release by disabling `Set as a pre-release` and enabling `Set as the latest release`. From 93e9a375c1ed7b2132bb470ae16c12130c183a8a Mon Sep 17 00:00:00 2001 From: Tim Allen Date: Thu, 26 Sep 2024 15:25:13 +0100 Subject: [PATCH 76/79] Prep for Release v0.19.1 (#4101) update changelog --- CHANGELOG.md | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 818bd8a5e0..152fa82a6c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,17 @@ FEATURES: +ENHANCEMENTS: + +BUG FIXES: + +COMPONENTS: + +## 0.19.1 + +**BREAKING CHANGES & MIGRATIONS**: +* Workspace creation blocked due to Azure API depreciation ([#4095](https://github.com/microsoft/AzureTRE/issues/4095)) + ENHANCEMENTS: * Update Unrestricted and Airlock Import Review workspaces to be built off the Base workspace 0.19.0 ([#4087](https://github.com/microsoft/AzureTRE/pull/4087)) * Update Release Docs (part of [#2727](https://github.com/microsoft/AzureTRE/issues/2727)) @@ -14,6 +25,38 @@ BUG FIXES: * Workspace creation blocked due to Azure API depreciation ([#4095](https://github.com/microsoft/AzureTRE/issues/4095)) COMPONENTS: +| name | version | +| ----- | ----- | +| devops | 0.5.2 | +| core | 0.10.8 | +| ui | 0.5.28 | +| tre-service-guacamole-linuxvm | 1.0.3 | +| tre-service-guacamole-import-reviewvm | 0.2.9 | +| tre-service-guacamole-export-reviewvm | 0.1.9 | +| tre-service-guacamole-windowsvm | 1.0.1 | +| tre-service-guacamole | 0.10.9 | +| tre-service-databricks | 1.0.4 | +| tre-service-mlflow | 0.7.9 | +| tre-service-innereye | 0.6.5 | +| tre-workspace-service-ohdsi | 0.2.5 | +| tre-workspace-service-gitea | 1.0.5 | +| tre-workspace-service-mysql | 1.0.4 | +| tre-workspace-service-azuresql | 1.0.10 | +| tre-user-resource-aml-compute-instance | 0.5.7 | +| tre-service-azureml | 0.8.11 | +| tre-workspace-service-health | 0.2.6 | +| tre-workspace-service-openai | 1.0.1 | +| tre-workspace-airlock-import-review | 0.13.1 | +| tre-workspace-unrestricted | 0.12.1 | +| tre-workspace-base | 1.5.7 | +| tre-shared-service-cyclecloud | 0.6.3 | +| tre-shared-service-databricks-private-auth | 0.1.6 | +| tre-shared-service-sonatype-nexus | 3.0.1 | +| tre-shared-service-admin-vm | 0.4.4 | +| tre-shared-service-firewall | 1.2.1 | +| tre-shared-service-gitea | 1.0.3 | +| tre-shared-service-certs | 0.5.2 | +| tre-shared-service-airlock-notifier | 1.0.2 | ## 0.19.0 From 400766bd39ff6b5216c24679dfeb4fb1a2252076 Mon Sep 17 00:00:00 2001 From: Marcus Robinson Date: Tue, 1 Oct 2024 13:53:35 +0100 Subject: [PATCH 77/79] Add route to retrieve users assigned to a workspace with UI (#4058) * View users who are assigned roles within a workspace Fixes #4049 * Fix iteration through roles. * remove unused metadata --------- Co-authored-by: Tim Allen --- api_app/_version.py | 2 +- api_app/api/routes/api.py | 2 +- api_app/api/routes/workspaces.py | 8 + api_app/models/domain/authentication.py | 2 +- api_app/models/schemas/users.py | 28 ++ api_app/resources/strings.py | 2 + api_app/services/aad_authentication.py | 86 +++--- api_app/services/access_service.py | 6 +- api_app/services/airlock.py | 4 +- .../test_api/test_routes/test_airlock.py | 2 +- .../test_api/test_routes/test_workspaces.py | 58 +++- .../test_airlock_request_status_update.py | 2 +- .../test_services/test_aad_access_service.py | 261 ++++++++---------- .../tests_ma/test_services/test_airlock.py | 28 +- ui/app/package.json | 2 +- .../workspaces/WorkspaceLeftNav.tsx | 6 + .../workspaces/WorkspaceProvider.tsx | 4 + .../components/workspaces/WorkspaceUsers.tsx | 140 ++++++++++ ui/app/src/models/apiEndpoints.ts | 41 +-- 19 files changed, 441 insertions(+), 243 deletions(-) create mode 100644 api_app/models/schemas/users.py create mode 100644 ui/app/src/components/workspaces/WorkspaceUsers.tsx diff --git a/api_app/_version.py b/api_app/_version.py index 2cfeb05209..aa070c2c9c 100644 --- a/api_app/_version.py +++ b/api_app/_version.py @@ -1 +1 @@ -__version__ = "0.18.11" +__version__ = "0.19.2" diff --git a/api_app/api/routes/api.py b/api_app/api/routes/api.py index 3c27782f72..0dd1a7d2c5 100644 --- a/api_app/api/routes/api.py +++ b/api_app/api/routes/api.py @@ -24,7 +24,7 @@ {"name": "workspaces", "description": " **Workspace Owners and Researchers** can view their own workspaces"}, {"name": "workspace services", "description": "**Workspace Owners** administer workspace services, **Workspace Owners and Researchers** can view services in the workspaces they belong to"}, {"name": "user resources", "description": "**Researchers** administer and can view their own researchers, **Workspace Owners** can view/update/delete all user resources in their workspaces"}, - {"name": "shared services", "description": "**TRE administratiors** administer shared services"}, + {"name": "shared services", "description": "**TRE administratiors** administer shared services"} ] # Root diff --git a/api_app/api/routes/workspaces.py b/api_app/api/routes/workspaces.py index 018a21999c..e1d049c3f0 100644 --- a/api_app/api/routes/workspaces.py +++ b/api_app/api/routes/workspaces.py @@ -21,6 +21,7 @@ from models.schemas.workspace_service import WorkspaceServiceInCreate, WorkspaceServicesInList, WorkspaceServiceInResponse from models.schemas.resource import ResourceHistoryInList, ResourcePatch from models.schemas.resource_template import ResourceTemplateInformationInList +from models.schemas.users import UsersInResponse from resources import strings from services.access_service import AuthConfigValidationError from services.authentication import get_current_admin_user, \ @@ -187,6 +188,13 @@ async def invoke_action_on_workspace(response: Response, action: str, user=Depen return OperationInResponse(operation=operation) +@workspaces_shared_router.get("/workspaces/{workspace_id}/users", response_model=UsersInResponse, name=strings.API_GET_WORKSPACE_USERS) +async def get_workspace_users(workspace=Depends(get_workspace_by_id_from_path)) -> UsersInResponse: + access_service = get_access_service() + users = access_service.get_workspace_users(workspace) + return UsersInResponse(users=users) + + # workspace operations # This method only returns templates that the authenticated user is authorized to use @workspaces_shared_router.get("/workspaces/{workspace_id}/workspace-service-templates", response_model=ResourceTemplateInformationInList, name=strings.API_GET_WORKSPACE_SERVICE_TEMPLATES_IN_WORKSPACE) diff --git a/api_app/models/domain/authentication.py b/api_app/models/domain/authentication.py index d105e1b4d8..3011440c7f 100644 --- a/api_app/models/domain/authentication.py +++ b/api_app/models/domain/authentication.py @@ -10,6 +10,6 @@ class User(BaseModel): id: str name: str - email: str + email: str = Field(None) roles: List[str] = Field([]) roleAssignments: List[RoleAssignment] = Field([]) diff --git a/api_app/models/schemas/users.py b/api_app/models/schemas/users.py new file mode 100644 index 0000000000..56c8025e56 --- /dev/null +++ b/api_app/models/schemas/users.py @@ -0,0 +1,28 @@ +from pydantic import BaseModel, Field +from typing import List + +from models.domain.authentication import User + + +class UsersInResponse(BaseModel): + users: List[User] = Field(..., title="Users", description="List of users assigned to the workspace") + + class Config: + schema_extra = { + "example": { + "users": [ + { + "id": 1, + "name": "John Doe", + "email": "john.doe@example.com", + "roles": ["WorkspaceOwner", "WorkspaceResearcher"] + }, + { + "id": 2, + "name": "Jane Smith", + "email": "jane.smith@example.com", + "roles": ["WorkspaceResearcher"] + } + ] + } + } diff --git a/api_app/resources/strings.py b/api_app/resources/strings.py index aaebcbd1ee..a9184cf289 100644 --- a/api_app/resources/strings.py +++ b/api_app/resources/strings.py @@ -15,6 +15,8 @@ API_UPDATE_WORKSPACE = "Update an existing workspace" API_INVOKE_ACTION_ON_WORKSPACE = "Invoke action on a workspace" +API_GET_WORKSPACE_USERS = "Get all users for a workspace" + API_GET_ALL_WORKSPACE_SERVICES = "Get all workspace services for workspace" API_GET_WORKSPACE_SERVICE_BY_ID = "Get workspace service by Id" API_CREATE_WORKSPACE_SERVICE = "Create a workspace service" diff --git a/api_app/services/aad_authentication.py b/api_app/services/aad_authentication.py index 81dd486a8f..d99e194fdf 100644 --- a/api_app/services/aad_authentication.py +++ b/api_app/services/aad_authentication.py @@ -219,7 +219,7 @@ def _get_service_principal_endpoint(client_id) -> str: @staticmethod def _get_service_principal_assigned_roles_endpoint(client_id) -> str: - return f"{MICROSOFT_GRAPH_URL}/v1.0/serviceprincipals/{client_id}/appRoleAssignedTo?$select=appRoleId,principalId,principalType" + return f"{MICROSOFT_GRAPH_URL}/v1.0/serviceprincipals/{client_id}/appRoleAssignedTo?$select=appRoleId,principalId,principalType,principalDisplayName" @staticmethod def _get_batch_endpoint() -> str: @@ -227,11 +227,11 @@ def _get_batch_endpoint() -> str: @staticmethod def _get_users_endpoint(user_object_id) -> str: - return "/users/" + user_object_id + "?$select=mail,id" + return "/users/" + user_object_id + "?$select=displayName,mail,id" @staticmethod def _get_group_members_endpoint(group_object_id) -> str: - return "/groups/" + group_object_id + "/transitiveMembers?$select=mail,id" + return "/groups/" + group_object_id + "/transitiveMembers?$select=displayName,mail,id" def _get_app_sp_graph_data(self, client_id: str) -> dict: msgraph_token = self._get_msgraph_token() @@ -243,7 +243,7 @@ def _get_user_role_assignments(self, client_id, msgraph_token): sp_roles_endpoint = self._get_service_principal_assigned_roles_endpoint(client_id) return requests.get(sp_roles_endpoint, headers=self._get_auth_header(msgraph_token)).json() - def _get_user_emails(self, roles_graph_data, msgraph_token): + def _get_user_details(self, roles_graph_data, msgraph_token): batch_endpoint = self._get_batch_endpoint() batch_request_body = self._get_batch_users_by_role_assignments_body(roles_graph_data) headers = self._get_auth_header(msgraph_token) @@ -262,43 +262,59 @@ def _get_user_emails(self, roles_graph_data, msgraph_token): return users_graph_data - def _get_user_emails_from_response(self, users_graph_data): - user_emails = {} - for user_data in users_graph_data["responses"]: - # Handle user endpoint response - if "users" in user_data["body"]["@odata.context"] and user_data["body"]["mail"] is not None: - user_emails[user_data["body"]["id"]] = [user_data["body"]["mail"]] - # Handle group endpoint response - if "directoryObjects" in user_data["body"]["@odata.context"]: - group_members_emails = [] - for group_member in user_data["body"]["value"]: - if group_member["mail"] is not None and group_member["mail"] not in group_members_emails: - group_members_emails.append(group_member["mail"]) - user_emails[user_data["id"]] = group_members_emails - return user_emails + def _get_roles_for_principal(self, user_id, roles_graph_data, app_id_to_role_name): + roles = [] + for role_assignment in roles_graph_data["value"]: + if role_assignment["principalId"] == user_id: + roles.append(app_id_to_role_name[role_assignment["appRoleId"]]) + return roles - def get_workspace_role_assignment_details(self, workspace: Workspace): - msgraph_token = self._get_msgraph_token() - app_role_ids = {role_name: workspace.properties[role_id] for role_name, role_id in self.WORKSPACE_ROLES_DICT.items()} - inverted_app_role_ids = {role_id: role_name for role_name, role_id in app_role_ids.items()} + def _get_users_inc_groups_from_response(self, users_graph_data, roles_graph_data, app_id_to_role_name) -> List[User]: + users = [] + for user_data in users_graph_data["responses"]: + if "users" in user_data["body"]["@odata.context"]: + # Handle user endpoint response + user_id = user_data["body"]["id"] + user_name = user_data["body"]["displayName"] - sp_id = workspace.properties["sp_id"] - roles_graph_data = self._get_user_role_assignments(sp_id, msgraph_token) - users_graph_data = self._get_user_emails(roles_graph_data, msgraph_token) - user_emails = self._get_user_emails_from_response(users_graph_data) + if "users" in user_data["body"]["@odata.context"]: + user_email = user_data["body"]["mail"] + # if user with id does not already exist in users + if not any(user.id == user_id for user in users): + users.append(User(id=user_id, name=user_name, email=user_email, roles=self._get_roles_for_principal(user_id, roles_graph_data, app_id_to_role_name))) - workspace_role_assignments_details = defaultdict(list) - for role_assignment in roles_graph_data["value"]: - principal_id = role_assignment["principalId"] - principal_type = role_assignment["principalType"] + # Handle group endpoint response + elif "directoryObjects" in user_data["body"]["@odata.context"]: + group_id = user_data["id"] + for group_member in user_data["body"]["value"]: + user_id = group_member["id"] + user_name = group_member["displayName"] + user_email = group_member["mail"] - if principal_type != "ServicePrincipal" and principal_id in user_emails: - app_role_id = role_assignment["appRoleId"] - app_role_name = inverted_app_role_ids.get(app_role_id) + if not any(user.id == user_id for user in users): + users.append(User(id=user_id, name=user_name, email=user_email, roles=self._get_roles_for_principal(group_id, roles_graph_data, app_id_to_role_name))) - if app_role_name: - workspace_role_assignments_details[app_role_name].extend(user_emails[principal_id]) + return users + def get_workspace_users(self, workspace: Workspace) -> List[User]: + msgraph_token = self._get_msgraph_token() + sp_graph_data = self._get_app_sp_graph_data(workspace.properties["client_id"]) + app_id_to_role_name = {app_role["id"]: app_role["value"] for app_role in sp_graph_data["value"][0]["appRoles"]} + roles_graph_data = self._get_user_role_assignments(workspace.properties["sp_id"], msgraph_token) + users_graph_data = self._get_user_details(roles_graph_data, msgraph_token) + users_inc_groups = self._get_users_inc_groups_from_response(users_graph_data, roles_graph_data, app_id_to_role_name) + + return users_inc_groups + + def get_workspace_user_emails_by_role_assignment(self, workspace: Workspace): + users = self.get_workspace_users(workspace) + workspace_role_assignments_details = {} + for user in users: + if user.email: + for role in user.roles: + if role not in workspace_role_assignments_details: + workspace_role_assignments_details[role] = [] + workspace_role_assignments_details[role].append(user.email) return workspace_role_assignments_details def _get_batch_users_by_role_assignments_body(self, roles_graph_data): diff --git a/api_app/services/access_service.py b/api_app/services/access_service.py index 7d376f840f..5c19126177 100644 --- a/api_app/services/access_service.py +++ b/api_app/services/access_service.py @@ -20,7 +20,11 @@ def get_identity_role_assignments(self, user_id: str) -> dict: pass @abstractmethod - def get_workspace_role_assignment_details(self, workspace: Workspace) -> dict: + def get_workspace_users(self, workspace: Workspace) -> List[User]: + pass + + @abstractmethod + def get_workspace_user_emails_by_role_assignment(self, workspace: Workspace) -> dict: pass @staticmethod diff --git a/api_app/services/airlock.py b/api_app/services/airlock.py index 6e79d49b64..ab4c6a98e0 100644 --- a/api_app/services/airlock.py +++ b/api_app/services/airlock.py @@ -273,7 +273,7 @@ async def _handle_existing_review_resource(existing_resource: AirlockReviewUserR async def save_and_publish_event_airlock_request(airlock_request: AirlockRequest, airlock_request_repo: AirlockRequestRepository, user: User, workspace: Workspace): access_service = get_access_service() - role_assignment_details = access_service.get_workspace_role_assignment_details(workspace) + role_assignment_details = access_service.get_workspace_user_emails_by_role_assignment(workspace) if config.ENABLE_AIRLOCK_EMAIL_CHECK: check_email_exists(role_assignment_details) @@ -332,7 +332,7 @@ async def update_and_publish_event_airlock_request( logger.debug(f"Sending status changed event for airlock request item: {airlock_request.id}") await send_status_changed_event(airlock_request=updated_airlock_request, previous_status=airlock_request.status) access_service = get_access_service() - role_assignment_details = access_service.get_workspace_role_assignment_details(workspace) + role_assignment_details = access_service.get_workspace_user_emails_by_role_assignment(workspace) await send_airlock_notification_event(updated_airlock_request, workspace, role_assignment_details) return updated_airlock_request except Exception: diff --git a/api_app/tests_ma/test_api/test_routes/test_airlock.py b/api_app/tests_ma/test_api/test_routes/test_airlock.py index 592b04fea9..05b2ad91c2 100644 --- a/api_app/tests_ma/test_api/test_routes/test_airlock.py +++ b/api_app/tests_ma/test_api/test_routes/test_airlock.py @@ -135,7 +135,7 @@ def log_in_with_researcher_user(self, app, researcher_user): patch("api.routes.workspaces.OperationRepository.resource_has_deployed_operation"), \ patch("api.routes.airlock.AirlockRequestRepository.save_item"), \ patch("api.dependencies.workspaces.WorkspaceRepository.get_workspace_by_id"), \ - patch("services.aad_authentication.AzureADAuthorization.get_workspace_role_assignment_details", return_value={"WorkspaceResearcher": ["researcher@outlook.com"], "WorkspaceOwner": ["owner@outlook.com"], "AirlockManager": ["manager@outlook.com"]}): + patch("services.aad_authentication.AzureADAuthorization.get_workspace_user_emails_by_role_assignment", return_value={"WorkspaceResearcher": ["researcher@outlook.com"], "WorkspaceOwner": ["owner@outlook.com"], "AirlockManager": ["manager@outlook.com"]}): yield app.dependency_overrides = {} diff --git a/api_app/tests_ma/test_api/test_routes/test_workspaces.py b/api_app/tests_ma/test_api/test_routes/test_workspaces.py index 16ee6c702c..58e069d852 100644 --- a/api_app/tests_ma/test_api/test_routes/test_workspaces.py +++ b/api_app/tests_ma/test_api/test_routes/test_workspaces.py @@ -1028,7 +1028,7 @@ async def test_patch_user_resource_patches_user_resource(self, _, update_item_mo # [PATCH] /workspaces/{workspace_id}/workspace-services/{service_id}/user-resources/{resource_id} @ patch("api.routes.workspaces.ResourceHistoryRepository.save_item", return_value=AsyncMock()) @ patch("api.routes.workspaces.send_resource_request_message", return_value=sample_resource_operation(resource_id=USER_RESOURCE_ID, operation_id=OPERATION_ID)) - @ patch("api.routes.workspaces.ResourceTemplateRepository.get_template_by_name_and_version", return_value=sample_workspace_service()) + @ patch("api.routes.workspaces.ResourceTemplateRepository.get_template_by_name_and_version", return_value=sample_resource_template()) @ patch("api.routes.workspaces.validate_user_has_valid_role_for_user_resource") @ patch("api.dependencies.workspaces.WorkspaceServiceRepository.get_workspace_service_by_id", return_value=sample_workspace_service()) @ patch("api.dependencies.workspaces.WorkspaceRepository.get_workspace_by_id", return_value=sample_workspace()) @@ -1054,7 +1054,7 @@ async def test_patch_user_resource_with_upgrade_major_version_returns_bad_reques # [PATCH] /workspaces/{workspace_id}/workspace-services/{service_id}/user-resources/{resource_id} @ patch("api.routes.workspaces.ResourceHistoryRepository.save_item", return_value=AsyncMock()) @ patch("api.routes.resource_helpers.send_resource_request_message", return_value=sample_resource_operation(resource_id=USER_RESOURCE_ID, operation_id=OPERATION_ID)) - @ patch("api.routes.workspaces.ResourceTemplateRepository.get_template_by_name_and_version", return_value=sample_workspace_service()) + @ patch("api.routes.workspaces.ResourceTemplateRepository.get_template_by_name_and_version", return_value=sample_resource_template()) @ patch("api.routes.workspaces.validate_user_has_valid_role_for_user_resource") @ patch("api.dependencies.workspaces.WorkspaceServiceRepository.get_workspace_service_by_id", return_value=sample_workspace_service()) @ patch("api.dependencies.workspaces.WorkspaceRepository.get_workspace_by_id", return_value=sample_workspace()) @@ -1080,9 +1080,10 @@ async def test_patch_user_resource_with_upgrade_major_version_and_force_update_r assert response.status_code == status.HTTP_202_ACCEPTED # [PATCH] /workspaces/{workspace_id}/workspace-services/{service_id}/user-resources/{resource_id} + @ patch("api.routes.workspaces.OperationRepository.save_item", return_value=AsyncMock()) @ patch("api.routes.workspaces.ResourceHistoryRepository.save_item", return_value=AsyncMock()) @ patch("api.routes.workspaces.send_resource_request_message", return_value=sample_resource_operation(resource_id=USER_RESOURCE_ID, operation_id=OPERATION_ID)) - @ patch("api.routes.workspaces.ResourceTemplateRepository.get_template_by_name_and_version", return_value=sample_workspace_service()) + @ patch("api.routes.workspaces.ResourceTemplateRepository.get_template_by_name_and_version", return_value=sample_resource_template()) @ patch("api.routes.workspaces.validate_user_has_valid_role_for_user_resource") @ patch("api.dependencies.workspaces.WorkspaceServiceRepository.get_workspace_service_by_id", return_value=sample_workspace_service()) @ patch("api.dependencies.workspaces.WorkspaceRepository.get_workspace_by_id", return_value=sample_workspace()) @@ -1090,8 +1091,7 @@ async def test_patch_user_resource_with_upgrade_major_version_and_force_update_r @ patch("api.routes.workspaces.UserResourceRepository.update_item_with_etag", return_value=sample_user_resource_object()) @ patch("api.routes.workspaces.UserResourceRepository.get_timestamp", return_value=FAKE_UPDATE_TIMESTAMP) @ patch("db.repositories.resources.ResourceRepository.create", return_value=AsyncMock()) - @ patch("db.repositories.resources.ResourceRepository.get_resource_by_id", return_value=AsyncMock()) - async def test_patch_user_resource_with_downgrade_version_returns_bad_request(self, _, __, ___, update_item_mock, ____, _____, ______, _______, ________, _________, __________, app, client): + async def test_patch_user_resource_with_downgrade_version_returns_bad_request(self, _, __, ___, ____, _____, ______, _______, ________, _________, __________, ___________, app, client): user_resource_service_patch = {"templateVersion": "0.0.1"} etag = "some-etag-value" @@ -1109,7 +1109,7 @@ async def test_patch_user_resource_with_downgrade_version_returns_bad_request(se # [PATCH] /workspaces/{workspace_id}/workspace-services/{service_id}/user-resources/{resource_id} @ patch("api.routes.workspaces.ResourceHistoryRepository.save_item", return_value=AsyncMock()) @ patch("api.routes.resource_helpers.send_resource_request_message", return_value=sample_resource_operation(resource_id=USER_RESOURCE_ID, operation_id=OPERATION_ID)) - @ patch("api.routes.workspaces.ResourceTemplateRepository.get_template_by_name_and_version", return_value=sample_workspace_service()) + @ patch("api.routes.workspaces.ResourceTemplateRepository.get_template_by_name_and_version", return_value=sample_resource_template()) @ patch("api.routes.workspaces.validate_user_has_valid_role_for_user_resource") @ patch("api.dependencies.workspaces.WorkspaceServiceRepository.get_workspace_service_by_id", return_value=sample_workspace_service()) @ patch("api.dependencies.workspaces.WorkspaceRepository.get_workspace_by_id", return_value=sample_workspace()) @@ -1117,7 +1117,8 @@ async def test_patch_user_resource_with_downgrade_version_returns_bad_request(se @ patch("api.routes.workspaces.UserResourceRepository.update_item_with_etag", return_value=sample_user_resource_object()) @ patch("api.routes.workspaces.UserResourceRepository.get_timestamp", return_value=FAKE_UPDATE_TIMESTAMP) @ patch("db.repositories.resources.ResourceRepository.create", return_value=AsyncMock()) - async def test_patch_user_resource_with_upgrade_minor_version_patches_user_resource(self, resource_repo_create_mock, ___, update_item_mock, ____, _____, ______, _______, ________, _________, __________, app, client): + @ patch("db.repositories.resources.ResourceRepository.get_resource_by_id", return_value=AsyncMock()) + async def test_patch_user_resource_with_upgrade_minor_version_patches_user_resource(self, __, ___, ____, update_item_mock, _____, ______, _______, ________, _________, __________, ___________, app, client): user_resource_service_patch = {"templateVersion": "0.2.0"} etag = "some-etag-value" @@ -1135,13 +1136,16 @@ async def test_patch_user_resource_with_upgrade_minor_version_patches_user_resou # [PATCH] /workspaces/{workspace_id}/workspace-services/{service_id}/user-resources/{resource_id} @ patch("api.routes.workspaces.ResourceHistoryRepository.save_item", return_value=AsyncMock()) @ patch("api.routes.resource_helpers.send_resource_request_message", return_value=sample_resource_operation(resource_id=USER_RESOURCE_ID, operation_id=OPERATION_ID)) - @ patch("api.routes.workspaces.UserResourceRepository.update_item_with_etag", return_value=sample_user_resource_object()) @ patch("api.routes.workspaces.ResourceTemplateRepository.get_template_by_name_and_version", return_value=sample_resource_template()) + @ patch("api.routes.workspaces.validate_user_has_valid_role_for_user_resource") @ patch("api.dependencies.workspaces.WorkspaceServiceRepository.get_workspace_service_by_id", return_value=sample_workspace_service()) @ patch("api.dependencies.workspaces.WorkspaceRepository.get_workspace_by_id", return_value=sample_workspace()) @ patch("api.dependencies.workspaces.UserResourceRepository.get_user_resource_by_id", return_value=sample_user_resource_object()) + @ patch("api.routes.workspaces.UserResourceRepository.update_item_with_etag", return_value=sample_user_resource_object()) @ patch("api.routes.workspaces.UserResourceRepository.get_timestamp", return_value=FAKE_UPDATE_TIMESTAMP) - async def test_patch_user_resource_validates_against_template(self, _, __, ___, ____, _____, update_item_mock, ______, _______, app, client): + @ patch("db.repositories.resources.ResourceRepository.create", return_value=AsyncMock()) + @ patch("db.repositories.resources.ResourceRepository.get_resource_by_id", return_value=AsyncMock()) + async def test_patch_user_resource_validates_against_template(self, _, __, ___, update_item_mock, ____, _____, ______, _______, ________, _________, __________, app, client): user_resource_service_patch = {'isEnabled': False, 'properties': {'vm_size': 'large'}} etag = "some-etag-value" @@ -1240,7 +1244,7 @@ async def test_patch_workspace_service_patches_workspace_service(self, _, update @ patch("api.routes.resource_helpers.ResourceRepository.get_resource_dependency_list", return_value=[sample_workspace_service().__dict__]) @ patch("api.routes.workspaces.ResourceHistoryRepository.save_item", return_value=AsyncMock()) @ patch("api.routes.workspaces.send_resource_request_message", return_value=sample_resource_operation(resource_id=WORKSPACE_ID, operation_id=OPERATION_ID)) - @ patch("api.routes.workspaces.ResourceTemplateRepository.get_template_by_name_and_version", return_value=sample_workspace_service()) + @ patch("api.routes.workspaces.ResourceTemplateRepository.get_template_by_name_and_version", return_value=sample_resource_template()) @ patch("api.dependencies.workspaces.WorkspaceServiceRepository.get_workspace_service_by_id", return_value=sample_workspace_service()) @ patch("api.dependencies.workspaces.WorkspaceRepository.get_workspace_by_id") @ patch("api.routes.workspaces.WorkspaceServiceRepository.update_item_with_etag", return_value=sample_workspace_service()) @@ -1266,7 +1270,7 @@ async def test_patch_workspace_service_with_upgrade_major_version_returns_bad_re @ patch("api.routes.resource_helpers.ResourceRepository.get_resource_dependency_list", return_value=[sample_workspace_service().__dict__]) @ patch("api.routes.workspaces.ResourceHistoryRepository.save_item", return_value=AsyncMock()) @ patch("api.routes.workspaces.send_resource_request_message", return_value=sample_resource_operation(resource_id=WORKSPACE_ID, operation_id=OPERATION_ID)) - @ patch("api.routes.workspaces.ResourceTemplateRepository.get_template_by_name_and_version", return_value=sample_workspace_service()) + @ patch("api.routes.workspaces.ResourceTemplateRepository.get_template_by_name_and_version", return_value=sample_resource_template()) @ patch("api.dependencies.workspaces.WorkspaceServiceRepository.get_workspace_service_by_id", return_value=sample_workspace_service()) @ patch("api.dependencies.workspaces.WorkspaceRepository.get_workspace_by_id") @ patch("api.routes.workspaces.WorkspaceServiceRepository.update_item_with_etag", return_value=sample_workspace_service()) @@ -1294,7 +1298,7 @@ async def test_patch_workspace_service_with_upgrade_major_version_and_force_upda @ patch("api.routes.resource_helpers.ResourceRepository.get_resource_dependency_list", return_value=[sample_workspace_service().__dict__]) @ patch("api.routes.workspaces.ResourceHistoryRepository.save_item", return_value=AsyncMock()) @ patch("api.routes.workspaces.send_resource_request_message", return_value=sample_resource_operation(resource_id=WORKSPACE_ID, operation_id=OPERATION_ID)) - @ patch("api.routes.workspaces.ResourceTemplateRepository.get_template_by_name_and_version", return_value=sample_workspace_service()) + @ patch("api.routes.workspaces.ResourceTemplateRepository.get_template_by_name_and_version", return_value=sample_resource_template()) @ patch("api.dependencies.workspaces.WorkspaceServiceRepository.get_workspace_service_by_id", return_value=sample_workspace_service()) @ patch("api.dependencies.workspaces.WorkspaceRepository.get_workspace_by_id") @ patch("api.routes.workspaces.WorkspaceServiceRepository.update_item_with_etag", return_value=sample_workspace_service()) @@ -1321,7 +1325,7 @@ async def test_patch_workspace_service_with_downgrade_version_returns_bad_reques @ patch("api.routes.resource_helpers.ResourceRepository.get_resource_dependency_list", return_value=[sample_workspace_service().__dict__]) @ patch("api.routes.workspaces.ResourceHistoryRepository.save_item", return_value=AsyncMock()) @ patch("api.routes.workspaces.send_resource_request_message", return_value=sample_resource_operation(resource_id=WORKSPACE_ID, operation_id=OPERATION_ID)) - @ patch("api.routes.workspaces.ResourceTemplateRepository.get_template_by_name_and_version", return_value=sample_workspace_service()) + @ patch("api.routes.workspaces.ResourceTemplateRepository.get_template_by_name_and_version", return_value=sample_resource_template()) @ patch("api.dependencies.workspaces.WorkspaceServiceRepository.get_workspace_service_by_id", return_value=sample_workspace_service()) @ patch("api.dependencies.workspaces.WorkspaceRepository.get_workspace_by_id") @ patch("api.routes.workspaces.WorkspaceServiceRepository.update_item_with_etag", return_value=sample_workspace_service()) @@ -1645,3 +1649,31 @@ async def test_delete_user_resource_returns_resource_id(self, __, ___, get_user_ assert response.status_code == status.HTTP_200_OK assert response.json()["operation"]["resourceId"] == user_resource.id + + @pytest.mark.parametrize("auth_class", ["aad_authentication.AzureADAuthorization"]) + @patch("api.dependencies.workspaces.WorkspaceRepository.get_workspace_by_id", return_value=sample_workspace()) + async def test_get_workspace_users_returns_users(self, _, auth_class, app, client): + with patch(f"services.{auth_class}.get_workspace_users") as get_workspace_users_mock: + + users = [ + { + "id": "123", + "name": "John Doe", + "email": "john.doe@example.com", + "roles": ["WorkspaceOwner", "WorkspaceResearcher"], + 'roleAssignments': [] + }, + { + "id": "456", + "name": "Jane Smith", + "email": "jane.smith@example.com", + "roles": ["WorkspaceResearcher"], + 'roleAssignments': [] + } + ] + get_workspace_users_mock.return_value = users + + response = await client.get(app.url_path_for(strings.API_GET_WORKSPACE_USERS, workspace_id=WORKSPACE_ID)) + + assert response.status_code == status.HTTP_200_OK + assert response.json()["users"] == users diff --git a/api_app/tests_ma/test_service_bus/test_airlock_request_status_update.py b/api_app/tests_ma/test_service_bus/test_airlock_request_status_update.py index d9165db2f5..6404ba122f 100644 --- a/api_app/tests_ma/test_service_bus/test_airlock_request_status_update.py +++ b/api_app/tests_ma/test_service_bus/test_airlock_request_status_update.py @@ -108,7 +108,7 @@ def __str__(self): @patch('service_bus.airlock_request_status_update.AirlockRequestRepository.create') @patch('service_bus.airlock_request_status_update.WorkspaceRepository.create') @patch('logging.exception') -@patch("services.aad_authentication.AzureADAuthorization.get_workspace_role_assignment_details", return_value={"researcher_emails": ["researcher@outlook.com"], "owner_emails": ["owner@outlook.com"]}) +@patch("services.aad_authentication.AzureADAuthorization.get_workspace_user_emails_by_role_assignment", return_value={"researcher_emails": ["researcher@outlook.com"], "owner_emails": ["owner@outlook.com"]}) async def test_receiving_good_message(_, logging_mock, workspace_repo, airlock_request_repo, eg_client): eg_client().send = AsyncMock() diff --git a/api_app/tests_ma/test_services/test_aad_access_service.py b/api_app/tests_ma/test_services/test_aad_access_service.py index eeb7754106..ef90d1f885 100644 --- a/api_app/tests_ma/test_services/test_aad_access_service.py +++ b/api_app/tests_ma/test_services/test_aad_access_service.py @@ -17,9 +17,10 @@ def __init__(self, principal_id, role_id, principal_type): class UserPrincipal: - def __init__(self, principal_id, mail): + def __init__(self, principal_id, mail, name): self.principal_id = principal_id self.mail = mail + self.display_name = name class GroupPrincipal: @@ -28,6 +29,63 @@ def __init__(self, principal_id, members): self.members = members +user_principal_1 = UserPrincipal("user_principal_id1", "test_user1@email.com", "test_user1") +user_principal_2 = UserPrincipal("user_principal_id2", "test_user2@email.com", "test_user2") +user_principal_3 = UserPrincipal("user_principal_id3", "test_user3@email.com", "test_user3") +user_principal_4 = UserPrincipal("user_principal_id4", "test_user4@email.com", "test_user4") + +group_principal = GroupPrincipal("group_principal_id", [user_principal_3, user_principal_4]) + + +@pytest.fixture +def roles_response(): + workspace_owner_role_id = "1abc4" + return get_mock_role_response( + [ + PrincipalRole(user_principal_1.principal_id, workspace_owner_role_id, "User"), + PrincipalRole(group_principal.principal_id, workspace_owner_role_id, "Group") + ] + ) + + +@pytest.fixture +def user_response(): + return get_mock_batch_response( + [user_principal_1], [] + ) + + +@pytest.fixture +def group_response(): + return get_mock_batch_response( + [], [group_principal] + ) + + +@pytest.fixture +def users_and_group_response(): + return get_mock_batch_response( + [user_principal_1, user_principal_2], [group_principal] + ) + + +@pytest.fixture +def get_app_sp_graph_data_mock(): + return { + "value": [ + { + "id": "12345", + "appRoles": [ + {"id": "1abc3", "value": "WorkspaceResearcher"}, + {"id": "1abc4", "value": "WorkspaceOwner"}, + {"id": "1abc5", "value": "AirlockManager"}, + ], + "servicePrincipalNames": ["api://tre_ws_1234"], + } + ] + } + + def test_extract_workspace__raises_error_if_client_id_not_available(): access_service = AzureADAuthorization() with pytest.raises(AuthConfigValidationError): @@ -296,34 +354,25 @@ def test_raises_auth_config_error_if_auth_info_has_incorrect_roles(_): ) +@patch("services.aad_authentication.AzureADAuthorization._get_app_sp_graph_data") @patch("services.aad_authentication.AzureADAuthorization._get_user_role_assignments") -@patch("services.aad_authentication.AzureADAuthorization._get_user_emails") +@patch("services.aad_authentication.AzureADAuthorization._get_user_details") @patch( "services.aad_authentication.AzureADAuthorization._get_msgraph_token", return_value="token", ) -def test_get_workspace_role_assignment_details_with_single_user_returns_user_mail_and_role_assignment( - _, users, roles +def test_get_workspace_user_emails_by_role_assignment_with_single_user_returns_user_mail_and_role_assignment( + _, users, roles, app_sp_graph_data_mock, user_response, roles_response, get_app_sp_graph_data_mock ): access_service = AzureADAuthorization() - # Build user response - user_principal_id = "user_principal_id" - user_email = "test_user@email.com" - user_response = get_mock_batch_response( - [UserPrincipal(user_principal_id, user_email)], [] - ) + # Use fixtures users.return_value = user_response - - # Build user role assignment response - workspace_owner_role_id = "1234" - roles_response = get_mock_role_response( - [PrincipalRole(user_principal_id, workspace_owner_role_id, "User")] - ) roles.return_value = roles_response + app_sp_graph_data_mock.return_value = get_app_sp_graph_data_mock # Act - role_assignment_details = access_service.get_workspace_role_assignment_details( + role_assignment_details = access_service.get_workspace_user_emails_by_role_assignment( Workspace( id="id", templateName="tre-workspace-base", @@ -331,43 +380,39 @@ def test_get_workspace_role_assignment_details_with_single_user_returns_user_mai etag="", properties={ "sp_id": "ab123", - "app_role_id_workspace_owner": workspace_owner_role_id, + "client_id": "ab124", + "app_role_id_workspace_owner": "1abc4", "app_role_id_workspace_researcher": "ab125", "app_role_id_workspace_airlock_manager": "ab130", }, ) ) - assert role_assignment_details["WorkspaceOwner"] == [user_email] + assert role_assignment_details["WorkspaceOwner"] == ["test_user1@email.com"] +@patch("services.aad_authentication.AzureADAuthorization._get_app_sp_graph_data") @patch("services.aad_authentication.AzureADAuthorization._get_user_role_assignments") -@patch("services.aad_authentication.AzureADAuthorization._get_user_emails") +@patch("services.aad_authentication.AzureADAuthorization._get_user_details") @patch( "services.aad_authentication.AzureADAuthorization._get_msgraph_token", return_value="token", ) -def test_get_workspace_role_assignment_details_with_single_user_with_no_mail_is_not_returned( - _, users, roles +def test_get_workspace_user_emails_by_role_assignment_with_single_user_with_no_mail_is_not_returned( + _, users, roles, app_sp_graph_data_mock, user_response, roles_response, get_app_sp_graph_data_mock ): access_service = AzureADAuthorization() # Build user response - user_principal_id = "user_principal_id" - user_response = get_mock_batch_response( - [UserPrincipal(user_principal_id, None)], [] - ) - users.return_value = user_response + user_response_no_mail = user_response.copy() + user_response_no_mail["responses"][0]["body"]["mail"] = None + users.return_value = user_response_no_mail - # Build user role assignment response - workspace_owner_role_id = "1234" - roles_response = get_mock_role_response( - [PrincipalRole(user_principal_id, workspace_owner_role_id, "User")] - ) roles.return_value = roles_response + app_sp_graph_data_mock.return_value = get_app_sp_graph_data_mock # Act - role_assignment_details = access_service.get_workspace_role_assignment_details( + role_assignment_details = access_service.get_workspace_user_emails_by_role_assignment( Workspace( id="id", templateName="tre-workspace-base", @@ -375,7 +420,8 @@ def test_get_workspace_role_assignment_details_with_single_user_with_no_mail_is_ etag="", properties={ "sp_id": "ab123", - "app_role_id_workspace_owner": workspace_owner_role_id, + "client_id": "ab124", + "app_role_id_workspace_owner": "1abc4", "app_role_id_workspace_researcher": "ab125", "app_role_id_workspace_airlock_manager": "ab130", }, @@ -385,34 +431,24 @@ def test_get_workspace_role_assignment_details_with_single_user_with_no_mail_is_ assert len(role_assignment_details) == 0 +@patch("services.aad_authentication.AzureADAuthorization._get_app_sp_graph_data") @patch("services.aad_authentication.AzureADAuthorization._get_user_role_assignments") -@patch("services.aad_authentication.AzureADAuthorization._get_user_emails") +@patch("services.aad_authentication.AzureADAuthorization._get_user_details") @patch( "services.aad_authentication.AzureADAuthorization._get_msgraph_token", return_value="token", ) -def test_get_workspace_role_assignment_details_with_only_groups_assigned_returns_group_members( - _, users_and_groups, roles +def test_get_workspace_user_emails_by_role_assignment_with_only_groups_assigned_returns_group_members( + _, users_and_groups, roles, app_sp_graph_data_mock, group_response, roles_response, get_app_sp_graph_data_mock ): access_service = AzureADAuthorization() - # Build group response - user_in_group = UserPrincipal("user_principal_id1", "test_user1@email.com") - group_principal_id = "group_principal_id" - group_response = get_mock_batch_response( - [], [GroupPrincipal(group_principal_id, members=[user_in_group])] - ) users_and_groups.return_value = group_response - - # Build user role assignment response - workspace_owner_role_id = "1234" - roles_response = get_mock_role_response( - [PrincipalRole(group_principal_id, workspace_owner_role_id, "Group")] - ) roles.return_value = roles_response + app_sp_graph_data_mock.return_value = get_app_sp_graph_data_mock # Act - role_assignment_details = access_service.get_workspace_role_assignment_details( + role_assignment_details = access_service.get_workspace_user_emails_by_role_assignment( Workspace( id="id", templateName="tre-workspace-base", @@ -420,7 +456,8 @@ def test_get_workspace_role_assignment_details_with_only_groups_assigned_returns etag="", properties={ "sp_id": "ab123", - "app_role_id_workspace_owner": workspace_owner_role_id, + "client_id": "ab124", + "app_role_id_workspace_owner": "1abc4", "app_role_id_workspace_researcher": "ab125", "app_role_id_workspace_airlock_manager": "ab130", }, @@ -428,113 +465,29 @@ def test_get_workspace_role_assignment_details_with_only_groups_assigned_returns ) assert len(role_assignment_details) == 1 - assert "test_user1@email.com" in role_assignment_details["WorkspaceOwner"] + assert "test_user3@email.com" in role_assignment_details["WorkspaceOwner"] + assert "test_user4@email.com" in role_assignment_details["WorkspaceOwner"] +@patch("services.aad_authentication.AzureADAuthorization._get_app_sp_graph_data") @patch("services.aad_authentication.AzureADAuthorization._get_user_role_assignments") -@patch("services.aad_authentication.AzureADAuthorization._get_user_emails") +@patch("services.aad_authentication.AzureADAuthorization._get_user_details") @patch( "services.aad_authentication.AzureADAuthorization._get_msgraph_token", return_value="token", ) -def test_get_workspace_role_assignment_details_with_group_with_multiple_users_returned_as_expected( - _, users_and_groups, roles +def test_get_workspace_user_emails_by_role_assignment_with_groups_and_users_assigned_returned_as_expected( + _, users_and_groups, roles, app_sp_graph_data_mock, roles_response, get_app_sp_graph_data_mock, users_and_group_response ): - access_service = AzureADAuthorization() - - # Build group response - user_principal_id1 = "user_principal_id1" - user_email1 = "test_user1@email.com" - - user_principal_id2 = "user_principal_id2" - user_email2 = "test_user2@email.com" - - group_principal = GroupPrincipal( - "group_principal_id", - members=[ - UserPrincipal(user_principal_id1, user_email1), - UserPrincipal(user_principal_id2, user_email2), - ], - ) - - # Get batch response - users_groups_response = get_mock_batch_response([], [group_principal]) - users_and_groups.return_value = users_groups_response - - # Build user role assignment response - workspace_owner_role_id = "1234" - roles_response = get_mock_role_response( - [PrincipalRole(group_principal.principal_id, workspace_owner_role_id, "Group")] - ) - roles.return_value = roles_response - - # Act - role_assignment_details = access_service.get_workspace_role_assignment_details( - Workspace( - id="id", - templateName="tre-workspace-base", - templateVersion="0.1.0", - etag="", - properties={ - "sp_id": "ab123", - "app_role_id_workspace_owner": workspace_owner_role_id, - "app_role_id_workspace_researcher": "ab125", - "app_role_id_workspace_airlock_manager": "ab130", - }, - ) - ) - - assert len(role_assignment_details) == 1 - assert "test_user2@email.com" in role_assignment_details["WorkspaceOwner"] - assert "test_user1@email.com" in role_assignment_details["WorkspaceOwner"] - - -@patch("services.aad_authentication.AzureADAuthorization._get_user_role_assignments") -@patch("services.aad_authentication.AzureADAuthorization._get_user_emails") -@patch( - "services.aad_authentication.AzureADAuthorization._get_msgraph_token", - return_value="token", -) -def test_get_workspace_role_assignment_details_with_groups_and_users_assigned_returned_as_expected( - _, users_and_groups, roles -): access_service = AzureADAuthorization() - # Build group response - user_principal_id1 = "user_principal_id1" - user_email1 = "test_user1@email.com" - - group_principal = GroupPrincipal( - "group_principal_id", members=[UserPrincipal(user_principal_id1, user_email1)] - ) - - # User assigned to the role, not in any group - user_principal_id2 = "user_principal_id2" - user_email2 = "test_user2@email.com" - - # Get batch response - users_groups_response = get_mock_batch_response( - [UserPrincipal(user_principal_id2, user_email2)], [group_principal] - ) - - users_and_groups.return_value = users_groups_response - - # Build user role assignment response - workspace_owner_role_id = "1234" - roles_response = get_mock_role_response( - [ - PrincipalRole(user_principal_id1, workspace_owner_role_id, "User"), - PrincipalRole(user_principal_id2, workspace_owner_role_id, "User"), - PrincipalRole( - group_principal.principal_id, workspace_owner_role_id, "Group" - ), - ] - ) roles.return_value = roles_response + app_sp_graph_data_mock.return_value = get_app_sp_graph_data_mock + users_and_groups.return_value = users_and_group_response # Act - role_assignment_details = access_service.get_workspace_role_assignment_details( + role_assignment_details = access_service.get_workspace_user_emails_by_role_assignment( Workspace( id="id", templateName="tre-workspace-base", @@ -542,7 +495,8 @@ def test_get_workspace_role_assignment_details_with_groups_and_users_assigned_re etag="", properties={ "sp_id": "ab123", - "app_role_id_workspace_owner": workspace_owner_role_id, + "client_id": "ab123", + "app_role_id_workspace_owner": "ab124", "app_role_id_workspace_researcher": "ab125", "app_role_id_workspace_airlock_manager": "ab130", }, @@ -550,14 +504,15 @@ def test_get_workspace_role_assignment_details_with_groups_and_users_assigned_re ) assert len(role_assignment_details) == 1 - assert "test_user2@email.com" in role_assignment_details["WorkspaceOwner"] assert "test_user1@email.com" in role_assignment_details["WorkspaceOwner"] + assert "test_user3@email.com" in role_assignment_details["WorkspaceOwner"] + assert "test_user4@email.com" in role_assignment_details["WorkspaceOwner"] @patch("services.aad_authentication.AzureADAuthorization._get_auth_header") @patch("services.aad_authentication.AzureADAuthorization._get_batch_users_by_role_assignments_body") @patch("requests.post") -def test_get_user_emails_with_batch_of_more_than_20_requests(mock_graph_post, mock_get_batch_users_by_role_assignments_body, mock_headers): +def test_get_user_details_with_batch_of_more_than_20_requests(mock_graph_post, mock_get_batch_users_by_role_assignments_body, mock_headers): # Arrange access_service = AzureADAuthorization() roles_graph_data = [{"id": "role1"}, {"id": "role2"}] @@ -591,11 +546,11 @@ def test_get_user_emails_with_batch_of_more_than_20_requests(mock_graph_post, mo mock_get_batch_users_by_role_assignments_body.return_value = batch_request_body # Mock the response of the post request - mock_graph_post_response = {"responses": [{"id": "user1"}, {"id": "user2"}]} + mock_graph_post_response = {"responses": [{"id": "user1", "request": {"id": "user1"}}, {"id": "user2", "request": {"id": "user2"}}]} mock_graph_post.return_value.json.return_value = mock_graph_post_response # Act - users_graph_data = access_service._get_user_emails(roles_graph_data, msgraph_token) + users_graph_data = access_service._get_user_details(roles_graph_data, msgraph_token) # Assert assert len(users_graph_data["responses"]) == 4 @@ -618,21 +573,21 @@ def get_mock_batch_response(user_principals, group_principals): response_body = {"responses": []} for user_principal in user_principals: response_body["responses"].append( - get_mock_user_response(user_principal.principal_id, user_principal.mail) + get_mock_user_response(user_principal.principal_id, user_principal.mail, user_principal.display_name) ) for group_principal in group_principals: response_body["responses"].append(get_mock_group_response(group_principal)) return response_body -def get_mock_user_response(principal_id, mail): +def get_mock_user_response(principal_id, mail, name): headers = '{"Cache-Control":"no-cache","x-ms-resource-unit":"1","OData-Version":"4.0","Content-Type":"application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8"}' user_odata = f'@odata.context":"{MOCK_MICROSOFT_GRAPH_URL}/v1.0/$metadata#users(mail,id)/$entity' user_response_body = { "id": "1", "status": 200, "headers": headers, - "body": {"@odata.context": user_odata, "mail": mail, "id": principal_id}, + "body": {"@odata.context": user_odata, "mail": mail, "id": principal_id, "displayName": name}, } return user_response_body @@ -647,6 +602,7 @@ def get_mock_group_response(group): "@odata.type": "#microsoft.graph.user", "mail": member.mail, "id": member.principal_id, + "displayName": member.display_name, } ) group_response_body = { @@ -654,6 +610,7 @@ def get_mock_group_response(group): "status": 200, "headers": headers, "body": {"@odata.context": group_odata, "value": group_members_body}, + "request": {"id": "group_principal_id"} } return group_response_body diff --git a/api_app/tests_ma/test_services/test_airlock.py b/api_app/tests_ma/test_services/test_airlock.py index d8a26a1df8..71d9d074b0 100644 --- a/api_app/tests_ma/test_services/test_airlock.py +++ b/api_app/tests_ma/test_services/test_airlock.py @@ -242,7 +242,7 @@ def test_get_required_permission_return_read_and_write_permissions_for_draft_req @pytest.mark.asyncio @patch("event_grid.helpers.EventGridPublisherClient", return_value=AsyncMock()) -@patch("services.aad_authentication.AzureADAuthorization.get_workspace_role_assignment_details", return_value={"WorkspaceResearcher": ["researcher@outlook.com"], "WorkspaceOwner": ["owner@outlook.com"], "AirlockManager": ["manager@outlook.com"]}) +@patch("services.aad_authentication.AzureADAuthorization.get_workspace_user_emails_by_role_assignment", return_value={"WorkspaceResearcher": ["researcher@outlook.com"], "WorkspaceOwner": ["owner@outlook.com"], "AirlockManager": ["manager@outlook.com"]}) @patch('services.airlock.get_timestamp', return_value=CURRENT_TIME) async def test_save_and_publish_event_airlock_request_saves_item(_, __, event_grid_publisher_client_mock, airlock_request_repo_mock): airlock_request_mock = sample_airlock_request() @@ -269,7 +269,7 @@ async def test_save_and_publish_event_airlock_request_saves_item(_, __, event_gr @pytest.mark.asyncio -@patch("services.aad_authentication.AzureADAuthorization.get_workspace_role_assignment_details", return_value={"WorkspaceResearcher": ["researcher@outlook.com"], "WorkspaceOwner": ["owner@outlook.com"], "AirlockManager": ["manager@outlook.com"]}) +@patch("services.aad_authentication.AzureADAuthorization.get_workspace_user_emails_by_role_assignment", return_value={"WorkspaceResearcher": ["researcher@outlook.com"], "WorkspaceOwner": ["owner@outlook.com"], "AirlockManager": ["manager@outlook.com"]}) async def test_save_and_publish_event_airlock_request_raises_503_if_save_to_db_fails(_, airlock_request_repo_mock): airlock_request_mock = sample_airlock_request() airlock_request_repo_mock.save_item = AsyncMock(side_effect=Exception) @@ -285,7 +285,7 @@ async def test_save_and_publish_event_airlock_request_raises_503_if_save_to_db_f @pytest.mark.asyncio @patch("event_grid.helpers.EventGridPublisherClient", return_value=AsyncMock()) -@patch("services.aad_authentication.AzureADAuthorization.get_workspace_role_assignment_details", return_value={"WorkspaceResearcher": ["researcher@outlook.com"], "WorkspaceOwner": ["owner@outlook.com"], "AirlockManager": ["manager@outlook.com"]}) +@patch("services.aad_authentication.AzureADAuthorization.get_workspace_user_emails_by_role_assignment", return_value={"WorkspaceResearcher": ["researcher@outlook.com"], "WorkspaceOwner": ["owner@outlook.com"], "AirlockManager": ["manager@outlook.com"]}) async def test_save_and_publish_event_airlock_request_raises_503_if_publish_event_fails(_, event_grid_publisher_client_mock, airlock_request_repo_mock): airlock_request_mock = sample_airlock_request() @@ -334,11 +334,11 @@ async def test_check_email_exists_passes_if_researcher_or_owner_and_airlock_mana {"WorkspaceResearcher": [], "AirlockManager": ["owner@outlook.com"]}, {"WorkspaceResearcher": ["researcher@outlook.com"], "owner_emails": []}, {"WorkspaceResearcher": ["researcher@outlook.com"]}]) -@patch("services.aad_authentication.AzureADAuthorization.get_workspace_role_assignment_details") +@patch("services.aad_authentication.AzureADAuthorization.get_workspace_user_emails_by_role_assignment") @patch('core.config.ENABLE_AIRLOCK_EMAIL_CHECK', "True") -async def test_save_and_publish_event_airlock_request_raises_417_if_email_not_present(get_workspace_role_assignment_details_patched, email_mock_return): +async def test_save_and_publish_event_airlock_request_raises_417_if_email_not_present(get_workspace_user_emails_by_role_assignment_patched, email_mock_return): - get_workspace_role_assignment_details_patched.return_value = email_mock_return + get_workspace_user_emails_by_role_assignment_patched.return_value = email_mock_return airlock_request_mock = sample_airlock_request() with pytest.raises(HTTPException) as ex: @@ -353,11 +353,11 @@ async def test_save_and_publish_event_airlock_request_raises_417_if_email_not_pr @pytest.mark.asyncio @pytest.mark.parametrize('email_mock_return', [{}, {"WorkspaceResearcher": [], "AirlockManager": []}]) -@patch("services.aad_authentication.AzureADAuthorization.get_workspace_role_assignment_details") +@patch("services.aad_authentication.AzureADAuthorization.get_workspace_user_emails_by_role_assignment") @patch("event_grid.event_sender.publish_event", return_value=AsyncMock()) -async def test_save_and_publish_event_airlock_notification_if_email_not_present(publish_event_mock, get_workspace_role_assignment_details_patched, email_mock_return, airlock_request_repo_mock): +async def test_save_and_publish_event_airlock_notification_if_email_not_present(publish_event_mock, get_workspace_user_emails_by_role_assignment_patched, email_mock_return, airlock_request_repo_mock): - get_workspace_role_assignment_details_patched.return_value = email_mock_return + get_workspace_user_emails_by_role_assignment_patched.return_value = email_mock_return airlock_request_mock = sample_airlock_request() airlock_request_repo_mock.save_item = AsyncMock() @@ -372,7 +372,7 @@ async def test_save_and_publish_event_airlock_notification_if_email_not_present( @pytest.mark.asyncio @patch("event_grid.helpers.EventGridPublisherClient", return_value=AsyncMock()) -@patch("services.aad_authentication.AzureADAuthorization.get_workspace_role_assignment_details", return_value={"WorkspaceResearcher": ["researcher@outlook.com"], "WorkspaceOwner": ["owner@outlook.com"], "AirlockManager": ["manager@outlook.com"]}) +@patch("services.aad_authentication.AzureADAuthorization.get_workspace_user_emails_by_role_assignment", return_value={"WorkspaceResearcher": ["researcher@outlook.com"], "WorkspaceOwner": ["owner@outlook.com"], "AirlockManager": ["manager@outlook.com"]}) async def test_update_and_publish_event_airlock_request_updates_item(_, event_grid_publisher_client_mock, airlock_request_repo_mock): airlock_request_mock = sample_airlock_request() @@ -404,7 +404,7 @@ async def test_update_and_publish_event_airlock_request_updates_item(_, event_gr @pytest.mark.asyncio @patch("services.airlock.send_status_changed_event") @patch("services.airlock.send_airlock_notification_event") -@patch("services.aad_authentication.AzureADAuthorization.get_workspace_role_assignment_details") +@patch("services.aad_authentication.AzureADAuthorization.get_workspace_user_emails_by_role_assignment") async def test_update_and_publish_event_airlock_request_sends_status_changed_event(_, send_airlock_notification_event_mock, send_status_changed_event_mock, airlock_request_repo_mock): new_status = AirlockRequestStatus.Submitted airlock_request_repo_mock.update_airlock_request = AsyncMock() @@ -421,7 +421,7 @@ async def test_update_and_publish_event_airlock_request_sends_status_changed_eve @pytest.mark.asyncio -@patch("services.aad_authentication.AzureADAuthorization.get_workspace_role_assignment_details", return_value={"WorkspaceResearcher": ["researcher@outlook.com"], "WorkspaceOwner": ["owner@outlook.com"], "AirlockManager": ["manager@outlook.com"]}) +@patch("services.aad_authentication.AzureADAuthorization.get_workspace_user_emails_by_role_assignment", return_value={"WorkspaceResearcher": ["researcher@outlook.com"], "WorkspaceOwner": ["owner@outlook.com"], "AirlockManager": ["manager@outlook.com"]}) async def test_update_and_publish_event_airlock_request_raises_400_if_status_update_invalid(_, airlock_request_repo_mock): airlock_request_mock = sample_airlock_request() @@ -438,7 +438,7 @@ async def test_update_and_publish_event_airlock_request_raises_400_if_status_upd @pytest.mark.asyncio @patch("event_grid.helpers.EventGridPublisherClient", return_value=AsyncMock()) -@patch("services.aad_authentication.AzureADAuthorization.get_workspace_role_assignment_details", return_value={"WorkspaceResearcher": ["researcher@outlook.com"], "WorkspaceOwner": ["owner@outlook.com"], "AirlockManager": ["manager@outlook.com"]}) +@patch("services.aad_authentication.AzureADAuthorization.get_workspace_user_emails_by_role_assignment", return_value={"WorkspaceResearcher": ["researcher@outlook.com"], "WorkspaceOwner": ["owner@outlook.com"], "AirlockManager": ["manager@outlook.com"]}) async def test_update_and_publish_event_airlock_request_raises_503_if_publish_event_fails(_, event_grid_publisher_client_mock, airlock_request_repo_mock): airlock_request_mock = sample_airlock_request() @@ -460,7 +460,7 @@ async def test_update_and_publish_event_airlock_request_raises_503_if_publish_ev @pytest.mark.asyncio @patch("services.airlock.send_status_changed_event") @patch("services.airlock.send_airlock_notification_event") -@patch("services.aad_authentication.AzureADAuthorization.get_workspace_role_assignment_details") +@patch("services.aad_authentication.AzureADAuthorization.get_workspace_user_emails_by_role_assignment") async def test_update_and_publish_event_airlock_request_without_status_change_should_not_send_status_changed_event(_, send_airlock_notification_event_mock, send_status_changed_event_mock, airlock_request_repo_mock): new_status = None airlock_request_repo_mock.update_airlock_request = AsyncMock() diff --git a/ui/app/package.json b/ui/app/package.json index 31b0b45bcc..b52fdcb652 100644 --- a/ui/app/package.json +++ b/ui/app/package.json @@ -1,6 +1,6 @@ { "name": "tre-ui", - "version": "0.5.28", + "version": "0.6.2", "private": true, "dependencies": { "@azure/msal-browser": "^2.35.0", diff --git a/ui/app/src/components/workspaces/WorkspaceLeftNav.tsx b/ui/app/src/components/workspaces/WorkspaceLeftNav.tsx index 3bf1914b70..0a03bd15d0 100644 --- a/ui/app/src/components/workspaces/WorkspaceLeftNav.tsx +++ b/ui/app/src/components/workspaces/WorkspaceLeftNav.tsx @@ -68,6 +68,12 @@ export const WorkspaceLeftNav: React.FunctionComponent = url: `/${ApiEndpoint.Workspaces}/${workspaceCtx.workspace.id}/${ApiEndpoint.SharedServices}`, isExpanded: false, links: sharedServiceLinkArray + }, + { + name: 'Users', + key: `/${ApiEndpoint.Workspaces}/${workspaceCtx.workspace.id}/${ApiEndpoint.Users}`, + url: `/${ApiEndpoint.Workspaces}/${workspaceCtx.workspace.id}/${ApiEndpoint.Users}`, + isExpanded: false } ] } diff --git a/ui/app/src/components/workspaces/WorkspaceProvider.tsx b/ui/app/src/components/workspaces/WorkspaceProvider.tsx index baae9cea94..0fe590a1da 100644 --- a/ui/app/src/components/workspaces/WorkspaceProvider.tsx +++ b/ui/app/src/components/workspaces/WorkspaceProvider.tsx @@ -10,6 +10,7 @@ import { WorkspaceLeftNav } from './WorkspaceLeftNav'; import { WorkspaceServiceItem } from './WorkspaceServiceItem'; import { WorkspaceContext } from '../../contexts/WorkspaceContext'; import { WorkspaceServices } from './WorkspaceServices'; +import { WorkspaceUsers } from './WorkspaceUsers'; import { Workspace } from '../../models/workspace'; import { SharedService } from '../../models/sharedService'; import { SharedServices } from '../shared/SharedServices'; @@ -235,6 +236,9 @@ export const WorkspaceProvider: React.FunctionComponent = () => { } /> + + } /> )} diff --git a/ui/app/src/components/workspaces/WorkspaceUsers.tsx b/ui/app/src/components/workspaces/WorkspaceUsers.tsx new file mode 100644 index 0000000000..9bdde2f745 --- /dev/null +++ b/ui/app/src/components/workspaces/WorkspaceUsers.tsx @@ -0,0 +1,140 @@ +import * as React from 'react'; +import { useState, useCallback, useEffect, useMemo, useContext } from 'react'; +import { GroupedList, IGroup } from '@fluentui/react/lib/GroupedList'; +import { IColumn, DetailsRow } from '@fluentui/react/lib/DetailsList'; +import { SelectionMode } from '@fluentui/react/lib/Selection'; +import { Persona, PersonaSize } from '@fluentui/react/lib/Persona'; +import { HttpMethod, useAuthApiCall } from '../../hooks/useAuthApiCall'; +import { APIError } from '../../models/exceptions'; +import { WorkspaceContext } from '../../contexts/WorkspaceContext'; +import { ApiEndpoint } from '../../models/apiEndpoints'; +import { LoadingState } from '../../models/loadingState'; +import { ExceptionLayout } from '../shared/ExceptionLayout'; +import { User } from '../../models/user'; +import { Stack } from '@fluentui/react'; + +interface IUser { + id: string; + name: string; + email: string; + role: string; + roles: string[]; +} + +export const WorkspaceUsers: React.FunctionComponent = () => { + const [state, setState] = useState({ + users: [] as IUser[], + apiError: undefined as APIError | undefined, + loadingState: LoadingState.Loading, + }); + + const apiCall = useAuthApiCall(); + const { workspace, roles, workspaceApplicationIdURI } = useContext(WorkspaceContext); + + const getUsers = useCallback(async () => { + setState(prevState => ({ ...prevState, apiError: undefined, loadingState: LoadingState.Loading })); + + try { + const scopeId = roles.length > 0 ? workspaceApplicationIdURI : ""; + const result = await apiCall(`${ApiEndpoint.Workspaces}/${workspace.id}/${ApiEndpoint.Users}`, HttpMethod.Get, scopeId); + + const users = result.users.flatMap((user: any) => + user.roles.map((role: string) => ({ + id: user.id, + name: user.name, + email: user.email, + role: role, + roles: user.roles + })) + ).sort((a: { role: string; }, b: { role: string; }) => a.role.localeCompare(b.role)); + + setState({ users, apiError: undefined, loadingState: LoadingState.Ok }); + } catch (err: any) { + err.userMessage = "Error retrieving users"; + setState({ users: [], apiError: err, loadingState: LoadingState.Error }); + } + }, [apiCall, workspace.id, roles.length, workspaceApplicationIdURI]); + + useEffect(() => { + getUsers(); + }, [getUsers]); + + const groupedUsers = useMemo(() => { + const groups: { [key: string]: IUser[] } = {}; + state.users.forEach(user => { + if (!groups[user.role]) { + groups[user.role] = []; + } + groups[user.role].push(user); + }); + return groups; + }, [state.users]); + + const groups: IGroup[] = useMemo(() => { + return Object.keys(groupedUsers).map((role, index) => ({ + key: role, + name: role, + startIndex: index, + count: groupedUsers[role].length, + })); + }, [groupedUsers]); + + + const columns: IColumn[] = [ + { + key: 'name', + name: 'Name', + fieldName: 'name', + minWidth: 150, + onRender: (item: User) => ( + + ), + } + ]; + + const onRenderCell = ( + nestingDepth?: number, + item?: IUser, + itemIndex?: number, + group?: IGroup, + ): React.ReactNode => { + return item && typeof itemIndex === 'number' && itemIndex > -1 ? ( + + ) : null; + }; + + return ( + <> + + + +

Users

+
+
+
+ {state.apiError && } +
+ +
+ + ); +} diff --git a/ui/app/src/models/apiEndpoints.ts b/ui/app/src/models/apiEndpoints.ts index f759156a22..f5c09c50d0 100644 --- a/ui/app/src/models/apiEndpoints.ts +++ b/ui/app/src/models/apiEndpoints.ts @@ -1,22 +1,23 @@ export enum ApiEndpoint { - Workspaces = 'workspaces', - WorkspaceServices = 'workspace-services', - UserResources = 'user-resources', - SharedServices = 'shared-services', - AirlockRequests = 'requests', - AirlockLink = 'link', - AirlockSubmit = 'submit', - AirlockCancel = 'cancel', - AirlockReview = 'review', - AirlockCreateReviewResource = 'review-user-resource', - WorkspaceTemplates = 'workspace-templates', - WorkspaceServiceTemplates = 'workspace-service-templates', - UserResourceTemplates = 'user-resource-templates', - SharedServiceTemplates = 'shared-service-templates', - Operations = 'operations', - History = 'history', - InvokeAction = 'invoke-action', - Costs = 'costs', - Metadata = ".metadata", - Health = "health" + Workspaces = 'workspaces', + WorkspaceServices = 'workspace-services', + UserResources = 'user-resources', + SharedServices = 'shared-services', + AirlockRequests = 'requests', + AirlockLink = 'link', + AirlockSubmit = 'submit', + AirlockCancel = 'cancel', + AirlockReview = 'review', + AirlockCreateReviewResource = 'review-user-resource', + WorkspaceTemplates = 'workspace-templates', + WorkspaceServiceTemplates = 'workspace-service-templates', + UserResourceTemplates = 'user-resource-templates', + SharedServiceTemplates = 'shared-service-templates', + Operations = 'operations', + History = 'history', + InvokeAction = 'invoke-action', + Costs = 'costs', + Metadata = ".metadata", + Health = "health", + Users = 'users' } From 91ce09e8f335c38aac7e05c474fc113a0eb6e0c0 Mon Sep 17 00:00:00 2001 From: danny-cooke-icl <138700430+danny-cooke-icl@users.noreply.github.com> Date: Wed, 2 Oct 2024 13:59:55 +0100 Subject: [PATCH 78/79] Update config.py --- api_app/core/config.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api_app/core/config.py b/api_app/core/config.py index bab2ee3b36..aa84020783 100644 --- a/api_app/core/config.py +++ b/api_app/core/config.py @@ -65,6 +65,6 @@ API_AUDIENCE: str = config("API_AUDIENCE", default=API_CLIENT_ID) -AIRLOCK_SAS_TOKEN_EXPIRY_PERIOD_IN_HOURS: int = config("AIRLOCK_SAS_TOKEN_EXPIRY_PERIOD_IN_HOURS", default=48) +AIRLOCK_SAS_TOKEN_EXPIRY_PERIOD_IN_HOURS: int = config("AIRLOCK_SAS_TOKEN_EXPIRY_PERIOD_IN_HOURS", default=1) API_ROOT_SCOPE: str = f"api://{API_CLIENT_ID}/user_impersonation" From 4e0ede5fb16f5dd51c12005c25984251bfd07896 Mon Sep 17 00:00:00 2001 From: danny-cooke-icl <138700430+danny-cooke-icl@users.noreply.github.com> Date: Wed, 9 Oct 2024 11:14:04 +0100 Subject: [PATCH 79/79] Update control_tre.sh --- devops/scripts/control_tre.sh | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/devops/scripts/control_tre.sh b/devops/scripts/control_tre.sh index c004d68939..cf146a4fba 100755 --- a/devops/scripts/control_tre.sh +++ b/devops/scripts/control_tre.sh @@ -146,9 +146,10 @@ fi AGW_STATE=$(az network application-gateway list --query "[?resourceGroup=='${core_rg_name}'&&name=='${agw_name}'].operationalState | [0]" -o tsv) # Report final App Service Status -API_STATE=$(az webapp list --query "[?resourceGroup=='${core_rg_name}'&&name=='${api_name}'].state | [0]" -o tsv) +#Commenting out API_STATE as it doesn't appear to work, its not essential and its not in the main branch any more DRC +#API_STATE=$(az webapp list --query "[?resourceGroup=='${core_rg_name}'&&name=='${api_name}'].state | [0]" -o tsv) echo -e "\n\e[34m»»» 🔨 \e[96mTRE Status for $TRE_ID\e[0m" echo -e "\e[34m»»» • \e[96mFirewall: \e[33m$FW_STATE\e[0m" echo -e "\e[34m»»» • \e[96mApplication Gateway: \e[33m$AGW_STATE\e[0m" -echo -e "\e[34m»»» • \e[96mApp Service: \e[33m$API_STATE\e[0m\n" +#echo -e "\e[34m»»» • \e[96mApp Service: \e[33m$API_STATE\e[0m\n"