name: linter

on:
  pull_request:
    types:
      - opened
      - reopened
      - synchronize
      - ready_for_review
    branches:
      - "main"
      - 'release-**'

concurrency:
  group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
  cancel-in-progress: true

jobs:
  changes:
    outputs:
      should-run-linting: ${{ steps.changes.outputs.go == 'true' }}
    if: github.event.pull_request.draft == false
    runs-on: ubuntu-22.04
    steps:
      - uses: actions/checkout@v4
      - uses: dorny/paths-filter@v2
        id: changes
        with:
          filters: |
            go:
              - '**.go'
              - 'go.*'
              - '.github/workflows/lint.yml'
              - '.golangci.yml'

  golangci-lint:
    needs: [changes]
    if: github.event.pull_request.draft == false && needs.changes.outputs.should-run-linting == 'true'
    name: Linting
    runs-on: ubuntu-22.04
    steps:
    - uses: actions/checkout@v4

    # need to setup go toolchain explicitly
    - uses: actions/setup-go@v5
      with:
        go-version-file: go.mod

    - name: golangci-lint
      uses: reviewdog/action-golangci-lint@v2
      with:
        tool_name: golangci-lint

  skip-lint:
    needs: [changes]
    if: needs.changes.outputs.should-run-linting == 'false'
    name: Linting
    runs-on: ubuntu-22.04
    steps:
      - run: 'echo "No build required"'
