Validate Deployment #1264
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Validate Deployment | |
on: | |
push: | |
branches: | |
- main | |
- dev | |
- demo | |
schedule: | |
- cron: '0 8,20 * * *' # Runs at 8:00 AM and 8:00 PM GMT | |
permissions: | |
contents: read | |
packages: write | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.ref }} | |
jobs: | |
ci: | |
runs-on: ubuntu-latest | |
env: | |
AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }} | |
AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }} | |
AZURE_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }} | |
AZURE_CLIENT_SECRET: ${{ secrets.AZURE_CLIENT_SECRET }} | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
# Run Quota Check Script | |
- name: Run Quota Check | |
id: quota-check | |
run: | | |
export AZURE_CLIENT_ID=${{ secrets.AZURE_CLIENT_ID }} | |
export AZURE_TENANT_ID=${{ secrets.AZURE_TENANT_ID }} | |
export AZURE_CLIENT_SECRET=${{ secrets.AZURE_CLIENT_SECRET }} | |
export AZURE_SUBSCRIPTION_ID="${{ secrets.AZURE_SUBSCRIPTION_ID }}" | |
export GPT_MIN_CAPACITY="30" | |
export TEXT_EMBEDDING_MIN_CAPACITY="30" | |
export AZURE_REGIONS="${{ vars.AZURE_REGIONS }}" | |
chmod +x scripts/checkquota.sh | |
if ! scripts/checkquota.sh; then | |
# If quota check fails due to insufficient quota, set the flag | |
if grep -q "No region with sufficient quota found" scripts/checkquota.sh; then | |
echo "QUOTA_FAILED=true" >> $GITHUB_ENV | |
fi | |
exit 1 # Fail the pipeline if any other failure occurs | |
fi | |
- name: Send Notification on Quota Failure | |
if: env.QUOTA_FAILED == 'true' | |
run: | | |
RUN_URL="https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}" | |
EMAIL_BODY=$(cat <<EOF | |
{ | |
"body": "<p>Dear Team,</p><p>The quota check has failed, and the pipeline cannot proceed.</p><p><strong>Build URL:</strong> ${RUN_URL}</p><p>Please take necessary action.</p><p>Best regards,<br>Your Automation Team</p>" | |
} | |
EOF | |
) | |
curl -X POST "${{ secrets.LOGIC_APP_URL }}" \ | |
-H "Content-Type: application/json" \ | |
-d "$EMAIL_BODY" || echo "Failed to send notification" | |
- name: Fail Pipeline if Quota Check Fails | |
if: env.QUOTA_FAILED == 'true' | |
run: exit 1 | |
# The pipeline stops here if quota check fails! | |
- name: Set Deployment Region | |
run: | | |
echo "Selected Region: $VALID_REGION" | |
echo "AZURE_LOCATION=$VALID_REGION" >> $GITHUB_ENV | |
- name: Login to GitHub Container Registry | |
uses: docker/login-action@v3 | |
with: | |
registry: ghcr.io | |
username: ${{ github.repository_owner }} | |
password: ${{ secrets.GITHUB_TOKEN }} | |
- name: Set imageTag | |
id: set-image-tag | |
run: | | |
if [[ "${{ github.event_name }}" == "schedule" ]]; then | |
echo "imageTag=latest" >> $GITHUB_ENV | |
elif [[ "${{ github.ref_name }}" == "main" ]]; then | |
echo "imageTag=latest" >> $GITHUB_ENV | |
else | |
echo "imageTag=${{ github.ref_name }}" >> $GITHUB_ENV | |
fi | |
- name: Pre-build image and run make in dev container | |
uses: devcontainers/[email protected] | |
env: | |
AZURE_ENV_NAME: ${{ github.run_id }} | |
AZURE_LOCATION: ${{ env.AZURE_LOCATION }} | |
with: | |
imageName: ghcr.io/azure-samples/chat-with-your-data-solution-accelerator | |
cacheFrom: ghcr.io/azure-samples/chat-with-your-data-solution-accelerator | |
imageTag: ${{ env.imageTag }} | |
runCmd: make ci && make deploy | |
refFilterForPush: refs/heads/${{ github.event_name == 'schedule' && 'main' || github.ref_name }} | |
env: | | |
AZURE_CLIENT_ID | |
AZURE_CLIENT_SECRET | |
AZURE_TENANT_ID | |
AZURE_SUBSCRIPTION_ID | |
AZURE_ENV_NAME | |
AZURE_LOCATION | |
- name: Tidy up | |
uses: devcontainers/[email protected] | |
if: always() | |
env: | |
AZURE_ENV_NAME: ${{ github.run_id }} | |
AZURE_LOCATION: ${{ vars.AZURE_LOCATION }} | |
with: | |
push: never | |
imageName: ghcr.io/azure-samples/chat-with-your-data-solution-accelerator | |
imageTag: ${{ env.imageTag }} | |
runCmd: make destroy | |
env: | | |
AZURE_CLIENT_ID | |
AZURE_CLIENT_SECRET | |
AZURE_TENANT_ID | |
AZURE_SUBSCRIPTION_ID | |
AZURE_ENV_NAME | |
AZURE_LOCATION | |
- name: Send Notification on Failure | |
if: failure() | |
run: | | |
RUN_URL="https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}" | |
# Construct the email body | |
EMAIL_BODY=$(cat <<EOF | |
{ | |
"body": "<p>Dear Team,</p><p>We would like to inform you that the CWYD Automation process has encountered an issue and has failed to complete successfully.</p><p><strong>Build URL:</strong> ${RUN_URL}<br> ${OUTPUT}</p><p>Please investigate the matter at your earliest convenience.</p><p>Best regards,<br>Your Automation Team</p>" | |
} | |
EOF | |
) | |
# Send the notification | |
curl -X POST "${{ secrets.LOGIC_APP_URL }}" \ | |
-H "Content-Type: application/json" \ | |
-d "$EMAIL_BODY" || echo "Failed to send notification" |