name: Test
on: [push, pull_request]
jobs:
  build:
    strategy:
      matrix:
        go-version: [1.20.x, 1.21.x]
        platform: [windows-latest]
    runs-on: ${{ matrix.platform }}
    steps:
      - name: Install Go
        uses: actions/setup-go@v3
        with:
          go-version: ${{ matrix.go-version }}
      - name: Checkout code
        uses: actions/checkout@v2
      - name: Build
        run: |
          go build ./...
      - name: Run Windows Unit Tests
        run: |
          $env:GH_ACTION="TRUE"
          go test -v -race ./mount/...
  test:
    strategy:
      matrix:
        go-version: [1.20.x, 1.21.x]
        platform: [ubuntu-latest, macos-latest]
    runs-on: ${{ matrix.platform }}
    steps:
    - name: Install Go
      uses: actions/setup-go@v3
      with:
        go-version: ${{ matrix.go-version }}
    - name: Checkout code
      uses: actions/checkout@v2
    - name: Test
      run: |
        make test
  verify-go-directive:
    strategy:
      matrix:
        go-version: [1.20.x, 1.21.x]
        platform: [ubuntu-latest, macos-latest]
    runs-on: ${{ matrix.platform }}
    steps:
    - name: Install Go
      uses: actions/setup-go@v3
      with:
        go-version: ${{ matrix.go-version }}
    - name: Checkout code
      uses: actions/checkout@v2
    - name: Verify go directive
      run: |
        make verify-go-directive
  lint:
    runs-on: ubuntu-latest
    steps:
      - name: Install Go
        uses: actions/setup-go@v3
      - name: Checkout code
        uses: actions/checkout@v2
      - name: Lint
        run: |
          docker run --rm -v `pwd`:/go/src/k8s.io/klog -w /go/src/k8s.io/klog \
            golangci/golangci-lint:v1.51.2 golangci-lint run --disable-all -v \
            -E govet -E misspell -E gofmt -E ineffassign -E golint
  apidiff:
    runs-on: ubuntu-latest
    if: github.base_ref
    steps:
      - name: Install Go
        uses: actions/setup-go@v3
        with:
          go-version: 1.21.x
      - name: Add GOBIN to PATH
        run: echo "$(go env GOPATH)/bin" >> $GITHUB_PATH
      - name: Install dependencies
        run: go install golang.org/x/exp/cmd/apidiff@latest
      - name: Checkout old code
        uses: actions/checkout@v2
        with:
          ref: ${{ github.base_ref }}
          path: "old"
      - name: Checkout new code
        uses: actions/checkout@v2
        with:
          path: "new"
      - name: APIDiff
        run: ./hack/verify-apidiff.sh -d ../old
        working-directory: "new"
