Commit 6ae1e1ecc12b8724accf1804d35a6fb3171084c5

Authored by Henry Schreiner
Committed by GitHub
1 parent c7819982

ci: set up coverage on GHA (#747)

* ci: set up coverage on GHA

Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>

* ci: update to newer codecov uploader

Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>

* ci: move to newer Windows image

* fix: better single file script help and usage strictness

* ci: revert update to windows-2022
.ci/build_doxygen.sh deleted
1 -#!/bin/env sh  
2 -# (Source me)  
3 -  
4 -set -evx  
5 -  
6 -#DOXYGEN_URL="http://doxygen.nl/files/doxygen-1.8.17.src.tar.gz"  
7 -DOXYGEN_URL="https://github.com/doxygen/doxygen/archive/Release_1_8_15.tar.gz"  
8 -cd "${DEPS_DIR}"  
9 -  
10 -if [[ ! -f "${DEPS_DIR}/doxygen/build/bin/doxygen" ]] ; then  
11 - echo "Downloading Doxygen"  
12 - mkdir -p doxygen  
13 - travis_retry wget --no-check-certificate --quiet -O - "${DOXYGEN_URL}" | tar --strip-components=1 -xz -C doxygen  
14 - cd doxygen  
15 - mkdir -p build  
16 - cd build  
17 - cmake ..  
18 - make -j2  
19 -fi  
20 -  
21 -export PATH="${DEPS_DIR}/doxygen/build/bin:${PATH}"  
22 -  
23 -cd "${TRAVIS_BUILD_DIR}"  
24 -  
25 -set +evx  
.ci/build_lcov.sh deleted
1 -#!/bin/env sh  
2 -# (Source me)  
3 -set -evx  
4 -  
5 -LCOV_URL="http://ftp.de.debian.org/debian/pool/main/l/lcov/lcov_1.13.orig.tar.gz"  
6 -cd "${DEPS_DIR}"  
7 -  
8 -if [[ ! -f "${DEPS_DIR}/lcov/bin/lcov" ]] ; then  
9 - echo "Downloading lcov"  
10 - mkdir -p lcov  
11 - travis_retry wget --no-check-certificate --quiet -O - "${LCOV_URL}" | tar --strip-components=1 -xz -C lcov  
12 -fi  
13 -  
14 -export PATH="${DEPS_DIR}/lcov/bin:${PATH}"  
15 -cd "${TRAVIS_BUILD_DIR}"  
16 -  
17 -set +evx  
.ci/make_and_test.sh deleted
1 -#!/usr/bin/env bash  
2 -echo -en "travis_fold:start:script.build\\r"  
3 -echo "Building..."  
4 -STD="$1"  
5 -shift  
6 -set -evx  
7 -  
8 -  
9 -mkdir -p build  
10 -cd build  
11 -cmake .. -DCLI11_WARNINGS_AS_ERRORS=ON -DCLI11_SINGLE_FILE=ON -DCMAKE_CXX_STANDARD="$STD" -DCLI11_SINGLE_FILE_TESTS=ON -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_COMPILER_LAUNCHER=ccache $@  
12 -cmake --build . -- -j2 --keep-going  
13 -  
14 -set +evx  
15 -echo -en "travis_fold:end:script.build\\r"  
16 -echo -en "travis_fold:start:script.test\\r"  
17 -echo "Testing..."  
18 -set -evx  
19 -  
20 -ctest --output-on-failure  
21 -  
22 -set +evx  
23 -echo -en "travis_fold:end:script.test\\r"  
.ci/run_codecov.sh deleted
1 -#!/usr/bin/env bash  
2 -  
3 -echo -en "travis_fold:start:script.build\\r"  
4 -echo "Building..."  
5 -set -evx  
6 -  
7 -cd "${TRAVIS_BUILD_DIR}"  
8 -mkdir -p build  
9 -cd build  
10 -cmake .. -DCLI11_SINGLE_FILE_TESTS=OFF -DCLI11_EXAMPLES=OFF -DCMAKE_BUILD_TYPE=Coverage  
11 -cmake --build . -- -j2  
12 -cmake --build . --target CLI11_coverage  
13 -  
14 -set +evx  
15 -echo -en "travis_fold:end:script.build\\r"  
16 -echo -en "travis_fold:start:script.lcov\\r"  
17 -echo "Capturing and uploading LCov..."  
18 -set -evx  
19 -  
20 -lcov --directory . --capture --output-file coverage.info # capture coverage info  
21 -lcov --remove coverage.info '*/tests/*' '*/examples/*' '*gtest*' '*gmock*' '/usr/*' --output-file coverage.info # filter out system  
22 -lcov --list coverage.info #debug info  
23 -# Uploading report to CodeCov  
24 -bash <(curl -s https://codecov.io/bash) || echo "Codecov did not collect coverage reports"  
25 -  
26 -set +evx  
27 -echo -en "travis_fold:end:script.lcov\\r"  
.github/codecov.yml 0 โ†’ 100644
  1 +codecov:
  2 + notify:
  3 + after_n_builds: 4
  4 +coverage:
  5 + status:
  6 + project:
  7 + informational: true
.github/workflows/tests.yml
@@ -6,7 +6,55 @@ on: @@ -6,7 +6,55 @@ on:
6 - v* 6 - v*
7 pull_request: 7 pull_request:
8 8
  9 +concurrency:
  10 + group: ${{ github.workflow }}-${{ github.ref }}
  11 + cancel-in-progress: true
  12 +
9 jobs: 13 jobs:
  14 + coverage:
  15 + name: Coverage
  16 + runs-on: ubuntu-latest
  17 + strategy:
  18 + matrix:
  19 + std: ["11", "14", "17", "20"]
  20 + steps:
  21 + - uses: actions/checkout@v3
  22 +
  23 + - name: Get LCov
  24 + run: |
  25 + wget https://github.com/linux-test-project/lcov/releases/download/v1.16/lcov-1.16.tar.gz
  26 + tar -xzf lcov-1.16.tar.gz
  27 + cd lcov-1.16
  28 + sudo make install
  29 +
  30 + - name: Configure
  31 + run: |
  32 + cmake -S . -B build \
  33 + -DCMAKE_CXX_STANDARD=${{matrix.std}} \
  34 + -DCLI11_SINGLE_FILE_TESTS=OFF \
  35 + -DCLI11_EXAMPLES=OFF \
  36 + -DCMAKE_BUILD_TYPE=Coverage
  37 +
  38 + - name: Build
  39 + run: cmake --build build -j4
  40 +
  41 + - name: Test
  42 + run: cmake --build build --target CLI11_coverage
  43 +
  44 + - name: Prepare coverage
  45 + run: |
  46 + lcov --directory . --capture --output-file coverage.info
  47 + lcov --remove coverage.info '*/tests/*' '*/examples/*' '/usr/*' --output-file coverage.info
  48 + lcov --list coverage.info
  49 + working-directory: build
  50 +
  51 + - name: Upload coverage
  52 + run: |
  53 + curl -Os https://uploader.codecov.io/latest/linux/codecov
  54 + chmod +x codecov
  55 + ./codecov
  56 + working-directory: build
  57 +
10 clang-tidy: 58 clang-tidy:
11 name: Clang-Tidy 59 name: Clang-Tidy
12 runs-on: ubuntu-latest 60 runs-on: ubuntu-latest
azure-pipelines.yml
@@ -40,12 +40,12 @@ jobs: @@ -40,12 +40,12 @@ jobs:
40 vmImage: "macOS-latest" 40 vmImage: "macOS-latest"
41 cli11.std: 11 41 cli11.std: 11
42 Windows17: 42 Windows17:
43 - vmImage: "vs2017-win2016" 43 + vmImage: "windows-2019"
44 cli11.std: 17 44 cli11.std: 17
45 Windows11: 45 Windows11:
46 - vmImage: "vs2017-win2016" 46 + vmImage: "windows-2019"
47 cli11.std: 11 47 cli11.std: 11
48 - Windowslatest: 48 + WindowsLatest:
49 vmImage: "windows-2019" 49 vmImage: "windows-2019"
50 cli11.std: 20 50 cli11.std: 20
51 cli11.options: -DCMAKE_CXX_FLAGS="/std:c++latest /EHsc" 51 cli11.options: -DCMAKE_CXX_FLAGS="/std:c++latest /EHsc"
scripts/MakeSingleHeader.py
@@ -4,7 +4,7 @@ from __future__ import print_function, unicode_literals @@ -4,7 +4,7 @@ from __future__ import print_function, unicode_literals
4 4
5 import os 5 import os
6 import re 6 import re
7 -from argparse import ArgumentParser 7 +import argparse
8 from subprocess import Popen, PIPE 8 from subprocess import Popen, PIPE
9 import warnings 9 import warnings
10 10
@@ -128,8 +128,9 @@ def make_header(output, main_header, files, tag, namespace, macro=None, version= @@ -128,8 +128,9 @@ def make_header(output, main_header, files, tag, namespace, macro=None, version=
128 128
129 129
130 if __name__ == "__main__": 130 if __name__ == "__main__":
131 - parser = ArgumentParser(  
132 - usage="Convert source to single header include. Can optionally add namespace and search-replace replacements (for macros)." 131 + parser = argparse.ArgumentParser(
  132 + usage="Convert source to single header include. Can optionally add namespace and search-replace replacements (for macros).",
  133 + formatter_class=argparse.ArgumentDefaultsHelpFormatter,
133 ) 134 )
134 parser.add_argument("--output", default=None, help="Single header file output") 135 parser.add_argument("--output", default=None, help="Single header file output")
135 parser.add_argument( 136 parser.add_argument(
@@ -137,7 +138,7 @@ if __name__ == &quot;__main__&quot;: @@ -137,7 +138,7 @@ if __name__ == &quot;__main__&quot;:
137 default="CLI11.hpp.in", 138 default="CLI11.hpp.in",
138 help="The main include file that defines the other files", 139 help="The main include file that defines the other files",
139 ) 140 )
140 - parser.add_argument("files", nargs="*", help="The header files") 141 + parser.add_argument("files", nargs="+", help="The header files")
141 parser.add_argument("--namespace", default="CLI", help="Set the namespace") 142 parser.add_argument("--namespace", default="CLI", help="Set the namespace")
142 parser.add_argument("--tag", default="CLI11", help="Tag to look up") 143 parser.add_argument("--tag", default="CLI11", help="Tag to look up")
143 parser.add_argument( 144 parser.add_argument(