Modern QA2026Extending the Pipeline — tiles
Log inJoin
8 / 48 · 16 CI/CD Pipelines · GitHub Actions: A Practical Example← prev⊞ allnext →☰ Read as one page

2.3Extending the Pipeline

Adding Lint and Type Checks

Add a fast first job that runs before everything else:

lint-and-typecheck:
  runs-on: ubuntu-latest
  steps:
    - uses: actions/checkout@v4
    - uses: actions/setup-node@v4
      with:
        node-version: 24
        cache: 'npm'
    - run: npm ci
    - run: npm run lint
    - run: npm run typecheck

Note on Node versions (as of July 2026): Node 24 is the active LTS line and Node 26 is Current, with a one-major-per-year cadence starting with Node 27. Node 24 can run TypeScript files directly via stable type-stripping (node app.ts), but it does not type-check them -- keep tsc --noEmit as a separate CI step.

Then make unit-tests depend on lint-and-typecheck:

unit-tests:
  needs: lint-and-typecheck

Adding Slack Notifications

notify-on-failure:
  needs: [unit-tests, integration-tests, browser-tests]
  if: failure()
  runs-on: ubuntu-latest
  steps:
    - uses: slackapi/slack-github-action@v1
      with:
        payload: |
          {
            "text": "Pipeline failed on ${{ github.ref_name }}: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}"
          }
      env:
        SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK }}

Adding Path Filtering

Skip expensive tests when only documentation changes:

on:
  push:
    branches: [main, develop]
    paths-ignore:
      - '**.md'
      - 'docs/**'
      - '.github/ISSUE_TEMPLATE/**'