From dcccef4ea2433d7bac6c17c2e98f8c5275c83097 Mon Sep 17 00:00:00 2001 From: Prajwal-Microsoft Date: Mon, 16 Mar 2026 22:27:04 +0530 Subject: [PATCH 1/6] docs: Update Deployment Guide with azd 1.23.9 note Added note for users running azd version 1.23.9 to configure preflight settings. --- docs/DeploymentGuide.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docs/DeploymentGuide.md b/docs/DeploymentGuide.md index 6914624..57acbdb 100644 --- a/docs/DeploymentGuide.md +++ b/docs/DeploymentGuide.md @@ -271,6 +271,11 @@ azd auth login --tenant-id > ⚠️ **Critical: Redeployment Warning** > If you have previously run `azd up` in this folder (i.e., a `.azure` folder exists), you must [create a fresh environment](#creating-a-new-environment) to avoid conflicts and deployment failures. +**NOTE:** If you are running the latest azd version (version 1.23.9), please run the following command. +```bash +azd config set provision.preflight off +``` + ```shell azd up ``` From a87cd5ceb9b466929ca66f8ab53c6b6cc8a8fe25 Mon Sep 17 00:00:00 2001 From: Vamshi-Microsoft Date: Fri, 20 Mar 2026 12:43:47 +0530 Subject: [PATCH 2/6] refactor Notification email template --- .github/workflows/deploy-orchestrator.yml | 31 +-- .github/workflows/job-send-notification.yml | 206 ++++++-------------- 2 files changed, 74 insertions(+), 163 deletions(-) diff --git a/.github/workflows/deploy-orchestrator.yml b/.github/workflows/deploy-orchestrator.yml index c2918f5..24751fc 100644 --- a/.github/workflows/deploy-orchestrator.yml +++ b/.github/workflows/deploy-orchestrator.yml @@ -87,21 +87,6 @@ jobs: cleanup_resources: ${{ inputs.cleanup_resources }} secrets: inherit - send-notification: - if: "!cancelled()" - needs: [docker-build, deploy] - uses: ./.github/workflows/job-send-notification.yml - with: - trigger_type: ${{ inputs.trigger_type }} - waf_enabled: ${{ inputs.waf_enabled }} - EXP: ${{ inputs.EXP }} - existing_webapp_url: ${{ inputs.existing_webapp_url }} - deploy_result: ${{ needs.deploy.result }} - WEB_APPURL: ${{ needs.deploy.outputs.WEB_APPURL || inputs.existing_webapp_url }} - RESOURCE_GROUP_NAME: ${{ needs.deploy.outputs.RESOURCE_GROUP_NAME }} - QUOTA_FAILED: ${{ needs.deploy.outputs.QUOTA_FAILED }} - secrets: inherit - cleanup-deployment: if: "!cancelled() && needs.deploy.result == 'success' && needs.deploy.outputs.RESOURCE_GROUP_NAME != '' && inputs.existing_webapp_url == '' && (inputs.trigger_type != 'workflow_dispatch' || inputs.cleanup_resources)" needs: [docker-build, deploy] @@ -117,3 +102,19 @@ jobs: ENV_NAME: ${{ needs.deploy.outputs.ENV_NAME }} IMAGE_TAG: ${{ needs.deploy.outputs.IMAGE_TAG }} secrets: inherit + + send-notification: + if: "!cancelled()" + needs: [docker-build, deploy, cleanup-deployment] + uses: ./.github/workflows/job-send-notification.yml + with: + trigger_type: ${{ inputs.trigger_type }} + waf_enabled: ${{ inputs.waf_enabled }} + EXP: ${{ inputs.EXP }} + existing_webapp_url: ${{ inputs.existing_webapp_url }} + deploy_result: ${{ needs.deploy.result }} + cleanup_result: ${{ needs.cleanup-deployment.result }} + WEB_APPURL: ${{ needs.deploy.outputs.WEB_APPURL || inputs.existing_webapp_url }} + RESOURCE_GROUP_NAME: ${{ needs.deploy.outputs.RESOURCE_GROUP_NAME }} + QUOTA_FAILED: ${{ needs.deploy.outputs.QUOTA_FAILED }} + secrets: inherit diff --git a/.github/workflows/job-send-notification.yml b/.github/workflows/job-send-notification.yml index f32485e..ee113f1 100644 --- a/.github/workflows/job-send-notification.yml +++ b/.github/workflows/job-send-notification.yml @@ -41,6 +41,11 @@ on: required: false default: 'false' type: string + cleanup_result: + description: 'Cleanup job result (success, failure, skipped)' + required: false + default: 'skipped' + type: string env: GPT_MIN_CAPACITY: 100 @@ -55,130 +60,50 @@ jobs: env: accelerator_name: "Container Migration" steps: - - name: Validate Workflow Input Parameters + - name: Determine Cleanup Status + id: cleanup shell: bash env: - INPUT_TRIGGER_TYPE: ${{ inputs.trigger_type }} - INPUT_WAF_ENABLED: ${{ inputs.waf_enabled }} - INPUT_EXP: ${{ inputs.EXP }} - INPUT_EXISTING_WEBAPP_URL: ${{ inputs.existing_webapp_url }} - INPUT_DEPLOY_RESULT: ${{ inputs.deploy_result }} - INPUT_WEB_APPURL: ${{ inputs.WEB_APPURL }} - INPUT_RESOURCE_GROUP_NAME: ${{ inputs.RESOURCE_GROUP_NAME }} - INPUT_QUOTA_FAILED: ${{ inputs.QUOTA_FAILED }} + CLEANUP_RESULT: ${{ inputs.cleanup_result }} run: | - echo "🔍 Validating workflow input parameters..." - VALIDATION_FAILED=false - - # Validate trigger_type (required - alphanumeric with underscores) - if [[ -z "$INPUT_TRIGGER_TYPE" ]]; then - echo "❌ ERROR: trigger_type is required but was not provided" - VALIDATION_FAILED=true - elif [[ ! "$INPUT_TRIGGER_TYPE" =~ ^[a-zA-Z0-9_]+$ ]]; then - echo "❌ ERROR: trigger_type '$INPUT_TRIGGER_TYPE' is invalid. Must contain only alphanumeric characters and underscores" - VALIDATION_FAILED=true - else - echo "✅ trigger_type: '$INPUT_TRIGGER_TYPE' is valid" - fi - - # Validate waf_enabled (boolean) - if [[ "$INPUT_WAF_ENABLED" != "true" && "$INPUT_WAF_ENABLED" != "false" ]]; then - echo "❌ ERROR: waf_enabled must be 'true' or 'false', got: '$INPUT_WAF_ENABLED'" - VALIDATION_FAILED=true - else - echo "✅ waf_enabled: '$INPUT_WAF_ENABLED' is valid" - fi - - # Validate EXP (boolean) - if [[ "$INPUT_EXP" != "true" && "$INPUT_EXP" != "false" ]]; then - echo "❌ ERROR: EXP must be 'true' or 'false', got: '$INPUT_EXP'" - VALIDATION_FAILED=true - else - echo "✅ EXP: '$INPUT_EXP' is valid" - fi - - # Validate existing_webapp_url (must start with https if provided) - if [[ -n "$INPUT_EXISTING_WEBAPP_URL" ]]; then - if [[ ! "$INPUT_EXISTING_WEBAPP_URL" =~ ^https:// ]]; then - echo "❌ ERROR: existing_webapp_url must start with 'https://', got: '$INPUT_EXISTING_WEBAPP_URL'" - VALIDATION_FAILED=true - else - echo "✅ existing_webapp_url: '$INPUT_EXISTING_WEBAPP_URL' is valid" - fi - fi - - # Validate deploy_result (required, must be specific values) - if [[ -z "$INPUT_DEPLOY_RESULT" ]]; then - echo "❌ ERROR: deploy_result is required but not provided" - VALIDATION_FAILED=true - else - ALLOWED_DEPLOY_RESULTS=("success" "failure" "skipped") - if [[ ! " ${ALLOWED_DEPLOY_RESULTS[@]} " =~ " ${INPUT_DEPLOY_RESULT} " ]]; then - echo "❌ ERROR: deploy_result '$INPUT_DEPLOY_RESULT' is invalid. Allowed values: ${ALLOWED_DEPLOY_RESULTS[*]}" - VALIDATION_FAILED=true - else - echo "✅ deploy_result: '$INPUT_DEPLOY_RESULT' is valid" - fi - fi - - # Validate WEB_APPURL (must start with https if provided) - if [[ -n "$INPUT_WEB_APPURL" ]]; then - if [[ ! "$INPUT_WEB_APPURL" =~ ^https:// ]]; then - echo "❌ ERROR: WEB_APPURL must start with 'https://', got: '$INPUT_WEB_APPURL'" - VALIDATION_FAILED=true - else - echo "✅ WEB_APPURL: '$INPUT_WEB_APPURL' is valid" - fi - fi - - # Validate RESOURCE_GROUP_NAME (Azure resource group naming convention if provided) - if [[ -n "$INPUT_RESOURCE_GROUP_NAME" ]]; then - if [[ ! "$INPUT_RESOURCE_GROUP_NAME" =~ ^[a-zA-Z0-9._\(\)-]+$ ]] || [[ "$INPUT_RESOURCE_GROUP_NAME" =~ \.$ ]]; then - echo "❌ ERROR: RESOURCE_GROUP_NAME '$INPUT_RESOURCE_GROUP_NAME' is invalid. Must contain only alphanumerics, periods, underscores, hyphens, and parentheses. Cannot end with period." - VALIDATION_FAILED=true - elif [[ ${#INPUT_RESOURCE_GROUP_NAME} -gt 90 ]]; then - echo "❌ ERROR: RESOURCE_GROUP_NAME '$INPUT_RESOURCE_GROUP_NAME' exceeds 90 characters" - VALIDATION_FAILED=true - else - echo "✅ RESOURCE_GROUP_NAME: '$INPUT_RESOURCE_GROUP_NAME' is valid" - fi - fi - - # Validate QUOTA_FAILED (must be 'true', 'false', or empty string) - if [[ "$INPUT_QUOTA_FAILED" != "true" && "$INPUT_QUOTA_FAILED" != "false" && "$INPUT_QUOTA_FAILED" != "" ]]; then - echo "❌ ERROR: QUOTA_FAILED must be 'true', 'false', or empty string, got: '$INPUT_QUOTA_FAILED'" - VALIDATION_FAILED=true - else - echo "✅ QUOTA_FAILED: '$INPUT_QUOTA_FAILED' is valid" - fi - - # Fail workflow if any validation failed - if [[ "$VALIDATION_FAILED" == "true" ]]; then - echo "" - echo "❌ Parameter validation failed. Please correct the errors above and try again." - exit 1 - fi - - echo "" - echo "✅ All input parameters validated successfully!" + case "$CLEANUP_RESULT" in + success) echo "CLEANUP_STATUS=✅ SUCCESS" >> $GITHUB_OUTPUT ;; + failure) echo "CLEANUP_STATUS=❌ FAILED (Needs Manual Cleanup)" >> $GITHUB_OUTPUT ;; + *) echo "CLEANUP_STATUS=⏭️ SKIPPED (Needs Manual Cleanup)" >> $GITHUB_OUTPUT ;; + esac + + - name: Determine Configuration Label + id: config + shell: bash + env: + WAF_ENABLED: ${{ env.WAF_ENABLED }} + EXP: ${{ env.EXP }} + run: | + WAF_LABEL=$( [ "$WAF_ENABLED" = "true" ] && echo "WAF" || echo "Non-WAF" ) + EXP_LABEL=$( [ "$EXP" = "true" ] && echo "EXP" || echo "Non-EXP" ) + echo "CONFIG_LABEL=${WAF_LABEL} + ${EXP_LABEL}" >> $GITHUB_OUTPUT - name: Send Quota Failure Notification if: inputs.deploy_result == 'failure' && inputs.QUOTA_FAILED == 'true' shell: bash env: - DEPLOY_RESULT: ${{ inputs.deploy_result }} - QUOTA_FAILED: ${{ inputs.QUOTA_FAILED }} + GITHUB_REPOSITORY: ${{ github.repository }} + GITHUB_RUN_ID: ${{ github.run_id }} + ACCELERATOR_NAME: ${{ env.accelerator_name }} + LOGICAPP_URL: ${{ secrets.EMAILNOTIFICATION_LOGICAPP_URL_TA }} + CLEANUP_STATUS: ${{ steps.cleanup.outputs.CLEANUP_STATUS }} + CONFIG_LABEL: ${{ steps.config.outputs.CONFIG_LABEL }} run: | - RUN_URL="https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}" + RUN_URL="https://github.com/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID}" EMAIL_BODY=$(cat <Dear Team,

We would like to inform you that the ${{ env.accelerator_name }} deployment has failed due to insufficient quota in the requested regions.

Issue Details:
• Quota check failed for GPT model
• Required GPT Capacity: ${{ env.GPT_MIN_CAPACITY }}
• Checked Regions: ${{ vars.AZURE_REGIONS }}

Run URL: ${RUN_URL}

Please resolve the quota issue and retry the deployment.

Best regards,
Your Automation Team

", - "subject": "${{ env.accelerator_name }} Pipeline - Failed (Insufficient Quota)" + "body": "

Dear Team,

We would like to inform you that the ${ACCELERATOR_NAME} deployment has failed due to insufficient quota.

Status Summary:
StageStatus
Deployment❌ FAILED (Insufficient Quota)
Cleanup${CLEANUP_STATUS}

Issue Details:
• Quota check failed for GPT model
• Required GPT Capacity: ${{ env.GPT_MIN_CAPACITY }}
• Checked Regions: ${{ vars.AZURE_REGIONS }}

Configuration: ${CONFIG_LABEL}

Run URL: ${RUN_URL}

Please resolve the quota issue and retry the deployment.

Best regards,
Your Automation Team

", + "subject": "[CI/CD-Automation] [${ACCELERATOR_NAME}]" } EOF ) - curl -X POST "${{ secrets.EMAILNOTIFICATION_LOGICAPP_URL_TA }}" \ + curl -X POST "${LOGICAPP_URL}" \ -H "Content-Type: application/json" \ -d "$EMAIL_BODY" || echo "Failed to send quota failure notification" @@ -186,22 +111,24 @@ jobs: if: inputs.deploy_result == 'failure' && inputs.QUOTA_FAILED != 'true' shell: bash env: - DEPLOY_RESULT: ${{ inputs.deploy_result }} - QUOTA_FAILED: ${{ inputs.QUOTA_FAILED }} - RESOURCE_GROUP_NAME: ${{ inputs.RESOURCE_GROUP_NAME }} + INPUT_RESOURCE_GROUP_NAME: ${{ inputs.RESOURCE_GROUP_NAME }} + ACCELERATOR_NAME: ${{ env.accelerator_name }} + LOGICAPP_URL: ${{ secrets.EMAILNOTIFICATION_LOGICAPP_URL_TA }} + CONFIG_LABEL: ${{ steps.config.outputs.CONFIG_LABEL }} + CLEANUP_STATUS: ${{ steps.cleanup.outputs.CLEANUP_STATUS }} run: | RUN_URL="https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}" - RESOURCE_GROUP="${RESOURCE_GROUP_NAME}" + RESOURCE_GROUP="$INPUT_RESOURCE_GROUP_NAME" EMAIL_BODY=$(cat <Dear Team,

