name: Linting and style checking

on:
  push:
    branches-ignore: [ sync, stable ]
  pull_request:
    branches-ignore: [ sync, stable ]

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}-${{ github.actor }}
  cancel-in-progress: true

jobs:
  stylua:
    name: Formatting
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: JohnnyMorganz/stylua-action@v4
        with:
          token: ${{ secrets.GITHUB_TOKEN }}
          version: v0.19.0
          # CLI arguments
          args: --color always --check .

  gendoc:
    name: Document generation
    runs-on: ubuntu-latest
    steps:
      - name: Install Neovim
        uses: rhysd/action-setup-vim@v1
        with:
          neovim: true
      - uses: actions/checkout@v4
      - name: Generate documentation
        run: make --silent documentation
      - name: Check for changes
        run: if [[ -n $(git status -s) ]]; then exit 1; fi

  lintcommit:
    name: Lint commits
    runs-on: ubuntu-latest
    env:
      LINTCOMMIT_STRICT: true
    steps:
      - name: Install Neovim
        uses: rhysd/action-setup-vim@v1
        with:
          neovim: true
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0
          ref: ${{ github.event.pull_request.head.sha || github.ref }}
      - name: Lint new commits
        run: make --silent lintcommit-ci

  case-sensitivity:
    name: File case sensitivity
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0
      - name: Check Case Sensitivity
        uses: credfeto/action-case-checker@v1.2.1

  checkout:
    # Test possibility of checking out and setting up 'mini.nvim' on non-Linux
    # This can guard from possible problems:
    # - Long file names (particularly from reference screenshots).
    name: Test checkout
    strategy:
      fail-fast: false
      matrix:
        os: [windows-latest, macos-latest]
    runs-on: ${{ matrix.os }}
    steps:
      - uses: actions/checkout@v4
      - name: Setup neovim
        uses: rhysd/action-setup-vim@v1
        with:
          # Uses latest stable by default
          neovim: true
      - name: Test setup
        run: make basic_setup
