@@ -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