name: Test on: pull_request: branches: [main] # Minimal permissions for security permissions: contents: read jobs: # ============================================================================= # Backend Tests # ============================================================================= backend-test: name: Backend Tests runs-on: ubuntu-latest permissions: contents: read defaults: run: working-directory: backend steps: - name: Checkout repository uses: actions/checkout@v4 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: '22' cache: 'npm' cache-dependency-path: backend/package-lock.json - name: Install dependencies run: npm ci - name: TypeScript type check run: npx tsc --noEmit - name: Run tests with coverage run: npm run test:coverage - name: Upload coverage report uses: actions/upload-artifact@v4 if: always() with: name: backend-coverage path: backend/coverage/ retention-days: 7 # ============================================================================= # Frontend Build Validation # ============================================================================= frontend-build: name: Frontend Build runs-on: ubuntu-latest permissions: contents: read defaults: run: working-directory: frontend steps: - name: Checkout repository uses: actions/checkout@v4 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: '22' cache: 'npm' cache-dependency-path: frontend/package-lock.json - name: Install dependencies run: npm ci - name: TypeScript type check & build run: npm run build