name: "Unit Tests"

on:
  push:
    branches: [ '*' ]
  pull_request:
    branches: [ '*' ]
  repository_dispatch:
    types: [run_tests]

jobs:
  tests:
    name: 🧪 Unit Tests
    runs-on: ubuntu-22.04
    permissions:
      actions: read
      contents: read
      security-events: write

    steps:
    - name: 🧰 Checkout
      uses: actions/checkout@v2
      with:
        submodules: recursive

    - name: ⬇️ Install dependencies
      run: |
        sudo apt update
        sudo apt install -y       \
            build-essential       \
            gcc-12                \
            g++-12                \
            lld                   \
            ${PKGCONF:-}          \
            cmake                 \
            make                  \
            python3               \
            python3-pip           \
            libmagic-dev          \
            lcov
        
        sudo pip install jsonschema

    - name: 🛠️ Build
      run: |
        cd tests
        mkdir -p build
        cd build
        CC=gcc-12 CXX=g++-12 cmake                        \
          -DCMAKE_C_FLAGS="-fuse-ld=lld --coverage"       \
          -DCMAKE_CXX_FLAGS="-fuse-ld=lld --coverage"     \
          -DLIBPL_ENABLE_TESTS=OFF                        \
          -DLIBPL_ENABLE_CLI=OFF                          \
          ..
        make -j4

    - name: 🧪 Perform Unit Tests
      run: |
        cd tests/build
        ctest --output-on-failure

    #- name: ⚗️ Generate Coverage Report
    #  run: |
    #    cd tests/build
    #    lcov -d ./_deps/pattern_language-build/lib --gcov-tool /usr/bin/gcov-12 -c -o coverage.info

    #- name: ⬆️ Upload Coverage Report
    #  uses: coverallsapp/github-action@master
    #  env:
    #    NODE_OPTIONS: --max-old-space-size=8000 
    #  with:
    #    github-token: ${{ secrets.GITHUB_TOKEN }}
    #    path-to-lcov: tests/build/coverage.info

    - name: 📎 Validate JSON Files
      run: |
        cd constants
        for file in ./[!_schema.json]*; do jsonschema -i $file _schema.json; done
        cd ..
        
        cd tips
        for file in ./[!_schema.json]*; do jsonschema -i $file _schema.json; done
        cd ..
