Skip to content

Code deploy

Code deploy #293

Workflow file for this run

name: Code deploy
on:
pull_request:
types: [closed]
branches: ["main", "main-*"]
paths: ["code/**", ".github/workflows/code**"]
workflow_dispatch:
inputs:
BASELINE:
description: "Baseline branch"
required: true
default: "main"
ENVIRONMENT:
description: "Deploy environment"
required: true
type: choice
options:
- azure-develop
- azure-pro
default: "azure-develop"
permissions:
id-token: write
contents: read
jobs:
deploy:
name: Deploy to Container Apps
runs-on: ubuntu-24.04
environment: ${{ github.event.inputs.ENVIRONMENT && github.event.inputs.ENVIRONMENT || 'azure-develop' }}
env:
AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }}
AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }}
AZURE_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
AZURE_ACR_USERNAME: ${{ secrets.AZURE_ACR_USERNAME }}
AZURE_ACR_NAME: ${{ vars.AZURE_ACR_NAME }}
AZURE_RESOURCE_GROUP: ${{ vars.AZURE_RESOURCE_GROUP }}
AZURE_CONTAINER_NAME: "backend"
AZURE_WEB_PUBSUB_ENDPOINT: ${{ vars.AZURE_WEB_PUBSUB_ENDPOINT }}
AZURE_WEB_PUBSUB_VALID_ORIGIN: ${{ vars.AZURE_WEB_PUBSUB_VALID_ORIGIN }}
AZURE_WEB_PUBSUB_HUB_NAME: ${{ vars.AZURE_WEB_PUBSUB_HUB_NAME }}
AZURE_STORAGE_ACCOUNT_NAME: ${{ vars.AZURE_STORAGE_ACCOUNT_NAME }}
AZURE_STORAGE_ROOMS_CONTAINER_NAME: ${{ vars.AZURE_STORAGE_ROOMS_CONTAINER_NAME }}
AZURE_STORAGE_IMAGES_CONTAINER_NAME: ${{ vars.AZURE_STORAGE_IMAGES_CONTAINER_NAME }}
AZURE_CS_ENDPOINT: ${{ vars.AZURE_CS_ENDPOINT }}
AZURE_CS_TIMEOUT_SECS: ${{ vars.AZURE_CS_TIMEOUT_SECS }}
PERSIST_FREQUENCY_SEG: ${{ vars.PERSIST_FREQUENCY_SEG }}
AZURE_LOG_LEVEL: ${{ vars.AZURE_LOG_LEVEL }}
AZURE_DATABASE_HOST: ${{ vars.AZURE_DATABASE_HOST }}
AZURE_DATABASE_PORT: ${{ vars.AZURE_DATABASE_PORT }}
AZURE_DATABASE_NAME: ${{ vars.AZURE_DATABASE_NAME }}
AZURE_DATABASE_USERNAME: ${{ secrets.AZURE_DATABASE_USERNAME }}
AZURE_DATABASE_SSL: ${{ vars.AZURE_DATABASE_SSL }}
AZURE_DATABASE_CLOUD_CREDENTIALS: ${{ vars.AZURE_DATABASE_CLOUD_CREDENTIALS }}
AZURE_DATABASE_FORCE_SYNC: ${{ vars.AZURE_DATABASE_FORCE_SYNC }}
FEATURE_WORKLOADS: ${{ vars.FEATURE_WORKLOADS }}
FEATURE_THREADS: ${{ vars.FEATURE_THREADS }}
LITELLM_ENDPOINT: ${{ vars.LITELLM_ENDPOINT }}
LITELLM_API_KEY: ${{ secrets.LITELLM_API_KEY }}
LOG_LEVEL: ${{ vars.LOG_LEVEL }}
AZURE_CS_API_KEY: ${{ secrets.AZURE_CS_API_KEY }}
AI_PASSWORD: ${{ secrets.AI_PASSWORD }}
steps:
- name: Get input parameters
run: |
BASELINE_BRANCH=${{ github.event.inputs.BASELINE || 'main' }}
echo "BASELINE_BRANCH=${BASELINE_BRANCH#refs/heads/}" >> "$GITHUB_ENV"
- name: Checkout merge commit
uses: actions/checkout@v4
with:
ref: ${{ env.BASELINE_BRANCH }}
fetch-depth: 0
persist-credentials: false
- name: Create .env.production file
working-directory: code
run: |
touch .env
echo AZURE_WEB_PUBSUB_ENDPOINT=${{ env.AZURE_WEB_PUBSUB_ENDPOINT }} >> .env
echo AZURE_WEB_PUBSUB_HUB_NAME=${{ env.AZURE_WEB_PUBSUB_HUB_NAME }} >> .env
echo AZURE_WEB_PUBSUB_VALID_ORIGIN=${{ env.AZURE_WEB_PUBSUB_VALID_ORIGIN }} >> .env
echo AZURE_STORAGE_ACCOUNT_NAME="${{ env.AZURE_STORAGE_ACCOUNT_NAME }}" >> .env
echo AZURE_STORAGE_ROOMS_CONTAINER_NAME=${{ env.AZURE_STORAGE_ROOMS_CONTAINER_NAME }} >> .env
echo AZURE_STORAGE_IMAGES_CONTAINER_NAME=${{ env.AZURE_STORAGE_IMAGES_CONTAINER_NAME }} >> .env
echo PERSIST_FREQUENCY_SEG=${{ env.PERSIST_FREQUENCY_SEG }} >> .env
echo AI_PASSWORD=${{ env.AI_PASSWORD }} >> .env
echo AZURE_CS_ENDPOINT=${{ env.AZURE_CS_ENDPOINT }} >> .env
echo AZURE_CS_API_KEY=${{ env.AZURE_CS_API_KEY }} >> .env
echo AZURE_CS_TIMEOUT_SECS=${{ env.AZURE_CS_TIMEOUT_SECS }} >> .env
echo AZURE_LOG_LEVEL=${{ env.AZURE_LOG_LEVEL }} >> .env
echo DATABASE_HOST=${{ env.AZURE_DATABASE_HOST }} >> .env
echo DATABASE_PORT=${{ env.AZURE_DATABASE_PORT }} >> .env
echo DATABASE_NAME=${{ env.AZURE_DATABASE_NAME }} >> .env
echo DATABASE_USERNAME=${{ env.AZURE_DATABASE_USERNAME }} >> .env
echo DATABASE_SSL=${{ env.AZURE_DATABASE_SSL }} >> .env
echo DATABASE_CLOUD_CREDENTIALS=${{ env.AZURE_DATABASE_CLOUD_CREDENTIALS }} >> .env
echo DATABASE_FORCE_SYNC=${{ env.AZURE_DATABASE_FORCE_SYNC }} >> .env
echo FEATURE_WORKLOADS=${{ env.FEATURE_WORKLOADS }} >> .env
echo FEATURE_THREADS=${{ env.FEATURE_THREADS }} >> .env
echo LITELLM_ENDPOINT=${{ env.LITELLM_ENDPOINT }} >> .env
echo LITELLM_API_KEY=${{ env.LITELLM_API_KEY }} >> .env
echo LOG_LEVEL=${{ env.AZURE_LOG_LEVEL }} >> .env
- name: Azure Login
uses: azure/login@v2
with:
client-id: ${{ env.AZURE_CLIENT_ID }}
tenant-id: ${{ env.AZURE_TENANT_ID }}
subscription-id: ${{ env.AZURE_SUBSCRIPTION_ID }}
- name: ACR Login
run: |
ACR_PASSWORD=$(az acr login --name ${{ env.AZURE_ACR_NAME }} --expose-token --output tsv --query accessToken)
echo "AZURE_ACR_PASSWORD=$(echo $ACR_PASSWORD)" >> $GITHUB_ENV
- name: ACR Login
uses: docker/login-action@v3
with:
registry: ${{ env.AZURE_ACR_NAME }}.azurecr.io
username: ${{ env.AZURE_ACR_USERNAME }}
password: ${{ env.AZURE_ACR_PASSWORD }}
- name: Build image and push it to ACR
uses: docker/build-push-action@v6
with:
push: true
platforms: linux/amd64
context: code
tags: ${{ env.AZURE_ACR_NAME }}.azurecr.io/${{ env.AZURE_CONTAINER_NAME }}:${{ github.sha }}
file: code/Dockerfile
- name: Deploy
uses: azure/cli@v2
env:
GITHUB_SHA: ${{ github.sha }}
with:
azcliversion: latest
inlineScript: |
az containerapp update \
--name $AZURE_CONTAINER_NAME \
--resource-group $AZURE_RESOURCE_GROUP \
--image $AZURE_ACR_NAME.azurecr.io/$AZURE_CONTAINER_NAME:$GITHUB_SHA \
--revision-suffix $GITHUB_SHA \
--query properties.configuration.ingress.fqdn