name: CI # Lint/typecheck/test the whole Turborepo on every push/PR to dev. Mirrors the # house pattern (cf. trm/processor): setup-node + corepack pnpm + frozen install. # No Docker, no signing — pure checks. The desktop bundle is a separate, tag-only # pipeline (see release.yml). on: push: branches: [dev] pull_request: branches: [dev, main] workflow_dispatch: jobs: check: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 - name: Set up Node 22 uses: actions/setup-node@v4 with: node-version: 22 - name: Enable pnpm # Pin to the repo's packageManager version (pnpm 10), not latest. run: corepack enable && corepack prepare pnpm@10.24.0 --activate - name: Install dependencies run: pnpm install --frozen-lockfile - name: Set up uv (Python toolchain for @parking/vision) # The vision service is a Python package wired into the Turbo graph via a # package.json shim; its lint/typecheck/test scripts shell to `uv run …`. CI # has no Python by default, so `uv run` would fail with "uv: not found" and # break the whole Turbo run. Install uv via its official standalone script # (the Gitea runner can't reliably resolve astral-sh/setup-uv); uv provisions the # pinned Python (.python-version) itself. See wiki/decisions/vision-service-packaging.md. run: | curl -LsSf https://astral.sh/uv/install.sh | sh echo "$HOME/.local/bin" >> "$GITHUB_PATH" - name: Sync vision deps # Light deps + the dev group (ruff/mypy/pytest) only — NOT the optional `alpr` # extra (heavy onnx/model stack), which isn't needed to lint/typecheck/test. working-directory: apps/vision run: uv sync --frozen - name: Sync trainer deps # Same rule: light core only, not the `train` extra (CPU torch); torch tests skip. working-directory: apps/trainer run: uv sync --frozen - name: Build + lint (Turbo) # Covers tsc typecheck, vite build, i18n catalog type-parity (a missing sq/en # key fails the build), AND the vision service's ruff lint via uv. run: pnpm turbo run build lint - name: Test run: pnpm turbo run test