2
0
mirror of https://github.com/boostorg/nowide.git synced 2026-01-19 04:22:12 +00:00
Files
nowide/.github/workflows/ci_tests.yml
Alexander Grund 0768ece5cc Update required Boost version to 1.66
B2 doesn't build on some newer compilers anymore so we can't properly
test it.
As 1.66 is "old enough" by now just use that.
2025-10-23 14:30:58 +02:00

227 lines
8.6 KiB
YAML

# 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
[[ "${{matrix.os}}" =~ "windows" ]] && botstrap_toolset=mingw || botstrap_toolset=gcc
./bootstrap.sh --with-toolset="$botstrap_toolset" --with-libraries=system,filesystem threading=multi || (cat bootstrap.log && false)
sed -i 's/mingw/gcc/' project-config.jam
./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="$extraFlags -DCMAKE_CXX_FLAGS=-Wundef"
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