name: 🔍 Lint

on:
  pull_request:
    types: [opened, synchronize, reopened]
    branches: [develop, main]
  push:
    branches:
      - main
      - develop
  workflow_dispatch:

jobs:
  lint:
    name: 🪄 Check lint
    runs-on: ubuntu-latest
    steps:
      - name: ⬇️ Checkout
        uses: actions/checkout@v6

      - name: 🧰 Setup Node
        uses: actions/setup-node@v6
        with:
          node-version: "20"
          cache: npm

      - name: 📥 Install
        run: npm ci

      - name: 🔍 Lint
        run: npm run lint

  format:
    name: 🎨 Check format
    runs-on: ubuntu-latest
    steps:
      - name: ⬇️ Checkout
        uses: actions/checkout@v6

      - name: 🧰 Setup Node
        uses: actions/setup-node@v6
        with:
          node-version: "20"
          cache: npm

      - name: 📥 Install
        run: npm ci

      - name: 🎨 Format
        run: npm run format:check

  typecheck:
    name: 🔎 Typecheck
    runs-on: ubuntu-latest
    steps:
      - name: ⬇️ Checkout
        uses: actions/checkout@v6

      - name: 🧰 Setup Node
        uses: actions/setup-node@v6
        with:
          node-version: "20"
          cache: npm

      - name: 📥 Install
        run: npm ci

      - name: 🔎 Typecheck
        run: npm run typecheck

  build:
    name: 🏗 Build
    runs-on: ubuntu-latest
    needs: [lint, format, typecheck]
    steps:
      - name: ⬇️ Checkout
        uses: actions/checkout@v6
        with:
          lfs: true

      - name: 🧰 Setup Node
        uses: actions/setup-node@v6
        with:
          node-version: "20"
          cache: npm

      - name: 📥 Install
        run: npm ci

      - name: 🏗 Build
        run: npm run build
