Skip to content

Move business logic to fastapi #2

Move business logic to fastapi

Move business logic to fastapi #2

Workflow file for this run

name: Deploy Server to cloud-run
on:
pull_request:
paths:
- "server/**"
- "services/**"
- "utils_pkg/**"
- ".github/workflows/server.yml"
push:
branches:
- main
paths:
- "server/**"
- "services/**"
- "utils_pkg/**"
- ".github/workflows/server.yml"
tags:
- "release-*"
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
env:
CI: true
COMMIT_SHA: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
COMMIT_REF: ${{ github.ref }}
MAIN: ${{ github.ref == 'refs/heads/main' }}
SERVICE: audiora_api
PROJECT_ID: ${{ secrets.PROJECT_ID }}
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }}
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
ELEVENLABS_API_KEY: ${{ secrets.ELEVENLABS_API_KEY }}
BUCKET_NAME: ${{ secrets.BUCKET_NAME }}
jobs:
prepare:
runs-on: ubuntu-latest
outputs:
SHORT_SHA: ${{ steps.prepare_env.outputs.SHORT_SHA }}
VERSION: ${{ github.event_name == 'pull_request' && format('pr-{0}', github.event.number) || format('main-{0}', steps.prepare_env.outputs.SHORT_SHA) }}
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- id: prepare_env
run: |
echo "TAGGED=${{ startsWith(github.ref, 'refs/tags/server') }}" >> $GITHUB_OUTPUT
SHORT_SHA=$(git rev-parse --short HEAD)
echo "SHORT_SHA=$SHORT_SHA" >> $GITHUB_OUTPUT
RAW=$(git branch -r --contains $SHORT_SHA)
TAG_BRANCH_NAME="${RAW##*/}"
echo "TAG_BRANCH_NAME=$TAG_BRANCH_NAME" >> $GITHUB_OUTPUT
test:
runs-on: ubuntu-latest
needs: prepare
timeout-minutes: 5
env:
VERSION: ${{ needs.prepare.outputs.VERSION }}
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.12"
cache: "pip" # caching pip dependencies
check-latest: true
- run: pip install --force-reinstall -r requirements.txt
if: ${{ steps.setup-python.outputs.cache-hit != 'true' }}
- run: pip install -r requirements.txt
if: ${{ steps.setup-python.outputs.cache-hit == 'true' }}
deploy:
runs-on: ubuntu-latest
needs: [prepare, test]
timeout-minutes: 10
env:
VERSION: ${{ needs.prepare.outputs.VERSION }}
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.12"
cache: "pip" # caching pip dependencies
check-latest: true
- run: pip install -r requirements.txt
- uses: google-github-actions/auth@v2
with:
credentials_json: "${{ secrets.GCP_SA_KEY }}"
- uses: google-github-actions/setup-gcloud@v2
- run: gcloud config set app/cloud_build_timeout 300
- name: Deploy to Cloud Run
id: deploy
uses: google-github-actions/deploy-cloudrun@v2
with:
service: ${{ env.SERVICE }}
source: ./server
tag: ${{ env.VERSION }}
no_traffic: true
timeout: "5m"
gcloud_version: "482.0.0"
flags: "--allow-unauthenticated --memory=32Gi --cpu=8 --execution-environment=gen2 --concurrency=80 --max-instances=10"
env_vars: |
ENV=prod
OPENAI_API_KEY=${{ secrets.OPENAI_API_KEY }}
GEMINI_API_KEY=${{ secrets.GEMINI_API_KEY }}
ANTHROPIC_API_KEY=${{ secrets.ANTHROPIC_API_KEY }}
ELEVENLABS_API_KEY=${{ secrets.ELEVENLABS_API_KEY }}
BUCKET_NAME=${{ secrets.BUCKET_NAME }}
- run: curl -f "${{ steps.deploy.outputs.url }}"
- uses: marocchino/sticky-pull-request-comment@v2
with:
header: server
message: |
server: ${{ steps.deploy.outputs.url }} (${{ github.event.pull_request.head.sha }})
Swagger: ${{ steps.deploy.outputs.url }}/docs
Redoc: ${{ steps.deploy.outputs.url }}/redoc
promote:
runs-on: ubuntu-latest
if: (needs.prepare.outputs.MAIN == 'true')
needs: [prepare, deploy, test]
timeout-minutes: 2
steps:
- uses: google-github-actions/auth@v2
with:
credentials_json: "${{ secrets.GCP_SA_KEY }}"
- uses: google-github-actions/setup-gcloud@v2
- run: gcloud run services update-traffic ${{ env.SERVICE }} --to-tags=${{ needs.prepare.outputs.VERSION }}=100 --project=${{ env.PROJECT_ID }} --region=us-central1
cleanup:
runs-on: ubuntu-latest
needs: promote
timeout-minutes: 2
steps:
- uses: google-github-actions/auth@v2
with:
credentials_json: "${{ secrets.GCP_SA_KEY }}"
- uses: google-github-actions/setup-gcloud@v2
- name: Cleanup older revisions
run: |
gcloud run revisions list --service=${{ env.SERVICE }} --project=${{ env.PROJECT_ID }} --region=us-central1 --sort-by=CREATE_TIME --format="value(REVISION)" | tail -n +4 | xargs -I {} gcloud run revisions delete {} --project=${{ env.PROJECT_ID }} --region=us-central1 --quiet