name: Build, Lint, and Unit Tests on: pull_request: # Cancel in-progress runs when a new commit is pushed to the same PR concurrency: group: ci-${{ github.event.pull_request.number || github.ref }} cancel-in-progress: true env: CI: true jobs: # Build job - runs in parallel build: name: Build runs-on: blacksmith-4vcpu-ubuntu-2404 timeout-minutes: 10 steps: - name: Checkout code uses: actions/checkout@v4 - name: Setup Node Environment uses: ./.github/actions/setup-node-env with: cache-key: build-lint-unit - name: Build all packages (excluding web) run: pnpm turbo build --filter="!@buster-app/web" env: NODE_ENV: production SKIP_ENV_CHECK: true TURBO_CACHE_DIR: .turbo TURBO_TELEMETRY_DISABLED: 1 - name: Typecheck web app run: pnpm turbo typecheck --filter=@buster-app/web env: TURBO_CACHE_DIR: .turbo TURBO_TELEMETRY_DISABLED: 1 # Lint job - runs in parallel lint: name: Lint runs-on: blacksmith-2vcpu-ubuntu-2404 timeout-minutes: 5 steps: - name: Checkout code uses: actions/checkout@v4 - name: Setup Node Environment uses: ./.github/actions/setup-node-env with: cache-key: build-lint-unit - name: Lint all packages run: pnpm turbo lint env: TURBO_CACHE_DIR: .turbo TURBO_TELEMETRY_DISABLED: 1 # Test job - runs after build completes test: name: Test runs-on: blacksmith-4vcpu-ubuntu-2404 timeout-minutes: 10 steps: - name: Checkout code uses: actions/checkout@v4 - name: Setup Node Environment uses: ./.github/actions/setup-node-env with: cache-key: build-lint-unit - name: Build required packages run: pnpm turbo build --filter="!@buster-app/web" env: NODE_ENV: production SKIP_ENV_CHECK: true TURBO_CACHE_DIR: .turbo TURBO_TELEMETRY_DISABLED: 1 - name: Run all unit tests run: pnpm turbo test:unit env: TURBO_CACHE_DIR: .turbo TURBO_TELEMETRY_DISABLED: 1 - name: Upload test coverage uses: actions/upload-artifact@v4 if: always() with: name: coverage path: | **/coverage/** !**/coverage/tmp/** retention-days: 7