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:
| Stage | Status |
|---|
| 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:
| Stage | Status |
|---|
| 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:
| Stage | Status |
|---|
| 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:
| Stage | Status |
|---|
| 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:
| Stage | Status |
|---|
| 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:
| Stage | Status |
|---|
| 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:
| Stage | Status |
|---|
| 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:
| Stage | Status |
|---|
| 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:
| Stage | Status |
|---|
| 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:
| Stage | Status |
|---|
| 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:
| Stage | Status |
|---|
| 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:**