name: PR Validation on: pull_request: branches: [main] push: branches: [main] jobs: lint: name: Lint Check runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Setup Node.js uses: actions/setup-node@v6 with: node-version: '20' cache: 'npm' - name: Install dependencies run: npm ci --legacy-peer-deps - name: Check code formatting with Prettier run: npx prettier --check "src/**/*.{ts,html,scss,css,json}" - name: Run ESLint run: npx eslint "src/**/*.ts" type-check: name: TypeScript Type Check runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Setup Node.js uses: actions/setup-node@v6 with: node-version: '20' cache: 'npm' - name: Install dependencies run: npm ci --legacy-peer-deps - name: Run TypeScript compiler run: npx tsc --noEmit test: name: Unit Tests runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Setup Node.js uses: actions/setup-node@v6 with: node-version: '20' cache: 'npm' - name: Install dependencies run: npm ci --legacy-peer-deps - name: Run unit tests run: npm test -- --watch=false --browsers=ChromeHeadless --code-coverage - name: Upload coverage reports uses: codecov/codecov-action@v5 if: always() with: token: ${{ secrets.CODECOV_TOKEN }} files: ./coverage/vac-optimizer/lcov.info fail_ci_if_error: false build: name: Build Application runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Setup Node.js uses: actions/setup-node@v6 with: node-version: '20' cache: 'npm' - name: Install dependencies run: npm ci --legacy-peer-deps - name: Build production bundle run: npm run build -- --configuration production env: NG_BUILD_CACHE: '.angular/cache' - name: Check bundle size run: | du -sh dist/vac-optimizer/browser echo "Build completed successfully" - name: Upload build artifacts uses: actions/upload-artifact@v5 with: name: build-artifacts path: dist/ retention-days: 7