We would like to inform you that the ${{ env.accelerator_name }} deployment process has encountered an issue and has failed to complete successfully.

Deployment Details:
• Resource Group: ${RESOURCE_GROUP}
• WAF Enabled: ${{ env.WAF_ENABLED }}
• EXP Enabled: ${{ env.EXP }}

Run URL: ${RUN_URL}

Please investigate the deployment failure at your earliest convenience.

Best regards,
Your Automation Team

", - "subject": "${{ env.accelerator_name }} Pipeline - Failed" + "body": "

Dear Team,

We would like to inform you that the ${ACCELERATOR_NAME} deployment has failed.

Status Summary:
StageStatus
Deployment❌ FAILED (Deployment Issue)
Cleanup${CLEANUP_STATUS}

Deployment Details:
• Resource Group: ${RESOURCE_GROUP}

Configuration: ${CONFIG_LABEL}

Run URL: ${RUN_URL}

Please investigate the deployment failure at your earliest convenience.

Best regards,
Your Automation Team

", + "subject": "[CI/CD-Automation] [${ACCELERATOR_NAME}]" } EOF ) - curl -X POST "${{ secrets.EMAILNOTIFICATION_LOGICAPP_URL_TA }}" \ + curl -X POST "${LOGICAPP_URL}" \ -H "Content-Type: application/json" \ -d "$EMAIL_BODY" || echo "Failed to send deployment failure notification" @@ -209,45 +136,28 @@ jobs: if: inputs.deploy_result == 'success' shell: bash env: - DEPLOY_RESULT: ${{ inputs.deploy_result }} - WEB_APPURL: ${{ inputs.WEB_APPURL }} - EXISTING_WEBAPP_URL: ${{ inputs.existing_webapp_url }} - RESOURCE_GROUP_NAME: ${{ inputs.RESOURCE_GROUP_NAME }} + INPUT_WEB_APPURL: ${{ inputs.WEB_APPURL }} + INPUT_EXISTING_WEBAPP_URL: ${{ inputs.existing_webapp_url }} + INPUT_RESOURCE_GROUP_NAME: ${{ inputs.RESOURCE_GROUP_NAME }} + ACCELERATOR_NAME: ${{ env.accelerator_name }} + LOGICAPP_URL: ${{ secrets.EMAILNOTIFICATION_LOGICAPP_URL_TA }} + GITHUB_REPOSITORY: ${{ github.repository }} + GITHUB_RUN_ID: ${{ github.run_id }} + CONFIG_LABEL: ${{ steps.config.outputs.CONFIG_LABEL }} + CLEANUP_STATUS: ${{ steps.cleanup.outputs.CLEANUP_STATUS }} run: | - RUN_URL="https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}" - WEBAPP_URL="${WEB_APPURL:-$EXISTING_WEBAPP_URL}" - RESOURCE_GROUP="${RESOURCE_GROUP_NAME}" + RUN_URL="https://github.com/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID}" + WEBAPP_URL="${INPUT_WEB_APPURL:-$INPUT_EXISTING_WEBAPP_URL}" + RESOURCE_GROUP="$INPUT_RESOURCE_GROUP_NAME" EMAIL_BODY=$(cat <Dear Team,

