Add code coverage workflow with gcov and Codecov #3
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: CI | |
on: | |
push: | |
branches: [ master ] | |
pull_request: | |
branches: [ master ] | |
jobs: | |
build: | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [ubuntu-latest, windows-latest] | |
include: | |
- os: ubuntu-latest | |
install: | | |
sudo apt-get update | |
sudo apt-get install -y autoconf automake libtool pkg-config | |
sudo apt-get install -y libsdl2-dev libvulkan-dev | |
sudo apt-get install -y clang-format cppcheck lcov | |
cc: gcc | |
cxx: g++ | |
coverage: true | |
coverage_flags: "--coverage -fprofile-arcs -ftest-coverage" | |
- os: windows-latest | |
install: | | |
choco install autoconf automake libtool pkg-config | |
choco install mingw | |
choco install vulkan-sdk | |
choco install llvm | |
cc: gcc | |
cxx: g++ | |
coverage: false | |
coverage_flags: "" | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Cache dependencies | |
uses: actions/cache@v3 | |
with: | |
path: | | |
deps/build | |
deps/install | |
key: ${{ runner.os }}-deps-${{ hashFiles('deps/download_deps.sh') }} | |
restore-keys: | | |
${{ runner.os }}-deps- | |
- name: Install dependencies | |
run: ${{ matrix.install }} | |
- name: Set up environment | |
shell: bash | |
run: | | |
echo "CC=${{ matrix.cc }}" >> $GITHUB_ENV | |
echo "CXX=${{ matrix.cxx }}" >> $GITHUB_ENV | |
- name: Code format check | |
if: runner.os == 'Linux' | |
run: | | |
find src -name '*.cpp' -o -name '*.h' | xargs clang-format -n -Werror | |
- name: Static analysis | |
if: runner.os == 'Linux' | |
run: | | |
cppcheck --enable=all --error-exitcode=1 --suppress=missingInclude src/ | |
- name: Generate build system | |
shell: bash | |
run: | | |
./autogen.sh | |
- name: Configure | |
shell: bash | |
run: | | |
if [ "${{ matrix.coverage }}" = "true" ]; then | |
./configure CFLAGS="-Wall -Wextra ${{ matrix.coverage_flags }}" CXXFLAGS="-Wall -Wextra ${{ matrix.coverage_flags }}" | |
else | |
./configure CFLAGS="-Wall -Wextra" CXXFLAGS="-Wall -Wextra" | |
fi | |
- name: Build | |
shell: bash | |
run: | | |
make -j$(nproc) | |
- name: Run tests with coverage | |
if: matrix.coverage | |
shell: bash | |
run: | | |
# 运行测试(当我们添加测试后取消注释) | |
# make check | |
# 生成覆盖率报告 | |
lcov --capture --directory . --output-file coverage.info | |
lcov --remove coverage.info '/usr/*' --output-file coverage.info | |
lcov --list coverage.info | |
- name: Upload coverage to Codecov | |
if: matrix.coverage | |
uses: codecov/codecov-action@v3 | |
with: | |
files: ./coverage.info | |
flags: unittests | |
name: codecov-umbrella | |
fail_ci_if_error: true | |
verbose: true | |
- name: Upload artifacts | |
uses: actions/upload-artifact@v3 | |
with: | |
name: doom_pp-${{ matrix.os }} | |
path: | | |
doom_pp | |
doom_pp.exe | |
if-no-files-found: ignore | |
analyze: | |
needs: build | |
runs-on: ubuntu-latest | |
if: github.event_name == 'pull_request' | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Run CodeQL | |
uses: github/codeql-action/init@v2 | |
with: | |
languages: cpp | |
- name: Perform CodeQL Analysis | |
uses: github/codeql-action/analyze@v2 |