name: Linux on: [push, pull_request] jobs: build-linux: defaults: run: shell: bash name: GCC-C++${{matrix.std}}-${{matrix.build_type}}-${{matrix.lib}}-${{matrix.extra}} runs-on: ubuntu-latest strategy: fail-fast: true matrix: build_type: [Release, Debug] extra: [no-custom-prefix, custom-prefix] lib: [shared, static] std: [98, 11, 14, 17, 20] 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: Cache GTest id: cache-gtest uses: actions/cache@v2 with: path: gtest/ key: ${{runner.os}}-gtest-1.11 - name: Download GTest if: steps.cache-gtest.outputs.cache-hit != 'true' run: | wget https://github.com/google/googletest/archive/refs/tags/release-1.11.0.tar.gz tar xvf release-1.11.0.tar.gz - name: Build GTest if: steps.cache-gtest.outputs.cache-hit != 'true' run: | cmake -S googletest-release-1.11.0 -B build-googletest \ -DBUILD_SHARED_LIBS=${{matrix.shared}} \ -DCMAKE_BUILD_TYPE=${{matrix.build_type}} \ -DCMAKE_INSTALL_PREFIX=${{github.workspace}}/gtest \ -G Ninja cmake --build build-googletest --target install - name: Setup Environment if: matrix.build_type == 'Debug' run: | echo 'CXXFLAGS=--coverage' >> $GITHUB_ENV echo 'GTest_ROOT=${{github.workspace}}/gtest' >> $GITHUB_ENV - name: Setup C++98 Environment if: matrix.std == '98' run: | echo 'CXXFLAGS=-Wno-error=variadic-macros -Wno-error=long-long ${{env.CXXFLAGS}}' >> $GITHUB_ENV - name: Configure env: CXXFLAGS: -Wall -Wextra -Wsign-conversion -Wtautological-compare -Wformat-nonliteral -Wundef -Werror ${{env.CXXFLAGS}} run: | cmake -S . -B build_${{matrix.build_type}} \ -DBUILD_SHARED_LIBS=${{matrix.lib == 'shared'}} \ -DCMAKE_CXX_STANDARD=${{matrix.std}} \ -DCMAKE_CXX_STANDARD_REQUIRED=ON \ -DCMAKE_INSTALL_PREFIX=${{github.workspace}}/install \ -DWITH_CUSTOM_PREFIX=${{matrix.extra == 'custom-prefix'}} \ -G Ninja \ -Werror - 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}} \ -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=${{github.workspace}}/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: matrix.build_type == 'Debug' run: | lcov --directory . --capture --output-file coverage.info lcov --remove coverage.info \ '${{github.workspace}}/gtest/*' \ '*/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 Codecov if: matrix.build_type == 'Debug' uses: codecov/codecov-action@v2 with: token: ${{ secrets.CODECOV_TOKEN }} fail_ci_if_error: true verbose: true