We would like to inform you that the ${{ env.accelerator_name }} deployment has completed successfully.

Deployment Details:
• Resource Group: ${RESOURCE_GROUP}
• Web App URL: ${WEBAPP_URL}

Configuration:
• WAF Enabled: ${{ env.WAF_ENABLED }}
• EXP Enabled: ${{ env.EXP }}

Run URL: ${RUN_URL}

Best regards,
Your Automation Team

", - "subject": "${{ env.accelerator_name }} Pipeline - Deployment Success" + "body": "

Dear Team,

We would like to inform you that the ${ACCELERATOR_NAME} deployment has completed successfully.

Status Summary:
StageStatus
Deployment✅ SUCCESS
Cleanup${CLEANUP_STATUS}

Deployment Details:
• Resource Group: ${RESOURCE_GROUP}
• Web App URL: ${WEBAPP_URL}

Configuration: ${CONFIG_LABEL}

Run URL: ${RUN_URL}

Best regards,
Your Automation Team

", + "subject": "[CI/CD-Automation] [${ACCELERATOR_NAME}]" } EOF ) - curl -X POST "${{ secrets.EMAILNOTIFICATION_LOGICAPP_URL_TA }}" \ + curl -X POST "${LOGICAPP_URL}" \ -H "Content-Type: application/json" \ -d "$EMAIL_BODY" || echo "Failed to send success notification" - - - name: Send Existing URL Test Failure Notification - if: inputs.deploy_result == 'skipped' && inputs.existing_webapp_url != '' - shell: bash - env: - DEPLOY_RESULT: ${{ inputs.deploy_result }} - EXISTING_WEBAPP_URL: ${{ inputs.existing_webapp_url }} - run: | - RUN_URL="https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}" - EXISTING_URL="${EXISTING_WEBAPP_URL}" - - EMAIL_BODY=$(cat <Dear Team,

