@@ -167,63 +167,166 @@ jobs:
167167 }
168168
169169 # Deploy using azd up
170- azd up --no-prompt
171-
172- Write-Host "✅ Deployment succeeded."
170+ Write-Host "Starting deployment with azd up..."
171+ try {
172+ azd up --no-prompt
173+ if ($LASTEXITCODE -ne 0) {
174+ Write-Host "❌ Deployment failed with exit code: $LASTEXITCODE"
175+ exit 1
176+ }
177+ Write-Host "✅ Deployment succeeded."
178+ } catch {
179+ Write-Host "❌ Deployment failed with error: $($_.Exception.Message)"
180+ exit 1
181+ }
173182
174183 # Get deployment outputs using azd
175184 Write-Host "Extracting deployment outputs..."
176185 $DEPLOY_OUTPUT = azd env get-values --output json | ConvertFrom-Json
177186 Write-Host "Deployment output: $($DEPLOY_OUTPUT | ConvertTo-Json -Depth 10)"
178187
179188 if (-not $DEPLOY_OUTPUT) {
180- Write-Host "Error: Deployment output is empty. Please check the deployment logs."
189+ Write-Host "❌ Error: Deployment output is empty. Please check the deployment logs."
181190 exit 1
182191 }
183192
184-
185- $AI_FOUNDRY_RESOURCE_ID = $DEPLOY_OUTPUT.AI_FOUNDRY_RESOURCE_ID
186- "AI_FOUNDRY_RESOURCE_ID=$AI_FOUNDRY_RESOURCE_ID" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
187-
188- $AI_SEARCH_SERVICE_NAME = $DEPLOY_OUTPUT.AI_SEARCH_SERVICE_NAME
189- "AI_SEARCH_SERVICE_NAME=$AI_SEARCH_SERVICE_NAME" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
190-
191- $AZURE_COSMOSDB_ACCOUNT = $DEPLOY_OUTPUT.AZURE_COSMOSDB_ACCOUNT
192- "AZURE_COSMOSDB_ACCOUNT=$AZURE_COSMOSDB_ACCOUNT" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
193-
194- $STORAGE_ACCOUNT_NAME = $DEPLOY_OUTPUT.STORAGE_ACCOUNT_NAME
195- "STORAGE_ACCOUNT_NAME=$STORAGE_ACCOUNT_NAME" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
196-
197- $STORAGE_CONTAINER_NAME = $DEPLOY_OUTPUT.STORAGE_CONTAINER_NAME
198- "STORAGE_CONTAINER_NAME=$STORAGE_CONTAINER_NAME" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
199-
200- $KEY_VAULT_NAME = $DEPLOY_OUTPUT.KEY_VAULT_NAME
201- "KEY_VAULT_NAME=$KEY_VAULT_NAME" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
202-
203- $RESOURCE_GROUP_NAME = $DEPLOY_OUTPUT.RESOURCE_GROUP_NAME
204- "RESOURCE_GROUP_NAME=$RESOURCE_GROUP_NAME" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
205-
206- $WEB_APP_URL = $DEPLOY_OUTPUT.WEB_APP_URL
207- Write-Host "WEB_APP_URL extracted: $WEB_APP_URL"
193+ # Save all deployment outputs to GITHUB_ENV
194+ Write-Host "Saving deployment outputs to environment variables..."
195+ "RESOURCE_GROUP_NAME=$($DEPLOY_OUTPUT.RESOURCE_GROUP_NAME)" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
196+ "AZURE_RESOURCE_GROUP_ID=$($DEPLOY_OUTPUT.AZURE_RESOURCE_GROUP_ID)" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
197+ "STORAGE_ACCOUNT_NAME=$($DEPLOY_OUTPUT.STORAGE_ACCOUNT_NAME)" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
198+ "AZURE_SEARCH_SERVICE_NAME=$($DEPLOY_OUTPUT.AZURE_SEARCH_SERVICE_NAME)" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
199+ "AZURE_AKS_NAME=$($DEPLOY_OUTPUT.AZURE_AKS_NAME)" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
200+ "AZURE_AKS_MI_ID=$($DEPLOY_OUTPUT.AZURE_AKS_MI_ID)" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
201+ "AZURE_CONTAINER_REGISTRY_NAME=$($DEPLOY_OUTPUT.AZURE_CONTAINER_REGISTRY_NAME)" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
202+ "AZURE_COGNITIVE_SERVICE_NAME=$($DEPLOY_OUTPUT.AZURE_COGNITIVE_SERVICE_NAME)" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
203+ "AZURE_COGNITIVE_SERVICE_ENDPOINT=$($DEPLOY_OUTPUT.AZURE_COGNITIVE_SERVICE_ENDPOINT)" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
204+ "AZURE_OPENAI_SERVICE_NAME=$($DEPLOY_OUTPUT.AZURE_OPENAI_SERVICE_NAME)" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
205+ "AZURE_OPENAI_SERVICE_ENDPOINT=$($DEPLOY_OUTPUT.AZURE_OPENAI_SERVICE_ENDPOINT)" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
206+ "AZURE_COSMOSDB_NAME=$($DEPLOY_OUTPUT.AZURE_COSMOSDB_NAME)" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
207+ "AZ_GPT4O_MODEL_NAME=$($DEPLOY_OUTPUT.AZ_GPT4O_MODEL_NAME)" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
208+ "AZ_GPT4O_MODEL_ID=$($DEPLOY_OUTPUT.AZ_GPT4O_MODEL_ID)" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
209+ "AZ_GPT_EMBEDDING_MODEL_NAME=$($DEPLOY_OUTPUT.AZ_GPT_EMBEDDING_MODEL_NAME)" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
210+ "AZ_GPT_EMBEDDING_MODEL_ID=$($DEPLOY_OUTPUT.AZ_GPT_EMBEDDING_MODEL_ID)" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
211+ "AZURE_APP_CONFIG_ENDPOINT=$($DEPLOY_OUTPUT.AZURE_APP_CONFIG_ENDPOINT)" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
212+ "AZURE_APP_CONFIG_NAME=$($DEPLOY_OUTPUT.AZURE_APP_CONFIG_NAME)" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
213+
214+ # Get AKS managed resource group (node resource group)
215+ Write-Host "Retrieving AKS managed resource group..."
216+ $AKS_NAME = $DEPLOY_OUTPUT.AZURE_AKS_NAME
217+ $RESOURCE_GROUP = $DEPLOY_OUTPUT.RESOURCE_GROUP_NAME
218+ $AKS_NODE_RG = az aks show --name $AKS_NAME --resource-group $RESOURCE_GROUP --query "nodeResourceGroup" -o tsv
219+ Write-Host "AKS node resource group: $AKS_NODE_RG"
220+ "krg_name=$AKS_NODE_RG" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
221+
222+ # Get Web App URL from AKS public IP
223+ Write-Host "Retrieving Web App URL from AKS..."
224+ $PUBLIC_IP_NAME = az network public-ip list --resource-group $AKS_NODE_RG --query "[?contains(name, 'kubernetes-')].name" -o tsv | Select-Object -First 1
225+
226+ if ([string]::IsNullOrWhiteSpace($PUBLIC_IP_NAME)) {
227+ Write-Host "❌ Error: Could not find public IP in resource group $AKS_NODE_RG"
228+ exit 1
229+ }
208230
209- if ([string]::IsNullOrWhiteSpace($WEB_APP_URL)) {
210- Write-Host "❌ Error: WEB_APP_URL is empty or not found in deployment output."
211- Write-Host "Available output keys: $($DEPLOY_OUTPUT.PSObject.Properties.Name -join ', ')"
231+ Write-Host "Found public IP: $PUBLIC_IP_NAME"
232+ $FQDN = az network public-ip show --resource-group $AKS_NODE_RG --name $PUBLIC_IP_NAME --query "dnsSettings.fqdn" -o tsv
233+
234+ if ([string]::IsNullOrWhiteSpace($FQDN)) {
235+ Write-Host "❌ Error: Could not retrieve FQDN for public IP $PUBLIC_IP_NAME"
212236 exit 1
213237 }
214238
239+ $WEB_APP_URL = "https://$FQDN"
240+ Write-Host "Web App URL: $WEB_APP_URL"
241+
215242 "WEB_APPURL=$WEB_APP_URL" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
216243 "WEB_APPURL=$WEB_APP_URL" | Out-File -FilePath $env:GITHUB_OUTPUT -Encoding utf8 -Append
217244
218- - name : Run Post-Deployment Script
219- id : post_deploy
245+ - name : Run Deployment Script with Input
246+ shell : pwsh
247+ run : |
248+ cd Deployment
249+ $input = @"
250+ ${{ secrets.EMAIL }}
251+ yes
252+ "@
253+ $input | pwsh ./resourcedeployment.ps1
254+ Write-Host "Resource Group Name is ${{ env.RESOURCE_GROUP_NAME }}"
255+ Write-Host "Kubernetes resource group is ${{ env.AZURE_AKS_NAME }}"
256+ env :
257+ # From GitHub secrets (for login)
258+ AZURE_SUBSCRIPTION_ID : ${{ secrets.AZURE_SUBSCRIPTION_ID }}
259+ AZURE_TENANT_ID : ${{ secrets.AZURE_TENANT_ID }}
260+ AZURE_CLIENT_ID : ${{ secrets.AZURE_CLIENT_ID }}
261+ AZURE_CLIENT_SECRET : ${{ secrets.AZURE_CLIENT_SECRET }}
262+
263+ # From deployment outputs step (these come from $GITHUB_ENV)
264+ RESOURCE_GROUP_NAME : ${{ env.RESOURCE_GROUP_NAME }}
265+ AZURE_RESOURCE_GROUP_ID : ${{ env.AZURE_RESOURCE_GROUP_ID }}
266+ STORAGE_ACCOUNT_NAME : ${{ env.STORAGE_ACCOUNT_NAME }}
267+ AZURE_SEARCH_SERVICE_NAME : ${{ env.AZURE_SEARCH_SERVICE_NAME }}
268+ AZURE_AKS_NAME : ${{ env.AZURE_AKS_NAME }}
269+ AZURE_AKS_MI_ID : ${{ env.AZURE_AKS_MI_ID }}
270+ AZURE_CONTAINER_REGISTRY_NAME : ${{ env.AZURE_CONTAINER_REGISTRY_NAME }}
271+ AZURE_COGNITIVE_SERVICE_NAME : ${{ env.AZURE_COGNITIVE_SERVICE_NAME }}
272+ AZURE_COGNITIVE_SERVICE_ENDPOINT : ${{ env.AZURE_COGNITIVE_SERVICE_ENDPOINT }}
273+ AZURE_OPENAI_SERVICE_NAME : ${{ env.AZURE_OPENAI_SERVICE_NAME }}
274+ AZURE_OPENAI_SERVICE_ENDPOINT : ${{ env.AZURE_OPENAI_SERVICE_ENDPOINT }}
275+ AZURE_COSMOSDB_NAME : ${{ env.AZURE_COSMOSDB_NAME }}
276+ AZ_GPT4O_MODEL_NAME : ${{ env.AZ_GPT4O_MODEL_NAME }}
277+ AZ_GPT4O_MODEL_ID : ${{ env.AZ_GPT4O_MODEL_ID }}
278+ AZ_GPT_EMBEDDING_MODEL_NAME : ${{ env.AZ_GPT_EMBEDDING_MODEL_NAME }}
279+ AZ_GPT_EMBEDDING_MODEL_ID : ${{ env.AZ_GPT_EMBEDDING_MODEL_ID }}
280+ AZURE_APP_CONFIG_ENDPOINT : ${{ env.AZURE_APP_CONFIG_ENDPOINT }}
281+ AZURE_APP_CONFIG_NAME : ${{ env.AZURE_APP_CONFIG_NAME }}
282+
283+ - name : Validate Deployment
284+ shell : bash
285+ run : |
286+ webapp_url="${{ env.WEB_APPURL }}"
287+ echo "Validating web app at: $webapp_url"
288+
289+ # Enhanced health check with retry logic
290+ max_attempts=7
291+ attempt=1
292+ success=false
293+
294+ while [ $attempt -le $max_attempts ] && [ "$success" = false ]; do
295+ echo "Attempt $attempt/$max_attempts: Checking web app health..."
296+
297+ # Check if web app responds
298+ http_code=$(curl -s -o /dev/null -w "%{http_code}" "$webapp_url" || echo "000")
299+
300+ if [ "$http_code" -eq 200 ]; then
301+ echo "✅ Web app is healthy (HTTP $http_code)"
302+ success=true
303+ elif [ "$http_code" -eq 404 ]; then
304+ echo "❌ Web app not found (HTTP 404)"
305+ break
306+ elif [ "$http_code" -eq 503 ] || [ "$http_code" -eq 502 ]; then
307+ echo "⚠️ Web app temporarily unavailable (HTTP $http_code), retrying..."
308+ sleep 20
309+ else
310+ echo "⚠️ Web app returned HTTP $http_code, retrying..."
311+ sleep 20
312+ fi
313+
314+ attempt=$((attempt + 1))
315+ done
316+
317+ if [ "$success" = false ]; then
318+ echo "❌ Web app validation failed after $max_attempts attempts"
319+ exit 1
320+ fi
321+
322+ - name : Run Post Deployment Script
220323 shell : pwsh
221324 run : |
222325 Write-Host "Running post deployment script to upload files..."
223- Write-Host "WEB_APPURL value : $env:WEB_APPURL"
326+ Write-Host "WEB_APPURL: $env:WEB_APPURL"
224327
225328 if ([string]::IsNullOrWhiteSpace($env:WEB_APPURL)) {
226- Write-Host "❌ Error: WEB_APPURL environment variable is empty. "
329+ Write-Host "❌ Error: WEB_APPURL is empty"
227330 exit 1
228331 }
229332
0 commit comments