name: Node.js CI

on:
  merge_group:
    branches:
      - main
  pull_request:
    branches:
      - main
  push:
    branches:
      - main

jobs:
  test:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v4
      - uses: pnpm/action-setup@v4
        with:
          version: latest
      - uses: actions/setup-node@v4
        with:
          node-version: 22
          cache: pnpm
      - run: pnpm install --frozen-lockfile --strict-peer-dependencies
      - run: pnpm run build
      - run: pnpm run lint

  fix:
    runs-on: ubuntu-latest

    permissions:
      contents: write

    needs:
      - test

    if: failure() && github.event_name != 'merge_group' && github.actor != 'github-actions[bot]' && github.actor != 'nektos/act'

    steps:
      - uses: actions/checkout@v4
        with:
          ref: ${{ github.ref }}
      - uses: pnpm/action-setup@v4
        with:
          version: latest
      - uses: actions/setup-node@v4
        with:
          cache: pnpm
          node-version: 22

      - run: |
          pnpm install --fix-lockfile --no-frozen-lockfile
          git add .
      - id: commit-lockfile
        uses: qoomon/actions--create-commit@v1
        with:
          message: |
            📌 pnpm install --fix-lockfile

            [dependabot skip]
          skip-empty: true

      - run: |
          pnpm run format
          git add .
      - id: commit-format
        uses: qoomon/actions--create-commit@v1
        with:
          message: |
            🎨 pnpm run format

            [dependabot skip]
          skip-empty: true

      - run: |
          pnpm run lint:fix
          git add .
      - id: commit-lint
        uses: qoomon/actions--create-commit@v1
        with:
          message: |
            🚨 pnpm run lint:fix

            [dependabot skip]
          skip-empty: true

      - if: steps.commit-lockfile.outputs.commit || steps.commit-format.outputs.commit || steps.commit-lint.outputs.commit
        run: git push