The ${{ env.accelerator_name }} pipeline executed against the existing WebApp URL.

Details:
• Target URL: ${EXISTING_URL}
• Deployment: Skipped

Run URL: ${RUN_URL}

Best regards,
Your Automation Team

", - "subject": "${{ env.accelerator_name }} Pipeline - Existing URL Notification" - } - EOF - ) - - curl -X POST "${{ secrets.EMAILNOTIFICATION_LOGICAPP_URL_TA }}" \ - -H "Content-Type: application/json" \ - -d "$EMAIL_BODY" || echo "Failed to send existing URL test failure notification" From 93ec93311a34893d895e4f3876c9eeba35a40221 Mon Sep 17 00:00:00 2001 From: Vamshi-Microsoft Date: Fri, 20 Mar 2026 13:34:42 +0530 Subject: [PATCH 3/6] refactor: Update notification email subjects for clarity on deployment status --- .github/workflows/job-send-notification.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/job-send-notification.yml b/.github/workflows/job-send-notification.yml index ee113f1..90dde0b 100644 --- a/.github/workflows/job-send-notification.yml +++ b/.github/workflows/job-send-notification.yml @@ -98,7 +98,7 @@ jobs: EMAIL_BODY=$(cat <Dear Team,

We would like to inform you that the ${ACCELERATOR_NAME} deployment has failed due to insufficient quota.

