| name: ci |
| |
| on: push |
| |
| permissions: |
| contents: read |
| |
| jobs: |
| build: |
| strategy: |
| matrix: |
| container: [ ubuntu-latest, macos-latest, windows-latest ] |
| build_type: [ Debug, Release ] |
| |
| |
| # 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: ${{ matrix.container }} |
| |
| steps: |
| - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 |
| |
| - name: Configure |
| shell: bash |
| # Configure CMake in a 'buildX' subdirectory. |
| # We can't use `build` as `BUILD` is already taken by the bazel build file. |
| # On Mac and Windows this leads to a conflict. |
| run: | |
| mkdir -p buildX |
| cd buildX |
| cmake -DBUILD_TESTING=ON \ |
| -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} \ |
| -DCMAKE_INSTALL_PREFIX:PATH=${{ github.workspace }}/install_dir \ |
| -DBUILD_SHARED_LIBS=ON \ |
| .. |
| |
| - name: Build shared |
| run: | |
| cmake --build buildX --config ${{ matrix.build_type }} |
| |
| - name: Install shared |
| run: | |
| cmake --install buildX --config ${{ matrix.build_type }} |
| |
| - name: Build static |
| run: | |
| cmake -DBUILD_SHARED_LIBS=OFF buildX |
| cmake --build buildX --config ${{ matrix.build_type }} |
| |
| - name: Install static |
| run: | |
| cmake --install buildX --config ${{ matrix.build_type }} |
| |
| - name: Test |
| if: runner.os != 'Windows' |
| working-directory: ${{ github.workspace }}/buildX |
| # Execute all tests. |
| run: | |
| ctest |
| # Also run the tests directly, just in case we forgot to add it to ctest. |
| test/cctest/cctest |
| |
| - name: Test - Windows |
| if: runner.os == 'Windows' |
| working-directory: ${{ github.workspace }}/buildX |
| # Execute all tests. |
| run: | |
| ctest -C ${{ matrix.build_type }} |
| # Also run the tests directly, just in case we forgot to add it to ctest. |
| test/cctest/${{ matrix.build_type }}/cctest.exe |