name: "build-and-test"

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

permissions:
  contents: read

jobs:
  # make sure build/ci work properly
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/setup-node@v6
        with:
          node-version: 24.x
      - uses: actions/checkout@v6
      - run: |
          npm install
          npm run all

      # Fail the build if there are changes.
      - run: git diff --exit-code -- dist

  # make sure the action works on a clean machine without building
  test:
    needs: [ build ]
    strategy:
      matrix:
        os:
          - ubuntu-latest
          - ubuntu-22.04-arm
          - macos-latest
          - windows-latest
        version:
          - ""
          - "latest"
          - "v2.7"
          - "v2.7.2"
    runs-on: ${{ matrix.os }}
    permissions:
      contents: read
      pull-requests: read
    steps:
      - uses: actions/checkout@v6
      - uses: actions/setup-node@v6
        with:
          node-version: 24.x
      - uses: actions/setup-go@v6
        with:
          go-version: oldstable
      - uses: ./
        with:
          version: ${{ matrix.version }}
          args: --timeout=5m --issues-exit-code=0 ./fixtures/simple/...
          only-new-issues: true

  # make sure the action works on a clean machine without building (go-install mode)
  test-go-install:
    needs: [ build ]
    strategy:
      matrix:
        os:
          - ubuntu-latest
          - ubuntu-22.04-arm
          - macos-latest
          - windows-latest
        version:
          - ""
          - "latest"
          - "v2.7.2"
          - "655e8ede5178280b2a640e185bc4a343aed0f54e"
    runs-on: ${{ matrix.os }}
    permissions:
      contents: read
      pull-requests: read
    steps:
      - uses: actions/checkout@v6
      - uses: actions/setup-node@v6
        with:
          node-version: 24.x
      - uses: actions/setup-go@v6
        with:
          go-version: oldstable
      - uses: ./
        with:
          version: ${{ matrix.version }}
          args: --timeout=5m --issues-exit-code=0 ./fixtures/simple/...
          only-new-issues: true
          install-mode: goinstall

  test-go-mod:
    needs: [ build ]
    strategy:
      matrix:
        os:
          - ubuntu-latest
          - ubuntu-22.04-arm
          - macos-latest
          - windows-latest
        wd:
          - fixtures/go-mod
          - fixtures/go-tool
    runs-on: ${{ matrix.os }}
    permissions:
      contents: read
    steps:
      - uses: actions/checkout@v6
      - uses: actions/setup-node@v6
        with:
          node-version: 24.x
      - uses: actions/setup-go@v6
        with:
          go-version: oldstable
      - uses: ./
        with:
          working-directory: ${{ matrix.wd }}
          args: --timeout=5m --issues-exit-code=0 ./...

  # make sure the action works on a clean machine with plugins
  test-plugins:
    needs: [ build ]
    strategy:
      matrix:
        os:
          - ubuntu-latest
          - ubuntu-22.04-arm
          - macos-latest
          - windows-latest
        version:
          - ""
          - "latest"
          - "v2.7"
          - "v2.7.2"
    runs-on: ${{ matrix.os }}
    permissions:
      contents: read
      pull-requests: read
    steps:
      - uses: actions/checkout@v6
      - uses: actions/setup-node@v6
        with:
          node-version: 24.x
      - uses: actions/setup-go@v6
        with:
          go-version: oldstable
      - uses: ./
        with:
          version: ${{ matrix.version }}
          working-directory: fixtures/plugins
          args: --timeout=5m --issues-exit-code=0 ./...

  test-monorepo:
    needs: [ build ]
    strategy:
      matrix:
        os:
          - ubuntu-latest
          - ubuntu-22.04-arm
          - macos-latest
          - windows-latest
    runs-on: ${{ matrix.os }}
    permissions:
      contents: read
      pull-requests: read
    steps:
      - uses: actions/checkout@v6
      - uses: actions/setup-node@v6
        with:
          node-version: 24.x
      - uses: actions/setup-go@v6
        with:
          go-version: oldstable
      - uses: ./
        with:
          working-directory: fixtures/monorepo
          experimental: "automatic-module-directories"
          args: --timeout=5m --issues-exit-code=0 ./...