Status Summary:
StageStatus
Deployment❌ FAILED (Insufficient Quota)
Cleanup${CLEANUP_STATUS}

Issue Details:
• Quota check failed for GPT model
• Required GPT Capacity: ${{ env.GPT_MIN_CAPACITY }}
• Checked Regions: ${{ vars.AZURE_REGIONS }}

Configuration: ${CONFIG_LABEL}

Run URL: ${RUN_URL}

Please resolve the quota issue and retry the deployment.

Best regards,
Your Automation Team

", - "subject": "[CI/CD-Automation] [${ACCELERATOR_NAME}]" + "subject": "[CI/CD-Automation] [${ACCELERATOR_NAME}] Insufficient Quota" } EOF ) @@ -123,7 +123,7 @@ jobs: EMAIL_BODY=$(cat <Dear Team,

We would like to inform you that the ${ACCELERATOR_NAME} deployment has failed.

Status Summary:
StageStatus
Deployment❌ FAILED (Deployment Issue)
Cleanup${CLEANUP_STATUS}

Deployment Details:
• Resource Group: ${RESOURCE_GROUP}

Configuration: ${CONFIG_LABEL}

Run URL: ${RUN_URL}

Please investigate the deployment failure at your earliest convenience.

Best regards,
Your Automation Team

