name: Go

on:
  schedule:
    # run every Sunday
    - cron: '0 13 * * 0'
  push:
    branches:
      - main
      - release-0.1x
    tags:
      - v[0-9]+.[0-9]+.[0-9]+*
  pull_request:

permissions:
  contents: read

jobs:
  build:
    name: Build

    strategy:
      fail-fast: false
      matrix:
        image:
          - mongo:5.0
          - mongo:6.0
          - mongo:7.0
          - mongo:8.0
          - mongo:latest
          - percona/percona-server-mongodb:5.0
          - percona/percona-server-mongodb:6.0
          - percona/percona-server-mongodb:7.0
          - percona/percona-server-mongodb:8.0
          - percona/percona-server-mongodb:latest

    runs-on: ubuntu-latest

    steps:
      - name: Checkout code
        uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0

      - name: Set up Go
        uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0
        with:
          go-version-file: ${{ github.workspace }}/go.mod

      - name: Install kerberos development libraries
        run: |
          sudo apt-get update
          sudo apt-get install libkrb5-dev

      - name: Run tests with code coverage
        run: |
          TEST_MONGODB_IMAGE=${{ matrix.image }} make test-cluster
          sleep 10
          make test-cover
          make test-cluster-clean


      - name: Upload coverage results
        uses: codecov/codecov-action@18283e04ce6e62d37312384ff67231eb8fd56d24 # v5.4.3
        with:
          files: cover.out
          flags: agent
          env_vars: GO_VERSION,TEST_MONGODB_IMAGE
          fail_ci_if_error: false

      - name: Run debug commands on failure
        if: ${{ failure() }}
        run: |
          echo "--- Environment variables ---"
          env | sort
          echo "--- GO Environment ---"
          go env | sort
          echo "--- Git status ---"
          git status
          echo "--- Docker logs ---"
          docker compose logs
          echo "--- Docker ps ---"
          docker compose ps -a
