diff --git a/.github/workflows/deploy-orchestrator.yml b/.github/workflows/deploy-orchestrator.yml index 1eabafd8..803e5eb7 100644 --- a/.github/workflows/deploy-orchestrator.yml +++ b/.github/workflows/deploy-orchestrator.yml @@ -72,10 +72,8 @@ env: jobs: docker-build: + if: inputs.trigger_type == 'workflow_dispatch' && inputs.build_docker_image == true uses: ./.github/workflows/job-docker-build.yml - with: - trigger_type: ${{ inputs.trigger_type }} - build_docker_image: ${{ inputs.build_docker_image }} secrets: inherit deploy: diff --git a/.github/workflows/job-deploy-linux.yml b/.github/workflows/job-deploy-linux.yml index ae33e1a9..56c620fb 100644 --- a/.github/workflows/job-deploy-linux.yml +++ b/.github/workflows/job-deploy-linux.yml @@ -263,7 +263,7 @@ jobs: azd env set AZURE_ENV_IMAGE_TAG="$INPUT_IMAGE_TAG" if [[ "$INPUT_BUILD_DOCKER_IMAGE" == "true" ]]; then - ACR_NAME="${{ secrets.ACR_TEST_LOGIN_SERVER }}" + ACR_NAME="${{ vars.ACR_TEST_LOGIN_SERVER }}" azd env set AZURE_ENV_CONTAINER_REGISTRY_ENDPOINT="$ACR_NAME" echo "Set ACR name to: $ACR_NAME" else diff --git a/.github/workflows/job-deploy-windows.yml b/.github/workflows/job-deploy-windows.yml index 87e6989f..7601bbd9 100644 --- a/.github/workflows/job-deploy-windows.yml +++ b/.github/workflows/job-deploy-windows.yml @@ -268,7 +268,7 @@ jobs: # Set ACR name only when building Docker image if ("$env:INPUT_BUILD_DOCKER_IMAGE" -eq "true") { - $ACR_NAME = "${{ secrets.ACR_TEST_LOGIN_SERVER }}" + $ACR_NAME = "${{ vars.ACR_TEST_LOGIN_SERVER }}" azd env set AZURE_ENV_CONTAINER_REGISTRY_ENDPOINT="$ACR_NAME" Write-Host "Set ACR name to: $ACR_NAME" } else { diff --git a/.github/workflows/job-docker-build.yml b/.github/workflows/job-docker-build.yml index 2babcb77..ec17062c 100644 --- a/.github/workflows/job-docker-build.yml +++ b/.github/workflows/job-docker-build.yml @@ -1,27 +1,21 @@ -name: Docker Build Job +name: Build & Push Test Images (Feature Branch) on: workflow_call: - inputs: - trigger_type: - description: 'Trigger type (workflow_dispatch, pull_request, schedule)' - required: true - type: string - build_docker_image: - description: 'Build And Push Docker Image (Optional)' - required: false - default: false - type: boolean outputs: IMAGE_TAG: description: "Generated Docker Image Tag" value: ${{ jobs.docker-build.outputs.IMAGE_TAG }} + workflow_dispatch: + +permissions: + contents: read + id-token: write env: BRANCH_NAME: ${{ github.event.workflow_run.head_branch || github.head_ref || github.ref_name }} jobs: docker-build: - if: inputs.trigger_type == 'workflow_dispatch' && inputs.build_docker_image == true runs-on: ubuntu-latest environment: production outputs: @@ -55,7 +49,11 @@ jobs: subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} - name: Login to Azure Container Registry - run: az acr login --name ${{ secrets.ACR_TEST_LOGIN_SERVER }} + shell: bash + run: | + # Extract registry name from login server (e.g., myacr.azurecr.io -> myacr) + ACR_NAME=$(echo "${{ vars.ACR_TEST_LOGIN_SERVER }}" | cut -d'.' -f1) + az acr login --name "$ACR_NAME" - name: Build and Push Cod Mod backend Docker image uses: docker/build-push-action@v7 @@ -66,8 +64,8 @@ jobs: file: docker/Backend.Dockerfile push: true tags: | - ${{ secrets.ACR_TEST_LOGIN_SERVER }}/cmsabackend:${{ steps.generate_docker_tag.outputs.IMAGE_TAG }} - ${{ secrets.ACR_TEST_LOGIN_SERVER }}/cmsabackend:${{ steps.generate_docker_tag.outputs.IMAGE_TAG }}_${{ github.run_number }} + ${{ vars.ACR_TEST_LOGIN_SERVER }}/cmsabackend:${{ steps.generate_docker_tag.outputs.IMAGE_TAG }} + ${{ vars.ACR_TEST_LOGIN_SERVER }}/cmsabackend:${{ steps.generate_docker_tag.outputs.IMAGE_TAG }}_${{ github.run_number }} - name: Build and Push Cod Mod frontend Docker image uses: docker/build-push-action@v7 @@ -78,8 +76,8 @@ jobs: file: docker/Frontend.Dockerfile push: true tags: | - ${{ secrets.ACR_TEST_LOGIN_SERVER }}/cmsafrontend:${{ steps.generate_docker_tag.outputs.IMAGE_TAG }} - ${{ secrets.ACR_TEST_LOGIN_SERVER }}/cmsafrontend:${{ steps.generate_docker_tag.outputs.IMAGE_TAG }}_${{ github.run_number }} + ${{ vars.ACR_TEST_LOGIN_SERVER }}/cmsafrontend:${{ steps.generate_docker_tag.outputs.IMAGE_TAG }} + ${{ vars.ACR_TEST_LOGIN_SERVER }}/cmsafrontend:${{ steps.generate_docker_tag.outputs.IMAGE_TAG }}_${{ github.run_number }} - name: Verify Docker Image Build shell: bash @@ -91,7 +89,7 @@ jobs: if: always() shell: bash run: | - ACR_NAME=$(echo "${{ secrets.ACR_TEST_LOGIN_SERVER }}") + ACR_NAME=$(echo "${{ vars.ACR_TEST_LOGIN_SERVER }}") echo "## 🐳 Docker Build Job Summary" >> $GITHUB_STEP_SUMMARY echo "" >> $GITHUB_STEP_SUMMARY echo "| Field | Value |" >> $GITHUB_STEP_SUMMARY diff --git a/docs/CustomizingAzdParameters.md b/docs/CustomizingAzdParameters.md index 05652672..69b534d0 100644 --- a/docs/CustomizingAzdParameters.md +++ b/docs/CustomizingAzdParameters.md @@ -13,9 +13,9 @@ By default this template will use the environment name as the prefix to prevent | `AZURE_ENV_AI_SERVICE_LOCATION` | string | `` | Location of the Azure resources. Controls where the Azure AI Services will be deployed. | | `AZURE_ENV_MODEL_DEPLOYMENT_TYPE` | string | `GlobalStandard` | Change the Model Deployment Type (allowed values: Standard, GlobalStandard). | | `AZURE_ENV_GPT_MODEL_NAME` | string | `gpt-4o` | Set the Model Name (allowed values: gpt-4o). | -| `AZURE_ENV_GPT_MODEL_VERSION` | string | `2024-08-06` | Set the Azure model version (allowed values: 2024-08-06) | +| `AZURE_ENV_GPT_MODEL_VERSION` | string | `2024-11-20` | Set the Azure model version (allowed values: 2024-11-20) | | `AZURE_ENV_GPT_MODEL_CAPACITY` | integer | `150` | Set the Model Capacity (choose a number based on available GPT model capacity in your subscription). | -| `AZURE_ENV_EXISTING_LOG_ANALYTICS_WORKSPACE_RID`| string | Guide to get your [Existing Workspace ID](/docs/re-use-log-analytics.md) | Set this if you want to reuse an existing Log Analytics Workspace instead of creating a new one. | +| `AZURE_ENV_EXISTING_LOG_ANALYTICS_WORKSPACE_RID`| string | Guide to get your [Existing Workspace ID](re-use-log-analytics.md) | Set this if you want to reuse an existing Log Analytics Workspace instead of creating a new one. | | `AZURE_ENV_IMAGE_TAG` | string | `latest` | Set the Image tag Like (allowed values: latest, dev, hotfix) | | `AZURE_ENV_VM_SIZE` | string | `Standard_D2s_v5` | Specifies the size of the Jumpbox Virtual Machine (e.g., `Standard_D2s_v5`, `Standard_D2s_v4`). Set a custom value if `enablePrivateNetworking` is `true`. | | `AZURE_ENV_JUMPBOX_ADMIN_USERNAME` | string | `JumpboxAdminUser` | Specifies the administrator username for the Jumpbox Virtual Machine. | diff --git a/infra/main.bicep b/infra/main.bicep index 02a543c2..9b3ff052 100644 --- a/infra/main.bicep +++ b/infra/main.bicep @@ -109,8 +109,8 @@ param imageTag string = 'latest_2025-11-10_599' param containerRegistryEndpoint string = 'cmsacontainerreg.azurecr.io' @minLength(1) -@description('Optional. Version of the GPT model to deploy. Defaults to 2024-08-06.') -param gptModelVersion string = '2024-08-06' +@description('Optional. Version of the GPT model to deploy. Defaults to 2024-11-20.') +param gptModelVersion string = '2024-11-20' @description('Optional. Use this parameter to use an existing AI project resource ID. Defaults to empty string.') param existingFoundryProjectResourceId string = '' @@ -778,7 +778,7 @@ module aiServices 'modules/ai-foundry/aifoundry.bicep' = { { principalId: appIdentity.outputs.principalId principalType: 'ServicePrincipal' - roleDefinitionIdOrName: 'Cognitive Services OpenAI Contributor' + roleDefinitionIdOrName: '5e0bd9bd-7b93-4f28-af87-19fc36ad61bd' // Cognitive Services OpenAI User } { principalId: appIdentity.outputs.principalId @@ -867,7 +867,7 @@ module storageAccount 'modules/storageAccount.bicep' = { { principalId: appIdentity.outputs.principalId principalType: 'ServicePrincipal' - roleDefinitionIdOrName: 'Storage Blob Data Contributor' + roleDefinitionIdOrName: 'ba92f5b4-2d11-453d-a403-e96b0029c9fe' // Storage Blob Data Contributor } ] enableTelemetry: enableTelemetry diff --git a/infra/main.json b/infra/main.json index 624cf877..df0b2ae8 100644 --- a/infra/main.json +++ b/infra/main.json @@ -5,8 +5,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.42.1.51946", - "templateHash": "18156607440911418905" + "version": "0.44.1.10279", + "templateHash": "3504230210727330834" }, "name": "Modernize Your Code Solution Accelerator", "description": "CSA CTO Gold Standard Solution Accelerator for Modernize Your Code. \r\n" @@ -174,10 +174,10 @@ }, "gptModelVersion": { "type": "string", - "defaultValue": "2024-08-06", + "defaultValue": "2024-11-20", "minLength": 1, "metadata": { - "description": "Optional. Version of the GPT model to deploy. Defaults to 2024-08-06." + "description": "Optional. Version of the GPT model to deploy. Defaults to 2024-11-20." } }, "existingFoundryProjectResourceId": { @@ -5093,8 +5093,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.42.1.51946", - "templateHash": "15922750226218572834" + "version": "0.44.1.10279", + "templateHash": "12666388833640590711" } }, "definitions": { @@ -13102,10 +13102,10 @@ "dependsOn": [ "applicationInsights", "[format('avmPrivateDnsZones[{0}]', variables('dnsZoneIndex').oms)]", - "[format('avmPrivateDnsZones[{0}]', variables('dnsZoneIndex').storageBlob)]", - "[format('avmPrivateDnsZones[{0}]', variables('dnsZoneIndex').ods)]", - "[format('avmPrivateDnsZones[{0}]', variables('dnsZoneIndex').agentSvc)]", "[format('avmPrivateDnsZones[{0}]', variables('dnsZoneIndex').monitor)]", + "[format('avmPrivateDnsZones[{0}]', variables('dnsZoneIndex').agentSvc)]", + "[format('avmPrivateDnsZones[{0}]', variables('dnsZoneIndex').ods)]", + "[format('avmPrivateDnsZones[{0}]', variables('dnsZoneIndex').storageBlob)]", "dataCollectionEndpoint", "logAnalyticsWorkspace", "virtualNetwork" @@ -26161,7 +26161,7 @@ { "principalId": "[reference('appIdentity').outputs.principalId.value]", "principalType": "ServicePrincipal", - "roleDefinitionIdOrName": "Cognitive Services OpenAI Contributor" + "roleDefinitionIdOrName": "5e0bd9bd-7b93-4f28-af87-19fc36ad61bd" }, { "principalId": "[reference('appIdentity').outputs.principalId.value]", @@ -26189,8 +26189,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.42.1.51946", - "templateHash": "7788164101952925462" + "version": "0.44.1.10279", + "templateHash": "7796390788683636674" }, "name": "AI Services and Project Module", "description": "This module creates an AI Services resource and an AI Foundry project within it. It supports private networking, OpenAI deployments, and role assignments." @@ -27487,8 +27487,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.42.1.51946", - "templateHash": "3451497265231138743" + "version": "0.44.1.10279", + "templateHash": "15798298565583456780" } }, "definitions": { @@ -29197,8 +29197,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.42.1.51946", - "templateHash": "6439859910553532577" + "version": "0.44.1.10279", + "templateHash": "13008301984486295222" } }, "definitions": { @@ -29412,8 +29412,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.42.1.51946", - "templateHash": "3451497265231138743" + "version": "0.44.1.10279", + "templateHash": "15798298565583456780" } }, "definitions": { @@ -31122,8 +31122,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.42.1.51946", - "templateHash": "6439859910553532577" + "version": "0.44.1.10279", + "templateHash": "13008301984486295222" } }, "definitions": { @@ -32081,7 +32081,7 @@ { "principalId": "[reference('appIdentity').outputs.principalId.value]", "principalType": "ServicePrincipal", - "roleDefinitionIdOrName": "Storage Blob Data Contributor" + "roleDefinitionIdOrName": "ba92f5b4-2d11-453d-a403-e96b0029c9fe" } ] }, @@ -32096,8 +32096,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.42.1.51946", - "templateHash": "15460841004653840446" + "version": "0.44.1.10279", + "templateHash": "17237339939537137976" } }, "definitions": { @@ -40550,8 +40550,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.42.1.51946", - "templateHash": "9745767047675020484" + "version": "0.44.1.10279", + "templateHash": "8524856574515803596" } }, "definitions": { diff --git a/infra/main_custom.bicep b/infra/main_custom.bicep index ea7c86a4..4214ffaf 100644 --- a/infra/main_custom.bicep +++ b/infra/main_custom.bicep @@ -111,8 +111,8 @@ param frontendImageName string = '' param imageTag string = 'latest' @minLength(1) -@description('Optional. Version of the GPT model to deploy. Defaults to 2024-08-06.') -param gptModelVersion string = '2024-08-06' +@description('Optional. Version of the GPT model to deploy. Defaults to 2024-11-20.') +param gptModelVersion string = '2024-11-20' @description('Optional. Use this parameter to use an existing AI project resource ID. Defaults to empty string.') param existingFoundryProjectResourceId string = '' @@ -687,7 +687,7 @@ module aiServices 'modules/ai-foundry/aifoundry.bicep' = { { principalId: appIdentity.outputs.principalId principalType: 'ServicePrincipal' - roleDefinitionIdOrName: 'Cognitive Services OpenAI Contributor' + roleDefinitionIdOrName: '5e0bd9bd-7b93-4f28-af87-19fc36ad61bd' // Cognitive Services OpenAI User } { principalId: appIdentity.outputs.principalId @@ -776,7 +776,7 @@ module storageAccount 'modules/storageAccount.bicep' = { { principalId: appIdentity.outputs.principalId principalType: 'ServicePrincipal' - roleDefinitionIdOrName: 'Storage Blob Data Contributor' + roleDefinitionIdOrName: 'ba92f5b4-2d11-453d-a403-e96b0029c9fe' // Storage Blob Data Contributor } ] enableTelemetry: enableTelemetry diff --git a/src/frontend/package-lock.json b/src/frontend/package-lock.json index 6cea4c6b..961d8c9e 100644 --- a/src/frontend/package-lock.json +++ b/src/frontend/package-lock.json @@ -19,7 +19,7 @@ "@tailwindcss/postcss": "^4.2.4", "@tailwindcss/vite": "^4.2.4", "autoprefixer": "^10.5.0", - "axios": "^1.15.2", + "axios": "^1.17.0", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "lucide-react": "^1.14.0", @@ -29,7 +29,7 @@ "react-dropzone": "^15.0.0", "react-icons": "^5.6.0", "react-redux": "^9.1.2", - "react-router-dom": "^7.14.2", + "react-router-dom": "^7.17.0", "react-syntax-highlighter": "^16.1.1", "sql-formatter": "^15.7.3", "tailwind-merge": "^3.5.0", @@ -3889,6 +3889,18 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, "node_modules/ajv": { "version": "6.14.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", @@ -4142,13 +4154,14 @@ } }, "node_modules/axios": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.15.2.tgz", - "integrity": "sha512-wLrXxPtcrPTsNlJmKjkPnNPK2Ihe0hn0wGSaTEiHRPxwjvJwT3hKmXF4dpqxmPO9SoNb2FsYXj/xEo0gHN+D5A==", + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.17.0.tgz", + "integrity": "sha512-J8SwNxprqqpbfenehxWYXE7CW+wM1BB4w3+N+g+/Wx40xM4rsLrfPmHHxSWIxJLYDgSY/HqlFPIYb2/S3rxafw==", "license": "MIT", "dependencies": { - "follow-redirects": "^1.15.11", + "follow-redirects": "^1.16.0", "form-data": "^4.0.5", + "https-proxy-agent": "^5.0.1", "proxy-from-env": "^2.1.0" } }, @@ -4172,14 +4185,13 @@ } }, "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.1.tgz", + "integrity": "sha512-WR1cURNjuvBLMZBMbqM0UoE+WAfdUcEV1ccD8PVBVOI+Z3ND4+SZbN8RsfT2bMuG1qwz5RFvPukSZm5fF2D5eA==", "dev": true, "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "balanced-match": "^1.0.0" } }, "node_modules/browserslist": { @@ -4417,13 +4429,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true, - "license": "MIT" - }, "node_modules/convert-source-map": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", @@ -4550,7 +4555,6 @@ "version": "4.4.0", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", - "dev": true, "license": "MIT", "dependencies": { "ms": "^2.1.3" @@ -5681,6 +5685,19 @@ "integrity": "sha512-PDEfEF102G23vHmPhLyPboFCD+BkMGu+GuJe2d9/eH4FsCwvgBpnc9n0pGE+ffKdph38s6foEZiEjdgHdzp+IA==", "license": "CC0-1.0" }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/ignore": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", @@ -6718,7 +6735,6 @@ "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, "license": "MIT" }, "node_modules/nanoid": { @@ -7277,9 +7293,9 @@ } }, "node_modules/react-router": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.14.2.tgz", - "integrity": "sha512-yCqNne6I8IB6rVCH7XUvlBK7/QKyqypBFGv+8dj4QBFJiiRX+FG7/nkdAvGElyvVZ/HQP5N19wzteuTARXi5Gw==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.17.0.tgz", + "integrity": "sha512-FDELK7rTMlCHO5+reyXsPlmfr7N1F91lPHsWYfMEGQm/KQ+F4JFM8jGoeQDmDvdTs93Fw9aSilH+uKRb4/jXvQ==", "license": "MIT", "dependencies": { "cookie": "^1.0.1", @@ -7299,12 +7315,12 @@ } }, "node_modules/react-router-dom": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.14.2.tgz", - "integrity": "sha512-YZcM5ES8jJSM+KrJ9BdvHHqlnGTg5tH3sC5ChFRj4inosKctdyzBDhOyyHdGk597q2OT6NTrCA1OvB/YDwfekQ==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.17.0.tgz", + "integrity": "sha512-fyU2yjGups/hE6Xz0I5ZYbVL8Gx29eCjgpHaRaTaVU+OOAdfRX05KsvyRm0GO8YQwOkhpU3MurW1jyMUJn+zSw==", "license": "MIT", "dependencies": { - "react-router": "7.14.2" + "react-router": "7.17.0" }, "engines": { "node": ">=20.0.0" diff --git a/src/frontend/package.json b/src/frontend/package.json index 5df0430d..836b3e30 100644 --- a/src/frontend/package.json +++ b/src/frontend/package.json @@ -21,7 +21,7 @@ "@reduxjs/toolkit": "^2.11.2", "@tailwindcss/vite": "^4.2.4", "autoprefixer": "^10.5.0", - "axios": "^1.15.2", + "axios": "^1.17.0", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "lucide-react": "^1.14.0", @@ -32,7 +32,7 @@ "react-dropzone": "^15.0.0", "react-icons": "^5.6.0", "react-redux": "^9.1.2", - "react-router-dom": "^7.14.2", + "react-router-dom": "^7.17.0", "react-syntax-highlighter": "^16.1.1", "sql-formatter": "^15.7.3", "tailwind-merge": "^3.5.0", @@ -46,7 +46,8 @@ "minimatch": "^3.1.5", "flatted": "3.4.2", "js-yaml": "4.1.1", - "picomatch": "4.0.4" + "picomatch": "4.0.4", + "brace-expansion": "^2.0.1" }, "devDependencies": { "@eslint/js": "^9.39.2",