name: Lint & Format (JS/TS)

on:
    pull_request:

jobs:
    lint-format:
        runs-on: alpine
        container: node:26-alpine

        steps:
            - name: Checkout
              uses: actions/checkout@v4

            - name: Install tools
              run: |
                  apk add --no-cache \
                    git

            - name: Prettier
              continue-on-error: true
              run: |
                  if [ -n "$(find . \( -iname "*.js" -o -iname "*.jsx" -o -iname "*.ts" -o -iname "*.tsx" -o -iname "*.mjs" -o -iname "*.cjs" \) -print -quit)" ]; then
                    npx --yes prettier --check "**/*.{js,jsx,ts,tsx,mjs,cjs}" --ignore-path .prettierignore
                  else
                    echo "No JS/TS files found"
                  fi

            - name: ESLint
              run: |
                  if [ -n "$(find . \( -iname "*.js" -o -iname "*.jsx" -o -iname "*.ts" -o -iname "*.tsx" -o -iname "*.mjs" -o -iname "*.cjs" \) -print -quit)" ]; then
                    if [ -f package.json ]; then
                      npm install --no-audit --no-fund
                    fi
                    if [ -f eslint.config.js ] || [ -f eslint.config.mjs ] || [ -f eslint.config.cjs ] || [ -f .eslintrc ] || [ -f .eslintrc.js ] || [ -f .eslintrc.cjs ] || [ -f .eslintrc.json ] || [ -f .eslintrc.yaml ] || [ -f .eslintrc.yml ]; then
                      npx --yes eslint . && echo "ESLint passed" || echo "ESLint failed"
                    else
                      echo "No eslint config found"
                    fi
                  else
                    echo "No JS/TS files found"
                  fi
