fix(v1.0.0): mentor plain-English, mobile hero gap, creator overflow #33
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: CI | |
| # Runs on every PR and every push to main. Catches the v0.8.3-style "ship a | |
| # regression, learn about it from Sentry post-deploy" loop by exercising the | |
| # whole test + lint + build stack before the merge button is reachable. | |
| on: | |
| pull_request: | |
| push: | |
| branches: | |
| - main | |
| # Opt into Node 24 ahead of June 2026 deadline. Without this, GHA warns on | |
| # every run that actions/checkout@v4, astral-sh/setup-uv@v5, and | |
| # actions/setup-node@v4 are still running on Node 20 (which is being | |
| # removed from the runner on 2026-09-16). | |
| env: | |
| FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: "true" | |
| # Avoid running the workflow twice for the same PR (push + pull_request both | |
| # fire). Cancel in-progress runs for the same ref when a new push lands. | |
| concurrency: | |
| group: ci-${{ github.workflow }}-${{ github.ref }} | |
| cancel-in-progress: true | |
| jobs: | |
| backend: | |
| name: Backend (lint + tests) | |
| runs-on: ubuntu-latest | |
| defaults: | |
| run: | |
| working-directory: backend | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Install uv | |
| uses: astral-sh/setup-uv@v5 | |
| with: | |
| version: "0.11.12" | |
| enable-cache: true | |
| cache-dependency-glob: backend/uv.lock | |
| - name: Pin Python from .python-version | |
| run: uv python install | |
| - name: Install dependencies | |
| run: uv sync --frozen --dev | |
| - name: ruff check | |
| run: uv run ruff check . | |
| - name: ruff format --check | |
| run: uv run ruff format --check . | |
| - name: pytest (non-DB-fixture) | |
| # The DB-fixture tests need TEST_DATABASE_URL pointed at a real | |
| # Postgres branch — out of scope for the cheap pre-merge gate. The | |
| # 257-test non-DB suite is the right gate for "does the diff break | |
| # anything we can run for free." | |
| run: uv run pytest -q --no-header | |
| frontend: | |
| name: Frontend (lint + test + build) | |
| runs-on: ubuntu-latest | |
| defaults: | |
| run: | |
| working-directory: frontend | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: actions/setup-node@v4 | |
| with: | |
| node-version: 24 | |
| cache: npm | |
| cache-dependency-path: frontend/package-lock.json | |
| - name: Install dependencies | |
| run: npm ci | |
| - name: ESLint | |
| run: npm run lint | |
| - name: TypeScript | |
| run: npx tsc --noEmit | |
| - name: Vitest | |
| run: npm run test:run | |
| - name: Next.js build | |
| # Set throwaway values so any module-level `process.env.X` reads at | |
| # build time don't crash. Real values come from Vercel at deploy. | |
| env: | |
| NEXT_PUBLIC_BACKEND_URL: http://ci-placeholder | |
| run: npm run build | |
| config: | |
| name: Config (vercel.ts typecheck) | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: actions/setup-node@v4 | |
| with: | |
| node-version: 24 | |
| cache: npm | |
| cache-dependency-path: package-lock.json | |
| - name: Install root devDeps | |
| run: npm ci | |
| - name: TypeScript (vercel.ts) | |
| run: npx tsc --noEmit -p . |