name: Linux on: [push, pull_request] jobs: build: defaults: run: shell: bash name: "GCC-C++${{matrix.std}}-${{matrix.build_type}} (shared: ${{matrix.shared}} custom prefix: ${{matrix.custom_prefix}})" runs-on: ubuntu-latest strategy: fail-fast: true matrix: build_type: [Release, Debug] std: [98, 11, 14, 17, 20] custom_prefix: [ON, OFF] shared: [ON, OFF] steps: - uses: actions/checkout@v2 - name: Setup Dependencies run: | sudo apt-get update DEBIAN_FRONTEND=noninteractive sudo apt-get install -y \ build-essential \ cmake \ lcov \ libgflags-dev \ libunwind-dev \ ninja-build - name: Build GTest run: | wget https://github.com/google/googletest/archive/refs/tags/release-1.11.0.tar.gz tar xvf release-1.11.0.tar.gz cmake -S googletest-release-1.11.0 -B build-googletest \ -DBUILD_SHARED_LIBS=${{matrix.shared}} \ -DCMAKE_INSTALL_PREFIX=./install \ -G Ninja cmake --build build-googletest --target install - name: Setup Environment if: ${{matrix.build_type == 'Debug'}} run: | echo 'CXXFLAGS=--coverage' >> $GITHUB_ENV - name: Configure run: | cmake -S . -B build_${{matrix.build_type}} -G Ninja \ -DBUILD_SHARED_LIBS=${{matrix.shared}} \ -DCMAKE_CXX_STANDARD=${{matrix.std}} \ -DCMAKE_CXX_STANDARD_REQUIRED=ON \ -DCMAKE_INSTALL_PREFIX:PATH=./install \ -DWITH_CUSTOM_PREFIX=${{matrix.custom_prefix}} - name: Build run: | cmake --build build_${{matrix.build_type}} \ --config ${{matrix.build_type}} - name: Install run: | cmake --build build_${{matrix.build_type}} \ --config ${{matrix.build_type}} \ --target install cmake build_${{matrix.build_type}} -G Ninja \ -DCMAKE_INSTALL_INCLUDEDIR=${{runner.workspace}}/foo/include \ -DCMAKE_INSTALL_LIBDIR=${{runner.workspace}}/foo/lib \ -DCMAKE_INSTALL_DATAROOTDIR=${{runner.workspace}}/foo/share cmake --build build_${{matrix.build_type}} \ --config ${{matrix.build_type}} \ --target install - name: Test CMake Package (relative GNUInstallDirs) run: | cmake -S src/package_config_unittest/working_config \ -B build_${{matrix.build_type}}_package \ -DCMAKE_BUILD_TYPE=${{matrix.build_type}} \ -DCMAKE_PREFIX_PATH=./build_${{matrix.build_type}}/install \ -G Ninja cmake --build build_${{matrix.build_type}}_package \ --config ${{matrix.build_type}} - name: Test CMake Package (absolute GNUInstallDirs) run: | cmake -S src/package_config_unittest/working_config \ -B build_${{matrix.build_type}}_package_foo \ -DCMAKE_BUILD_TYPE=${{matrix.build_type}} \ -DCMAKE_PREFIX_PATH=${{runner.workspace}}/foo \ -G Ninja cmake --build build_${{matrix.build_type}}_package_foo \ --config ${{matrix.build_type}} - name: Test run: | ctest --test-dir build_${{matrix.build_type}} -j$(nproc) --output-on-failure - name: Generate Coverage if: ${{ startswith(matrix.build_type, 'Debug') }} run: | lcov --directory . --capture --output-file coverage.info lcov --remove coverage.info \ '*/install/include/*' \ '*/src/*_unittest.cc' \ '*/src/googletest.h' \ '*/src/mock-log.h' \ '/usr/*' \ --output-file coverage.info for file in src/glog/*.h.in; do name=$(basename ${file}) name_we=${name%.h.in} sed -i "s|build_${{matrix.build_type}}/glog/${name_we}.h\$|${file}|g" coverage.info done lcov --list coverage.info - name: Upload Coverage to Coveralls if: ${{ startswith(matrix.build_type, 'Debug') }} uses: coverallsapp/github-action@master with: github-token: ${{ secrets.GITHUB_TOKEN }} path-to-lcov: ./coverage.info