---
name: Tests
on: [push, pull_request]
permissions: read-all
jobs:
  test-windows:
    strategy:
      fail-fast: false
      matrix:
        target:
          - windows-amd64-unit-test-4-cpu
        # FIXME(fuweid):
        #
        # The windows will throws the following error when enable race.
        # We skip it until we have solution.
        #
        #   ThreadSanitizer failed to allocate 0x000200000000 (8589934592) bytes at 0x0400c0000000 (error code: 1455)
        #
        # - windows-amd64-unit-test-4-cpu-race
    runs-on: windows-latest
    steps:
      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
      - id: goversion
        run: echo "goversion=$(cat .go-version)" >> "$GITHUB_OUTPUT"
      - uses: actions/setup-go@f111f3307d8850f501ac008e886eec1fd1932a34 # v5.3.0
        with:
          go-version: ${{ steps.goversion.outputs.goversion }}
      - run: make fmt
      - env:
          TARGET: ${{ matrix.target }}
        run: |
          case "${TARGET}" in
            windows-amd64-unit-test-4-cpu)
              CPU=4 TIMEOUT=50m make test
              ;;
            *)
              echo "Failed to find target"
              exit 1
              ;;
          esac
        shell: bash
      - name: golangci-lint
        uses: golangci/golangci-lint-action@ec5d18412c0aeab7936cb16880d708ba2a64e1ae # v6.2.0
        with:
          version: v1.64.8

  coverage:
    needs: ["test-windows"]
    runs-on: windows-latest
    steps:
      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
      - id: goversion
        run: echo "goversion=$(cat .go-version)" >> "$GITHUB_OUTPUT"
      - uses: actions/setup-go@f111f3307d8850f501ac008e886eec1fd1932a34 # v5.3.0
        with:
          go-version: ${{ steps.goversion.outputs.goversion }}
      - run: make coverage
        env:
          TIMEOUT: 50m
