Skip to content

Improve CLI + Added CI & Style #1

Improve CLI + Added CI & Style

Improve CLI + Added CI & Style #1

name: CMake on multiple platforms
on:
push:
branches: [ "master" ]
pull_request:
branches: [ "master" ]
types: [ "opened", "reopened", "synchronize", "ready_for_review" ]
jobs:
build:
runs-on: ${{ matrix.os }}
strategy:
# ensure we don't stop after 1 failure to always have a complete picture of what is failing
fail-fast: false
# Set up a matrix to run the following configurations:
# - ubuntu Debug/Release clang/gcc
# - windows Debug/Release cl
# - macos Debug/Release clang
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
build_type: [Release, Debug]
c_compiler: [gcc, clang, cl]
include:
- os: windows-latest
c_compiler: cl
cpp_compiler: cl
- os: ubuntu-latest
c_compiler: gcc
cpp_compiler: g++
- os: ubuntu-latest
c_compiler: clang
cpp_compiler: clang++
- os: macos-latest
c_compiler: clang
cpp_compiler: clang++
exclude:
- os: windows-latest
c_compiler: gcc
- os: windows-latest
c_compiler: clang
- os: ubuntu-latest
c_compiler: cl
- os: macos-latest
c_compiler: cl
- os: macos-latest
c_compiler: gcc
steps:
- uses: actions/checkout@v3
- name: Set Env
shell: bash
run: |
echo "BUILD_OUTPUT_DIR=${{ github.workspace }}/build" >> "$GITHUB_ENV"
- name: VCPKG Install (Windows)
if: runner.os == 'Windows'
uses: ./.github/workflows/windows-vcpkg
with:
key: ${{ runner.os }}-${{ matrix.build_type }}
- name: Configure CMake
# Configure CMake in a 'build' subdirectory.
# `CMAKE_BUILD_TYPE` is only required if you are using a single-configuration generator such as make.
# See https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html?highlight=cmake_build_type
run: >
cmake -B ${{ env.BUILD_OUTPUT_DIR }}
-DCMAKE_CXX_COMPILER=${{ matrix.cpp_compiler }}
-DCMAKE_C_COMPILER=${{ matrix.c_compiler }}
-DCMAKE_BUILD_TYPE=${{ matrix.build_type }}
-DFILE_SHARE_BUILD_TESTS=TRUE
-S ${{ github.workspace }}
- name: Build
# Build your program with the given configuration. Note that --config is needed
# because the default Windows generator is a multi-config generator (Visual Studio generator).
run: cmake --build ${{ env.BUILD_OUTPUT_DIR }} --config ${{ matrix.build_type }}
- uses: actions/upload-artifact@v4
if: matrix.os == 'ubuntu-latest' && matrix.build_type == 'Release' && matrix.c_compiler == 'clang'
with:
name: compile_commands.json
path: ${{ env.BUILD_OUTPUT_DIR }}/compile_commands.json
- name: Test
working-directory: ${{ env.BUILD_OUTPUT_DIR }}
# Execute tests defined by the CMake configuration. Note that --build-config is needed
# because the default Windows generator is a multi-config generator (Visual Studio generator).
# See https://cmake.org/cmake/help/latest/manual/ctest.1.html for more detail
run: ctest --build-config ${{ matrix.build_type }} --test-dir tests --output-on-failure
clang-tidy:
needs: 'build'
runs-on: ubuntu-latest
if: always() && github.event_name == 'pull_request'
steps:
- name: Checkout Code
uses: actions/checkout@v4
- uses: actions/download-artifact@v4
with:
name: compile_commands.json
- name: clang-tidy review
uses: ZedThree/clang-tidy-review@v0.21.0
# If there are any comments, fail the check
- if: steps.review.outputs.total_comments > 0
run: exit 1