name: CMake

on: [ pull_request ]

env:
  # Customize the CMake build type here (Release, Debug, RelWithDebInfo, etc.)
  BUILD_TYPE: Release

jobs:
  build:
    # The CMake configure and build commands are platform agnostic and should work equally
    # well on Windows or Mac.  You can convert this to a matrix build if you need
    # cross-platform coverage.
    # See: https://docs.github.com/en/free-pro-team@latest/actions/learn-github-actions/managing-complex-workflows#using-a-build-matrix
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v2

      - name: Install linux dependencies
        run: |
          sudo apt-get update
          sudo apt install git cmake ninja-build libasan6 libubsan1 libsdl2-dev libgl1-mesa-dev libglu1-mesa-dev libxcursor-dev libxrandr-dev x11-common xorg-dev extra-cmake-modules build-essential autoconf automake libtool pkg-config libx11-dev libxext-dev libxrandr-dev libxcursor-dev libxi-dev libxinerama-dev libxxf86vm-dev libxss-dev libgl1-mesa-dev libdbus-1-dev libudev-dev libgles2-mesa-dev libegl1-mesa-dev libibus-1.0-dev fcitx-libs-dev libsamplerate0-dev libsndio-dev libwayland-dev libxkbcommon-dev libdrm-dev libgbm-dev libdecoration0-dev

      - name: Install git lfs
        run: git lfs install

      - name: Clone Submodules
        run: git submodule init && git submodule update

      - name: CMake
        # Execute the build.  You can specify a specific target with "--target <NAME>"
        run: cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DSDL_VIDEO=OFF

      - name: Build
        working-directory: build
        run: ninja

      - name: Test
        working-directory: build
        # Execute tests defined by the CMake configuration.
        # See https://cmake.org/cmake/help/latest/manual/ctest.1.html for more detail
        run: ctest -C $BUILD_TYPE

  Cppcheck:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2

      - name: Install Cppcheck
        run: sudo apt install cppcheck

      - name: Run Cppcheck
        working-directory: ${{github.workspace}}
        shell: bash
        run: cppcheck src/ --enable=all --error-exitcode=1 --suppress=unusedFunction --suppress=stlFindInsert

  Clang-format:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2

      - name: Install clang-format
        run: |
          sudo apt install clang-format-12
          clang-format-12 --version
          clang-format-12 --help

      - name: Run clang-format
        working-directory: src
        shell: bash
        run: find . -name "*.cpp" -o -name "*.h" | xargs -I {} clang-format-12 --style=file --Werror --dry-run {}
