name: CI

on:
  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]
  schedule:
  - cron: '0 10 * * 1' # run "At 10:00 on Monday"

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

jobs:
  test:
    strategy:
      matrix:
        os: [ ubuntu-latest, macos-latest, windows-latest ]
        go: [ '1.15', 'stable', 'oldstable' ]

    runs-on: ${{ matrix.os }}
    steps:
    - name: Checkout
      uses: actions/checkout@v3

    - name: Setup Go
      uses: actions/setup-go@v4
      with:
        go-version: ${{ matrix.go }}
        check-latest: true

    - name: Go Env
      run: |
        go env

    - name: Go Mod
      run: |
        go mod download

    - name: Go Mod Verify
      run: |
        go mod verify

    - name: Test Go 1.15
      # This step if needed because -shuffle not available on Go 1.15.
      # Tests are failing on MacOS. So, we just disable it.
      if: >-
        matrix.go == '1.15' && matrix.os != 'macos-latest'
      run: |
        go test -v -race -cover ./...

    - name: Test
      if: >-
        matrix.go != '1.15'
      run: |
        go test -v -race -shuffle=on -cover ./...

    - name: Autobahn
      if: >-
        startsWith(matrix.os, 'ubuntu')
      env:
        CRYPTOGRAPHY_ALLOW_OPENSSL_102: yes
      run: |
        make test autobahn

    - name: Autobahn Report Artifact
      if: >-
        startsWith(matrix.os, 'ubuntu')
      uses: actions/upload-artifact@v3
      with:
        name: autobahn report ${{ matrix.go }} ${{ matrix.os }}
        path: autobahn/report
        retention-days: 7
