diff --git a/.github/workflows/c-cpp.yml b/.github/workflows/c-cpp.yml index dcf269c..227532a 100644 --- a/.github/workflows/c-cpp.yml +++ b/.github/workflows/c-cpp.yml @@ -2,32 +2,60 @@ name: C/C++ CI on: push: - branches: [ main ] + branches: [ "main" ] pull_request: - branches: [ main ] - -env: - BUILD_TYPE: Release + branches: [ "main" ] jobs: - build_cmake: + build: name: CMake Build & Test - + runs-on: ${{ matrix.os }} + strategy: matrix: os: [ubuntu-latest, windows-latest] - build_type: [Release] - - runs-on: ${{ matrix.os }} + 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++ + exclude: + - os: windows-latest + c_compiler: gcc + - os: windows-latest + c_compiler: clang + - os: ubuntu-latest + c_compiler: cl steps: - uses: actions/checkout@v3 - - name: Configure CMake - run: cmake -B build -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} -DELFIO_BUILD_EXAMPLES=YES -DELFIO_BUILD_TESTS=YES - - name: Build - run: cmake --build build --config ${{ matrix.build_type }} - - name: Test + + - name: Set reusable strings + # Turn repeated input strings (such as the build output directory) into step outputs. These step outputs can be used throughout the workflow file. + id: strings + shell: bash run: | - cd build - ctest -C ${{ matrix.build_type }} - cd .. + echo "build-output-dir=${{ github.workspace }}/build" >> "$GITHUB_OUTPUT" + + - name: Configure CMake + run: > + cmake -B ${{ steps.strings.outputs.build-output-dir }} + -DCMAKE_CXX_COMPILER=${{ matrix.cpp_compiler }} + -DCMAKE_C_COMPILER=${{ matrix.c_compiler }} + -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} + -DELFIO_BUILD_EXAMPLES=YES -DELFIO_BUILD_TESTS=YES + -S ${{ github.workspace }} + + - name: Build + run: cmake --build ${{ steps.strings.outputs.build-output-dir }} --config ${{ matrix.build_type }} + + - name: Test + working-directory: ${{ steps.strings.outputs.build-output-dir }} + run: ctest --build-config ${{ matrix.build_type }}