Skip to content

Commit c874150

Browse files
Added Quotacheck for Auto Triggers as well
1 parent 9855cd9 commit c874150

2 files changed

Lines changed: 116 additions & 53 deletions

File tree

.github/workflows/deploy-ci.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,10 +40,14 @@ on:
4040
- 'australiaeast'
4141
- 'centralus'
4242
- 'eastasia'
43+
- 'eastus'
4344
- 'japaneast'
4445
- 'northeurope'
4546
- 'southeastasia'
47+
- 'swedencentral'
4648
- 'uksouth'
49+
- 'westus'
50+
- 'westus3'
4751
resource_group_name:
4852
description: 'Resource Group Name (Optional)'
4953
required: false

.github/workflows/job-deploy.yml

Lines changed: 112 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -365,30 +365,12 @@ jobs:
365365
shell: bash
366366
run: exit 1
367367

368-
- name: Set Deployment Region
369-
id: set_region
370-
shell: bash
371-
env:
372-
INPUT_AZURE_LOCATION: ${{ inputs.azure_location }}
373-
run: |
374-
echo "Selected Region from Quota Check: $VALID_REGION"
375-
echo "AZURE_ENV_OPENAI_LOCATION=$VALID_REGION" >> $GITHUB_ENV
376-
echo "AZURE_ENV_OPENAI_LOCATION=$VALID_REGION" >> $GITHUB_OUTPUT
377-
378-
if [[ "${{ inputs.trigger_type }}" == "workflow_dispatch" && -n "$INPUT_AZURE_LOCATION" ]]; then
379-
USER_SELECTED_LOCATION="$INPUT_AZURE_LOCATION"
380-
echo "Using user-selected Azure location: $USER_SELECTED_LOCATION"
381-
echo "AZURE_LOCATION=$USER_SELECTED_LOCATION" >> $GITHUB_ENV
382-
echo "AZURE_LOCATION=$USER_SELECTED_LOCATION" >> $GITHUB_OUTPUT
383-
else
384-
echo "Using location from quota check for automatic triggers: $VALID_REGION"
385-
echo "AZURE_LOCATION=$VALID_REGION" >> $GITHUB_ENV
386-
echo "AZURE_LOCATION=$VALID_REGION" >> $GITHUB_OUTPUT
387-
fi
388-
389368
- name: Check Azure Search Service Quota
390369
id: search-quota-check
391370
shell: bash
371+
env:
372+
INPUT_AZURE_LOCATION: ${{ inputs.azure_location }}
373+
TRIGGER_TYPE: ${{ inputs.trigger_type }}
392374
run: |
393375
# Determine search tier based on WAF (scalability) setting
394376
# WAF enabled → standard tier, WAF disabled → basic tier
@@ -400,48 +382,125 @@ jobs:
400382
SEARCH_TIER_DISPLAY="Basic"
401383
fi
402384
403-
echo "🔍 Checking Azure Search $SEARCH_TIER_DISPLAY tier quota in region: ${{ env.AZURE_LOCATION }}"
404-
405-
# Get current usage and limits for Azure Search in the selected region using REST API
406-
SEARCH_USAGE=$(az rest --method get \
407-
--url "https://management.azure.com/subscriptions/${{ secrets.AZURE_SUBSCRIPTION_ID }}/providers/Microsoft.Search/locations/${{ env.AZURE_LOCATION }}/usages?api-version=2024-03-01-preview" \
408-
-o json 2>/dev/null || echo '{"value":[]}')
385+
# Valid deployment regions (must match Bicep @allowed list)
386+
ALL_VALID_REGIONS=("australiaeast" "centralus" "eastasia" "eastus" "japaneast" "northeurope" "southeastasia" "swedencentral" "uksouth" "westus" "westus3")
409387
410-
if [ "$(echo "$SEARCH_USAGE" | jq '.value | length')" -eq 0 ]; then
411-
echo "⚠️ Could not retrieve Azure Search quota information. Proceeding with deployment..."
412-
echo "SEARCH_QUOTA_CHECK=skipped" >> $GITHUB_OUTPUT
388+
# Build ordered list of regions to check:
389+
# - Manual triggers: user's region first, then remaining valid regions
390+
# - Automatic triggers: all valid regions (no user preference)
391+
REGIONS_TO_CHECK=()
392+
if [[ "$TRIGGER_TYPE" == "workflow_dispatch" && -n "$INPUT_AZURE_LOCATION" ]]; then
393+
echo "📋 Manual trigger: checking user-selected region '$INPUT_AZURE_LOCATION' first"
394+
REGIONS_TO_CHECK+=("$INPUT_AZURE_LOCATION")
395+
for r in "${ALL_VALID_REGIONS[@]}"; do
396+
if [[ "$r" != "$INPUT_AZURE_LOCATION" ]]; then
397+
REGIONS_TO_CHECK+=("$r")
398+
fi
399+
done
413400
else
401+
echo "📋 Automatic trigger: checking all valid regions for search quota"
402+
REGIONS_TO_CHECK=("${ALL_VALID_REGIONS[@]}")
403+
fi
404+
405+
echo "🔍 Checking Azure Search $SEARCH_TIER_DISPLAY tier quota across regions: ${REGIONS_TO_CHECK[*]}"
406+
echo ""
407+
408+
SEARCH_VALID_REGION=""
409+
CHECKED_REGIONS=()
410+
for REGION in "${REGIONS_TO_CHECK[@]}"; do
411+
echo "----------------------------------------"
412+
echo "🔍 Checking region: $REGION"
413+
414+
SEARCH_USAGE=$(az rest --method get \
415+
--url "https://management.azure.com/subscriptions/${{ secrets.AZURE_SUBSCRIPTION_ID }}/providers/Microsoft.Search/locations/${REGION}/usages?api-version=2024-03-01-preview" \
416+
-o json 2>/dev/null || echo '{"value":[]}')
417+
418+
if [ "$(echo "$SEARCH_USAGE" | jq '.value | length')" -eq 0 ]; then
419+
echo " ⚠️ Could not retrieve Azure Search quota for $REGION. Skipping."
420+
CHECKED_REGIONS+=("$REGION: skipped")
421+
continue
422+
fi
423+
414424
TIER_USAGE=$(echo "$SEARCH_USAGE" | jq -r --arg tier "$SEARCH_TIER" '.value[] | select(.name.value == $tier) | .currentValue // 0')
415425
TIER_LIMIT=$(echo "$SEARCH_USAGE" | jq -r --arg tier "$SEARCH_TIER" '.value[] | select(.name.value == $tier) | .limit // 0')
416426
TIER_AVAILABLE=$((TIER_LIMIT - TIER_USAGE))
417427
418-
echo "Azure Search $SEARCH_TIER_DISPLAY Tier Quota for ${{ env.AZURE_LOCATION }}:"
419-
echo " Current Usage: $TIER_USAGE"
420-
echo " Limit: $TIER_LIMIT"
421-
echo " Available: $TIER_AVAILABLE"
422-
423-
if [ "$TIER_AVAILABLE" -lt 1 ]; then
424-
echo ""
425-
echo "❌ ERROR: Insufficient Azure Search $SEARCH_TIER_DISPLAY tier quota in region: ${{ env.AZURE_LOCATION }}"
426-
echo "Please select a different region."
428+
echo " $SEARCH_TIER_DISPLAY Tier: Used=$TIER_USAGE | Limit=$TIER_LIMIT | Available=$TIER_AVAILABLE"
427429
428-
# Add error to GitHub Summary
429-
echo "## ❌ Azure Search Quota Check Failed" >> $GITHUB_STEP_SUMMARY
430-
echo "" >> $GITHUB_STEP_SUMMARY
431-
echo "**Region:** \`${{ env.AZURE_LOCATION }}\`" >> $GITHUB_STEP_SUMMARY
432-
echo "" >> $GITHUB_STEP_SUMMARY
433-
echo "| Metric | Value |" >> $GITHUB_STEP_SUMMARY
434-
echo "|--------|-------|" >> $GITHUB_STEP_SUMMARY
435-
echo "| **Tier** | $SEARCH_TIER_DISPLAY |" >> $GITHUB_STEP_SUMMARY
436-
echo "| **Current Usage** | $TIER_USAGE |" >> $GITHUB_STEP_SUMMARY
437-
echo "| **Limit** | $TIER_LIMIT |" >> $GITHUB_STEP_SUMMARY
438-
echo "| **Available** | $TIER_AVAILABLE |" >> $GITHUB_STEP_SUMMARY
439-
exit 1
430+
if [ "$TIER_AVAILABLE" -ge 1 ]; then
431+
echo " ✅ Region '$REGION' has sufficient Azure Search $SEARCH_TIER_DISPLAY quota!"
432+
SEARCH_VALID_REGION="$REGION"
433+
CHECKED_REGIONS+=("$REGION: ✅ available=$TIER_AVAILABLE")
434+
break
435+
else
436+
echo " ❌ Insufficient quota in $REGION"
437+
CHECKED_REGIONS+=("$REGION: ❌ available=$TIER_AVAILABLE")
440438
fi
439+
done
440+
441+
echo ""
442+
echo "========================================"
443+
if [ -z "$SEARCH_VALID_REGION" ]; then
444+
echo "❌ No region with sufficient Azure Search $SEARCH_TIER_DISPLAY tier quota found!"
445+
echo ""
446+
echo "Regions checked:"
447+
for entry in "${CHECKED_REGIONS[@]}"; do
448+
echo " - $entry"
449+
done
450+
451+
# Add error to GitHub Summary
452+
echo "## ❌ Azure Search Quota Check Failed" >> $GITHUB_STEP_SUMMARY
453+
echo "" >> $GITHUB_STEP_SUMMARY
454+
echo "No region with sufficient Azure Search **$SEARCH_TIER_DISPLAY** tier quota was found." >> $GITHUB_STEP_SUMMARY
455+
echo "" >> $GITHUB_STEP_SUMMARY
456+
echo "| Region | Status |" >> $GITHUB_STEP_SUMMARY
457+
echo "|--------|--------|" >> $GITHUB_STEP_SUMMARY
458+
for entry in "${CHECKED_REGIONS[@]}"; do
459+
IFS=': ' read -r region status <<< "$entry"
460+
echo "| \`$region\` | $status |" >> $GITHUB_STEP_SUMMARY
461+
done
462+
exit 1
463+
fi
464+
465+
echo "✅ Selected region with Azure Search quota: $SEARCH_VALID_REGION"
466+
echo "SEARCH_VALID_REGION=$SEARCH_VALID_REGION" >> $GITHUB_ENV
467+
echo "SEARCH_VALID_REGION=$SEARCH_VALID_REGION" >> $GITHUB_OUTPUT
468+
echo "SEARCH_QUOTA_CHECK=passed" >> $GITHUB_OUTPUT
441469
470+
if [[ "$TRIGGER_TYPE" == "workflow_dispatch" && "$SEARCH_VALID_REGION" != "$INPUT_AZURE_LOCATION" ]]; then
442471
echo ""
443-
echo "✅ Azure Search $SEARCH_TIER_DISPLAY tier quota check passed."
444-
echo "SEARCH_QUOTA_CHECK=passed" >> $GITHUB_OUTPUT
472+
echo "⚠️ User-selected region '$INPUT_AZURE_LOCATION' had insufficient search quota."
473+
echo " Falling back to region: $SEARCH_VALID_REGION"
474+
fi
475+
476+
- name: Set Deployment Region
477+
id: set_region
478+
shell: bash
479+
env:
480+
INPUT_AZURE_LOCATION: ${{ inputs.azure_location }}
481+
run: |
482+
echo "Selected Region from OpenAI Quota Check: $VALID_REGION"
483+
echo "Selected Region from Search Quota Check: $SEARCH_VALID_REGION"
484+
echo "AZURE_ENV_OPENAI_LOCATION=$VALID_REGION" >> $GITHUB_ENV
485+
echo "AZURE_ENV_OPENAI_LOCATION=$VALID_REGION" >> $GITHUB_OUTPUT
486+
487+
if [[ "${{ inputs.trigger_type }}" == "workflow_dispatch" && -n "$INPUT_AZURE_LOCATION" ]]; then
488+
# Manual trigger: use user's region if it passed search quota, otherwise use search-validated region
489+
if [[ "$INPUT_AZURE_LOCATION" == "$SEARCH_VALID_REGION" ]]; then
490+
echo "✅ Using user-selected Azure location (search quota verified): $INPUT_AZURE_LOCATION"
491+
echo "AZURE_LOCATION=$INPUT_AZURE_LOCATION" >> $GITHUB_ENV
492+
echo "AZURE_LOCATION=$INPUT_AZURE_LOCATION" >> $GITHUB_OUTPUT
493+
else
494+
echo "⚠️ User-selected region '$INPUT_AZURE_LOCATION' had insufficient search quota."
495+
echo " Using fallback region from search quota check: $SEARCH_VALID_REGION"
496+
echo "AZURE_LOCATION=$SEARCH_VALID_REGION" >> $GITHUB_ENV
497+
echo "AZURE_LOCATION=$SEARCH_VALID_REGION" >> $GITHUB_OUTPUT
498+
fi
499+
else
500+
# Automatic trigger: use the search-quota-validated region
501+
echo "Using region from search quota check for automatic triggers: $SEARCH_VALID_REGION"
502+
echo "AZURE_LOCATION=$SEARCH_VALID_REGION" >> $GITHUB_ENV
503+
echo "AZURE_LOCATION=$SEARCH_VALID_REGION" >> $GITHUB_OUTPUT
445504
fi
446505
447506
- name: Generate Resource Group Name

0 commit comments

Comments
 (0)