name: CI

on:
  push:
    branches: [main]
    tags:
      - "[0-9]+.[0-9]+.[0-9]+"
  pull_request:
    types: [opened, synchronize, reopened]

jobs:
  test:
    name: Lint and Test
    runs-on: ubuntu-latest

    strategy:
      matrix:
        node-version: [18.x, 20.x]
        java-version: [11]

    steps:
      - name: Checkout
        uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - name: Use Node.js ${{ matrix.node-version }}
        uses: actions/setup-node@v4
        with:
          node-version: ${{ matrix.node-version }}

      - name: Use JDK ${{ matrix.java-version }}
        uses: actions/setup-java@v4
        with:
          distribution: temurin
          java-version: ${{ matrix.java-version }}

      - name: Install dependencies
        run: yarn install --immutable
        working-directory: eslint-plugin

      - name: Lint eslint-plugin
        run: yarn lint
        working-directory: eslint-plugin

      - name: Test eslint-plugin
        run: yarn test:cov
        working-directory: eslint-plugin

      - name: Verify SonarQube plugin
        run: mvn -e -B verify
        working-directory: sonar-plugin

      - name: SonarCloud Scan
        uses: SonarSource/sonarcloud-github-action@master
        if: |
          (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository) &&
          matrix.node-version == '20.x' &&
          github.actor != 'dependabot[bot]'
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}

  integration-test:
    name: Integration test
    runs-on: ubuntu-latest

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

      - name: Use Node.js 20.x
        uses: actions/setup-node@v4
        with:
          node-version: 20.x

      - name: Use JDK 11
        uses: actions/setup-java@v4
        with:
          distribution: temurin
          java-version: 11

      - name: Install dependencies
        run: yarn install --immutable
        working-directory: eslint-plugin

      - name: Build SonarQube plugin
        run: mvn -e -B package
        working-directory: sonar-plugin

      - name: Check SonarQube with the plugin
        run: docker compose up --wait