name: test

on:
  pull_request:
  push:
    branches:
      - main

env:
  GOPROXY: https://proxy.golang.org/

jobs:
  test:
    runs-on: ${{ matrix.os }}
    timeout-minutes: 10
    strategy:
      fail-fast: false
      matrix:
        os:
          - ubuntu-latest
          - windows-latest
          - macos-latest
    steps:
      - name: Checkout
        uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # https://github.com/actions/checkout/releases/tag/v4.1.1
      - name: Set up Go
        uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # https://github.com/actions/setup-go/releases/tag/v4.1.0
        with:
          go-version-file: ".go-version"
      - name: Go mod download
        run: go mod download -x
      - name: Go mod verify
        run: go mod verify
      - name: Run go fmt
        run: go run github.com/mh-cbon/go-fmt-fail ./...
      - name: Run tests
        run: go test -cover -covermode=atomic -timeout=5m -race ./...
