name: Frontend CI on: push: branches: [main] paths: - 'frontend/**' - '.github/workflows/frontend-ci.yml' pull_request: paths: - 'frontend/**' - '.github/workflows/frontend-ci.yml' defaults: run: working-directory: ./frontend concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true jobs: quality: name: Lint, Format & Type Check runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Setup pnpm uses: pnpm/action-setup@v4 with: version: 10 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: '25' cache: 'pnpm' cache-dependency-path: frontend/pnpm-lock.yaml - name: Install dependencies run: pnpm install --frozen-lockfile - name: Run ESLint run: pnpm run lint - name: Run Prettier run: pnpm run format:check - name: Run type check run: pnpm run check test: name: Tests runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Setup pnpm uses: pnpm/action-setup@v4 with: version: 10 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: '25' cache: 'pnpm' cache-dependency-path: frontend/pnpm-lock.yaml - name: Install dependencies run: pnpm install --frozen-lockfile - name: Run tests (server project) run: pnpm exec vitest run --project server