name: Test Bats Unix Remote

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

concurrency:
  group: ci-bats-unix-remote${{ github.event.pull_request.number || github.ref }}
  cancel-in-progress: true

jobs:
  test:
    name: Bats tests
    defaults:
      run:
        shell: bash
    runs-on: ubuntu-22.04
    strategy:
      fail-fast: true
    env:
      use_credentials: ${{ secrets.AWS_SECRET_ACCESS_KEY != '' && secrets.AWS_ACCESS_KEY_ID != '' }}
    # We only run these as seaparte workflow if we do not have AWS credentials.
    steps:
      - uses: actions/checkout@v4
        if: ${{ env.use_credentials != 'true' }}
      - name: Setup Go 1.x
        if: ${{ env.use_credentials != 'true' }}
        uses: actions/setup-go@v5
        with:
          go-version-file: go/go.mod
        id: go
      - name: Setup Python 3.x
        if: ${{ env.use_credentials != 'true' }}
        uses: actions/setup-python@v5
        with:
          python-version: "3.10"
      - uses: actions/setup-node@v4
        if: ${{ env.use_credentials != 'true' }}
        with:
          node-version: ^16
      - name: Create CI Bin
        if: ${{ env.use_credentials != 'true' }}
        run: |
          mkdir -p ./.ci_bin
          echo "$(pwd)/.ci_bin" >> $GITHUB_PATH
      - name: Install Bats
        if: ${{ env.use_credentials != 'true' }}
        run: |
          npm i bats
          echo "$(pwd)/node_modules/.bin" >> $GITHUB_PATH
        working-directory: ./.ci_bin
      - name: Install Python Deps
        if: ${{ env.use_credentials != 'true' }}
        run: |
          pip install mysql-connector-python
          pip install pandas
          pip install pyarrow
      - name: Install Dolt
        if: ${{ env.use_credentials != 'true' }}
        working-directory: ./go
        run: |
          go build -mod=readonly -o ../.ci_bin/dolt ./cmd/dolt/.

          go build -mod=readonly -o ../.ci_bin/remotesrv ./utils/remotesrv/.
          go build -mod=readonly -o ../.ci_bin/noms ./store/cmd/noms/.
      - name: Setup Dolt Config
        if: ${{ env.use_credentials != 'true' }}
        run: |
          dolt config --global --add user.name 'Dolthub Actions'
          dolt config --global --add user.email 'actions@dolthub.com'
      - name: Install expect
        if: ${{ env.use_credentials != 'true' }}
        run: sudo apt-get install -y expect
      - name: Install Maven
        if: ${{ env.use_credentials != 'true' }}
        working-directory: ./.ci_bin
        run: |
          curl -LO https://dlcdn.apache.org/maven/maven-3/3.9.4/binaries/apache-maven-3.9.4-bin.tar.gz
          tar -xf apache-maven-3.9.4-bin.tar.gz
          echo "$(pwd)/apache-maven-3.9.4/bin" >> $GITHUB_PATH
      - name: Install Hadoop
        if: ${{ env.use_credentials != 'true' }}
        working-directory: ./.ci_bin
        run: |
          curl -LO https://downloads.apache.org/hadoop/common/hadoop-3.3.6/hadoop-3.3.6.tar.gz
          tar xvf hadoop-3.3.6.tar.gz
          echo "$(pwd)/hadoop-3.3.6/bin" >> $GITHUB_PATH
      - name: Install parquet-cli
        if: ${{ env.use_credentials != 'true' }}
        id: parquet_cli
        working-directory: ./.ci_bin
        run: |
          curl -OL https://github.com/apache/parquet-mr/archive/refs/tags/apache-parquet-1.12.3.tar.gz
          tar zxvf apache-parquet-1.12.3.tar.gz
          cd parquet-java-apache-parquet-1.12.3/parquet-cli
          mvn clean install -DskipTests
          runtime_jar="$(pwd)"/target/parquet-cli-1.12.3-runtime.jar
          echo "runtime_jar=$runtime_jar" >> $GITHUB_OUTPUT
      - name: Check expect
        if: ${{ env.use_credentials != 'true' }}
        run: expect -v
      - name: Test all Unix
        if: ${{ env.use_credentials != 'true' }}
        env:
          SQL_ENGINE: "remote-engine"
          PARQUET_RUNTIME_JAR: ${{ steps.parquet_cli.outputs.runtime_jar }}
          BATS_TEST_RETRIES: "3"
        run: |
          bats --tap .
        working-directory: ./integration-tests/bats
