name: Test Go

on:
  pull_request:
    branches: [ main ]
    paths:
      - 'go/**'
  workflow_dispatch:

concurrency:
  group: ci-go-tests-${{ github.event.pull_request.number || github.ref }}
  cancel-in-progress: true

jobs:
  test:
    name: Go tests
    defaults:
      run:
        shell: bash
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        os: [macos-latest, ubuntu-22.04, windows-latest]
    steps:
    - name: Set up Go 1.x
      uses: actions/setup-go@v3
      with:
        go-version: ^1.21
      id: go
    - uses: actions/checkout@v3
    - name: Test All
      working-directory: ./go
      run: |
        files=$(go list ./...)
        SAVEIFS=$IFS
        IFS=$'\n'
        file_arr=($files)
        IFS=$SAVEIFS

        for (( i=0; i<${#file_arr[@]}; i++ ))
        do
          echo "Testing Package: ${file_arr[$i]}"
          if [ "$MATRIX_OS" == 'ubuntu-22.04' ]
          then
            if [[ "${file_arr[$i]}" != *enginetest* ]]; then
              go test -vet=off -timeout 45m -race "${file_arr[$i]}"
            else
              echo "skipping enginetests for -race"
            fi
          else
            go test -vet=off -timeout 45m "${file_arr[$i]}"
          fi
          succeeded=$(echo "$?")
          if [ "$succeeded" -ne 0 ]; then
            echo "Testing failed in package ${file_arr[$i]}"
            exit 1;
          fi
        done
      env:
        MATRIX_OS: ${{ matrix.os }}
  noracetest:
    name: Go tests - no race
    defaults:
      run:
        shell: bash
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        os: [macos-latest, ubuntu-22.04, windows-latest]
    steps:
    - name: Set up Go 1.x
      uses: actions/setup-go@v3
      with:
        go-version: ^1.21
      id: go
    - uses: actions/checkout@v3
    - name: Test All
      working-directory: ./go
      run: |
        go test -vet=off -timeout 30m ./libraries/doltcore/sqle/integration_test
      env:
        MATRIX_OS: ${{ matrix.os }}
        DOLT_TEST_RUN_NON_RACE_TESTS: "true"
