name: CI Pipeline on: push: branches: [ main, master, develop ] pull_request: branches: [ main, master, develop ] jobs: lint: name: Lint Code runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: '20' cache: 'npm' - name: Install dependencies run: npm ci - name: Run linters run: npm run lint test-api: name: Test API Package runs-on: ubuntu-latest services: postgres: image: postgres:16 env: POSTGRES_USER: basil POSTGRES_PASSWORD: basil POSTGRES_DB: basil_test options: >- --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 ports: - 5432:5432 steps: - name: Checkout code uses: actions/checkout@v4 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: '20' cache: 'npm' - name: Install dependencies run: npm ci - name: Run API tests working-directory: packages/api env: DATABASE_URL: postgresql://basil:basil@localhost:5432/basil_test NODE_ENV: test run: npm run test - name: Upload API test coverage uses: actions/upload-artifact@v4 if: always() with: name: api-coverage path: packages/api/coverage/ retention-days: 7 test-web: name: Test Web Package runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: '20' cache: 'npm' - name: Install dependencies run: npm ci - name: Run web tests working-directory: packages/web run: npm run test - name: Upload web test coverage uses: actions/upload-artifact@v4 if: always() with: name: web-coverage path: packages/web/coverage/ retention-days: 7 test-shared: name: Test Shared Package runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: '20' cache: 'npm' - name: Install dependencies run: npm ci - name: Run shared package tests working-directory: packages/shared run: npm run test - name: Upload shared test coverage uses: actions/upload-artifact@v4 if: always() with: name: shared-coverage path: packages/shared/coverage/ retention-days: 7 build: name: Build All Packages runs-on: ubuntu-latest needs: [lint, test-api, test-web, test-shared] steps: - name: Checkout code uses: actions/checkout@v4 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: '20' cache: 'npm' - name: Install dependencies run: npm ci - name: Build all packages run: npm run build - name: Upload build artifacts uses: actions/upload-artifact@v4 with: name: build-artifacts path: | packages/api/dist/ packages/web/dist/ packages/shared/dist/ retention-days: 7 coverage-report: name: Generate Coverage Report runs-on: ubuntu-latest needs: [test-api, test-web, test-shared] if: always() steps: - name: Checkout code uses: actions/checkout@v4 - name: Download all coverage artifacts uses: actions/download-artifact@v4 with: path: coverage-artifacts - name: Display coverage summary run: | echo "## Test Coverage Summary" >> $GITHUB_STEP_SUMMARY echo "" >> $GITHUB_STEP_SUMMARY echo "Coverage reports have been generated for all packages." >> $GITHUB_STEP_SUMMARY echo "" >> $GITHUB_STEP_SUMMARY echo "- API Package Coverage" >> $GITHUB_STEP_SUMMARY echo "- Web Package Coverage" >> $GITHUB_STEP_SUMMARY echo "- Shared Package Coverage" >> $GITHUB_STEP_SUMMARY