name: Bigfoot

on:
  push:
    branches:
      - '**'
  workflow_dispatch:

jobs:
  build-and-test:
    runs-on: ubuntu-latest
    timeout-minutes: 120
    container:
      image: git.romainboullard.com/bigfootdev/linuxbigfootbuilder:main
      volumes:
        - /srv/romainboullard.com/caches/ccache:/ccache
    env:
      CCACHE_DIR: /ccache
      CCACHE_MAXSIZE: 10G
      CCACHE_BASEDIR: /root/.conan2
      CCACHE_NOHASHDIR: "true"
      CCACHE_COMPILERCHECK: "%compiler% -dumpversion"
    strategy:
      matrix:
        build_type: ["Debug", "RelWithDebInfo", "Release"]
        unity_build: ["ON", "OFF"]
        conan_profile: ["./ConanProfiles/clang", "./ConanProfiles/clang_asan"]
    name: "Build & Test ${{ matrix.build_type }} with ${{ matrix.conan_profile }} (Unity Build: ${{ matrix.unity_build }})"
    steps:
      - name: Install Node.js
        run: apt-get update && apt-get install -y nodejs

      - name: Checkout repository
        uses: actions/checkout@v6
        with:
          submodules: recursive

      - name: Reset ccache stats
        run: ccache --zero-stats

      - name: Build
        run: |
            conan install . --remote=bigfootpackages -pr:h=${{ matrix.conan_profile }} -pr:b=./ConanProfiles/Tools/clang  --build=* -s build_type=${{ matrix.build_type }} -o bigfoot/*:build_tests=True -o bigfoot/*:tracy=False -o bigfoot/*:vulkan=True
            cmake -S . -B ./build/${{ matrix.build_type }} --toolchain ./build/${{ matrix.build_type }}/generators/conan_toolchain.cmake -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} -DCMAKE_UNITY_BUILD=${{ matrix.unity_build }} -G "Ninja"
            cmake --build build/${{ matrix.build_type }} --parallel $(nproc)

      - name: Show ccache stats
        run: ccache --show-stats

      - name: Unit Tests
        run: |
            cd ./build/${{ matrix.build_type }}
            xvfb-run ctest . --output-on-failure

  clang-format:
    runs-on: ubuntu-latest
    timeout-minutes: 120
    container:
      image: git.romainboullard.com/bigfootdev/linuxbigfootbuilder:main
    name: "Clang Format Checks"
    steps:
      - name: Install Node.js
        run: apt-get update && apt-get install -y nodejs

      - name: Checkout repository
        uses: actions/checkout@v6
        with:
          submodules: recursive
          
      - name: Clang Format Checks
        run: chmod +x format.sh && ./format.sh --check Bigfoot