name: AGLint

env:
  NODE_VERSION: 20

on:
  push:
    branches:
      - master
    paths:
      - "**/*.txt"
      - ".aglintrc.*"
      - "package.json"
      - "yarn.lock"
  pull_request:
    branches:
      - master
    paths:
      - "**/*.txt"
      - ".aglintrc.*"
      - "package.json"
      - "yarn.lock"

jobs:
  lint:
    name: Run AGLint
    runs-on: ubuntu-latest
    steps:
      - name: Check out to repository
        uses: actions/checkout@v4

      - name: Set up Node.js
        uses: actions/setup-node@v4
        with:
          node-version: ${{ env.NODE_VERSION }}
          cache: yarn

      - name: Install dependencies
        run: yarn install --frozen-lockfile

      # If the linter found any errors, it will exit with a non-zero code, which will cause the job to fail
      - name: Run AGLint
        run: yarn lint

  notify:
    name: Send Slack notification on failure
    runs-on: ubuntu-latest
    needs: lint
    # Run this job only if the previous job failed and the event was triggered by the 'AdguardTeam/AdguardFilters' repository
    # Note: 'always()' is needed to run the notify job even if the lint job was failed
    if:
      ${{
        always() &&
        needs.lint.result == 'failure' &&
        github.repository == 'AdguardTeam/AdguardFilters' &&
        (
          github.event_name == 'push' ||
          github.event.pull_request.head.repo.full_name == github.repository
        )
      }}
    steps:
      - uses: 8398a7/action-slack@v3
        with:
          status: failure
          fields: workflow, repo, message, commit, author, eventName, ref, job
          job_name: Run AGLint
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
