name: 🧪 CI
on: [pull_request]

permissions:
  actions: write
  contents: read

jobs:
  lint:
    name: ⬣ ESLint
    runs-on: ubuntu-latest
    steps:
      - name: 🛑 Cancel Previous Runs
        uses: styfle/cancel-workflow-action@0.11.0

      - name: ⬇️ Checkout Repository
        uses: actions/checkout@v3

      - name: ⎔ Setup Node
        uses: actions/setup-node@v3
        with:
          node-version: 18

      - name: 📥 Install Dependencies
        uses: bahmutov/npm-install@v1

      - name: 🔬 Lint
        run: yarn run lint || true

  typecheck:
    name: ʦ TypeScript
    runs-on: ubuntu-latest
    steps:
      - name: 🛑 Cancel Previous Runs
        uses: styfle/cancel-workflow-action@0.11.0

      - name: ⬇️ Checkout Repository
        uses: actions/checkout@v3

      - name: ⎔ Setup Node
        uses: actions/setup-node@v3
        with:
          node-version: 18

      - name: 📥 Download Dependencies
        uses: bahmutov/npm-install@v1

      - name: 🔎 Type Check
        run: yarn run typecheck

  test:
    name: ⚡ Tests
    runs-on: ubuntu-latest
    steps:
      - name: 🛑 Cancel Previous Runs
        uses: styfle/cancel-workflow-action@0.11.0

      - name: ⬇️ Checkout Repository
        uses: actions/checkout@v3

      - name: ⎔ Setup Node
        uses: actions/setup-node@v3
        with:
          node-version: 18

      - name: 📥 Download Dependencies
        uses: bahmutov/npm-install@v1

      - name: ⚡ Run Tests
        run: yarn run test