name: GitHub Actions CI on: pull_request: push: branches: - master - develop - githubactions* - fix/** - pr/** jobs: runner-selection: runs-on: ubuntu-latest # runs-on: ${{ github.repository_owner == 'boostorg' && fromJSON('[ "self-hosted", "linux", "x64", "ubuntu-latest-aws" ]') || 'ubuntu-latest' }} outputs: labelmatrix: ${{ steps.aws_hosted_runners.outputs.labelmatrix }} steps: - name: AWS Hosted Runners id: aws_hosted_runners uses: cppalliance/aws-hosted-runners@v1.0.0 posix: if: true defaults: run: shell: bash strategy: fail-fast: false matrix: include: - toolset: gcc-5 cxxstd: "14,1z" os: ubuntu-22.04 container: ubuntu:16.04 install: g++-5 supported: true - toolset: gcc-6 cxxstd: "14,1z" os: ubuntu-22.04 container: ubuntu:16.04 install: g++-6 supported: true - toolset: gcc-7 cxxstd: "14,17" os: ubuntu-22.04 container: ubuntu:18.04 install: g++-7 supported: true - toolset: gcc-8 cxxstd: "14,17,2a" os: ubuntu-22.04 container: ubuntu:18.04 install: g++-8 supported: true - toolset: gcc-9 cxxstd: "14,17,2a" os: ubuntu-22.04 container: ubuntu:18.04 install: g++-9 supported: true - toolset: gcc-10 cxxstd: "14,17,2a" os: ubuntu-22.04 install: g++-10 supported: true - toolset: gcc-11 cxxstd: "14,17,20" os: ubuntu-22.04 install: g++-11 supported: true - toolset: gcc-12 cxxstd: "14,17,20" os: ubuntu-22.04 install: g++-12 supported: true - toolset: gcc-13 cxxstd: "14,17,20" os: ubuntu-22.04 install: g++-13 supported: true - toolset: clang install: clang-9 compiler: clang++-9 cxxstd: "14,17" os: ubuntu-22.04 container: ubuntu:18.04 - toolset: clang install: clang-10 compiler: clang++-10 cxxstd: "14,17,2a" os: ubuntu-20.04 supported: true - toolset: clang install: clang-11 compiler: clang++-11 cxxstd: "14,17,2a" os: ubuntu-20.04 supported: true - toolset: clang install: clang-12 compiler: clang++-12 cxxstd: "14,17,20" os: ubuntu-22.04 supported: true - toolset: clang install: clang-13 compiler: clang++-13 cxxstd: "14,17,20" os: ubuntu-22.04 supported: true - toolset: clang install: clang-14 compiler: clang++-14 cxxstd: "14,17,20" os: ubuntu-22.04 supported: true - toolset: clang install: clang-15 compiler: clang++-15 cxxstd: "14,17,20" os: ubuntu-22.04 supported: true # - toolset: clang # install: clang-16 # compiler: clang++-16 # cxxstd: "14,17,20" # os: ubuntu-22.04 # supported: true # macos - description: macos-11 toolset: clang cxxstd: "14,17,2a" os: macos-11 supported: true - description: macos-12 toolset: clang cxxstd: "14,17,20" os: macos-11 supported: true - description: macos-13 toolset: clang cxxstd: "14,17,20" os: macos-11 supported: true needs: [runner-selection] # runs-on: ${{ fromJSON(needs.runner-selection.outputs.labelmatrix)[matrix.os] }} runs-on: ${{matrix.os}} container: ${{ matrix.container }} env: {B2_USE_CCACHE: 1} steps: - name: Check if running in container if: matrix.container != '' run: echo "GHA_CONTAINER=${{ matrix.container }}" >> $GITHUB_ENV - name: If running in container, upgrade packages if: matrix.container != '' run: | apt-get -o Acquire::Retries=3 update && DEBIAN_FRONTEND=noninteractive apt-get -y install tzdata && apt-get -o Acquire::Retries=3 install -y sudo software-properties-common wget curl apt-transport-https make apt-file sudo unzip libssl-dev build-essential autotools-dev autoconf automake g++ libc++-helpers python ruby cpio gcc-multilib g++-multilib pkgconf python3 ccache libpython-dev locales sudo apt-add-repository ppa:git-core/ppa sudo apt-get -o Acquire::Retries=3 update && apt-get -o Acquire::Retries=3 -y install git python_version=$(python3 -c 'import sys; print("{0.major}.{0.minor}".format(sys.version_info))') if [[ ${python_version} =~ ^3\.[0-5]$ ]]; then true else apt-get install -y python3-distutils fi sudo wget https://bootstrap.pypa.io/pip/$python_version/get-pip.py sudo python3 get-pip.py sudo /usr/local/bin/pip install cmake - uses: actions/checkout@v3 - name: Cache ccache uses: actions/cache@v2 if: env.B2_USE_CCACHE with: path: ~/.ccache key: ${{matrix.os}}-${{matrix.container}}-${{matrix.compiler}}-${{github.sha}} restore-keys: ${{matrix.os}}-${{matrix.container}}-${{matrix.compiler}}- - name: Install packages if: matrix.install run: | for i in {1..3}; do sudo -E apt-add-repository -y "ppa:ubuntu-toolchain-r/test" && break || sleep 2; done sudo apt-get update sudo apt-get install -y ${{matrix.install}} - name: Setup Boost shell: bash run: | if [[ $(uname) =~ [Ll]inux ]]; then echo Installing locales for ${TRAVIS_OS_NAME} ... sudo /usr/sbin/locale-gen fr_FR sudo /usr/sbin/locale-gen en_GB sudo locale -a echo ...done with locales fi echo GITHUB_REPOSITORY: $GITHUB_REPOSITORY LIBRARY=${GITHUB_REPOSITORY#*/} echo LIBRARY: $LIBRARY echo "LIBRARY=$LIBRARY" >> $GITHUB_ENV echo GITHUB_BASE_REF: $GITHUB_BASE_REF echo GITHUB_REF: $GITHUB_REF REF=${GITHUB_BASE_REF:-$GITHUB_REF} REF=${REFrefs/heads/} echo REF: $REF BOOST_BRANCH=develop && [ "$REF" == "master" ] && BOOST_BRANCH=master || true echo BOOST_BRANCH: $BOOST_BRANCH cd .. git clone -b $BOOST_BRANCH --depth 1 https://github.com/boostorg/boost.git boost-root cd boost-root cp -r $GITHUB_WORKSPACE/* libs/$LIBRARY git submodule update --init tools/boostdep python tools/boostdep/depinst/depinst.py --git_args "--jobs 3" $LIBRARY ./bootstrap.sh ./b2 -d0 headers - name: Run tests shell: bash run: | cd ../boost-root if [[ "${{matrix.supported}}" != "true" ]] ; then echo "This configuration is not supported because ${{matrix.supported}}" exit 0 fi toolsets=$(sed 's/,/ /g' <<<"${{matrix.toolset}}") standards=$(sed 's/,/ /g' <<<"${{matrix.cxxstd}}") variants="debug release" err=0 cd libs/$LIBRARY for toolset in ${toolsets} ; do for standard in ${standards} ; do for variant in ${variants} ; do if [[ err -ne 0 ]] ; then echo "skipping: ${toolset} ${standard} ${variant}" else echo "running: ${toolset} ${standard} ${variant}" ../../b2 -j3 test toolset=${toolset} cxxstd=${standard} variant=${variant} err=$? fi done done done [[ $err -ne 0 ]] && false || true windows: if: true strategy: fail-fast: false matrix: include: - description: msvc-14.2-32 toolset: msvc-14.2 cxxstd: "14,17" cxxflags: "cxxflags=-D_SILENCE_CXX17_ITERATOR_BASE_CLASS_DEPRECATION_WARNING=1" supported: true addrmd: 32 os: windows-2019 - description: msvc-14.3-32 toolset: msvc-14.3 cxxstd: "14,17,20" cxxflags: "cxxflags=-D_SILENCE_CXX17_ITERATOR_BASE_CLASS_DEPRECATION_WARNING=1" supported: true addrmd: 32 os: windows-2019 - description: msvc-14.2-64 toolset: msvc-14.2 cxxstd: "14,17" cxxflags: "cxxflags=-D_SILENCE_CXX17_ITERATOR_BASE_CLASS_DEPRECATION_WARNING=1" supported: true addrmd: 64 os: windows-2019 - description: msvc-14.3-64 toolset: msvc-14.3 cxxstd: "14,17,20" cxxflags: "cxxflags=-D_SILENCE_CXX17_ITERATOR_BASE_CLASS_DEPRECATION_WARNING=1" supported: true addrmd: 64 os: windows-2019 - toolset: gcc cxxstd: "14,17,2a" addrmd: 64 cxxflags: "cxxflags=-Wa,-mbig-obj" supported: true os: windows-2019 needs: [runner-selection] # runs-on: ${{ fromJSON(needs.runner-selection.outputs.labelmatrix)[matrix.os] }} runs-on: ${{matrix.os}} steps: - uses: actions/checkout@v3 - name: Setup Boost shell: cmd run: | echo GITHUB_REPOSITORY: %GITHUB_REPOSITORY% for /f %%i in ("%GITHUB_REPOSITORY%") do set LIBRARY=%%~nxi echo LIBRARY: %LIBRARY% echo LIBRARY=%LIBRARY%>>%GITHUB_ENV% echo GITHUB_BASE_REF: %GITHUB_BASE_REF% echo GITHUB_REF: %GITHUB_REF% if "%GITHUB_BASE_REF%" == "" set GITHUB_BASE_REF=%GITHUB_REF% set BOOST_BRANCH=develop for /f %%i in ("%GITHUB_BASE_REF%") do if "%%~nxi" == "master" set BOOST_BRANCH=master echo BOOST_BRANCH: %BOOST_BRANCH% cd .. git clone -b %BOOST_BRANCH% --depth 1 https://github.com/boostorg/boost.git boost-root cd boost-root xcopy /s /e /q %GITHUB_WORKSPACE% libs\%LIBRARY%\ git submodule update --init tools/boostdep python tools/boostdep/depinst/depinst.py --git_args "--jobs 3" %LIBRARY% copy libs\%LIBRARY%\tools\user-config.jam %USERPROFILE%\user-config.jam cmd /c bootstrap b2 -d0 headers - name: Run tests shell: bash run: | echo "current directory: $(pwd)" cd ../boost-root if [[ "${{matrix.supported}}" != "true" ]] ; then echo "This configuration is not supported because ${{matrix.supported}}" exit 0 fi toolsets=$(sed 's/,/ /g' <<<"${{matrix.toolset}}") standards=$(sed 's/,/ /g' <<<"${{matrix.cxxstd}}") address_models=$(sed 's/,/ /g' <<<"${{matrix.addrmd}}") variants="debug release" cd libs/$LIBRARY for toolset in ${toolsets} ; do for standard in ${standards} ; do for address_model in ${address_models} ; do for variant in ${variants} ; do echo "running: ${toolset} ${standard} ${address_model} ${variant}" ../../b2 -j3 ${{matrix.cxxflags}} test toolset=${toolset} cxxstd=${standard} address-model=${address_model} variant=${variant} || exit $? done done done done posix-cmake-subdir: strategy: fail-fast: false matrix: include: - os: ubuntu-20.04 - os: ubuntu-22.04 - os: macos-11 - os: macos-12 - os: macos-13 runs-on: ${{matrix.os}} steps: - uses: actions/checkout@v3 - name: Install packages if: matrix.install run: sudo apt-get -y install ${{matrix.install}} - name: Setup Boost run: | echo GITHUB_REPOSITORY: $GITHUB_REPOSITORY LIBRARY=${GITHUB_REPOSITORY#*/} echo LIBRARY: $LIBRARY echo "LIBRARY=$LIBRARY" >> $GITHUB_ENV echo GITHUB_BASE_REF: $GITHUB_BASE_REF echo GITHUB_REF: $GITHUB_REF REF=${GITHUB_BASE_REF:-$GITHUB_REF} REF=${REF#refs/heads/} echo REF: $REF BOOST_BRANCH=develop && [ "$REF" == "master" ] && BOOST_BRANCH=master || true echo BOOST_BRANCH: $BOOST_BRANCH cd .. git clone -b $BOOST_BRANCH --depth 1 https://github.com/boostorg/boost.git boost-root cd boost-root cp -r $GITHUB_WORKSPACE/* libs/$LIBRARY git submodule update --init tools/boostdep python tools/boostdep/depinst/depinst.py --git_args "--jobs 3" $LIBRARY - name: Use library with add_subdirectory run: | cd ../boost-root/libs/$LIBRARY/test/cmake_subdir_test mkdir __build__ && cd __build__ cmake .. cmake --build . ctest --output-on-failure --no-tests=error posix-cmake-install: strategy: fail-fast: false matrix: include: - os: ubuntu-20.04 - os: ubuntu-22.04 - os: macos-11 - os: macos-12 - os: macos-13 runs-on: ${{matrix.os}} steps: - uses: actions/checkout@v3 - name: Install packages if: matrix.install run: sudo apt-get -y install ${{matrix.install}} - name: Setup Boost run: | echo GITHUB_REPOSITORY: $GITHUB_REPOSITORY LIBRARY=${GITHUB_REPOSITORY#*/} echo LIBRARY: $LIBRARY echo "LIBRARY=$LIBRARY" >> $GITHUB_ENV echo GITHUB_BASE_REF: $GITHUB_BASE_REF echo GITHUB_REF: $GITHUB_REF REF=${GITHUB_BASE_REF:-$GITHUB_REF} REF=${REF#refs/heads/} echo REF: $REF BOOST_BRANCH=develop && [ "$REF" == "master" ] && BOOST_BRANCH=master || true echo BOOST_BRANCH: $BOOST_BRANCH cd .. git clone -b $BOOST_BRANCH --depth 1 https://github.com/boostorg/boost.git boost-root cd boost-root cp -r $GITHUB_WORKSPACE/* libs/$LIBRARY git submodule update --init tools/boostdep python tools/boostdep/depinst/depinst.py --git_args "--jobs 3" $LIBRARY - name: Configure run: | cd ../boost-root mkdir __build__ && cd __build__ cmake -DBOOST_INCLUDE_LIBRARIES=$LIBRARY -DCMAKE_INSTALL_PREFIX=~/.local .. - name: Install run: | cd ../boost-root/__build__ cmake --build . --target install - name: Use the installed library run: | cd ../boost-root/libs/$LIBRARY/test/cmake_install_test && mkdir __build__ && cd __build__ cmake -DCMAKE_INSTALL_PREFIX=~/.local .. cmake --build . ctest --output-on-failure --no-tests=error posix-cmake-test: strategy: fail-fast: false matrix: include: - os: ubuntu-20.04 - os: ubuntu-22.04 - os: macos-11 - os: macos-12 - os: macos-13 runs-on: ${{matrix.os}} steps: - uses: actions/checkout@v3 - name: Install packages if: matrix.install run: sudo apt-get -y install ${{matrix.install}} - name: Setup Boost run: | echo GITHUB_REPOSITORY: $GITHUB_REPOSITORY LIBRARY=${GITHUB_REPOSITORY#*/} echo LIBRARY: $LIBRARY echo "LIBRARY=$LIBRARY" >> $GITHUB_ENV echo GITHUB_BASE_REF: $GITHUB_BASE_REF echo GITHUB_REF: $GITHUB_REF REF=${GITHUB_BASE_REF:-$GITHUB_REF} REF=${REF#refs/heads/} echo REF: $REF BOOST_BRANCH=develop && [ "$REF" == "master" ] && BOOST_BRANCH=master || true echo BOOST_BRANCH: $BOOST_BRANCH cd .. git clone -b $BOOST_BRANCH --depth 1 https://github.com/boostorg/boost.git boost-root cd boost-root cp -r $GITHUB_WORKSPACE/* libs/$LIBRARY git submodule update --init tools/boostdep python tools/boostdep/depinst/depinst.py --git_args "--jobs 3" $LIBRARY - name: Configure run: | cd ../boost-root mkdir __build__ && cd __build__ cmake -DBOOST_INCLUDE_LIBRARIES=$LIBRARY -DBUILD_TESTING=ON .. - name: Build tests run: | cd ../boost-root/__build__ cmake --build . --target tests - name: Run tests run: | cd ../boost-root/__build__ ctest --output-on-failure --no-tests=error windows-cmake-subdir: strategy: fail-fast: false matrix: include: - os: windows-2019 - os: windows-2022 runs-on: ${{matrix.os}} steps: - uses: actions/checkout@v3 - name: Setup Boost shell: cmd run: | echo GITHUB_REPOSITORY: %GITHUB_REPOSITORY% for /f %%i in ("%GITHUB_REPOSITORY%") do set LIBRARY=%%~nxi echo LIBRARY: %LIBRARY% echo LIBRARY=%LIBRARY%>>%GITHUB_ENV% echo GITHUB_BASE_REF: %GITHUB_BASE_REF% echo GITHUB_REF: %GITHUB_REF% if "%GITHUB_BASE_REF%" == "" set GITHUB_BASE_REF=%GITHUB_REF% set BOOST_BRANCH=develop for /f %%i in ("%GITHUB_BASE_REF%") do if "%%~nxi" == "master" set BOOST_BRANCH=master echo BOOST_BRANCH: %BOOST_BRANCH% cd .. git clone -b %BOOST_BRANCH% --depth 1 https://github.com/boostorg/boost.git boost-root cd boost-root xcopy /s /e /q %GITHUB_WORKSPACE% libs\%LIBRARY%\ git submodule update --init tools/boostdep python tools/boostdep/depinst/depinst.py --git_args "--jobs 3" %LIBRARY% - name: Use library with add_subdirectory (Debug) shell: cmd run: | cd ../boost-root/libs/%LIBRARY%/test/cmake_subdir_test mkdir __build__ && cd __build__ cmake .. cmake --build . --config Debug ctest --output-on-failure --no-tests=error -C Debug - name: Use library with add_subdirectory (Release) shell: cmd run: | cd ../boost-root/libs/%LIBRARY%/test/cmake_subdir_test/__build__ cmake --build . --config Release ctest --output-on-failure --no-tests=error -C Release windows-cmake-install: strategy: fail-fast: false matrix: include: - os: windows-2019 - os: windows-2022 runs-on: ${{matrix.os}} steps: - uses: actions/checkout@v3 - name: Setup Boost shell: cmd run: | echo GITHUB_REPOSITORY: %GITHUB_REPOSITORY% for /f %%i in ("%GITHUB_REPOSITORY%") do set LIBRARY=%%~nxi echo LIBRARY: %LIBRARY% echo LIBRARY=%LIBRARY%>>%GITHUB_ENV% echo GITHUB_BASE_REF: %GITHUB_BASE_REF% echo GITHUB_REF: %GITHUB_REF% if "%GITHUB_BASE_REF%" == "" set GITHUB_BASE_REF=%GITHUB_REF% set BOOST_BRANCH=develop for /f %%i in ("%GITHUB_BASE_REF%") do if "%%~nxi" == "master" set BOOST_BRANCH=master echo BOOST_BRANCH: %BOOST_BRANCH% cd .. git clone -b %BOOST_BRANCH% --depth 1 https://github.com/boostorg/boost.git boost-root cd boost-root xcopy /s /e /q %GITHUB_WORKSPACE% libs\%LIBRARY%\ git submodule update --init tools/boostdep python tools/boostdep/depinst/depinst.py --git_args "--jobs 3" %LIBRARY% - name: Configure shell: cmd run: | cd ../boost-root mkdir __build__ && cd __build__ cmake -DBOOST_INCLUDE_LIBRARIES=%LIBRARY% -DCMAKE_INSTALL_PREFIX=C:/cmake-prefix .. - name: Install (Debug) shell: cmd run: | cd ../boost-root/__build__ cmake --build . --target install --config Debug - name: Install (Release) shell: cmd run: | cd ../boost-root/__build__ cmake --build . --target install --config Release - name: Use the installed library (Debug) shell: cmd run: | cd ../boost-root/libs/%LIBRARY%/test/cmake_install_test && mkdir __build__ && cd __build__ cmake -DCMAKE_INSTALL_PREFIX=C:/cmake-prefix .. cmake --build . --config Debug ctest --output-on-failure --no-tests=error -C Debug - name: Use the installed library (Release) shell: cmd run: | cd ../boost-root/libs/%LIBRARY%/test/cmake_install_test/__build__ cmake --build . --config Release ctest --output-on-failure --no-tests=error -C Release windows-cmake-test: strategy: fail-fast: false matrix: include: - os: windows-2019 - os: windows-2022 runs-on: ${{matrix.os}} steps: - uses: actions/checkout@v3 - name: Setup Boost shell: cmd run: | echo GITHUB_REPOSITORY: %GITHUB_REPOSITORY% for /f %%i in ("%GITHUB_REPOSITORY%") do set LIBRARY=%%~nxi echo LIBRARY: %LIBRARY% echo LIBRARY=%LIBRARY%>>%GITHUB_ENV% echo GITHUB_BASE_REF: %GITHUB_BASE_REF% echo GITHUB_REF: %GITHUB_REF% if "%GITHUB_BASE_REF%" == "" set GITHUB_BASE_REF=%GITHUB_REF% set BOOST_BRANCH=develop for /f %%i in ("%GITHUB_BASE_REF%") do if "%%~nxi" == "master" set BOOST_BRANCH=master echo BOOST_BRANCH: %BOOST_BRANCH% cd .. git clone -b %BOOST_BRANCH% --depth 1 https://github.com/boostorg/boost.git boost-root cd boost-root xcopy /s /e /q %GITHUB_WORKSPACE% libs\%LIBRARY%\ git submodule update --init tools/boostdep python tools/boostdep/depinst/depinst.py --git_args "--jobs 3" %LIBRARY% - name: Configure shell: cmd run: | cd ../boost-root mkdir __build__ && cd __build__ cmake -DBOOST_INCLUDE_LIBRARIES=%LIBRARY% -DBUILD_TESTING=ON .. - name: Build tests (Debug) shell: cmd run: | cd ../boost-root/__build__ cmake --build . --target tests --config Debug - name: Run tests (Debug) shell: cmd run: | cd ../boost-root/__build__ ctest --output-on-failure --no-tests=error -C Debug - name: Build tests (Release) shell: cmd run: | cd ../boost-root/__build__ cmake --build . --target tests --config Release - name: Run tests (Release) shell: cmd run: | cd ../boost-root/__build__ ctest --output-on-failure --no-tests=error -C Release