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:
    defaults:
      run:
        shell: bash
    strategy:
      matrix:
        go-version: [1.x, 1.21.x]
        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@v5
      with:
        go-version: ${{ matrix.go-version }}
    - uses: actions/checkout@v4

    # 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@v4
      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@5ecb98a3c6b747ed38dc09f787459979aebb39be #v4.3.1
