name: "Unit Tests"

on:
  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]
  workflow_dispatch:

jobs:
  tests:
    name: ๐Ÿงช Unit Tests
    runs-on: ubuntu-22.04
    permissions:
      actions: read
      contents: read
      security-events: write

    steps:
    - name: ๐Ÿงฐ Checkout
      uses: actions/checkout@v3
      with:
        submodules: recursive

    - name: ๐Ÿ“œ Setup ccache
      uses: hendrikmuhs/ccache-action@v1.2
      with:
        key: ${{ runner.os }}-tests-build-${{ github.run_id }}
        restore-keys: ${{ runner.os }}-tests-build
        max-size: 50M


    - name: ๐Ÿ“œ Restore CMakeCache
      uses: actions/cache@v3
      with:
        path: |
          build/CMakeCache.txt
        key: ${{ runner.os }}-tests-build-${{ hashFiles('**/CMakeLists.txt') }}

    - name: โฌ‡๏ธ Install dependencies
      run: |
        sudo apt update
        sudo bash dist/get_deps_debian.sh

    - name: ๐Ÿ› ๏ธ Build
      run: |
        set -x
        mkdir -p build
        cd build
        CC=gcc-12 CXX=g++-12 cmake                                                                      \
          -DCMAKE_BUILD_TYPE=Debug                                                                      \
          -DCMAKE_C_COMPILER_LAUNCHER=ccache                                                            \
          -DCMAKE_CXX_COMPILER_LAUNCHER=ccache                                                          \
          -DCMAKE_C_FLAGS="-fuse-ld=lld -fsanitize=address,leak,undefined -fno-sanitize-recover=all"    \
          -DCMAKE_CXX_FLAGS="-fuse-ld=lld -fsanitize=address,leak,undefined -fno-sanitize-recover=all"  \
          -DIMHEX_OFFLINE_BUILD=ON                                                                      \
          ..
        make -j4 unit_tests

    - name: ๐Ÿงช Perform Unit Tests
      run: |
        cd build
        ctest --output-on-failure