8686 CLEANUP_RESOURCES : ${{ github.event_name == 'workflow_dispatch' && (github.event.inputs.cleanup_resources || true) || true }}
8787 RUN_E2E_TESTS : ${{ github.event_name == 'workflow_dispatch' && (github.event.inputs.run_e2e_tests || 'GoldenPath-Testing') || 'GoldenPath-Testing' }}
8888 BUILD_DOCKER_IMAGE : ${{ github.event_name == 'workflow_dispatch' && (github.event.inputs.build_docker_image || false) || false }}
89+ AZURE_DEV_COLLECT_TELEMETRY : ${{ vars.AZURE_DEV_COLLECT_TELEMETRY }}
8990
9091jobs :
9192 docker-build :
@@ -281,16 +282,17 @@ jobs:
281282 run : |
282283 # Azure CLI is pre-installed on Windows GitHub runners
283284 az --version # Verify installation
284-
285- - name : Try setup-azd action
285+
286+ - name : Setup Azure Developer CLI
286287 uses : Azure/setup-azd@v2
287288
288289 - name : Login to Azure
290+ id : login-azure
289291 shell : bash
290292 run : |
291293 az login --service-principal -u ${{ secrets.AZURE_CLIENT_ID }} -p ${{ secrets.AZURE_CLIENT_SECRET }} --tenant ${{ secrets.AZURE_TENANT_ID }}
292- az account set --subscription ${{ secrets.AZURE_SUBSCRIPTION_ID }}
293-
294+ azd auth login --client-id ${{ secrets.AZURE_CLIENT_ID }} --client-secret ${{ secrets.AZURE_CLIENT_SECRET }} --tenant-id ${{ secrets.AZURE_TENANT_ID }}
295+
294296 - name : Run Quota Check
295297 id : quota-check
296298 shell : bash
@@ -467,114 +469,111 @@ jobs:
467469
468470 - 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' }})
469471 id : get_output
470- shell : bash
472+ shell : pwsh
471473 run : |
472- set -e
473- echo "Starting azd deployment..."
474- echo "WAF Enabled: ${{ env.WAF_ENABLED }}"
475- echo "EXP: ${{ env.EXP }}"
476- echo "Using Docker Image Tag: ${{ steps.determine_image_tag.outputs.IMAGE_TAG }}"
474+ $ErrorActionPreference = "Stop"
475+ Write-Host "Starting azd deployment..."
476+ Write-Host "WAF Enabled: ${{ env.WAF_ENABLED }}"
477+ Write-Host "EXP: ${{ env.EXP }}"
478+ Write-Host "Using Docker Image Tag: ${{ steps.determine_image_tag.outputs.IMAGE_TAG }}"
477479
478480 # Generate current timestamp in desired format: YYYY-MM-DDTHH:MM:SS.SSSSSSSZ
479- current_date=$(date -u +"%Y-%m-%dT%H:%M:%S .0000000Z")
481+ $ current_date = (Get-Date).ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ss .0000000Z")
480482
481- echo "Creating environment..."
482- azd env new $ENV_NAME --no-prompt
483- echo "Environment created: $ENV_NAME"
483+ Write-Host "Creating environment..."
484+ azd env new $env: ENV_NAME --no-prompt
485+ Write-Host "Environment created: $env: ENV_NAME"
484486
485- echo "Setting default subscription..."
487+ Write-Host "Setting default subscription..."
486488 azd config set defaults.subscription ${{ secrets.AZURE_SUBSCRIPTION_ID }}
487489
488490 # Set additional parameters
489491 azd env set AZURE_SUBSCRIPTION_ID="${{ secrets.AZURE_SUBSCRIPTION_ID }}"
490- azd env set AZURE_ENV_AI_DEPLOYMENTS_LOCATION="$AZURE_ENV_OPENAI_LOCATION"
491- azd env set AZURE_LOCATION="$AZURE_LOCATION"
492- azd env set AZURE_RESOURCE_GROUP="$RESOURCE_GROUP_NAME"
492+ azd env set AZURE_ENV_AI_DEPLOYMENTS_LOCATION="$env: AZURE_ENV_OPENAI_LOCATION"
493+ azd env set AZURE_LOCATION="$env: AZURE_LOCATION"
494+ azd env set AZURE_RESOURCE_GROUP="$env: RESOURCE_GROUP_NAME"
493495 azd env set AZURE_ENV_CONTAINER_IMAGE_TAG="${{ steps.determine_image_tag.outputs.IMAGE_TAG }}"
494496 azd env set AZURE_DEV_COLLECT_TELEMETRY="${{ vars.AZURE_DEV_COLLECT_TELEMETRY }}"
495497 # Set ACR name only when building Docker image
496- if [[ "${{ env.BUILD_DOCKER_IMAGE }}" == "true" ]]; then
498+ if ( "${{ env.BUILD_DOCKER_IMAGE }}" -eq "true") {
497499 # Extract ACR name from login server and set as environment variable
498- ACR_NAME=$(echo "${{ secrets.ACR_TEST_LOGIN_SERVER }}" )
500+ $ ACR_NAME = "${{ secrets.ACR_TEST_LOGIN_SERVER }}"
499501 azd env set AZURE_ENV_CONTAINER_REGISTRY_ENDPOINT="$ACR_NAME"
500- echo "Set ACR name to: $ACR_NAME"
501- else
502- echo "Skipping ACR name configuration (using existing image)"
503- fi
502+ Write-Host "Set ACR name to: $ACR_NAME"
503+ } else {
504+ Write-Host "Skipping ACR name configuration (using existing image)"
505+ }
504506
505- if [[ "${{ env.EXP }}" == "true" ]]; then
506- echo "✅ EXP ENABLED - Setting EXP parameters..."
507+ if ( "${{ env.EXP }}" -eq "true") {
508+ Write-Host "✅ EXP ENABLED - Setting EXP parameters..."
507509
508510 # Set EXP variables dynamically
509- if [[ -n "${{ github.event.inputs.AZURE_ENV_LOG_ANALYTICS_WORKSPACE_ID }}" ]]; then
510- EXP_LOG_ANALYTICS_ID= "${{ github.event.inputs.AZURE_ENV_LOG_ANALYTICS_WORKSPACE_ID }}"
511- else
512- EXP_LOG_ANALYTICS_ID= "${{ secrets.AZURE_ENV_LOG_ANALYTICS_WORKSPACE_ID }}"
513- fi
511+ if ( "${{ github.event.inputs.AZURE_ENV_LOG_ANALYTICS_WORKSPACE_ID }}" -ne "") {
512+ $ EXP_LOG_ANALYTICS_ID = "${{ github.event.inputs.AZURE_ENV_LOG_ANALYTICS_WORKSPACE_ID }}"
513+ } else {
514+ $ EXP_LOG_ANALYTICS_ID = "${{ secrets.AZURE_ENV_LOG_ANALYTICS_WORKSPACE_ID }}"
515+ }
514516
515- if [[ -n "${{ github.event.inputs.AZURE_EXISTING_AI_PROJECT_RESOURCE_ID }}" ]]; then
516- EXP_AI_PROJECT_ID= "${{ github.event.inputs.AZURE_EXISTING_AI_PROJECT_RESOURCE_ID }}"
517- else
518- EXP_AI_PROJECT_ID= "${{ secrets.AZURE_ENV_FOUNDRY_PROJECT_ID }}"
519- fi
517+ if ( "${{ github.event.inputs.AZURE_EXISTING_AI_PROJECT_RESOURCE_ID }}" -ne "") {
518+ $ EXP_AI_PROJECT_ID = "${{ github.event.inputs.AZURE_EXISTING_AI_PROJECT_RESOURCE_ID }}"
519+ } else {
520+ $ EXP_AI_PROJECT_ID = "${{ secrets.AZURE_ENV_FOUNDRY_PROJECT_ID }}"
521+ }
520522
521- echo "AZURE_ENV_LOG_ANALYTICS_WORKSPACE_ID: $EXP_LOG_ANALYTICS_ID"
522- echo "AZURE_ENV_FOUNDRY_PROJECT_ID: $EXP_AI_PROJECT_ID"
523+ Write-Host "AZURE_ENV_LOG_ANALYTICS_WORKSPACE_ID: $EXP_LOG_ANALYTICS_ID"
524+ Write-Host "AZURE_ENV_FOUNDRY_PROJECT_ID: $EXP_AI_PROJECT_ID"
523525 azd env set AZURE_ENV_LOG_ANALYTICS_WORKSPACE_ID="$EXP_LOG_ANALYTICS_ID"
524526 azd env set AZURE_ENV_FOUNDRY_PROJECT_ID="$EXP_AI_PROJECT_ID"
525- else
526- echo "❌ EXP DISABLED - Skipping EXP parameters"
527- fi
527+ } else {
528+ Write-Host "❌ EXP DISABLED - Skipping EXP parameters"
529+ }
528530
529531 # Deploy using azd up
530532 azd up --no-prompt
531533
532- echo "✅ Deployment succeeded."
533- echo "$DEPLOY_OUTPUT"
534+ Write-Host "✅ Deployment succeeded."
534535
535536 # Get deployment outputs using azd
536- echo "Extracting deployment outputs..."
537- DEPLOY_OUTPUT=$( azd env get-values --output json)
538- echo "Deployment output: $DEPLOY_OUTPUT"
537+ Write-Host "Extracting deployment outputs..."
538+ $ DEPLOY_OUTPUT = azd env get-values --output json | ConvertFrom-Json
539+ Write-Host "Deployment output: $($ DEPLOY_OUTPUT | ConvertTo-Json -Depth 10) "
539540
540- if [[ -z " $DEPLOY_OUTPUT" ]]; then
541- echo "Error: Deployment output is empty. Please check the deployment logs."
541+ if (-not $DEPLOY_OUTPUT) {
542+ Write-Host "Error: Deployment output is empty. Please check the deployment logs."
542543 exit 1
543- fi
544+ }
544545
545546 # Export variables only after successful deploy
546- export CONTAINER_API_APPURL= "https://$(echo " $DEPLOY_OUTPUT" | jq -r ' .CONTAINER_API_APP_FQDN // empty' )"
547- echo "CONTAINER_API_APPURL=$CONTAINER_API_APPURL" >> $ GITHUB_ENV
547+ $ CONTAINER_API_APPURL = "https://$($DEPLOY_OUTPUT.CONTAINER_API_APP_FQDN)"
548+ "CONTAINER_API_APPURL=$CONTAINER_API_APPURL" | Out-File -FilePath $env: GITHUB_ENV -Encoding utf8 -Append
548549
549- export CONTAINER_API_APPNAME=$(echo " $DEPLOY_OUTPUT" | jq -r ' .CONTAINER_API_APP_NAME // empty')
550- echo "CONTAINER_API_APPNAME=$CONTAINER_API_APPNAME" >> $ GITHUB_ENV
550+ $ CONTAINER_API_APPNAME = $DEPLOY_OUTPUT.CONTAINER_API_APP_NAME
551+ "CONTAINER_API_APPNAME=$CONTAINER_API_APPNAME" | Out-File -FilePath $env: GITHUB_ENV -Encoding utf8 -Append
551552
552- export CONTAINER_WEB_APPURL= "https://$(echo " $DEPLOY_OUTPUT" | jq -r ' .CONTAINER_WEB_APP_FQDN // empty' )"
553- echo "CONTAINER_WEB_APPURL=$CONTAINER_WEB_APPURL" >> $ GITHUB_ENV
554- echo "CONTAINER_WEB_APPURL=$CONTAINER_WEB_APPURL" >> $ GITHUB_OUTPUT
553+ $ CONTAINER_WEB_APPURL = "https://$($DEPLOY_OUTPUT.CONTAINER_WEB_APP_FQDN)"
554+ "CONTAINER_WEB_APPURL=$CONTAINER_WEB_APPURL" | Out-File -FilePath $env: GITHUB_ENV -Encoding utf8 -Append
555+ "CONTAINER_WEB_APPURL=$CONTAINER_WEB_APPURL" | Out-File -FilePath $env: GITHUB_OUTPUT -Encoding utf8 -Append
555556
556- export CONTAINER_WEB_APPNAME=$(echo " $DEPLOY_OUTPUT" | jq -r ' .CONTAINER_WEB_APP_NAME // empty')
557- echo "CONTAINER_WEB_APPNAME=$CONTAINER_WEB_APPNAME" >> $ GITHUB_ENV
557+ $ CONTAINER_WEB_APPNAME = $DEPLOY_OUTPUT.CONTAINER_WEB_APP_NAME
558+ "CONTAINER_WEB_APPNAME=$CONTAINER_WEB_APPNAME" | Out-File -FilePath $env: GITHUB_ENV -Encoding utf8 -Append
558559
559560 - name : Register schemas
560561 id : register
561- shell : bash
562+ shell : pwsh
562563 run : |
563- echo "Registering schemas..."
564- sleep 40 # Wait for the API to be ready
564+ Write-Host "Registering schemas..."
565+ Start-Sleep -Seconds 40 # Wait for the API to be ready
565566
566- cd src/ContentProcessorAPI/samples/schemas
567- chmod +x ./register_schema.sh
568- ./register_schema.sh ${{ env.CONTAINER_API_APPURL }}/schemavault/ schema_info_sh.json
567+ Set-Location src/ContentProcessorAPI/samples/schemas
568+ & .\register_schema.ps1 "${{ env.CONTAINER_API_APPURL }}/schemavault/" "schema_info_sh.json"
569569
570570 - name : Upload sample invoice and claim data
571- shell : bash
571+ shell : pwsh
572572 run : |
573- echo "Uploading sample data..."
574- cd src/ContentProcessorAPI/samples
575- chmod +x ./upload_files.sh
576- ./upload_files.sh ${{ env.CONTAINER_API_APPURL }}/contentprocessor/submit ./invoices '${{ steps.register.outputs.invoice_schema_id }}'
577- ./upload_files.sh ${{ env.CONTAINER_API_APPURL }}/contentprocessor/submit ./propertyclaims '${{ steps.register.outputs.propertylossdamageclaimform_schema_id }}'
573+ Write-Host "Uploading sample data..."
574+ Set-Location src/ContentProcessorAPI/samples
575+ & .\upload_files.ps1 "${{ env.CONTAINER_API_APPURL }}/contentprocessor/submit" ".\invoices" "${{ steps.register.outputs.invoice_schema_id }}"
576+ & .\upload_files.ps1 "${{ env.CONTAINER_API_APPURL }}/contentprocessor/submit" ".\propertyclaims" "${{ steps.register.outputs.propertylossdamageclaimform_schema_id }}"
578577
579578
580579 - name : Disable Auth in Web App
@@ -642,7 +641,7 @@ jobs:
642641 send-notification :
643642 if : always()
644643 needs : [docker-build, deploy, e2e-test]
645- runs-on : windows -latest
644+ runs-on : ubuntu -latest
646645 env :
647646 accelerator_name : " Content Processing"
648647 steps :
@@ -802,19 +801,15 @@ jobs:
802801 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)
803802 needs : [docker-build, deploy, e2e-test]
804803 runs-on : windows-latest
804+ continue-on-error : true
805805 env :
806806 RESOURCE_GROUP_NAME : ${{ needs.deploy.outputs.RESOURCE_GROUP_NAME }}
807807 AZURE_LOCATION : ${{ needs.deploy.outputs.AZURE_LOCATION }}
808808 AZURE_ENV_OPENAI_LOCATION : ${{ needs.deploy.outputs.AZURE_ENV_OPENAI_LOCATION }}
809809 ENV_NAME : ${{ needs.deploy.outputs.ENV_NAME }}
810810 IMAGE_TAG : ${{ needs.deploy.outputs.IMAGE_TAG }}
811+ AZURE_DEV_COLLECT_TELEMETRY : ${{ vars.AZURE_DEV_COLLECT_TELEMETRY }}
811812 steps :
812- - name : Checkout Code
813- uses : actions/checkout@v4
814-
815- - name : Install Azure Developer CLI
816- uses : Azure/setup-azd@v1.0.0
817-
818813 - name : Setup Azure CLI
819814 shell : bash
820815 run : |
@@ -826,9 +821,9 @@ jobs:
826821 run : |
827822 az login --service-principal -u ${{ secrets.AZURE_CLIENT_ID }} -p ${{ secrets.AZURE_CLIENT_SECRET }} --tenant ${{ secrets.AZURE_TENANT_ID }}
828823 az account set --subscription ${{ secrets.AZURE_SUBSCRIPTION_ID }}
829-
830824 - name : Delete Resource Group Directly (Optimized Cleanup)
831825 shell : bash
826+ id : delete_rg
832827 run : |
833828 set -e
834829 echo "🗑️ Starting optimized resource cleanup..."
@@ -843,33 +838,14 @@ jobs:
843838 --yes \
844839 --no-wait
845840
846- echo "✅ Resource group deletion initiated (running asynchronously) "
841+ echo "✅ Resource group deletion initiated"
847842 echo "Note: Resources will be cleaned up in the background"
848-
849- - name : Cleanup azd Environment State
850- if : always()
851- shell : bash
852- run : |
853- set -e
854- echo "🧹 Cleaning up local azd environment state..."
855-
856- # Remove local azd environment to prevent state conflicts
857- if azd env list | grep -q "${{ env.ENV_NAME }}"; then
858- echo "Removing azd environment: ${{ env.ENV_NAME }}"
859- azd env select ${{ env.ENV_NAME }} || true
860- # Just remove the local state, resources already deleted
861- rm -rf ~/.azd/environments/${{ env.ENV_NAME }} || true
862- echo "✅ Local azd environment cleaned up"
863- else
864- echo "Environment ${{ env.ENV_NAME }} not found locally"
865- fi
866843
867844 - name : Logout from Azure
868845 if : always()
869846 shell : bash
870847 run : |
871- azd auth logout
872- az logout || echo "Warning: Failed to logout from Azure CLI"
848+ az logout
873849 echo "Logged out from Azure."
874850
875851 - name : Generate Cleanup Job Summary
@@ -880,16 +856,14 @@ jobs:
880856 echo "" >> $GITHUB_STEP_SUMMARY
881857 echo "| Field | Value |" >> $GITHUB_STEP_SUMMARY
882858 echo "|-------|--------|" >> $GITHUB_STEP_SUMMARY
883- echo "| **Job Status** | ${{ job.status == 'success' && '✅ Success' || '❌ Failed' }} |" >> $GITHUB_STEP_SUMMARY
859+ echo "| **Resouce Group deletion Status** | ${{ steps.delete_rg.outcome == 'success' && '✅ Success' || '❌ Failed' }} |" >> $GITHUB_STEP_SUMMARY
884860 echo "| **Resource Group** | \`${{ env.RESOURCE_GROUP_NAME }}\` |" >> $GITHUB_STEP_SUMMARY
885861 echo "| **Azure Region (Infrastructure)** | \`${{ env.AZURE_LOCATION }}\` |" >> $GITHUB_STEP_SUMMARY
886862 echo "| **Azure OpenAI Region** | \`${{ env.AZURE_ENV_OPENAI_LOCATION }}\` |" >> $GITHUB_STEP_SUMMARY
887- echo "| **Docker Image Tag** | \`${{ env.IMAGE_TAG }}\` |" >> $GITHUB_STEP_SUMMARY
888863 echo "" >> $GITHUB_STEP_SUMMARY
889- if [[ "${{ job.status }}" == "success" ]]; then
864+ if [[ "${{ steps.delete_rg.outcome }}" == "success" ]]; then
890865 echo "### ✅ Cleanup Details" >> $GITHUB_STEP_SUMMARY
891- echo "- Successfully initiated resource group deletion" >> $GITHUB_STEP_SUMMARY
892- echo "- Resource group \`${{ env.RESOURCE_GROUP_NAME }}\` and all associated resources are being deleted asynchronously" >> $GITHUB_STEP_SUMMARY
866+ echo "- Successfully initiated deletion for Resource Group \`${{ env.RESOURCE_GROUP_NAME }}\`" >> $GITHUB_STEP_SUMMARY
893867 echo "" >> $GITHUB_STEP_SUMMARY
894868 else
895869 echo "### ❌ Cleanup Failed" >> $GITHUB_STEP_SUMMARY
0 commit comments