mirror of
https://github.com/boostorg/nowide.git
synced 2026-01-21 17:12:14 +00:00
226 lines
8.5 KiB
YAML
226 lines
8.5 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
|
|
./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
|