name: tests

on:
  pull_request:

  push:
    branches:
      - main
  
  schedule:
    - cron:  '0 0 * * *'

  workflow_dispatch:

permissions:
  contents: none

jobs:

  compatibility:
    strategy:
      fail-fast: false
      matrix:
        go-version: [1.21.x, ^1.22.x]
        platform: [ubuntu-latest, macos-latest, windows-latest]

    runs-on: ${{ matrix.platform }}
    steps:
      - name: Checkout
        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
      - name: Setup Go
        uses: actions/setup-go@3041bf56c941b39c61721a86cd11f3bb1338122a # v5.2.0
        with:
          go-version: ${{ matrix.go-version }}
      - name: Run Tests
        run: make test

  tests:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
      - name: Setup Go
        uses: actions/setup-go@3041bf56c941b39c61721a86cd11f3bb1338122a # v5.2.0
        with:
          go-version: ^1.22.x
      - name: Run benchmarks
        run: make bench
      - name: Run fuzzers
        env:
          # Run for 2 minutes to ensure it is working. Long runs happens nightly.
          FUZZ_TIME: 2m
        run: make fuzz
