name: Build and test C

on:
  push:
    branches: [main, stable, oldstable]
  pull_request:
    branches: [main, stable, oldstable]

jobs:
  c-format-check:
    name: Check C Source Code Formatting
    runs-on: "ubuntu-latest"
    steps:
      - uses: actions/checkout@v4
      - name: Check Source Format
        run: |
          clang-format -i -style=file src/*.{c,h}
          git diff --exit-code
  build-gsad:
    name: Build gsad
    runs-on: "ubuntu-latest"
    strategy:
      matrix:
        container:
          - greenbone/gsad-build:stable
    container: ${{ matrix.container }}
    steps:
      - uses: actions/checkout@v4
      - name: Configure and compile gsad
        run: |
          mkdir build
          rm -rf .git
          cd build/
          cmake -DCMAKE_BUILD_TYPE=Release ..
          make install

  unittests:
    name: Unit Tests
    runs-on: ubuntu-latest
    container: greenbone/gsad-build:stable
    steps:
      - name: Install git for Codecov uploader
        run: |
          apt update
          apt install --no-install-recommends -y ca-certificates git
          rm -rf /var/lib/apt/lists/*
      - uses: actions/checkout@v4
      - name: Configure and compile gsad
        run: |
          cmake -B build -DCMAKE_BUILD_TYPE=Debug -DBUILD_TESTING=1 -DENABLE_COVERAGE=1 .
          cmake --build build
      - name: Configure and run tests
        run: CTEST_OUTPUT_ON_FAILURE=1 cmake --build build -- tests test
      - name: Upload test coverage to Codecov
        uses: codecov/codecov-action@v4
        with:
          file: build/coverage/coverage.xml
          token: ${{ secrets.CODECOV_TOKEN }}
          flags: unittests
