name: CI on: push: branches: [main] pull_request: branches: [main] jobs: frontend: name: Frontend — Lint, Type-check & Build runs-on: ubuntu-latest defaults: run: working-directory: frontend steps: - uses: actions/checkout@v4 - name: Set up Node.js uses: actions/setup-node@v4 with: node-version: '20' cache: 'npm' cache-dependency-path: frontend/package-lock.json - name: Install dependencies run: npm ci - name: Lint run: npm run lint - name: Type-check run: npx tsc --noEmit - name: Build run: npm run build backend: name: Backend — Lint, Type-check & Build runs-on: ubuntu-latest defaults: run: working-directory: backend steps: - uses: actions/checkout@v4 - name: Set up Node.js uses: actions/setup-node@v4 with: node-version: '20' cache: 'npm' cache-dependency-path: backend/package-lock.json - name: Install dependencies run: npm ci - name: Lint run: npm run lint - name: Type-check run: npx tsc --noEmit - name: Build run: npm run build audit: name: Security Audit runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Set up Node.js uses: actions/setup-node@v4 with: node-version: '20' - name: Audit frontend dependencies run: npm audit --audit-level=high working-directory: frontend - name: Audit backend dependencies run: npm audit --audit-level=high working-directory: backend