", - "subject": "[CI/CD-Automation] [${ACCELERATOR_NAME}]" + "subject": "[CI/CD-Automation] [${ACCELERATOR_NAME}] Deployment-Failed" } EOF ) @@ -153,7 +153,7 @@ jobs: EMAIL_BODY=$(cat <Dear Team,

We would like to inform you that the ${ACCELERATOR_NAME} deployment has completed successfully.

Status Summary:
StageStatus
Deployment✅ SUCCESS
Cleanup${CLEANUP_STATUS}

Deployment Details:
• Resource Group: ${RESOURCE_GROUP}
• Web App URL: ${WEBAPP_URL}

Configuration: ${CONFIG_LABEL}

Run URL: ${RUN_URL}

Best regards,
Your Automation Team

", - "subject": "[CI/CD-Automation] [${ACCELERATOR_NAME}]" + "subject": "[CI/CD-Automation] [${ACCELERATOR_NAME}] Success" } EOF ) From 4f50cdc7a124b2e3b08ecfca51c5c62422803793 Mon Sep 17 00:00:00 2001 From: Vamshi-Microsoft Date: Fri, 20 Mar 2026 14:57:52 +0530 Subject: [PATCH 4/6] refactor: Update deployment failure notification email body for clarity --- .github/workflows/job-send-notification.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/job-send-notification.yml b/.github/workflows/job-send-notification.yml index 90dde0b..b21b1f4 100644 --- a/.github/workflows/job-send-notification.yml +++ b/.github/workflows/job-send-notification.yml @@ -97,7 +97,7 @@ jobs: RUN_URL="https://github.com/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID}" EMAIL_BODY=$(cat <Dear Team,

We would like to inform you that the ${ACCELERATOR_NAME} deployment has failed due to insufficient quota.

Status Summary:
StageStatus
Deployment❌ FAILED (Insufficient Quota)
Cleanup${CLEANUP_STATUS}

Issue Details:
• Quota check failed for GPT model
• Required GPT Capacity: ${{ env.GPT_MIN_CAPACITY }}
• Checked Regions: ${{ vars.AZURE_REGIONS }}

Configuration: ${CONFIG_LABEL}

Run URL: ${RUN_URL}

Please resolve the quota issue and retry the deployment.

Best regards,
Your Automation Team

", + "body": "

Dear Team,

We would like to inform you that the ${ACCELERATOR_NAME} deployment has failed due to insufficient quota.

Status Summary:
StageStatus
Deployment❌ FAILED (Insufficient Quota)
Cleanup${CLEANUP_STATUS}

