Skip to content

Commit 41abc9e

Browse files
added quota check file
1 parent 0d34f2f commit 41abc9e

2 files changed

Lines changed: 96 additions & 0 deletions

File tree

.github/workflows/deploy.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,12 @@ jobs:
4343
- name: Run Quota Check
4444
id: quota-check
4545
run: |
46+
export AZURE_CLIENT_ID=${{ secrets.AZURE_CLIENT_ID }}
47+
export AZURE_TENANT_ID=${{ secrets.AZURE_TENANT_ID }}
48+
export AZURE_CLIENT_SECRET=${{ secrets.AZURE_CLIENT_SECRET }}
49+
export AZURE_SUBSCRIPTION_ID="${{ secrets.AZURE_SUBSCRIPTION_ID }}"
50+
export GPT_MIN_CAPACITY="${{ env.GPT_MIN_CAPACITY }}"
51+
export AZURE_REGIONS="${{ env.RESOURCE_GROUP_NAME }}"
4652
chmod +x scripts/checkquota.sh
4753
if ! scripts/checkquota.sh; then
4854
# If quota check fails due to insufficient quota, set the flag

scripts/checkquota.sh

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
#!/bin/bash
2+
3+
# List of Azure regions to check for quota (update as needed)
4+
IFS=', ' read -ra REGIONS <<< "$AZURE_REGIONS"
5+
6+
SUBSCRIPTION_ID="${AZURE_SUBSCRIPTION_ID}"
7+
GPT_MIN_CAPACITY="${GPT_MIN_CAPACITY}"
8+
AZURE_CLIENT_ID="${AZURE_CLIENT_ID}"
9+
AZURE_TENANT_ID="${AZURE_TENANT_ID}"
10+
AZURE_CLIENT_SECRET="${AZURE_CLIENT_SECRET}"
11+
12+
# Authenticate using Managed Identity
13+
echo "Authentication using Managed Identity..."
14+
if ! az login --service-principal -u "$AZURE_CLIENT_ID" -p "$AZURE_CLIENT_SECRET" --tenant "$AZURE_TENANT_ID"; then
15+
echo "❌ Error: Failed to login using Managed Identity."
16+
exit 1
17+
fi
18+
19+
echo "🔄 Setting Azure subscription..."
20+
if ! az account set --subscription "$SUBSCRIPTION_ID"; then
21+
echo "❌ ERROR: Invalid subscription ID or insufficient permissions."
22+
exit 1
23+
fi
24+
echo "✅ Azure subscription set successfully."
25+
26+
# Define models and their minimum required capacities
27+
declare -A MIN_CAPACITY=(
28+
29+
["OpenAI.GlobalStandard.gpt4.1"]=$GPT_MIN_CAPACITY
30+
)
31+
32+
VALID_REGION=""
33+
for REGION in "${REGIONS[@]}"; do
34+
echo "----------------------------------------"
35+
echo "🔍 Checking region: $REGION"
36+
37+
QUOTA_INFO=$(az cognitiveservices usage list --location "$REGION" --output json)
38+
if [ -z "$QUOTA_INFO" ]; then
39+
echo "⚠️ WARNING: Failed to retrieve quota for region $REGION. Skipping."
40+
continue
41+
fi
42+
43+
INSUFFICIENT_QUOTA=false
44+
for MODEL in "${!MIN_CAPACITY[@]}"; do
45+
MODEL_INFO=$(echo "$QUOTA_INFO" | awk -v model="\"value\": \"$MODEL\"" '
46+
BEGIN { RS="},"; FS="," }
47+
$0 ~ model { print $0 }
48+
')
49+
50+
if [ -z "$MODEL_INFO" ]; then
51+
echo "⚠️ WARNING: No quota information found for model: $MODEL in $REGION. Skipping."
52+
continue
53+
fi
54+
55+
CURRENT_VALUE=$(echo "$MODEL_INFO" | awk -F': ' '/"currentValue"/ {print $2}' | tr -d ',' | tr -d ' ')
56+
LIMIT=$(echo "$MODEL_INFO" | awk -F': ' '/"limit"/ {print $2}' | tr -d ',' | tr -d ' ')
57+
58+
CURRENT_VALUE=${CURRENT_VALUE:-0}
59+
LIMIT=${LIMIT:-0}
60+
61+
CURRENT_VALUE=$(echo "$CURRENT_VALUE" | cut -d'.' -f1)
62+
LIMIT=$(echo "$LIMIT" | cut -d'.' -f1)
63+
64+
AVAILABLE=$((LIMIT - CURRENT_VALUE))
65+
66+
echo "✅ Model: $MODEL | Used: $CURRENT_VALUE | Limit: $LIMIT | Available: $AVAILABLE"
67+
68+
if [ "$AVAILABLE" -lt "${MIN_CAPACITY[$MODEL]}" ]; then
69+
echo "❌ ERROR: $MODEL in $REGION has insufficient quota."
70+
INSUFFICIENT_QUOTA=true
71+
break
72+
fi
73+
done
74+
75+
if [ "$INSUFFICIENT_QUOTA" = false ]; then
76+
VALID_REGION="$REGION"
77+
break
78+
fi
79+
80+
done
81+
82+
if [ -z "$VALID_REGION" ]; then
83+
echo "❌ No region with sufficient quota found. Blocking deployment."
84+
echo "QUOTA_FAILED=true" >> "$GITHUB_ENV"
85+
exit 0
86+
else
87+
echo "✅ Suggested Region: $VALID_REGION"
88+
echo "VALID_REGION=$VALID_REGION" >> "$GITHUB_ENV"
89+
exit 0
90+
fi

0 commit comments

Comments
 (0)