name: CI on: push: branches: - main - master - 'feat/**' - 'fix/**' pull_request: concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true jobs: backend: name: Backend Tests & Docs runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 - name: Setup Python 3.12 uses: actions/setup-python@v5 with: python-version: '3.12' cache: 'pip' cache-dependency-path: | backend/requirements.lock backend/pyproject.toml - name: Install dependencies run: | python -m pip install --upgrade pip python -m pip install -r backend/requirements.lock python -m pip install -e "backend[dev,docs]" - name: Check bilingual docs & links run: python scripts/check-docs.py - name: Run backend test suite run: python -m pytest backend/tests -n auto -q frontend: name: Frontend Build & Static Gates runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 - name: Setup Python 3.12 uses: actions/setup-python@v5 with: python-version: '3.12' - name: Setup pnpm uses: pnpm/action-setup@v4 with: version: 12.3.4 - name: Setup Node 22 uses: actions/setup-node@v4 with: node-version: '22' cache: 'pnpm' cache-dependency-path: frontend/pnpm-lock.yaml - name: Install frontend dependencies run: pnpm --dir frontend install --frozen-lockfile - name: Typecheck & build frontend bundle run: pnpm --dir frontend build - name: Check shell script syntax run: bash -n scripts/package-docker.sh - name: Run static & runtime unit checks (tokens, copy, trace, decode) run: node scripts/check-all.mjs tokens copy trace decode