name: GolangCILint

on:
  pull_request:
    types: [opened, edited, synchronize, reopened]
    paths:
      - 'pkg/**'
      - 'cmd/**'
      - 'version/**'
      - 'go.mod'
      - 'go.sum'
      - 'api/**'

# Remove all permissions from GITHUB_TOKEN except metadata.
permissions: {}

jobs:
  golangci:
    name: lint
    runs-on: ubuntu-latest
    if: github.repository == 'kubesphere/kubekey'
    steps:
      - name: Checkout
        uses: actions/checkout@v3
        with:
          fetch-depth: 0

      - name: Setup golang
        uses: actions/setup-go@v5
        with:
          go-version: 1.23.3

      - name: Sync mod
        run: make generate-modules

      - name: golangci-lint
        uses: golangci/golangci-lint-action@v6
        with:
          version: v1.63.3

  verify:
    name: verify
    runs-on: ubuntu-latest
    if: github.repository == 'kubesphere/kubekey'
    steps:
      - name: Checkout
        uses: actions/checkout@v3
        with:
          fetch-depth: 0

      - name: Setup golang
        uses: actions/setup-go@v5
        with:
          go-version: 1.23.3

      - name: Sync mod
        run: make generate-modules

      - name: Verify
        run: ALL_VERIFY_CHECKS="goimports releaser" make verify

  test:
    name: test
    runs-on: ubuntu-latest
    if: github.repository == 'kubesphere/kubekey'
    steps:
      - name: Checkout
        uses: actions/checkout@v3
        with:
          fetch-depth: 0

      - name: Setup golang
        uses: actions/setup-go@v5
        with:
          go-version: 1.23.3

      - name: Sync mod
        run: make generate-modules

      - name: Test
        run: make test
