Merge pull request #489 from imperialCHEPI/config_schema #992
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: [main] | |
release: | |
types: [published] | |
pull_request: | |
workflow_dispatch: | |
jobs: | |
build: | |
name: Build and test | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
- platform: linux | |
os: ubuntu-22.04 | |
compiler: gcc-default | |
is_main: true | |
- platform: linux | |
os: ubuntu-22.04 | |
compiler: gcc-latest | |
is_main: false | |
- platform: windows | |
os: windows-2022 | |
compiler: msvc | |
is_main: true | |
env: | |
VCPKG_ROOT: vcpkg | |
VCPKG_BINARY_SOURCES: clear;x-gha,readwrite | |
# Update when there is a new version of gcc available | |
LATEST_GCC_VERSION: 13 | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Set up MSVC (Windows) | |
if: matrix.platform == 'windows' | |
uses: ilammy/msvc-dev-cmd@v1 | |
with: | |
arch: x64 | |
- name: Install dependencies (Linux) | |
if: matrix.platform == 'linux' | |
run: | | |
sudo apt update | |
sudo apt upgrade -y | |
sudo apt install --no-install-recommends build-essential ninja-build lcov | |
- name: Install latest gcc (Linux) | |
if: matrix.compiler == 'gcc-latest' | |
run: | | |
sudo add-apt-repository ppa:ubuntu-toolchain-r/test | |
sudo apt-get update | |
sudo apt-get install g++-$LATEST_GCC_VERSION | |
# Use environment variable to tell CMake to compile with this version of gcc | |
echo CXX=g++-$LATEST_GCC_VERSION >> "$GITHUB_ENV" | |
- name: Export GitHub Actions cache environment variables | |
uses: actions/github-script@v7 | |
with: | |
script: | | |
core.exportVariable('ACTIONS_CACHE_URL', process.env.ACTIONS_CACHE_URL || ''); | |
core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env.ACTIONS_RUNTIME_TOKEN || ''); | |
- name: Install VCPKG | |
run: | | |
git clone https://github.com/Microsoft/vcpkg.git | |
cd vcpkg | |
./bootstrap-vcpkg.sh -disableMetrics | |
- name: Configure HealthGPS (debug) | |
run: | | |
cmake --preset=${{ matrix.platform }}-debug -DWARNINGS_AS_ERRORS=ON -DGENERATE_COVERAGE=ON | |
- uses: ZedThree/[email protected] | |
if: matrix.compiler == 'gcc-default' && github.event_name == 'pull_request' && !(github.actor == 'dependabot[bot]' || github.actor == 'pre-commit-ci[bot]') | |
id: review | |
with: | |
build_dir: out/build/linux-debug | |
config_file: .clang-tidy | |
lgtm_comment_body: '' | |
# Uploads an artefact containing clang_fixes.json | |
- uses: ZedThree/clang-tidy-review/[email protected] | |
if: matrix.compiler == 'gcc-default' && github.event_name == 'pull_request' && !(github.actor == 'dependabot[bot]' || github.actor == 'pre-commit-ci[bot]') | |
id: upload-review | |
# If there are any comments, fail the check | |
- if: steps.review.outputs.total_comments > 0 && matrix.compiler == 'gcc-default' && !(github.actor == 'dependabot[bot]' || github.actor == 'pre-commit-ci[bot]') | |
run: exit 1 | |
- uses: ammaraskar/gcc-problem-matcher@master | |
- name: Build HealthGPS (debug) | |
if: '!cancelled()' # Run this step, even if the previous one fails | |
run: | | |
cmake --build --preset=debug-build-${{ matrix.platform }} --target=install | |
- name: Build HealthGPS (release) | |
if: '!cancelled()' # Run this step, even if the previous one fails | |
run: | | |
# Build documentation so we can show Doxygen warnings | |
cmake --preset=${{ matrix.platform }}-release -DWARNINGS_AS_ERRORS=ON -DBUILD_DOC=ON | |
cmake --build --preset=release-build-${{ matrix.platform }} --target=install | |
- name: Upload artifacts | |
if: matrix.is_main | |
uses: actions/upload-artifact@v4 | |
with: | |
name: health-gps-${{ matrix.platform }} | |
path: | | |
${{ github.workspace }}/out/install/${{ matrix.platform }}-*/* | |
- name: Run tests | |
run: ctest --preset=core-test-${{ matrix.platform }} | |
- name: Generate coverage report | |
if: matrix.compiler == 'gcc-default' | |
working-directory: ${{github.workspace}}/out/build/${{ matrix.platform }}-debug | |
run: geninfo . --include 'src/HealthGPS*' --exclude 'src/HealthGPS.Tests' --output-file main_coverage.info | |
- name: Upload coverage reports to Codecov | |
if: matrix.compiler == 'gcc-default' | |
uses: codecov/codecov-action@v4 | |
env: | |
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} | |
- name: Zip output folder | |
if: startsWith(github.ref, 'refs/tags/') && matrix.is_main | |
working-directory: ${{github.workspace}}/out/install/${{ matrix.platform }}-release/bin/ | |
run: | | |
mkdir ${{github.workspace}}/artifact | |
7z a -tzip ${{github.workspace}}/artifact/health_gps_${{ matrix.platform }}.zip *.dll *.Console* schemas | |
- name: Upload release artifacts | |
if: startsWith(github.ref, 'refs/tags/') && matrix.is_main | |
uses: softprops/action-gh-release@v2 | |
with: | |
files: artifact/health_gps_${{ matrix.platform }}.zip |