name: Linting

on:
  push:
    branches:
      - main
      - stable
  pull_request:

concurrency:
  group: plugin-linting-${{ format('{0}-{1}', github.head_ref || github.run_number, github.job) }}
  cancel-in-progress: true

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v3

      - name: Set up Node.js
        uses: actions/setup-node@v3
        with:
          node-version: 16
          cache: yarn

      - name: Yarn install
        run: yarn install

      - name: Set up ruby
        uses: ruby/setup-ruby@v1
        with:
          ruby-version: 2.7
          bundler-cache: true

      - name: ESLint
        if: ${{ always() }}
        run: yarn eslint --ext .js,.js.es6 --no-error-on-unmatched-pattern {test,assets}/javascripts

      - name: Prettier
        if: ${{ always() }}
        shell: bash
        run: |
          yarn prettier -v
          if [ 0 -lt $(find assets -type f \( -name "*.scss" -or -name "*.js" -or -name "*.es6" \) 2> /dev/null | wc -l) ]; then
            yarn prettier --list-different "assets/**/*.{scss,js,es6}"
          fi
          if [ 0 -lt $(find test -type f \( -name "*.js" -or -name "*.es6" \) 2> /dev/null | wc -l) ]; then
            yarn prettier --list-different "test/**/*.{js,es6}"
          fi

      - name: Rubocop
        if: ${{ always() }}
        run: bundle exec rubocop .