Configuration: ${CONFIG_LABEL}

Run URL: ${RUN_URL}

Please resolve the quota issue and retry the deployment.

Best regards,
Your Automation Team

", "subject": "[CI/CD-Automation] [${ACCELERATOR_NAME}] Insufficient Quota" } EOF From bb0dd7c13faf7e16047b41b4d17a640bc72879b8 Mon Sep 17 00:00:00 2001 From: Vamshi-Microsoft Date: Tue, 24 Mar 2026 11:16:27 +0530 Subject: [PATCH 5/6] refactor: Enhance notification email subjects with status icons --- .github/workflows/job-send-notification.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/job-send-notification.yml b/.github/workflows/job-send-notification.yml index b21b1f4..d4315c9 100644 --- a/.github/workflows/job-send-notification.yml +++ b/.github/workflows/job-send-notification.yml @@ -98,7 +98,7 @@ jobs: EMAIL_BODY=$(cat <Dear Team,

We would like to inform you that the ${ACCELERATOR_NAME} deployment has failed due to insufficient quota.

Status Summary:
StageStatus
Deployment❌ FAILED (Insufficient Quota)
Cleanup${CLEANUP_STATUS}

Configuration: ${CONFIG_LABEL}

Run URL: ${RUN_URL}

Please resolve the quota issue and retry the deployment.

Best regards,
Your Automation Team

", - "subject": "[CI/CD-Automation] [${ACCELERATOR_NAME}] Insufficient Quota" + "subject": "❌[CI/CD-Automation] [${ACCELERATOR_NAME}] Insufficient Quota" } EOF ) @@ -123,7 +123,7 @@ jobs: EMAIL_BODY=$(cat <Dear Team,

We would like to inform you that the ${ACCELERATOR_NAME} deployment has failed.

Status Summary:
StageStatus
Deployment❌ FAILED (Deployment Issue)
Cleanup${CLEANUP_STATUS}

Deployment Details:
• Resource Group: ${RESOURCE_GROUP}

Configuration: ${CONFIG_LABEL}

Run URL: ${RUN_URL}

Please investigate the deployment failure at your earliest convenience.

Best regards,
Your Automation Team

", - "subject": "[CI/CD-Automation] [${ACCELERATOR_NAME}] Deployment-Failed" + "subject": "❌[CI/CD-Automation] [${ACCELERATOR_NAME}] Deployment-Failed" } EOF ) @@ -153,7 +153,7 @@ jobs: EMAIL_BODY=$(cat <Dear Team,

We would like to inform you that the ${ACCELERATOR_NAME} deployment has completed successfully.

Status Summary:
StageStatus
Deployment✅ SUCCESS
Cleanup${CLEANUP_STATUS}

Deployment Details:
• Resource Group: ${RESOURCE_GROUP}
• Web App URL: ${WEBAPP_URL}

Configuration: ${CONFIG_LABEL}

Run URL: ${RUN_URL}

Best regards,
Your Automation Team

", - "subject": "[CI/CD-Automation] [${ACCELERATOR_NAME}] Success" + "subject": "✅[CI/CD-Automation] [${ACCELERATOR_NAME}] Success" } EOF ) From 475b30c706ca9a894f5f037bffe11f716a817302 Mon Sep 17 00:00:00 2001 From: Thanusree-Microsoft <168087422+Thanusree-Microsoft@users.noreply.github.com> Date: Thu, 26 Mar 2026 17:22:59 +0530 Subject: [PATCH 6/6] Update RBAC role name in Deployment Guide --- docs/DeploymentGuide.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/DeploymentGuide.md b/docs/DeploymentGuide.md index 57acbdb..dffd642 100644 --- a/docs/DeploymentGuide.md +++ b/docs/DeploymentGuide.md @@ -16,7 +16,7 @@ Ensure you have access to an [Azure subscription](https://azure.microsoft.com/fr |------------------------------|-----------|-------------| | **Contributor** | Subscription level | Create and manage Azure resources | | **User Access Administrator** | Subscription level | Manage user access and role assignments | -| **Role Based Access Control** | Subscription/Resource Group level | Configure RBAC permissions | +| **Role Based Access Control Admin** | Subscription/Resource Group level | Configure RBAC permissions | | **App Registration Creation** | Azure Active Directory | Create and configure authentication | **🔍 How to Check Your Permissions:**