service-teams-browser-bot/.github/workflows/build-deploy.yml
2026-05-12 23:44:24 +02:00

111 lines
4 KiB
YAML

name: Build and Deploy to ACR
on:
push:
branches:
- main
workflow_dispatch:
env:
IMAGE_NAME: teams-browser-bot
RESOURCE_GROUP: resource-core
CONTAINER_APP_NAME: cae-poweron-shared
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v5
- name: Log in to Azure Container Registry
uses: docker/login-action@v4
with:
registry: ${{ secrets.ACR_LOGIN_SERVER }}
username: ${{ secrets.ACR_USERNAME }}
password: ${{ secrets.ACR_PASSWORD }}
- name: Build and push Docker image
uses: docker/build-push-action@v6
with:
context: .
push: true
tags: |
${{ secrets.ACR_LOGIN_SERVER }}/${{ env.IMAGE_NAME }}:latest
${{ secrets.ACR_LOGIN_SERVER }}/${{ env.IMAGE_NAME }}:${{ github.sha }}
- name: Azure Login
uses: azure/login@v3
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
- name: Deploy to Container App
uses: azure/cli@v2
with:
azcliversion: latest
inlineScript: |
SUFFIX=$(echo "${{ github.sha }}" | cut -c1-8)
# Update image AND ensure minReplicas=1 so the container actually starts.
# Without --min-replicas 1, Azure scales to zero and the bot never boots.
az containerapp update \
--name ${{ env.CONTAINER_APP_NAME }} \
--resource-group ${{ env.RESOURCE_GROUP }} \
--image ${{ secrets.ACR_LOGIN_SERVER }}/${{ env.IMAGE_NAME }}:${{ github.sha }} \
--revision-suffix "deploy-${SUFFIX}" \
--min-replicas 1 \
--max-replicas 1
- name: Verify deployment
uses: azure/cli@v2
with:
azcliversion: latest
inlineScript: |
sleep 15
# Get the revision we just deployed (sorted by creation date, newest first)
EXPECTED_SUFFIX="deploy-$(echo "${{ github.sha }}" | cut -c1-8)"
LATEST_REVISION=$(az containerapp revision list \
--name ${{ env.CONTAINER_APP_NAME }} \
--resource-group ${{ env.RESOURCE_GROUP }} \
--query "sort_by(@, &properties.createdTime) | [-1].name" -o tsv)
echo "Latest revision: $LATEST_REVISION"
# Check provisioning state
STATE=$(az containerapp revision show \
--name ${{ env.CONTAINER_APP_NAME }} \
--resource-group ${{ env.RESOURCE_GROUP }} \
--revision "$LATEST_REVISION" \
--query "properties.runningState" -o tsv 2>/dev/null || echo "unknown")
echo "Revision state: $STATE"
# Activate revision if not running, then restart
if [ "$STATE" != "Running" ]; then
echo "Revision not running yet, activating..."
az containerapp revision activate \
--name ${{ env.CONTAINER_APP_NAME }} \
--resource-group ${{ env.RESOURCE_GROUP }} \
--revision "$LATEST_REVISION" || true
sleep 5
fi
az containerapp revision restart \
--name ${{ env.CONTAINER_APP_NAME }} \
--resource-group ${{ env.RESOURCE_GROUP }} \
--revision "$LATEST_REVISION" || true
# Final status check
sleep 10
REPLICAS=$(az containerapp revision show \
--name ${{ env.CONTAINER_APP_NAME }} \
--resource-group ${{ env.RESOURCE_GROUP }} \
--revision "$LATEST_REVISION" \
--query "properties.replicas" -o tsv 2>/dev/null || echo "0")
echo "Running replicas: $REPLICAS"
- name: Summary
run: |
echo "### Deployed successfully! :rocket:" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "Image: \`${{ secrets.ACR_LOGIN_SERVER }}/${{ env.IMAGE_NAME }}:${{ github.sha }}\`" >> $GITHUB_STEP_SUMMARY