Skip to content

abstraction

abstraction #84

Workflow file for this run

name: cd
on:
# Trigger deployment on push to staging, main
push:
branches: [ staging, main ]
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: false
permissions:
contents: write
# Note: We deploy the individual apps (server.py, search_app.py, processing_app.py)
# for optimal cold start performance. The dev_combined.py app is ONLY for local
# development and should never be deployed to staging/prod.
jobs:
# ------------------------------------------------------------------
# STAGING DEPLOYMENT (Runs on push to 'staging')
# ------------------------------------------------------------------
deploy-staging:
name: Deploy Staging
if: github.ref == 'refs/heads/staging'
runs-on: ubuntu-latest
environment: staging # for GitHub Actions
defaults:
run:
working-directory: backend
steps:
- uses: actions/checkout@v5
- name: Install uv
uses: astral-sh/setup-uv@v6
with:
enable-cache: true
- name: Install ffmpeg
run: sudo apt-get update && sudo apt-get install -y ffmpeg
- name: Install dependencies
run: uv sync --frozen
- name: Deploy Processing App (Staging)
env:
MODAL_TOKEN_ID: ${{ secrets.MODAL_TOKEN_ID }}
MODAL_TOKEN_SECRET: ${{ secrets.MODAL_TOKEN_SECRET }}
ENVIRONMENT: staging
run: uv run modal deploy apps/processing_app.py
- name: Deploy Search App (Staging)
env:
MODAL_TOKEN_ID: ${{ secrets.MODAL_TOKEN_ID }}
MODAL_TOKEN_SECRET: ${{ secrets.MODAL_TOKEN_SECRET }}
ENVIRONMENT: staging
run: uv run modal deploy apps/search_app.py
- name: Deploy Server (Staging)
env:
MODAL_TOKEN_ID: ${{ secrets.MODAL_TOKEN_ID }}
MODAL_TOKEN_SECRET: ${{ secrets.MODAL_TOKEN_SECRET }}
ENVIRONMENT: staging
run: uv run modal deploy apps/server.py
# ------------------------------------------------------------------
# PRODUCTION DEPLOYMENT (Runs on push to 'main')
# ------------------------------------------------------------------
deploy-prod:
name: Deploy Production
if: github.ref == 'refs/heads/main'
runs-on: ubuntu-latest
defaults:
run:
working-directory: backend
steps:
- uses: actions/checkout@v5
- name: Install uv
uses: astral-sh/setup-uv@v6
with:
enable-cache: true
- name: Install ffmpeg
run: sudo apt-get update && sudo apt-get install -y ffmpeg
- name: Install dependencies
run: uv sync --frozen
- name: Deploy Processing App (Prod)
env:
MODAL_TOKEN_ID: ${{ secrets.MODAL_TOKEN_ID }}
MODAL_TOKEN_SECRET: ${{ secrets.MODAL_TOKEN_SECRET }}
ENVIRONMENT: prod
run: uv run modal deploy apps/processing_app.py
- name: Deploy Search App (Prod)
env:
MODAL_TOKEN_ID: ${{ secrets.MODAL_TOKEN_ID }}
MODAL_TOKEN_SECRET: ${{ secrets.MODAL_TOKEN_SECRET }}
ENVIRONMENT: prod
run: uv run modal deploy apps/search_app.py
- name: Deploy Server (Prod)
env:
MODAL_TOKEN_ID: ${{ secrets.MODAL_TOKEN_ID }}
MODAL_TOKEN_SECRET: ${{ secrets.MODAL_TOKEN_SECRET }}
ENVIRONMENT: prod
run: uv run modal deploy apps/server.py