Skip to content

Merge branch 'develop' #1189

Merge branch 'develop'

Merge branch 'develop' #1189

Workflow file for this run

# Copyright 2019 - 2025 Alexander Grund
# Distributed under the Boost Software License, Version 1.0.
# https://www.boost.org/LICENSE_1_0.txt
name: CI Tests
on:
pull_request:
push:
branches:
- master
- develop
- bugfix/**
- feature/**
- fix/**
- github/**
- pr/**
paths-ignore:
- LICENSE
- meta/**
- README.md
concurrency:
group: ${{format('ci_tests{0}:{1}', github.repository, github.ref)}}
cancel-in-progress: true
env:
GIT_FETCH_JOBS: 8
NET_RETRY_COUNT: 5
B2_CI_VERSION: 1
jobs:
NativeCMakeBuild:
defaults:
run:
shell: bash
strategy:
matrix:
os: [ubuntu-22.04, windows-2022]
standalone: [Boost, Standalone]
buildType: [Debug, Release]
shared_lib: [ON, OFF]
generator: ['Visual Studio 17 2022', 'MinGW Makefiles', 'Unix Makefiles']
exclude:
- os: ubuntu-22.04
generator: MinGW Makefiles
- os: ubuntu-22.04
generator: Visual Studio 17 2022
- os: ubuntu-22.04
buildType: Debug
runs-on: ${{matrix.os}}
env:
DEP_DIR: ${{github.workspace}}/dependencies
# VS 2022 only supported by Boost.Build 1.78+ with changes to build files (e.g. in Boost.Thread) required that are introduced in Boost 1.66
# Boost.Iostreams doesn't support VS 2022 until 1.69
BOOST_VERSION: ${{ startsWith(matrix.generator, 'Visual Studio') && '1.69.0' || '1.66.0' }}
steps:
- uses: actions/checkout@v4
- name: Sanity check version
run: grep -E 'set\(_version [0-9]' CMakeLists.txt
- uses: actions/cache@v4
id: cache-boost
with:
path: ${{env.DEP_DIR}}
key: ${{matrix.os}}-${{matrix.generator}}-${{env.BOOST_VERSION}}
# Install newer CMake to be able to find Boost
- name: Install CMake
if: runner.os == 'Linux' && matrix.standalone == 'Boost'
run: wget -qO- https://cmake.org/files/v3.14/cmake-3.14.0-Linux-x86_64.tar.gz | sudo tar --strip-components=1 -xzC /usr/local
- name: Set BOOST_ROOT
if: matrix.standalone == 'Boost'
run: echo "BOOST_ROOT=${DEP_DIR//\\/\/}/boost_${BOOST_VERSION//./_}" >> $GITHUB_ENV
# Install Boost
- uses: actions/checkout@v4
if: matrix.standalone == 'Boost' && steps.cache-boost.outputs.cache-hit != 'true'
with:
repository: boostorg/boost
ref: boost-${{env.BOOST_VERSION}}
path: __buildBoost
fetch-depth: 1
- name: Bootstrap Boost
if: matrix.standalone == 'Boost' && steps.cache-boost.outputs.cache-hit != 'true'
working-directory: __buildBoost
run: |
git submodule update --init --jobs 3 tools/boostdep libs/filesystem
if [[ $BOOST_VERSION < '1.73.0' ]]; then
(cd tools/boostdep && git fetch origin && git checkout boost-1.73.0 && git checkout boost-1.63.0 -- depinst/exceptions.txt)
fi
python tools/boostdep/depinst/depinst.py --include tools --exclude test --git_args '--jobs 3 --depth 1' filesystem
if [[ "${{matrix.generator}}" =~ "Visual Studio" ]]; then
toolset=msvc-14.3
# Boost.Build doesn't support MSVC 2022 (14.3) until 1.78
if [[ $BOOST_VERSION < '1.78.0' ]]; then
(cd tools/build && git fetch --depth 1 origin boost-1.78.0 && git checkout FETCH_HEAD)
git fetch --depth 1 origin boost-1.78.0 && git checkout FETCH_HEAD -- bootstrap.bat
fi
else
toolset=gcc
./bootstrap.sh --with-toolset=$toolset --with-libraries=system,filesystem threading=multi || (cat bootstrap.log && false)
./b2 headers
fi
echo "B2_TOOLSET=$toolset" >> $GITHUB_ENV
# The updated Boost requires a C++11 compiler which MinGW isn't and using VS implies using the CMD shell
- name: Bootstrap Boost (MSVC)
if: matrix.standalone == 'Boost' && steps.cache-boost.outputs.cache-hit != 'true' && startsWith(matrix.os, 'windows') && startsWith(matrix.generator, 'Visual Studio')
shell: cmd
working-directory: __buildBoost
run: |
CALL .\bootstrap.bat --with-toolset=%B2_TOOLSET% --with-libraries=system,filesystem threading=multi
IF %ERRORLEVEL% NEQ 0 (
ECHO Build failed, printing log
TYPE bootstrap.log
EXIT /B 1
)
.\b2 headers
- name: Build Boost (Linux)
if: matrix.standalone == 'Boost' && steps.cache-boost.outputs.cache-hit != 'true' && startsWith(matrix.os, 'ubuntu')
working-directory: __buildBoost
run: |
./b2 link=static toolset=$B2_TOOLSET address-model=64 -j$(nproc) --prefix="$BOOST_ROOT" install
cd ..
rm -r __buildBoost || true
# Requires cmd shell as on windows-2022 with msvc-14.3 'cl' won't be found with bash
- name: Build Boost (Windows)
if: matrix.standalone == 'Boost' && steps.cache-boost.outputs.cache-hit != 'true' && startsWith(matrix.os, 'windows')
shell: cmd
working-directory: __buildBoost
run: |
.\b2 link=static toolset=%B2_TOOLSET% address-model=64 -j 3 --prefix="%BOOST_ROOT%" install
if %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL%
cd ..
rmdir /s /q __buildBoost
- name: Create standalone
if: matrix.standalone == 'Standalone'
run: |
bash tools/create_standalone.sh "$PWD/../nowide_standalone"
rm -rf *
cp -r ../nowide_standalone/* .
mkdir build
- name: Configure
working-directory: build
run: |
extraFlags="-DBoost_DEBUG=ON -DBoost_NO_BOOST_CMAKE=ON -DCMAKE_INSTALL_PREFIX=$HOME/local"
if ! [[ "${{matrix.generator}}" =~ "Visual Studio" ]]; then
# Enable warning to find missing defines, especially important for the standalone version
extraFlags+=" -DCMAKE_CXX_FLAGS=-Wundef"
extraFlags+=" -DBoost_ARCHITECTURE=-x64" # ABI tag for MinGW
fi
cmake -DCMAKE_BUILD_TYPE=${{matrix.buildType}} -DBUILD_SHARED_LIBS=${{matrix.shared_lib}} -G "${{matrix.generator}}" $extraFlags ..
- name: Build
run: cmake --build build --config ${{matrix.buildType}} --target tests
# Run test with both bash and powershell and watch for "Using std::cin" on bash but not on powershell
- name: Test
working-directory: build
run: |
# The bash shell adds an incompatible PATH for MinGW: https://github.com/actions/runner-images/issues/11102
[[ "${{runner.os}}" != 'Windows' ]] || export PATH="/c/mingw64/bin:$PATH"
ctest --output-on-failure -C ${{matrix.buildType}} --verbose
- name: Test on PowerShell
working-directory: build
shell: powershell
if: runner.os == 'Windows'
run: ctest --output-on-failure -C ${{matrix.buildType}} --verbose
- name: Install
run: cmake --build build --config ${{matrix.buildType}} --target install
- name: Test consumption
working-directory: build
run: |
rm -r *
cmake -DBOOST_NOWIDE_INSTALL_TEST=ON -DBoost_ARCHITECTURE=-x64 -DCMAKE_PREFIX_PATH=$HOME/local -G "${{matrix.generator}}" ../test/cmake_test
cmake --build . --config ${{matrix.buildType}}
ctest --output-on-failure -C ${{matrix.buildType}}
CreateDocuTest:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Create documentation
run: |
sudo apt-get install -y doxygen
bash doc/gendoc.sh
CreateBoostDocuTest:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Fetch Boost.CI
uses: actions/checkout@v4
with:
repository: boostorg/boost-ci
ref: master
path: boost-ci-cloned
- name: Get CI scripts folder
run: cp -r boost-ci-cloned/ci . && rm -rf boost-ci-cloned
- name: Setup Boost
run: source ci/github/install.sh
- name: Create documentation
run: |
sudo apt-get install -y doxygen
B2_TARGETS=libs/$SELF/doc ci/build.sh
CheckFormatting:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: DoozyX/clang-format-lint-action@v0.18
with:
exclude: './doc'
clangFormatVersion: 10
- name: Check line endings
run: |
if grep -r -l $'\r' --exclude-dir="\.git" --exclude-dir="html"; then
echo "Found files windows style line endings (CRLF). Please fix!"
exit 1
fi
- name: Check for tabs
run: |
if grep -r -l $'\t' --exclude-dir="\.git" --exclude-dir="html"; then
echo "Found files with TABs. Please fix!"
exit 1
fi