From 0a6fd8eaac0f88ea1cc441c4cf74301460cc8a99 Mon Sep 17 00:00:00 2001 From: Vamshi-Microsoft Date: Wed, 19 Nov 2025 18:11:25 +0530 Subject: [PATCH 01/11] Update Azure Developer CLI setup to use the official action and enhance authentication process --- .github/workflows/deploy-v2-windows.yml | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/.github/workflows/deploy-v2-windows.yml b/.github/workflows/deploy-v2-windows.yml index 96b4e2a1..417d0d1e 100644 --- a/.github/workflows/deploy-v2-windows.yml +++ b/.github/workflows/deploy-v2-windows.yml @@ -281,16 +281,17 @@ jobs: run: | # Azure CLI is pre-installed on Windows GitHub runners az --version # Verify installation - - - name: Try setup-azd action + + - name: Setup Azure Developer CLI uses: Azure/setup-azd@v2 - name: Login to Azure + id: login-azure shell: bash run: | az login --service-principal -u ${{ secrets.AZURE_CLIENT_ID }} -p ${{ secrets.AZURE_CLIENT_SECRET }} --tenant ${{ secrets.AZURE_TENANT_ID }} - az account set --subscription ${{ secrets.AZURE_SUBSCRIPTION_ID }} - + azd auth login --client-id ${{ secrets.AZURE_CLIENT_ID }} --client-secret ${{ secrets.AZURE_CLIENT_SECRET }} --tenant-id ${{ secrets.AZURE_TENANT_ID }} + - name: Run Quota Check id: quota-check shell: bash From 6249003757b8afc0d6469f20532887fb19b87ec1 Mon Sep 17 00:00:00 2001 From: Vamshi-Microsoft Date: Wed, 19 Nov 2025 18:35:18 +0530 Subject: [PATCH 02/11] Refactor deployment scripts to use PowerShell instead of Bash for schema registration and data upload --- .github/workflows/deploy-v2-windows.yml | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/.github/workflows/deploy-v2-windows.yml b/.github/workflows/deploy-v2-windows.yml index 417d0d1e..f19d9c13 100644 --- a/.github/workflows/deploy-v2-windows.yml +++ b/.github/workflows/deploy-v2-windows.yml @@ -559,23 +559,21 @@ jobs: - name: Register schemas id: register - shell: bash + shell: pwsh run: | - echo "Registering schemas..." - sleep 40 # Wait for the API to be ready + Write-Host "Registering schemas..." + Start-Sleep -Seconds 40 # Wait for the API to be ready - cd src/ContentProcessorAPI/samples/schemas - chmod +x ./register_schema.sh - ./register_schema.sh ${{ env.CONTAINER_API_APPURL }}/schemavault/ schema_info_sh.json + Set-Location src/ContentProcessorAPI/samples/schemas + & .\register_schema.ps1 "${{ env.CONTAINER_API_APPURL }}/schemavault/" "schema_info_sh.json" - name: Upload sample invoice and claim data - shell: bash + shell: pwsh run: | - echo "Uploading sample data..." - cd src/ContentProcessorAPI/samples - chmod +x ./upload_files.sh - ./upload_files.sh ${{ env.CONTAINER_API_APPURL }}/contentprocessor/submit ./invoices '${{ steps.register.outputs.invoice_schema_id }}' - ./upload_files.sh ${{ env.CONTAINER_API_APPURL }}/contentprocessor/submit ./propertyclaims '${{ steps.register.outputs.propertylossdamageclaimform_schema_id }}' + Write-Host "Uploading sample data..." + Set-Location src/ContentProcessorAPI/samples + & .\upload_files.ps1 "${{ env.CONTAINER_API_APPURL }}/contentprocessor/submit" ".\invoices" "${{ steps.register.outputs.invoice_schema_id }}" + & .\upload_files.ps1 "${{ env.CONTAINER_API_APPURL }}/contentprocessor/submit" ".\propertyclaims" "${{ steps.register.outputs.propertylossdamageclaimform_schema_id }}" - name: Disable Auth in Web App From 2793f9e8f1d5980d25668edb9ea552f6dfe37cca Mon Sep 17 00:00:00 2001 From: Vamshi-Microsoft Date: Wed, 19 Nov 2025 18:51:49 +0530 Subject: [PATCH 03/11] Update send-notification job to run on Ubuntu and enhance Azure Developer CLI setup --- .github/workflows/deploy-v2-windows.yml | 30 +++++-------------------- 1 file changed, 5 insertions(+), 25 deletions(-) diff --git a/.github/workflows/deploy-v2-windows.yml b/.github/workflows/deploy-v2-windows.yml index f19d9c13..4c2e8d03 100644 --- a/.github/workflows/deploy-v2-windows.yml +++ b/.github/workflows/deploy-v2-windows.yml @@ -641,7 +641,7 @@ jobs: send-notification: if: always() needs: [docker-build, deploy, e2e-test] - runs-on: windows-latest + runs-on: ubuntu-latest env: accelerator_name: "Content Processing" steps: @@ -808,11 +808,9 @@ jobs: ENV_NAME: ${{ needs.deploy.outputs.ENV_NAME }} IMAGE_TAG: ${{ needs.deploy.outputs.IMAGE_TAG }} steps: - - name: Checkout Code - uses: actions/checkout@v4 - - name: Install Azure Developer CLI - uses: Azure/setup-azd@v1.0.0 + - name: Setup Azure Developer CLI + uses: Azure/setup-azd@v2 - name: Setup Azure CLI shell: bash @@ -823,8 +821,8 @@ jobs: - name: Login to Azure shell: bash run: | - az login --service-principal -u ${{ secrets.AZURE_CLIENT_ID }} -p ${{ secrets.AZURE_CLIENT_SECRET }} --tenant ${{ secrets.AZURE_TENANT_ID }} - az account set --subscription ${{ secrets.AZURE_SUBSCRIPTION_ID }} + azd auth login --client-id ${{ secrets.AZURE_CLIENT_ID }} --client-secret ${{ secrets.AZURE_CLIENT_SECRET }} --tenant-id ${{ secrets.AZURE_TENANT_ID }} + azd config set defaults.subscription ${{ secrets.AZURE_SUBSCRIPTION_ID }} - name: Delete Resource Group Directly (Optimized Cleanup) shell: bash @@ -844,24 +842,6 @@ jobs: echo "โœ… Resource group deletion initiated (running asynchronously)" echo "Note: Resources will be cleaned up in the background" - - - name: Cleanup azd Environment State - if: always() - shell: bash - run: | - set -e - echo "๐Ÿงน Cleaning up local azd environment state..." - - # Remove local azd environment to prevent state conflicts - if azd env list | grep -q "${{ env.ENV_NAME }}"; then - echo "Removing azd environment: ${{ env.ENV_NAME }}" - azd env select ${{ env.ENV_NAME }} || true - # Just remove the local state, resources already deleted - rm -rf ~/.azd/environments/${{ env.ENV_NAME }} || true - echo "โœ… Local azd environment cleaned up" - else - echo "Environment ${{ env.ENV_NAME }} not found locally" - fi - name: Logout from Azure if: always() From 3f6f577e2effe10de62828e14cc64d0b6b419d11 Mon Sep 17 00:00:00 2001 From: Vamshi-Microsoft Date: Thu, 20 Nov 2025 11:52:25 +0530 Subject: [PATCH 04/11] Add GitHub Actions output support for schema ID in register_schema.ps1 --- .../samples/schemas/register_schema.ps1 | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/ContentProcessorAPI/samples/schemas/register_schema.ps1 b/src/ContentProcessorAPI/samples/schemas/register_schema.ps1 index ff609065..554ed748 100644 --- a/src/ContentProcessorAPI/samples/schemas/register_schema.ps1 +++ b/src/ContentProcessorAPI/samples/schemas/register_schema.ps1 @@ -86,6 +86,13 @@ foreach ($entry in $schemaEntries) { $id = $responseJson.Id $desc = $responseJson.Description Write-Output "$desc's Schema Id - $id" + + # Set GitHub Actions output if GITHUB_OUTPUT environment variable exists + if ($env:GITHUB_OUTPUT) { + # Create a safe variable name from the class name (lowercase, alphanumeric and underscores only) + $safeName = $className.ToLower() -replace '[^a-z0-9_]', '' + "${safeName}_schema_id=$id" | Out-File -FilePath $env:GITHUB_OUTPUT -Encoding utf8 -Append + } } else { Write-Error "Failed to upload '$schemaFile'. HTTP Status: $httpStatusCode" From e57c14be9b0a592fb357203987b16e48ddeb3fc6 Mon Sep 17 00:00:00 2001 From: Vamshi-Microsoft Date: Thu, 20 Nov 2025 12:10:23 +0530 Subject: [PATCH 05/11] Set timeout for Cleanup Job --- .github/workflows/deploy-v2-windows.yml | 56 +++++++++++-------------- 1 file changed, 25 insertions(+), 31 deletions(-) diff --git a/.github/workflows/deploy-v2-windows.yml b/.github/workflows/deploy-v2-windows.yml index 4c2e8d03..5a530435 100644 --- a/.github/workflows/deploy-v2-windows.yml +++ b/.github/workflows/deploy-v2-windows.yml @@ -823,25 +823,28 @@ jobs: run: | azd auth login --client-id ${{ secrets.AZURE_CLIENT_ID }} --client-secret ${{ secrets.AZURE_CLIENT_SECRET }} --tenant-id ${{ secrets.AZURE_TENANT_ID }} azd config set defaults.subscription ${{ secrets.AZURE_SUBSCRIPTION_ID }} - - - name: Delete Resource Group Directly (Optimized Cleanup) - shell: bash + - name: Select Environment and Delete deployment using azd + continue-on-error: true + timeout-minutes: 2 run: | set -e - echo "๐Ÿ—‘๏ธ Starting optimized resource cleanup..." - - # Direct resource group deletion is much faster than azd down - # This approach deletes all resources in parallel - echo "Deleting resource group: ${{ env.RESOURCE_GROUP_NAME }}" - - # Use --no-wait for async deletion (faster) or remove it for synchronous - az group delete \ - --name "${{ env.RESOURCE_GROUP_NAME }}" \ - --yes \ - --no-wait - - echo "โœ… Resource group deletion initiated (running asynchronously)" - echo "Note: Resources will be cleaned up in the background" + # Try to select the environment if it exists, otherwise create a minimal environment for cleanup + azd env list + if azd env list | grep -q "${{ env.ENV_NAME }}"; then + echo "Environment ${{ env.ENV_NAME }} found, selecting it..." + azd env select ${{ env.ENV_NAME }} + else + echo "Environment ${{ env.ENV_NAME }} not found, creating minimal environment for cleanup..." + azd env new ${{ env.ENV_NAME }} --no-prompt + azd env set AZURE_RESOURCE_GROUP "${{ env.RESOURCE_GROUP_NAME }}" + azd env set AZURE_SUBSCRIPTION_ID "${{ secrets.AZURE_SUBSCRIPTION_ID }}" + azd env set AZURE_ENV_AI_DEPLOYMENTS_LOCATION="${{ env.AZURE_ENV_OPENAI_LOCATION }}" + azd env set AZURE_LOCATION="${{ env.AZURE_LOCATION }}" + fi + + echo "Deleting deployment..." + azd down --purge --force --no-prompt || echo "โš ๏ธ Cleanup command completed with warnings or errors" + echo "Deployment cleanup initiated." - name: Logout from Azure if: always() @@ -859,21 +862,12 @@ jobs: echo "" >> $GITHUB_STEP_SUMMARY echo "| Field | Value |" >> $GITHUB_STEP_SUMMARY echo "|-------|--------|" >> $GITHUB_STEP_SUMMARY - echo "| **Job Status** | ${{ job.status == 'success' && 'โœ… Success' || 'โŒ Failed' }} |" >> $GITHUB_STEP_SUMMARY + echo "| **Job Status** | โœ… Completed |" >> $GITHUB_STEP_SUMMARY echo "| **Resource Group** | \`${{ env.RESOURCE_GROUP_NAME }}\` |" >> $GITHUB_STEP_SUMMARY echo "| **Azure Region (Infrastructure)** | \`${{ env.AZURE_LOCATION }}\` |" >> $GITHUB_STEP_SUMMARY echo "| **Azure OpenAI Region** | \`${{ env.AZURE_ENV_OPENAI_LOCATION }}\` |" >> $GITHUB_STEP_SUMMARY - echo "| **Docker Image Tag** | \`${{ env.IMAGE_TAG }}\` |" >> $GITHUB_STEP_SUMMARY echo "" >> $GITHUB_STEP_SUMMARY - if [[ "${{ job.status }}" == "success" ]]; then - echo "### โœ… Cleanup Details" >> $GITHUB_STEP_SUMMARY - echo "- Successfully initiated resource group deletion" >> $GITHUB_STEP_SUMMARY - echo "- Resource group \`${{ env.RESOURCE_GROUP_NAME }}\` and all associated resources are being deleted asynchronously" >> $GITHUB_STEP_SUMMARY - echo "" >> $GITHUB_STEP_SUMMARY - else - echo "### โŒ Cleanup Failed" >> $GITHUB_STEP_SUMMARY - echo "- Cleanup process encountered an error" >> $GITHUB_STEP_SUMMARY - echo "- Manual cleanup may be required for:" >> $GITHUB_STEP_SUMMARY - echo " - Resource Group: \`${{ env.RESOURCE_GROUP_NAME }}\`" >> $GITHUB_STEP_SUMMARY - echo "- Check the cleanup-deployment job logs for detailed error information" >> $GITHUB_STEP_SUMMARY - fi \ No newline at end of file + echo "### ๐Ÿ—‘๏ธ Cleanup Details" >> $GITHUB_STEP_SUMMARY + echo "- Cleanup process initiated for deployment using \`azd down --purge\`" >> $GITHUB_STEP_SUMMARY + echo "- Resource group \`${{ env.RESOURCE_GROUP_NAME }}\` cleanup initiated" >> $GITHUB_STEP_SUMMARY + echo "- โ„น๏ธ Note: Cleanup may continue in the background if it exceeds the timeout" >> $GITHUB_STEP_SUMMARY \ No newline at end of file From d411f0268d786b2e50fc1551b72702668b8007bf Mon Sep 17 00:00:00 2001 From: Vamshi-Microsoft Date: Thu, 20 Nov 2025 12:56:39 +0530 Subject: [PATCH 06/11] small fix --- .github/workflows/deploy-v2-windows.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/deploy-v2-windows.yml b/.github/workflows/deploy-v2-windows.yml index 5a530435..f98ff3f0 100644 --- a/.github/workflows/deploy-v2-windows.yml +++ b/.github/workflows/deploy-v2-windows.yml @@ -826,6 +826,7 @@ jobs: - name: Select Environment and Delete deployment using azd continue-on-error: true timeout-minutes: 2 + shell: bash run: | set -e # Try to select the environment if it exists, otherwise create a minimal environment for cleanup From 643204ad1ee338021bb00efc694b39d11e1ac672 Mon Sep 17 00:00:00 2001 From: Vamshi-Microsoft Date: Thu, 20 Nov 2025 14:39:39 +0530 Subject: [PATCH 07/11] Optimize resource group deletion in cleanup job for faster execution --- .github/workflows/deploy-v2-windows.yml | 54 ++++++++++++++----------- 1 file changed, 30 insertions(+), 24 deletions(-) diff --git a/.github/workflows/deploy-v2-windows.yml b/.github/workflows/deploy-v2-windows.yml index f98ff3f0..d0b58567 100644 --- a/.github/workflows/deploy-v2-windows.yml +++ b/.github/workflows/deploy-v2-windows.yml @@ -823,29 +823,27 @@ jobs: run: | azd auth login --client-id ${{ secrets.AZURE_CLIENT_ID }} --client-secret ${{ secrets.AZURE_CLIENT_SECRET }} --tenant-id ${{ secrets.AZURE_TENANT_ID }} azd config set defaults.subscription ${{ secrets.AZURE_SUBSCRIPTION_ID }} - - name: Select Environment and Delete deployment using azd + + - name: Delete Resource Group Directly (Optimized Cleanup) continue-on-error: true - timeout-minutes: 2 shell: bash + id: delete_rg run: | set -e - # Try to select the environment if it exists, otherwise create a minimal environment for cleanup - azd env list - if azd env list | grep -q "${{ env.ENV_NAME }}"; then - echo "Environment ${{ env.ENV_NAME }} found, selecting it..." - azd env select ${{ env.ENV_NAME }} - else - echo "Environment ${{ env.ENV_NAME }} not found, creating minimal environment for cleanup..." - azd env new ${{ env.ENV_NAME }} --no-prompt - azd env set AZURE_RESOURCE_GROUP "${{ env.RESOURCE_GROUP_NAME }}" - azd env set AZURE_SUBSCRIPTION_ID "${{ secrets.AZURE_SUBSCRIPTION_ID }}" - azd env set AZURE_ENV_AI_DEPLOYMENTS_LOCATION="${{ env.AZURE_ENV_OPENAI_LOCATION }}" - azd env set AZURE_LOCATION="${{ env.AZURE_LOCATION }}" - fi - - echo "Deleting deployment..." - azd down --purge --force --no-prompt || echo "โš ๏ธ Cleanup command completed with warnings or errors" - echo "Deployment cleanup initiated." + echo "๐Ÿ—‘๏ธ Starting optimized resource cleanup..." + + # Direct resource group deletion is much faster than azd down + # This approach deletes all resources in parallel + echo "Deleting resource group: ${{ env.RESOURCE_GROUP_NAME }}" + + # Use --no-wait for async deletion (faster) or remove it for synchronous + az group delete \ + --name "${{ env.RESOURCE_GROUP_NAME }}" \ + --yes \ + --no-wait + + echo "โœ… Resource group deletion initiated" + echo "Note: Resources will be cleaned up in the background" - name: Logout from Azure if: always() @@ -863,12 +861,20 @@ jobs: echo "" >> $GITHUB_STEP_SUMMARY echo "| Field | Value |" >> $GITHUB_STEP_SUMMARY echo "|-------|--------|" >> $GITHUB_STEP_SUMMARY - echo "| **Job Status** | โœ… Completed |" >> $GITHUB_STEP_SUMMARY + echo "| **Job Status** | ${{ job.status == 'success' && 'โœ… Success' || 'โŒ Failed' }} |" >> $GITHUB_STEP_SUMMARY + echo "| **Deletion Step Status** | ${{ steps.delete_rg.outcome == 'success' && 'โœ… Success' || 'โŒ Failed' }} |" >> $GITHUB_STEP_SUMMARY echo "| **Resource Group** | \`${{ env.RESOURCE_GROUP_NAME }}\` |" >> $GITHUB_STEP_SUMMARY echo "| **Azure Region (Infrastructure)** | \`${{ env.AZURE_LOCATION }}\` |" >> $GITHUB_STEP_SUMMARY echo "| **Azure OpenAI Region** | \`${{ env.AZURE_ENV_OPENAI_LOCATION }}\` |" >> $GITHUB_STEP_SUMMARY echo "" >> $GITHUB_STEP_SUMMARY - echo "### ๐Ÿ—‘๏ธ Cleanup Details" >> $GITHUB_STEP_SUMMARY - echo "- Cleanup process initiated for deployment using \`azd down --purge\`" >> $GITHUB_STEP_SUMMARY - echo "- Resource group \`${{ env.RESOURCE_GROUP_NAME }}\` cleanup initiated" >> $GITHUB_STEP_SUMMARY - echo "- โ„น๏ธ Note: Cleanup may continue in the background if it exceeds the timeout" >> $GITHUB_STEP_SUMMARY \ No newline at end of file + if [[ "${{ steps.delete_rg.outcome }}" == "success" ]]; then + echo "### โœ… Cleanup Details" >> $GITHUB_STEP_SUMMARY + echo "- Successfully initiated deletion for Resource Group \`${{ env.RESOURCE_GROUP_NAME }}\`" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + else + echo "### โŒ Cleanup Failed" >> $GITHUB_STEP_SUMMARY + echo "- Cleanup process encountered an error" >> $GITHUB_STEP_SUMMARY + echo "- Manual cleanup may be required for:" >> $GITHUB_STEP_SUMMARY + echo " - Resource Group: \`${{ env.RESOURCE_GROUP_NAME }}\`" >> $GITHUB_STEP_SUMMARY + echo "- Check the cleanup-deployment job logs for detailed error information" >> $GITHUB_STEP_SUMMARY + fi \ No newline at end of file From 1312b889b2500f6ffd6c1c191355eafde1313b8e Mon Sep 17 00:00:00 2001 From: Vamshi-Microsoft Date: Thu, 20 Nov 2025 16:08:54 +0530 Subject: [PATCH 08/11] resouce group deletion --- .github/workflows/deploy-v2-windows.yml | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/.github/workflows/deploy-v2-windows.yml b/.github/workflows/deploy-v2-windows.yml index d0b58567..03d4bd76 100644 --- a/.github/workflows/deploy-v2-windows.yml +++ b/.github/workflows/deploy-v2-windows.yml @@ -808,10 +808,6 @@ jobs: ENV_NAME: ${{ needs.deploy.outputs.ENV_NAME }} IMAGE_TAG: ${{ needs.deploy.outputs.IMAGE_TAG }} steps: - - - name: Setup Azure Developer CLI - uses: Azure/setup-azd@v2 - - name: Setup Azure CLI shell: bash run: | @@ -821,9 +817,8 @@ jobs: - name: Login to Azure shell: bash run: | - azd auth login --client-id ${{ secrets.AZURE_CLIENT_ID }} --client-secret ${{ secrets.AZURE_CLIENT_SECRET }} --tenant-id ${{ secrets.AZURE_TENANT_ID }} - azd config set defaults.subscription ${{ secrets.AZURE_SUBSCRIPTION_ID }} - + az login --service-principal -u ${{ secrets.AZURE_CLIENT_ID }} -p ${{ secrets.AZURE_CLIENT_SECRET }} --tenant ${{ secrets.AZURE_TENANT_ID }} + az account set --subscription ${{ secrets.AZURE_SUBSCRIPTION_ID }} - name: Delete Resource Group Directly (Optimized Cleanup) continue-on-error: true shell: bash @@ -861,8 +856,7 @@ jobs: echo "" >> $GITHUB_STEP_SUMMARY echo "| Field | Value |" >> $GITHUB_STEP_SUMMARY echo "|-------|--------|" >> $GITHUB_STEP_SUMMARY - echo "| **Job Status** | ${{ job.status == 'success' && 'โœ… Success' || 'โŒ Failed' }} |" >> $GITHUB_STEP_SUMMARY - echo "| **Deletion Step Status** | ${{ steps.delete_rg.outcome == 'success' && 'โœ… Success' || 'โŒ Failed' }} |" >> $GITHUB_STEP_SUMMARY + echo "| **Resouce Group deletion Status** | ${{ steps.delete_rg.outcome == 'success' && 'โœ… Success' || 'โŒ Failed' }} |" >> $GITHUB_STEP_SUMMARY echo "| **Resource Group** | \`${{ env.RESOURCE_GROUP_NAME }}\` |" >> $GITHUB_STEP_SUMMARY echo "| **Azure Region (Infrastructure)** | \`${{ env.AZURE_LOCATION }}\` |" >> $GITHUB_STEP_SUMMARY echo "| **Azure OpenAI Region** | \`${{ env.AZURE_ENV_OPENAI_LOCATION }}\` |" >> $GITHUB_STEP_SUMMARY From 21e2553a5d7ab9a9a795aa6283ec5ddd6883f6ba Mon Sep 17 00:00:00 2001 From: Vamshi-Microsoft Date: Thu, 20 Nov 2025 16:53:04 +0530 Subject: [PATCH 09/11] Add continue-on-error to cleanup job for improved resilience --- .github/workflows/deploy-v2-windows.yml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/workflows/deploy-v2-windows.yml b/.github/workflows/deploy-v2-windows.yml index 03d4bd76..f6dc9da5 100644 --- a/.github/workflows/deploy-v2-windows.yml +++ b/.github/workflows/deploy-v2-windows.yml @@ -801,6 +801,7 @@ jobs: if: always() && needs.deploy.result == 'success' && needs.deploy.outputs.RESOURCE_GROUP_NAME != '' && github.event.inputs.existing_webapp_url == '' && (github.event_name != 'workflow_dispatch' || github.event.inputs.cleanup_resources == 'true' || github.event.inputs.cleanup_resources == null) needs: [docker-build, deploy, e2e-test] runs-on: windows-latest + continue-on-error: true env: RESOURCE_GROUP_NAME: ${{ needs.deploy.outputs.RESOURCE_GROUP_NAME }} AZURE_LOCATION: ${{ needs.deploy.outputs.AZURE_LOCATION }} @@ -820,7 +821,6 @@ jobs: az login --service-principal -u ${{ secrets.AZURE_CLIENT_ID }} -p ${{ secrets.AZURE_CLIENT_SECRET }} --tenant ${{ secrets.AZURE_TENANT_ID }} az account set --subscription ${{ secrets.AZURE_SUBSCRIPTION_ID }} - name: Delete Resource Group Directly (Optimized Cleanup) - continue-on-error: true shell: bash id: delete_rg run: | @@ -844,8 +844,7 @@ jobs: if: always() shell: bash run: | - azd auth logout - az logout || echo "Warning: Failed to logout from Azure CLI" + az logout echo "Logged out from Azure." - name: Generate Cleanup Job Summary From 262332a68876769cfc2f6d0bd0ab1db29c99a928 Mon Sep 17 00:00:00 2001 From: Vamshi-Microsoft Date: Fri, 21 Nov 2025 09:03:01 +0530 Subject: [PATCH 10/11] Added AZURE_DEV_COLLECT_TELEMETRY environment variable --- .github/workflows/deploy-v2-windows.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/deploy-v2-windows.yml b/.github/workflows/deploy-v2-windows.yml index f6dc9da5..097a46db 100644 --- a/.github/workflows/deploy-v2-windows.yml +++ b/.github/workflows/deploy-v2-windows.yml @@ -86,6 +86,7 @@ env: CLEANUP_RESOURCES: ${{ github.event_name == 'workflow_dispatch' && (github.event.inputs.cleanup_resources || true) || true }} RUN_E2E_TESTS: ${{ github.event_name == 'workflow_dispatch' && (github.event.inputs.run_e2e_tests || 'GoldenPath-Testing') || 'GoldenPath-Testing' }} BUILD_DOCKER_IMAGE: ${{ github.event_name == 'workflow_dispatch' && (github.event.inputs.build_docker_image || false) || false }} + AZURE_DEV_COLLECT_TELEMETRY: ${{ vars.AZURE_DEV_COLLECT_TELEMETRY }} jobs: docker-build: @@ -808,6 +809,7 @@ jobs: AZURE_ENV_OPENAI_LOCATION: ${{ needs.deploy.outputs.AZURE_ENV_OPENAI_LOCATION }} ENV_NAME: ${{ needs.deploy.outputs.ENV_NAME }} IMAGE_TAG: ${{ needs.deploy.outputs.IMAGE_TAG }} + AZURE_DEV_COLLECT_TELEMETRY: ${{ vars.AZURE_DEV_COLLECT_TELEMETRY }} steps: - name: Setup Azure CLI shell: bash From 8e22fa5bacd3f10d31bd67d1ff77c339434253b1 Mon Sep 17 00:00:00 2001 From: Vamshi-Microsoft Date: Fri, 21 Nov 2025 09:09:49 +0530 Subject: [PATCH 11/11] Refactor deployment script to use PowerShell and improve logging --- .github/workflows/deploy-v2-windows.yml | 107 ++++++++++++------------ 1 file changed, 53 insertions(+), 54 deletions(-) diff --git a/.github/workflows/deploy-v2-windows.yml b/.github/workflows/deploy-v2-windows.yml index 097a46db..e53f9c48 100644 --- a/.github/workflows/deploy-v2-windows.yml +++ b/.github/workflows/deploy-v2-windows.yml @@ -469,94 +469,93 @@ jobs: - name: Deploy using azd up and extract values (${{ github.event.inputs.waf_enabled == 'true' && 'WAF' || 'Non-WAF' }}+${{ (github.event.inputs.EXP == 'true' || github.event.inputs.AZURE_ENV_LOG_ANALYTICS_WORKSPACE_ID != '' || github.event.inputs.AZURE_EXISTING_AI_PROJECT_RESOURCE_ID != '') && 'EXP' || 'Non-EXP' }}) id: get_output - shell: bash + shell: pwsh run: | - set -e - echo "Starting azd deployment..." - echo "WAF Enabled: ${{ env.WAF_ENABLED }}" - echo "EXP: ${{ env.EXP }}" - echo "Using Docker Image Tag: ${{ steps.determine_image_tag.outputs.IMAGE_TAG }}" + $ErrorActionPreference = "Stop" + Write-Host "Starting azd deployment..." + Write-Host "WAF Enabled: ${{ env.WAF_ENABLED }}" + Write-Host "EXP: ${{ env.EXP }}" + Write-Host "Using Docker Image Tag: ${{ steps.determine_image_tag.outputs.IMAGE_TAG }}" # Generate current timestamp in desired format: YYYY-MM-DDTHH:MM:SS.SSSSSSSZ - current_date=$(date -u +"%Y-%m-%dT%H:%M:%S.0000000Z") + $current_date = (Get-Date).ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ss.0000000Z") - echo "Creating environment..." - azd env new $ENV_NAME --no-prompt - echo "Environment created: $ENV_NAME" + Write-Host "Creating environment..." + azd env new $env:ENV_NAME --no-prompt + Write-Host "Environment created: $env:ENV_NAME" - echo "Setting default subscription..." + Write-Host "Setting default subscription..." azd config set defaults.subscription ${{ secrets.AZURE_SUBSCRIPTION_ID }} # Set additional parameters azd env set AZURE_SUBSCRIPTION_ID="${{ secrets.AZURE_SUBSCRIPTION_ID }}" - azd env set AZURE_ENV_AI_DEPLOYMENTS_LOCATION="$AZURE_ENV_OPENAI_LOCATION" - azd env set AZURE_LOCATION="$AZURE_LOCATION" - azd env set AZURE_RESOURCE_GROUP="$RESOURCE_GROUP_NAME" + azd env set AZURE_ENV_AI_DEPLOYMENTS_LOCATION="$env:AZURE_ENV_OPENAI_LOCATION" + azd env set AZURE_LOCATION="$env:AZURE_LOCATION" + azd env set AZURE_RESOURCE_GROUP="$env:RESOURCE_GROUP_NAME" azd env set AZURE_ENV_CONTAINER_IMAGE_TAG="${{ steps.determine_image_tag.outputs.IMAGE_TAG }}" azd env set AZURE_DEV_COLLECT_TELEMETRY="${{ vars.AZURE_DEV_COLLECT_TELEMETRY }}" # Set ACR name only when building Docker image - if [[ "${{ env.BUILD_DOCKER_IMAGE }}" == "true" ]]; then + if ("${{ env.BUILD_DOCKER_IMAGE }}" -eq "true") { # Extract ACR name from login server and set as environment variable - ACR_NAME=$(echo "${{ secrets.ACR_TEST_LOGIN_SERVER }}" ) + $ACR_NAME = "${{ secrets.ACR_TEST_LOGIN_SERVER }}" azd env set AZURE_ENV_CONTAINER_REGISTRY_ENDPOINT="$ACR_NAME" - echo "Set ACR name to: $ACR_NAME" - else - echo "Skipping ACR name configuration (using existing image)" - fi + Write-Host "Set ACR name to: $ACR_NAME" + } else { + Write-Host "Skipping ACR name configuration (using existing image)" + } - if [[ "${{ env.EXP }}" == "true" ]]; then - echo "โœ… EXP ENABLED - Setting EXP parameters..." + if ("${{ env.EXP }}" -eq "true") { + Write-Host "โœ… EXP ENABLED - Setting EXP parameters..." # Set EXP variables dynamically - if [[ -n "${{ github.event.inputs.AZURE_ENV_LOG_ANALYTICS_WORKSPACE_ID }}" ]]; then - EXP_LOG_ANALYTICS_ID="${{ github.event.inputs.AZURE_ENV_LOG_ANALYTICS_WORKSPACE_ID }}" - else - EXP_LOG_ANALYTICS_ID="${{ secrets.AZURE_ENV_LOG_ANALYTICS_WORKSPACE_ID }}" - fi + if ("${{ github.event.inputs.AZURE_ENV_LOG_ANALYTICS_WORKSPACE_ID }}" -ne "") { + $EXP_LOG_ANALYTICS_ID = "${{ github.event.inputs.AZURE_ENV_LOG_ANALYTICS_WORKSPACE_ID }}" + } else { + $EXP_LOG_ANALYTICS_ID = "${{ secrets.AZURE_ENV_LOG_ANALYTICS_WORKSPACE_ID }}" + } - if [[ -n "${{ github.event.inputs.AZURE_EXISTING_AI_PROJECT_RESOURCE_ID }}" ]]; then - EXP_AI_PROJECT_ID="${{ github.event.inputs.AZURE_EXISTING_AI_PROJECT_RESOURCE_ID }}" - else - EXP_AI_PROJECT_ID="${{ secrets.AZURE_ENV_FOUNDRY_PROJECT_ID }}" - fi + if ("${{ github.event.inputs.AZURE_EXISTING_AI_PROJECT_RESOURCE_ID }}" -ne "") { + $EXP_AI_PROJECT_ID = "${{ github.event.inputs.AZURE_EXISTING_AI_PROJECT_RESOURCE_ID }}" + } else { + $EXP_AI_PROJECT_ID = "${{ secrets.AZURE_ENV_FOUNDRY_PROJECT_ID }}" + } - echo "AZURE_ENV_LOG_ANALYTICS_WORKSPACE_ID: $EXP_LOG_ANALYTICS_ID" - echo "AZURE_ENV_FOUNDRY_PROJECT_ID: $EXP_AI_PROJECT_ID" + Write-Host "AZURE_ENV_LOG_ANALYTICS_WORKSPACE_ID: $EXP_LOG_ANALYTICS_ID" + Write-Host "AZURE_ENV_FOUNDRY_PROJECT_ID: $EXP_AI_PROJECT_ID" azd env set AZURE_ENV_LOG_ANALYTICS_WORKSPACE_ID="$EXP_LOG_ANALYTICS_ID" azd env set AZURE_ENV_FOUNDRY_PROJECT_ID="$EXP_AI_PROJECT_ID" - else - echo "โŒ EXP DISABLED - Skipping EXP parameters" - fi + } else { + Write-Host "โŒ EXP DISABLED - Skipping EXP parameters" + } # Deploy using azd up azd up --no-prompt - echo "โœ… Deployment succeeded." - echo "$DEPLOY_OUTPUT" + Write-Host "โœ… Deployment succeeded." # Get deployment outputs using azd - echo "Extracting deployment outputs..." - DEPLOY_OUTPUT=$(azd env get-values --output json) - echo "Deployment output: $DEPLOY_OUTPUT" + Write-Host "Extracting deployment outputs..." + $DEPLOY_OUTPUT = azd env get-values --output json | ConvertFrom-Json + Write-Host "Deployment output: $($DEPLOY_OUTPUT | ConvertTo-Json -Depth 10)" - if [[ -z "$DEPLOY_OUTPUT" ]]; then - echo "Error: Deployment output is empty. Please check the deployment logs." + if (-not $DEPLOY_OUTPUT) { + Write-Host "Error: Deployment output is empty. Please check the deployment logs." exit 1 - fi + } # Export variables only after successful deploy - export CONTAINER_API_APPURL="https://$(echo "$DEPLOY_OUTPUT" | jq -r '.CONTAINER_API_APP_FQDN // empty')" - echo "CONTAINER_API_APPURL=$CONTAINER_API_APPURL" >> $GITHUB_ENV + $CONTAINER_API_APPURL = "https://$($DEPLOY_OUTPUT.CONTAINER_API_APP_FQDN)" + "CONTAINER_API_APPURL=$CONTAINER_API_APPURL" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append - export CONTAINER_API_APPNAME=$(echo "$DEPLOY_OUTPUT" | jq -r '.CONTAINER_API_APP_NAME // empty') - echo "CONTAINER_API_APPNAME=$CONTAINER_API_APPNAME" >> $GITHUB_ENV + $CONTAINER_API_APPNAME = $DEPLOY_OUTPUT.CONTAINER_API_APP_NAME + "CONTAINER_API_APPNAME=$CONTAINER_API_APPNAME" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append - export CONTAINER_WEB_APPURL="https://$(echo "$DEPLOY_OUTPUT" | jq -r '.CONTAINER_WEB_APP_FQDN // empty')" - echo "CONTAINER_WEB_APPURL=$CONTAINER_WEB_APPURL" >> $GITHUB_ENV - echo "CONTAINER_WEB_APPURL=$CONTAINER_WEB_APPURL" >> $GITHUB_OUTPUT + $CONTAINER_WEB_APPURL = "https://$($DEPLOY_OUTPUT.CONTAINER_WEB_APP_FQDN)" + "CONTAINER_WEB_APPURL=$CONTAINER_WEB_APPURL" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append + "CONTAINER_WEB_APPURL=$CONTAINER_WEB_APPURL" | Out-File -FilePath $env:GITHUB_OUTPUT -Encoding utf8 -Append - export CONTAINER_WEB_APPNAME=$(echo "$DEPLOY_OUTPUT" | jq -r '.CONTAINER_WEB_APP_NAME // empty') - echo "CONTAINER_WEB_APPNAME=$CONTAINER_WEB_APPNAME" >> $GITHUB_ENV + $CONTAINER_WEB_APPNAME = $DEPLOY_OUTPUT.CONTAINER_WEB_APP_NAME + "CONTAINER_WEB_APPNAME=$CONTAINER_WEB_APPNAME" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append - name: Register schemas id: register