name: Deploy Beta # Auto-deploy beta after push to master (mirrors dta_service / chat_web_app). # Prod is manual via Deploy Prod (workflow_dispatch). on: push: branches: - master jobs: unit-tests: runs-on: self-hosted steps: - name: Checkout uses: actions/checkout@v4 - name: Install uv run: | curl -LsSf https://astral.sh/uv/install.sh | sh echo "$HOME/.local/bin" >> "$GITHUB_PATH" - name: Install dependencies run: uv sync --frozen - name: Run unit tests env: DJANGO_ENV: dev DJANGO_SECRET_KEY: test-secret-key DJANGO_DEBUG: "true" DJANGO_ALLOWED_HOSTS: localhost,127.0.0.1,testserver DATABASE_URL: "" DB_HOST: "" SKIP_RAG_INIT: "1" OLLAMA_BASE_URL: http://127.0.0.1:11434 working-directory: llm_be run: uv run python manage.py test docker: needs: unit-tests runs-on: self-hosted steps: - name: Checkout uses: actions/checkout@v4 - name: Build Docker image run: docker compose build # Ephemeral local Postgres only — never inherit host DATABASE_URL (prod/beta). - name: Run containerized tests run: | set -euo pipefail unset DATABASE_URL DB_HOST DB_NAME DB_USER DB_PASSWORD DB_PORT \ COMPOSE_DATABASE_URL DJANGO_ENV DJANGO_SECRET_KEY DJANGO_DEBUG \ DJANGO_ALLOWED_HOSTS OLLAMA_BASE_URL || true PROJECT="chat-backend-ci-${{ gitea.sha }}" cleanup() { docker compose -p "$PROJECT" down -v --remove-orphans || true; } trap cleanup EXIT docker compose -p "$PROJECT" up -d --wait db docker compose -p "$PROJECT" run --rm --no-deps --entrypoint "" \ -e DJANGO_ENV=dev \ -e DJANGO_SECRET_KEY=test-secret-key \ -e DJANGO_DEBUG=true \ -e DJANGO_ALLOWED_HOSTS=localhost,127.0.0.1,testserver \ -e DATABASE_URL=postgres://chat_backend:chat_backend@db:5432/chat_backend \ -e SKIP_RAG_INIT=1 \ -e OLLAMA_BASE_URL=http://127.0.0.1:11434 \ web uv run python manage.py test deploy-beta: needs: docker runs-on: self-hosted env: SERVER_INFRA_ROOT: /home/westfarn/Documents/repos/server-infra steps: - name: Deploy chat_backend beta run: | "$SERVER_INFRA_ROOT/scripts/deploy.sh" \ --app chat_backend \ --env beta \ --ref "${{ gitea.sha }}"