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.16.x, 1.17.x, 1.18.x, 1.19.x, 1.20.x]
        platform: [ubuntu-latest, macos-latest, windows-latest]

    runs-on: ${{ matrix.platform }}
    steps:
      - name: Checkout
        uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0
      - name: Setup Go
        uses: actions/setup-go@6edd4406fa81c3da01a34fa6f6343087c207a568 # v3.5.0
        with:
          go-version: ${{ matrix.go-version }}
      - name: Run Tests
        run: make test

  tests:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0
      - name: Setup Go
        uses: actions/setup-go@6edd4406fa81c3da01a34fa6f6343087c207a568 # v3.5.0
        with:
          go-version: 1.20.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
