mirror of
https://github.com/mat007/turtle.git
synced 2026-06-22 12:13:43 +00:00
191 lines
7.9 KiB
YAML
191 lines
7.9 KiB
YAML
# Copyright 2022-2025 Alexander Grund
|
|
#
|
|
# Distributed under the Boost Software License, Version 1.0.
|
|
# (See accompanying file LICENSE_1_0.txt or copy at http://boost.org/LICENSE_1_0.txt)
|
|
|
|
name: CI
|
|
|
|
on:
|
|
pull_request:
|
|
push:
|
|
branches:
|
|
- main
|
|
- develop
|
|
- feature/**
|
|
|
|
concurrency:
|
|
group: ${{format('{0}:{1}', github.repository, github.ref)}}
|
|
cancel-in-progress: true
|
|
|
|
env:
|
|
NET_RETRY_COUNT: 5
|
|
DOCBOOK_XSL_DIR: /usr/share/xml/docbook/stylesheet/docbook-xsl
|
|
DOCBOOK_DTD_DIR: /usr/share/xml/docbook/schema/dtd/4.2
|
|
|
|
jobs:
|
|
Formatting:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- name: Formatting
|
|
uses: DoozyX/clang-format-lint-action@v0.13
|
|
with:
|
|
clangFormatVersion: 10
|
|
|
|
Build:
|
|
defaults:
|
|
run:
|
|
shell: bash
|
|
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
include:
|
|
# Linux, gcc
|
|
- { compiler: gcc-7, cxxstd: '14,17', boostBranch: boost-1.86.0, os: ubuntu-latest, container: 'ubuntu:20.04' }
|
|
- { compiler: gcc-10, cxxstd: '14,17,20', boostBranch: boost-1.86.0, os: ubuntu-22.04 }
|
|
- { compiler: gcc-12, cxxstd: '14,17,20', boostBranch: master, os: ubuntu-22.04 }
|
|
- { compiler: gcc-14, cxxstd: '14,17,20', boostBranch: boost-1.86.0, os: ubuntu-24.04 }
|
|
- { compiler: gcc-14, cxxstd: '14,17,20', boostBranch: master, os: ubuntu-24.04 }
|
|
|
|
# Linux, clang
|
|
- { compiler: clang-14, cxxstd: '14,17,20', boostBranch: boost-1.86.0, os: ubuntu-24.04 }
|
|
- { compiler: clang-18, cxxstd: '14,17,20', boostBranch: boost-1.86.0, os: ubuntu-24.04 }
|
|
- { compiler: clang-18, cxxstd: '14,17,20', boostBranch: master, os: ubuntu-24.04 }
|
|
|
|
# Windows
|
|
- { toolset: msvc-14.2, os: windows-2019, cxxstd: 14, generator: 'Visual Studio 16 2019' }
|
|
- { toolset: gcc, os: windows-2019, cxxstd: 17, generator: 'Visual Studio 16 2019' }
|
|
- { toolset: msvc-14.3, os: windows-2022, cxxstd: 20, generator: 'Visual Studio 17 2022' }
|
|
|
|
- { name: Collect coverage, coverage: yes,
|
|
compiler: gcc-8, cxxstd: '14', boostBranch: boost-1.86.0, os: ubuntu-latest, container: 'ubuntu:20.04' }
|
|
|
|
timeout-minutes: 120
|
|
runs-on: ${{matrix.os}}
|
|
container: ${{matrix.container}}
|
|
|
|
steps:
|
|
- name: Prepare container environment
|
|
if: matrix.container
|
|
run: |
|
|
export DEBIAN_FRONTEND=noninteractive
|
|
apt-get -o Acquire::Retries=$NET_RETRY_COUNT update
|
|
apt-get -o Acquire::Retries=$NET_RETRY_COUNT install -y sudo software-properties-common curl lsb-release
|
|
# Need (newer) git & cmake, and the older Ubuntu container may require requesting the key manually using port 80
|
|
curl -sSL --retry ${NET_RETRY_COUNT:-5} 'http://keyserver.ubuntu.com/pks/lookup?op=get&search=0xE1DD270288B4E6030699E45FA1715D88E1DF1F24' | sudo gpg --dearmor > /etc/apt/trusted.gpg.d/git-core_ubuntu_ppa.gpg
|
|
for i in {1..${NET_RETRY_COUNT:-5}}; do sudo -E add-apt-repository -y ppa:git-core/ppa && break || sleep 10; done
|
|
curl -sSL --retry ${NET_RETRY_COUNT:-5} 'https://apt.kitware.com/keys/kitware-archive-latest.asc' | sudo gpg --dearmor > /etc/apt/trusted.gpg.d/kitware-archive-latest.gpg
|
|
for i in {1..${NET_RETRY_COUNT:-5}}; do sudo -E add-apt-repository -y "deb https://apt.kitware.com/ubuntu/ $(lsb_release -cs) main" && break || sleep 10; done
|
|
apt-get -o Acquire::Retries=$NET_RETRY_COUNT update
|
|
apt-get -o Acquire::Retries=$NET_RETRY_COUNT install -y g++ git cmake
|
|
git config --global pack.threads 0
|
|
git config --global --add safe.directory "$GITHUB_WORKSPACE" # Avoid ownership issues of repo in container
|
|
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
# For coverage builds fetch the whole history, else only 1 commit using a 'fake ternary'
|
|
fetch-depth: ${{ matrix.coverage && '0' || '1' }}
|
|
|
|
# Checking out Boost and all its submodules takes ages...
|
|
- name: Cache Boost
|
|
uses: actions/cache@v4
|
|
with:
|
|
path: boost-root
|
|
key: boost-${{matrix.boostBranch}}
|
|
- name: Checkout Boost
|
|
uses: actions/checkout@v4
|
|
with:
|
|
repository: boostorg/boost
|
|
ref: ${{matrix.boostBranch}}
|
|
submodules: true
|
|
path: boost-root
|
|
persist-credentials: false
|
|
|
|
- name: Install packages and setup env
|
|
run: |
|
|
B2_TOOLSET=${{matrix.toolset}}
|
|
if [[ ! "${{matrix.os}}" == "windows-"* ]]; then
|
|
sudo apt-get -o Acquire::Retries=$NET_RETRY_COUNT update
|
|
CXX=${{matrix.compiler}}
|
|
CXX="${CXX/gcc-/g++-}"
|
|
# Package names are g++-* and clang-*, so set this before correcting CXX for Clang
|
|
pkgs="$CXX xsltproc docbook-xsl docbook-xml lcov ccache"
|
|
sudo apt-get -o Acquire::Retries=$NET_RETRY_COUNT install -y $pkgs
|
|
CXX="ccache ${CXX/clang-/clang++-}"
|
|
echo "CXX=$CXX" >> $GITHUB_ENV
|
|
echo "CC=${{matrix.compiler}}" >> $GITHUB_ENV
|
|
if [[ -z $B2_TOOLSET ]]; then
|
|
if [[ "$CXX" =~ clang ]]; then
|
|
B2_TOOLSET=clang
|
|
else
|
|
B2_TOOLSET=gcc
|
|
fi
|
|
fi
|
|
[[ -z $CXX ]] || echo "using $B2_TOOLSET : : $CXX ;" > ~/user-config.jam
|
|
fi
|
|
echo "B2_TOOLSET=$B2_TOOLSET" >> $GITHUB_ENV
|
|
# Move the Boost root to a sibling folder
|
|
mv boost-root ..
|
|
echo "BOOST_ROOT=${{github.workspace}}/../boost-root" >> $GITHUB_ENV
|
|
|
|
- name: Cache ccache
|
|
uses: hendrikmuhs/ccache-action@v1
|
|
if: startsWith(matrix.os, 'ubuntu')
|
|
with:
|
|
key: ${{matrix.os}}-${{matrix.compiler}}-${{matrix.boostBranch}}
|
|
|
|
- name: Prepare boost
|
|
working-directory: ${{env.BOOST_ROOT}}
|
|
run: ./bootstrap.sh && ./b2 headers
|
|
|
|
- name: Boost build
|
|
run: |
|
|
B2_FLAGS="cxxstd=${{matrix.cxxstd}}"
|
|
if [[ "${{matrix.coverage}}" == "yes" ]]; then
|
|
B2_FLAGS="$B2_FLAGS cxxflags=--coverage linkflags=--coverage"
|
|
fi
|
|
scripts/build.sh --toolset=$B2_TOOLSET $B2_FLAGS -j3
|
|
|
|
- name: Collect coverage
|
|
if: matrix.coverage
|
|
run: |
|
|
lcov --version
|
|
lcov --gcov-tool=gcov-8 --directory "$GITHUB_WORKSPACE/test" --capture --output-file all.info
|
|
# dump a summary on the console
|
|
lcov --list all.info
|
|
# Limit to our files (header-only in this case)
|
|
lcov --extract all.info "$GITHUB_WORKSPACE/include/*" --output-file coverage.info
|
|
# Output what was collected
|
|
lcov --list coverage.info
|
|
- name: Upload coverage
|
|
if: matrix.coverage
|
|
uses: coverallsapp/github-action@master
|
|
with:
|
|
path-to-lcov: ${{github.workspace}}/coverage.info
|
|
github-token: ${{secrets.GITHUB_TOKEN}}
|
|
|
|
- name: Build required boost libs
|
|
working-directory: ${{env.BOOST_ROOT}}
|
|
run: |
|
|
./b2 --toolset=$B2_TOOLSET --with-test --with-thread --with-chrono --with-system --with-atomic --with-date_time -a -j3
|
|
# Add lib folder to LD_LIBRARY_PATH, so the tests can load them
|
|
echo "LD_LIBRARY_PATH=$PWD/stage/lib:$LD_LIBRARY_PATH" >> $GITHUB_ENV
|
|
|
|
- name: CMake build
|
|
run: |
|
|
mkdir build && cd build
|
|
CXX_STANDARD="${{matrix.cxxstd}}"
|
|
if [[ "${{matrix.os}}" == "windows-"* ]]; then
|
|
compiler_launcher_arg=
|
|
else
|
|
compiler_launcher_arg=-DCMAKE_CXX_COMPILER_LAUNCHER=ccache
|
|
fi
|
|
cmake .. -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_STANDARD="${CXX_STANDARD##*,}" $compiler_launcher_arg -DCMAKE_VERBOSE_MAKEFILE=ON
|
|
cmake --build . --config Debug -- -j3
|
|
ctest --output-on-failure --build-config Debug -j3
|
|
|
|
- name: Cleanup Boost folder to reduce cache usage
|
|
if: ${{ always() }}
|
|
working-directory: ${{env.BOOST_ROOT}}
|
|
run: git clean -fxd
|