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 6 - v*
7 7 pull_request:
8 8  
  9 +concurrency:
  10 + group: ${{ github.workflow }}-${{ github.ref }}
  11 + cancel-in-progress: true
  12 +
9 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 58 clang-tidy:
11 59 name: Clang-Tidy
12 60 runs-on: ubuntu-latest
... ...
azure-pipelines.yml
... ... @@ -40,12 +40,12 @@ jobs:
40 40 vmImage: "macOS-latest"
41 41 cli11.std: 11
42 42 Windows17:
43   - vmImage: "vs2017-win2016"
  43 + vmImage: "windows-2019"
44 44 cli11.std: 17
45 45 Windows11:
46   - vmImage: "vs2017-win2016"
  46 + vmImage: "windows-2019"
47 47 cli11.std: 11
48   - Windowslatest:
  48 + WindowsLatest:
49 49 vmImage: "windows-2019"
50 50 cli11.std: 20
51 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 4  
5 5 import os
6 6 import re
7   -from argparse import ArgumentParser
  7 +import argparse
8 8 from subprocess import Popen, PIPE
9 9 import warnings
10 10  
... ... @@ -128,8 +128,9 @@ def make_header(output, main_header, files, tag, namespace, macro=None, version=
128 128  
129 129  
130 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 135 parser.add_argument("--output", default=None, help="Single header file output")
135 136 parser.add_argument(
... ... @@ -137,7 +138,7 @@ if __name__ == &quot;__main__&quot;:
137 138 default="CLI11.hpp.in",
138 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 142 parser.add_argument("--namespace", default="CLI", help="Set the namespace")
142 143 parser.add_argument("--tag", default="CLI11", help="Tag to look up")
143 144 parser.add_argument(
... ...