concurrency:
  group: ${{ github.repository }}-${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

on:
  push:
    branches:
      - master
  pull_request:
    branches:
      - master

name: tests
env:
  GO111MODULE: on

permissions:
  contents: read

jobs:
  test:
    permissions:
      contents: read
      id-token: write
    defaults:
      run:
        shell: bash
    strategy:
      matrix:
        go-version: [1.x, 1.24.0] # test with N and the .0 release of N-1
        platform: [ubuntu-latest]
        include:
          # include windows, but only with the latest Go version, since there
          # is very little in the library that is platform specific
          - go-version: 1.x
            platform: windows-latest

          # only update test coverage stats with the most recent go version on linux
          - go-version: 1.x
            platform: ubuntu-latest
            update-coverage: true
    runs-on: ${{ matrix.platform }}

    steps:
      - uses: actions/setup-go@44694675825211faa026b3c33043df3e48a5fa00 # v6.0.0
        with:
          go-version: ${{ matrix.go-version }}
      - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0

      # Get values for cache paths to be used in later steps
      - id: cache-paths
        run: |
          echo "go-cache=$(go env GOCACHE)" >> $GITHUB_OUTPUT
          echo "go-mod-cache=$(go env GOMODCACHE)" >> $GITHUB_OUTPUT

      - name: Cache go modules
        uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # v4.2.4
        with:
          path: |
            ${{ steps.cache-paths.outputs.go-cache }}
            ${{ steps.cache-paths.outputs.go-mod-cache }}
          key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }}
          restore-keys: ${{ runner.os }}-go-

      - name: Run go test
        run: |
          if [ -n "${{ matrix.update-coverage }}" ]; then
            script/test.sh -race -covermode atomic -coverprofile coverage.txt ./...
            exit
          fi
          script/test.sh -race -covermode atomic ./...

      - name: Ensure integration tests build
        # don't actually run tests since they hit live GitHub API
        run: go test -v -tags=integration -run=^$ ./test/integration

      - name: Upload coverage to Codecov
        if: ${{ matrix.update-coverage }}
        uses: codecov/codecov-action@5a1091511ad55cbe89839c7260b706298ca349f7 # v5.5.1
        with:
          use_oidc: true
