Skip to content

inbound calls

inbound calls #40

Workflow file for this run

name: Deploy to Azure
on:
push:
branches:
- main
workflow_dispatch:
inputs:
environment:
description: 'Deployment environment'
required: true
default: 'production'
type: choice
options:
- production
- staging
env:
RESOURCE_GROUP: aylin-rg
LOCATION: germanywestcentral
ACR_NAME: aylinacr
AKS_CLUSTER_NAME: aylin-aks-cluster
NAMESPACE: aylin
jobs:
build-and-deploy:
name: Build and Deploy to Azure
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.12'
- name: Install UV
run: pip install uv
- name: Install backend dependencies
working-directory: apps/backend
run: npm ci
- name: Install frontend dependencies
working-directory: apps/frontend
run: npm ci
- name: Run backend tests
working-directory: apps/backend
run: npm test || true
- name: Run agent tests
working-directory: apps/agent
run: |
uv sync
uv run pytest || true
- name: Build backend
working-directory: apps/backend
run: npm run build
- name: Build frontend
working-directory: apps/frontend
run: npm run build
- name: Login to Azure
uses: azure/login@v1
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
- name: Login to Azure Container Registry
run: |
az acr login --name ${{ env.ACR_NAME }}
- name: Get ACR login server and credentials
id: acr
run: |
ACR_LOGIN_SERVER=$(az acr show --name ${{ env.ACR_NAME }} --query loginServer -o tsv)
echo "login_server=$ACR_LOGIN_SERVER" >> $GITHUB_OUTPUT
echo "ACR Login Server: $ACR_LOGIN_SERVER"
# Enable admin user and get credentials
az acr update --name ${{ env.ACR_NAME }} --admin-enabled true
ACR_USERNAME=$(az acr credential show --name ${{ env.ACR_NAME }} --query username -o tsv)
ACR_PASSWORD=$(az acr credential show --name ${{ env.ACR_NAME }} --query passwords[0].value -o tsv)
echo "username=$ACR_USERNAME" >> $GITHUB_OUTPUT
echo "password=$ACR_PASSWORD" >> $GITHUB_OUTPUT
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Build and push Docker images
env:
ACR_LOGIN_SERVER: ${{ steps.acr.outputs.login_server }}
VERSION_TAG: ${{ github.sha }}
run: |
echo "Building and pushing images with tag: $VERSION_TAG for ARM64"
# Build and push frontend
# VITE_API_URL is empty - frontend uses relative URLs (/api) via ingress
echo "Building frontend for ARM64..."
docker buildx build \
--platform linux/arm64 \
-f apps/frontend/Dockerfile \
--build-arg VITE_GOOGLE_CLIENT_ID="${{ secrets.VITE_GOOGLE_CLIENT_ID }}" \
--build-arg VITE_API_URL="" \
-t $ACR_LOGIN_SERVER/aylin-frontend:$VERSION_TAG \
-t $ACR_LOGIN_SERVER/aylin-frontend:latest \
--push \
./apps/frontend
# Build and push backend
echo "Building backend for ARM64..."
docker buildx build \
--platform linux/arm64 \
-f apps/backend/Dockerfile \
-t $ACR_LOGIN_SERVER/aylin-backend:$VERSION_TAG \
-t $ACR_LOGIN_SERVER/aylin-backend:latest \
--push \
./apps/backend
# Build and push Python agent worker
echo "Building agent worker for ARM64..."
docker buildx build \
--platform linux/arm64 \
-f apps/agent/Dockerfile \
-t $ACR_LOGIN_SERVER/aylin-agent-worker:$VERSION_TAG \
-t $ACR_LOGIN_SERVER/aylin-agent-worker:latest \
--push \
./apps/agent
echo "All ARM64 images built and pushed successfully!"
- name: Set up kubectl
uses: azure/setup-kubectl@v3
with:
version: 'latest'
- name: Get AKS credentials
run: |
az aks get-credentials \
--resource-group ${{ env.RESOURCE_GROUP }} \
--name ${{ env.AKS_CLUSTER_NAME }} \
--overwrite-existing
- name: Deploy to Kubernetes
env:
ACR_LOGIN_SERVER: ${{ steps.acr.outputs.login_server }}
VERSION_TAG: ${{ github.sha }}
run: |
echo "Deploying to Kubernetes..."
# Replace variables in manifests and apply
for manifest in azure-deploy/k8s/backend.yaml azure-deploy/k8s/agent-worker.yaml azure-deploy/k8s/frontend.yaml; do
echo "Applying $manifest..."
cat $manifest | \
sed "s|\${ACR_LOGIN_SERVER}|$ACR_LOGIN_SERVER|g" | \
sed "s|\${VERSION_TAG}|$VERSION_TAG|g" | \
kubectl apply -f -
done
echo "Deployment to Kubernetes completed!"
- name: Wait for deployments
run: |
echo "Waiting for deployments to be ready..."
kubectl wait --for=condition=available --timeout=300s \
deployment/backend deployment/frontend deployment/agent-worker \
-n ${{ env.NAMESPACE }} || true
- name: Verify deployment
run: |
echo "Verifying deployment..."
echo "Pod status:"
kubectl get pods -n ${{ env.NAMESPACE }}
echo ""
echo "Service status:"
kubectl get svc -n ${{ env.NAMESPACE }}
echo ""
echo "Deployment status:"
kubectl get deployments -n ${{ env.NAMESPACE }}
# Check backend pod logs for startup
echo ""
echo "Checking backend pod logs for startup..."
kubectl logs -n ${{ env.NAMESPACE }} -l app=backend --tail=20 || true
- name: Deployment summary
if: always()
run: |
echo "========================================="
echo "Deployment Summary"
echo "========================================="
echo "Resource Group: ${{ env.RESOURCE_GROUP }}"
echo "Cluster: ${{ env.AKS_CLUSTER_NAME }}"
echo "Namespace: ${{ env.NAMESPACE }}"
echo "Version: ${{ github.sha }}"
echo ""
echo "View resources:"
echo " kubectl get all -n ${{ env.NAMESPACE }}"
echo ""
echo "View logs:"
echo " Backend: kubectl logs -n ${{ env.NAMESPACE }} -l app=backend -f"
echo " Frontend: kubectl logs -n ${{ env.NAMESPACE }} -l app=frontend -f"
echo " Agent Worker: kubectl logs -n ${{ env.NAMESPACE }} -l app=agent-worker -f"
echo ""
echo "Get pod status:"
echo " kubectl get pods -n ${{ env.NAMESPACE }}"