name: CI Tests

on:
  - push
  - pull_request

jobs:
  build-and-test:
    strategy:
      fail-fast: false
      matrix:
        os:
          - ubuntu-20.04
          - ubuntu-22.04
          - ubuntu-24.04
        compiler:
          - gcc
          - clang
    runs-on: ${{ matrix.os }}

    steps:
    - uses: actions/checkout@v4

    - name: Set up dependencies
      run: |
          sudo apt update
          sudo apt install -y lcov libsqlite3-dev liblz4-dev libuv1-dev
          # TODO: remove once the mysterious hang is fixed
          sudo apt install -y gdb

    - name: Build dqlite
      env:
        CC: ${{ matrix.compiler }}
      run: |
          autoreconf -i
          ./configure --enable-debug --enable-code-coverage --enable-sanitize \
                      --enable-build-raft
          make -j$(nproc) check-norun

    - name: Test
      env:
        CC: ${{ matrix.compiler }}
        LIBDQLITE_TRACE: 1
        ASAN_OPTIONS: fast_unwind_on_malloc=0
      run: |
          make check || (cat test-suite.log && false)

    - name: Coverage
      env:
        CC: ${{ matrix.compiler }}
      if: ${{ matrix.os == 'ubuntu-22.04' && matrix.compiler == 'gcc' }}
      run: |
        make code-coverage-capture

    - name: Upload coverage to Codecov
      uses: codecov/codecov-action@v4
      with:
        verbose: true
