Skip to content

CI: Check code builds with gcc v14 #922

CI: Check code builds with gcc v14

CI: Check code builds with gcc v14 #922

Workflow file for this run

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: 14
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