From 7dbf99956029c726fe67a07a12665e567312adee Mon Sep 17 00:00:00 2001 From: Jean-Louis Leroy Date: Sun, 22 Jun 2025 11:05:19 -0400 Subject: [PATCH 1/7] copy CI from Unordered --- .github/workflows/main.yml | 490 +++++++++++++++++++++++++++++++------ 1 file changed, 410 insertions(+), 80 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 5c27f180..1fd65706 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -1,113 +1,443 @@ -# Copyright (c) 2018-2025 Jean-Louis Leroy +# Copyright 2020-2021 Peter Dimov +# Copyright 2021 Andrey Semashev +# Copyright 2021 Alexander Grund +# Copyright 2022 James E. King III +# # Distributed under the Boost Software License, Version 1.0. -# See accompanying file LICENSE_1_0.txt -# or copy at http://www.boost.org/LICENSE_1_0.txt) +# (See accompanying file LICENSE_1_0.txt or copy at http://boost.org/LICENSE_1_0.txt) +--- +name: CI -# CI is quite simple at the moment. It will be improved and made more -# comprehensive, probably similar to Boost.Unordered. +on: + pull_request: + push: + branches: + - master + - develop + - bugfix/** + - feature/** + - fix/** + - pr/** -name: CI +concurrency: + group: ${{format('{0}:{1}', github.repository, github.ref)}} + cancel-in-progress: true env: - BUILD_TYPE: Debug Release + GIT_FETCH_JOBS: 8 + NET_RETRY_COUNT: 5 + B2_CI_VERSION: 1 + B2_VARIANT: debug,release + LCOV_BRANCH_COVERAGE: 0 + CODECOV_NAME: Github Actions -permissions: - contents: 'read' - pages: 'write' - id-token: 'write' +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 -on: [push, pull_request, workflow_dispatch] + posix: + defaults: + run: + shell: bash -jobs: - Ubuntu: - runs-on: ubuntu-latest strategy: fail-fast: false matrix: - config: [Debug, Release] - compiler: [clang++, g++] + include: + # Linux, gcc + - { compiler: gcc-7, cxxstd: '11,14,17', os: 'ubuntu-20.04', install: 'g++-7' } + - { compiler: gcc-8, cxxstd: '11,14,17', os: 'ubuntu-20.04', install: 'g++-8' } + - { compiler: gcc-9, cxxstd: '11,14,17', os: 'ubuntu-22.04', install: 'g++-9' } + - { compiler: gcc-10, cxxstd: '11,14,17,20', os: 'ubuntu-22.04', install: 'g++-10' } + - { compiler: gcc-11, cxxstd: '11,14,17,20', os: 'ubuntu-22.04', install: 'g++-11' } + - { name: "gcc-12 w/ sanitizers (11)", sanitize: yes, + compiler: gcc-12, cxxstd: '11', os: 'ubuntu-22.04', ccache_key: "san1" } + - { name: "gcc-12 w/ sanitizers (14)", sanitize: yes, + compiler: gcc-12, cxxstd: '14', os: 'ubuntu-22.04', ccache_key: "san1" } + - { name: "gcc-12 w/ sanitizers (17)", sanitize: yes, + compiler: gcc-12, cxxstd: '17', os: 'ubuntu-22.04', ccache_key: "san2" } + - { name: "gcc-12 w/ sanitizers (20)", sanitize: yes, + compiler: gcc-12, cxxstd: '20', os: 'ubuntu-22.04', ccache_key: "san2" } + - { name: "gcc-12 w/ sanitizers (2b)", sanitize: yes, + compiler: gcc-12, cxxstd: '2b', os: 'ubuntu-22.04', ccache_key: "san2" } + - { name: Collect coverage, coverage: yes, + compiler: gcc-12, cxxstd: '20', os: 'ubuntu-22.04', install: 'g++-12-multilib', address-model: '32,64', ccache_key: "cov" } + + - { name: "cfoa tsan (gcc-12)", cxxstd: '11,14,17,20,2b', os: 'ubuntu-22.04', compiler: gcc-12, + targets: 'libs/unordered/test//cfoa_tests', thread-sanitize: yes, ccache_key: "tsan" } + + # Linux, clang, libc++ + - { compiler: clang-7, cxxstd: '11,14,17', os: 'ubuntu-20.04', stdlib: libc++, install: 'clang-7 libc++-7-dev libc++abi-7-dev' } + - { compiler: clang-10, cxxstd: '11,14,17,20', os: 'ubuntu-20.04', stdlib: libc++, install: 'clang-10 libc++-10-dev libc++abi-10-dev' } + - { compiler: clang-11, cxxstd: '11,14,17,20', os: 'ubuntu-22.04', stdlib: libc++, install: 'clang-11 libc++-11-dev libc++abi-11-dev' } + # clang-12 doesn't work on 'ubuntu-22.04', the linker can't find -lunwind for some reason + - { name: "clang-12 w/ sanitizers (11,14)", sanitize: yes, + compiler: clang-12, cxxstd: '11,14', os: 'ubuntu-20.04', stdlib: libc++, install: 'clang-12 libc++-12-dev libc++abi-12-dev', ccache_key: "san1" } + - { name: "clang-12 w/ sanitizers (17)", sanitize: yes, + compiler: clang-12, cxxstd: '17', os: 'ubuntu-20.04', stdlib: libc++, install: 'clang-12 libc++-12-dev libc++abi-12-dev', ccache_key: "san2" } + - { name: "clang-12 w/ sanitizers (20)", sanitize: yes, + compiler: clang-12, cxxstd: '20', os: 'ubuntu-20.04', stdlib: libc++, install: 'clang-12 libc++-12-dev libc++abi-12-dev', ccache_key: "san2" } + - { name: "clang-12 w/ sanitizers (2b)", sanitize: yes, + compiler: clang-12, cxxstd: '2b', os: 'ubuntu-20.04', stdlib: libc++, install: 'clang-12 libc++-12-dev libc++abi-12-dev', ccache_key: "san2" } + - { compiler: 'clang-13', cxxstd: '11,14', os: 'ubuntu-22.04', stdlib: libc++, install: 'clang-13 libc++-13-dev libc++abi-13-dev' } + - { compiler: 'clang-13', cxxstd: '17,20,2b', os: 'ubuntu-22.04', stdlib: libc++, install: 'clang-13 libc++-13-dev libc++abi-13-dev' } + + # not using libc++ because of https://github.com/llvm/llvm-project/issues/52771 + - { name: "clang-14 w/ sanitizers (11,14)", sanitize: yes, + compiler: clang-14, cxxstd: '11,14', os: 'ubuntu-22.04', ccache_key: "san1" } + - { name: "clang-14 w/ sanitizers (17)", sanitize: yes, + compiler: clang-14, cxxstd: '17', os: 'ubuntu-22.04', ccache_key: "san2" } + - { name: "clang-14 w/ sanitizers (20)", sanitize: yes, + compiler: clang-14, cxxstd: '20', container: 'ubuntu:22.04', os: 'ubuntu-latest', ccache_key: "san2" } + - { name: "clang-14 w/ sanitizers (2b)", sanitize: yes, + compiler: clang-14, cxxstd: '2b', container: 'ubuntu:22.04', os: 'ubuntu-latest', ccache_key: "san2" } + + - { name: "cfoa tsan (clang-14)", cxxstd: '11,14,17,20,2b', os: 'ubuntu-22.04', compiler: clang-14, + targets: 'libs/unordered/test//cfoa_tests', thread-sanitize: yes, + stdlib: libc++, install: 'clang-14 libc++-14-dev libc++abi-14-dev', ccache_key: "tsan" } + + - { compiler: 'clang-15', cxxstd: '11,14', os: 'ubuntu-22.04', stdlib: libc++, install: 'clang-15 libc++-15-dev libc++abi-15-dev' } + - { compiler: 'clang-15', cxxstd: '17,20,2b', os: 'ubuntu-22.04', stdlib: libc++, install: 'clang-15 libc++-15-dev libc++abi-15-dev' } + + # OSX, clang + - { compiler: clang, cxxstd: '11,14,17,2a', os: 'macos-12', sanitize: yes, ccache_key: "san1" } + - { compiler: clang, cxxstd: '11,14,17,2a', os: 'macos-12', thread-sanitize: yes, targets: 'libs/unordered/test//cfoa_tests', ccache_key: "tsan" } + - { compiler: clang, cxxstd: '11,14,17,20,2b', os: 'macos-13' } + - { compiler: clang, cxxstd: '11,14,17,20,2b', os: 'macos-14' } + + timeout-minutes: 360 + # posix (gcc-12 w/ sanitizers is taking longer than 210 minutes + # timeout-minutes: 210 + needs: [runner-selection] + runs-on: ${{ fromJSON(needs.runner-selection.outputs.labelmatrix)[matrix.os] }} + container: ${{matrix.container}} + env: {B2_USE_CCACHE: 1} + steps: - - uses: actions/checkout@v4 - - name: Install clang++ + - name: Setup environment + run: | + if [ -f "/etc/debian_version" ]; then + echo "DEBIAN_FRONTEND=noninteractive" >> $GITHUB_ENV + export DEBIAN_FRONTEND=noninteractive + fi + if [ -n "${{matrix.container}}" ] && [ -f "/etc/debian_version" ]; then + apt-get -o Acquire::Retries=$NET_RETRY_COUNT update + apt-get -o Acquire::Retries=$NET_RETRY_COUNT install -y sudo software-properties-common + # Need (newer) git, and the older Ubuntu container may require requesting the key manually using port 80 + apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys E1DD270288B4E6030699E45FA1715D88E1DF1F24 + for i in {1..${NET_RETRY_COUNT:-3}}; do sudo -E add-apt-repository -y ppa:git-core/ppa && break || sleep 10; done + apt-get -o Acquire::Retries=$NET_RETRY_COUNT update + apt-get -o Acquire::Retries=$NET_RETRY_COUNT install -y g++ python-is-python3 git + fi + # For jobs not compatible with ccache, use "ccache: no" in the matrix + if [[ "${{ matrix.ccache }}" == "no" ]]; then + echo "B2_USE_CCACHE=0" >> $GITHUB_ENV + fi + git config --global pack.threads 0 + + - uses: actions/checkout@v3 + with: + # For coverage builds fetch the whole history, else only 1 commit using a 'fake ternary' + fetch-depth: ${{ matrix.coverage && '0' || '1' }} + + - name: Cache ccache + uses: actions/cache@v3 + if: env.B2_USE_CCACHE + with: + path: ~/.ccache + key: ${{matrix.os}}-${{matrix.container}}-${{matrix.compiler}}-${{matrix.ccache_key}}-${{github.sha}} + restore-keys: ${{matrix.os}}-${{matrix.container}}-${{matrix.compiler}}-${{matrix.ccache_key}}- + + - name: Fetch Boost.CI + uses: actions/checkout@v3 + with: + repository: boostorg/boost-ci + ref: master + path: boost-ci-cloned + + - name: Get CI scripts folder + run: | + # Copy ci folder if not testing Boost.CI + [[ "$GITHUB_REPOSITORY" =~ "boost-ci" ]] || cp -r boost-ci-cloned/ci . + rm -rf boost-ci-cloned + + - name: Install packages + if: startsWith(matrix.os, 'ubuntu') + run: | + SOURCE_KEYS=(${{join(matrix.source_keys, ' ')}}) + SOURCES=(${{join(matrix.sources, ' ')}}) + # Add this by default + SOURCES+=(ppa:ubuntu-toolchain-r/test) + for key in "${SOURCE_KEYS[@]}"; do + for i in {1..$NET_RETRY_COUNT}; do + wget -O - "$key" | sudo apt-key add - && break || sleep 10 + done + done + for source in "${SOURCES[@]}"; do + for i in {1..$NET_RETRY_COUNT}; do + sudo add-apt-repository $source && break || sleep 10 + done + done + sudo apt-get -o Acquire::Retries=$NET_RETRY_COUNT update + if [[ -z "${{matrix.install}}" ]]; then + pkgs="${{matrix.compiler}}" + pkgs="${pkgs/gcc-/g++-}" + else + pkgs="${{matrix.install}}" + fi + sudo apt-get -o Acquire::Retries=$NET_RETRY_COUNT install -y $pkgs + + - name: Setup GCC Toolchain + if: matrix.gcc_toolchain + run: | + GCC_TOOLCHAIN_ROOT="$HOME/gcc-toolchain" + echo "GCC_TOOLCHAIN_ROOT=$GCC_TOOLCHAIN_ROOT" >> $GITHUB_ENV + MULTIARCH_TRIPLET="$(dpkg-architecture -qDEB_HOST_MULTIARCH)" + mkdir -p "$GCC_TOOLCHAIN_ROOT" + ln -s /usr/include "$GCC_TOOLCHAIN_ROOT/include" + ln -s /usr/bin "$GCC_TOOLCHAIN_ROOT/bin" + mkdir -p "$GCC_TOOLCHAIN_ROOT/lib/gcc/$MULTIARCH_TRIPLET" + ln -s "/usr/lib/gcc/$MULTIARCH_TRIPLET/${{matrix.gcc_toolchain}}" "$GCC_TOOLCHAIN_ROOT/lib/gcc/$MULTIARCH_TRIPLET/${{matrix.gcc_toolchain}}" + + - name: Setup multiarch + if: matrix.multiarch run: | - wget https://apt.llvm.org/llvm.sh - chmod +x llvm.sh - sudo ./llvm.sh $1 - if: matrix.compiler == 'clang++' - - name: Install Boost - run: sudo apt-get install -y libboost-all-dev - - name: Configure - run: cmake -DCMAKE_BUILD_TYPE=${{ matrix.config }} -DCMAKE_CXX_COMPILER=${{ matrix.compiler }} -DBUILD_TESTING=1 -DBUILD_EXAMPLES=1 -Bbuild - - name: Build - run: cmake --build build - - name: Test + sudo apt-get install --no-install-recommends -y binfmt-support qemu-user-static + sudo docker run --rm --privileged multiarch/qemu-user-static --reset -p yes + git clone https://github.com/jeking3/bdde.git + echo "$(pwd)/bdde/bin/linux" >> ${GITHUB_PATH} + echo "BDDE_DISTRO=${{ matrix.distro }}" >> ${GITHUB_ENV} + echo "BDDE_EDITION=${{ matrix.edition }}" >> ${GITHUB_ENV} + echo "BDDE_ARCH=${{ matrix.arch }}" >> ${GITHUB_ENV} + echo "B2_WRAPPER=bdde" >> ${GITHUB_ENV} + + - name: Setup Boost + env: + B2_ADDRESS_MODEL: ${{matrix.address-model}} + B2_COMPILER: ${{matrix.compiler}} + B2_CXXSTD: ${{matrix.cxxstd}} + B2_SANITIZE: ${{matrix.sanitize}} + B2_TSAN: ${{matrix.thread-sanitize}} + B2_TARGETS: ${{matrix.targets}} + B2_STDLIB: ${{matrix.stdlib}} + # More entries can be added in the same way, see the B2_ARGS assignment in ci/enforce.sh for the possible keys. + # B2_DEFINES: ${{matrix.defines}} + # Variables set here (to non-empty) will override the top-level environment variables, e.g. + # B2_VARIANT: ${{matrix.variant}} + run: source ci/github/install.sh + + - name: Setup coverage collection + if: matrix.coverage + run: ci/github/codecov.sh "setup" + + - name: Run tests + if: '!matrix.coverity' + run: B2_TARGETS=${{matrix.targets}} ci/build.sh + + - name: Upload coverage + if: matrix.coverage + run: ci/codecov.sh "upload" + env: + CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} + + - name: Run coverity + if: matrix.coverity && github.event_name == 'push' && (github.ref_name == 'develop' || github.ref_name == 'master') + run: ci/github/coverity.sh + env: + COVERITY_SCAN_NOTIFICATION_EMAIL: ${{ secrets.COVERITY_SCAN_NOTIFICATION_EMAIL }} + COVERITY_SCAN_TOKEN: ${{ secrets.COVERITY_SCAN_TOKEN }} + + windows: + defaults: + run: + shell: cmd + strategy: + fail-fast: false + matrix: + include: + - { toolset: msvc-14.0, cxxstd: '14,latest', addrmd: '32,64', os: 'windows-2019', variant: 'debug,release' } + - { toolset: msvc-14.2, cxxstd: '14,17,20,latest', addrmd: '32,64', os: 'windows-2019', variant: 'debug,release' } + - { toolset: msvc-14.3, cxxstd: '14,17,20,latest', addrmd: '32,64', os: 'windows-2022', variant: 'debug,release' } + - { toolset: msvc-14.3, cxxstd: '14', addrmd: '64', os: 'windows-2022', variant: 'debug', defines: '_ALLOW_RTCc_IN_STL', cxxflags: '/RTCc' } + - { toolset: msvc-14.3, cxxstd: '14', addrmd: '32', os: 'windows-2022', variant: 'debug', defines: '_ALLOW_RTCc_IN_STL', cxxflags: '"/RTCc /arch:IA32"' } + - { toolset: msvc-14.3, cxxstd: '14,17', addrmd: '32,64', os: 'windows-2022', variant: 'debug,release', cxxflags: '/permissive-' } + - { toolset: clang-win, cxxstd: '14,17,latest', addrmd: '32,64', os: 'windows-2022', variant: 'debug,release' } + - { toolset: gcc, cxxstd: '11,14,17,2a', addrmd: '64', os: 'windows-2019', variant: 'debug,release' } + + needs: [runner-selection] + runs-on: ${{ fromJSON(needs.runner-selection.outputs.labelmatrix)[matrix.os] }} + + steps: + - uses: actions/checkout@v3 + + - name: Fetch Boost.CI + uses: actions/checkout@v3 + with: + repository: boostorg/boost-ci + ref: master + path: boost-ci-cloned + - name: Get CI scripts folder run: | - ctest --test-dir build --rerun-failed --output-on-failure - Windows: - runs-on: windows-latest + REM Copy ci folder if not testing Boost.CI + if "%GITHUB_REPOSITORY%" == "%GITHUB_REPOSITORY:boost-ci=%" xcopy /s /e /q /i /y boost-ci-cloned\ci .\ci + rmdir /s /q boost-ci-cloned + + - name: Setup Boost + run: ci\github\install.bat + + - name: Run tests + if: '!matrix.coverage' + run: ci\build.bat + env: + B2_TOOLSET: ${{matrix.toolset}} + B2_CXXSTD: ${{matrix.cxxstd}} + B2_ADDRESS_MODEL: ${{matrix.addrmd}} + B2_DEFINES: ${{matrix.defines}} + B2_VARIANT: ${{matrix.variant}} + B2_CXXFLAGS: ${{matrix.cxxflags}} + + - name: Collect coverage + shell: powershell + if: matrix.coverage + run: ci\opencppcoverage.ps1 + env: + B2_TOOLSET: ${{matrix.toolset}} + B2_CXXSTD: ${{matrix.cxxstd}} + B2_ADDRESS_MODEL: ${{matrix.addrmd}} + + - name: Upload coverage + if: matrix.coverage + uses: codecov/codecov-action@v2 + with: + files: __out/cobertura.xml + + MSYS2: + defaults: + run: + shell: msys2 {0} strategy: fail-fast: false matrix: - config: [Debug, Release] + include: + - { sys: MINGW32, compiler: gcc, cxxstd: '11,17,20' } + - { sys: MINGW64, compiler: gcc, cxxstd: '11,17,20' } + + needs: [runner-selection] + runs-on: ${{ fromJSON(needs.runner-selection.outputs.labelmatrix)['windows-latest'] }} + steps: - uses: actions/checkout@v3 - - uses: ilammy/msvc-dev-cmd@v1 - - name: Install boost - uses: MarkusJx/install-boost@v2 - id: install-boost + + - name: Setup MSYS2 environment + uses: msys2/setup-msys2@v2 + with: + msystem: ${{matrix.sys}} + update: true + install: git python + pacboy: gcc:p cmake:p ninja:p + + - name: Fetch Boost.CI + uses: actions/checkout@v3 with: - boost_version: 1.87.0 - - name: Configure + repository: boostorg/boost-ci + ref: master + path: boost-ci-cloned + - name: Get CI scripts folder run: | - cmake -DCMAKE_BUILD_TYPE=${{ matrix.config }} -DBUILD_TESTING=1 -DBUILD_EXAMPLES=1 -Bbuild -DBoost_DIR=${{ steps.install-boost.outputs.BOOST_ROOT }} -DBoost_INCLUDE_DIR=${{steps.install-boost.outputs.BOOST_ROOT}}\include -DBoost_LIBRARY_DIRS=${{steps.install-boost.outputs.BOOST_ROOT}}\lib + # Copy ci folder if not testing Boost.CI + [[ "$GITHUB_REPOSITORY" =~ "boost-ci" ]] || cp -r boost-ci-cloned/ci . + rm -rf boost-ci-cloned + + - name: Setup Boost env: - BOOST_ROOT: ${{ steps.install-boost.outputs.BOOST_ROOT }} - - name: Build - run: cmake --build build --config ${{ matrix.config }} - - name: Test + B2_COMPILER: ${{matrix.compiler}} + B2_CXXSTD: ${{matrix.cxxstd}} + B2_SANITIZE: ${{matrix.sanitize}} + B2_STDLIB: ${{matrix.stdlib}} + run: ci/github/install.sh + + - name: Run tests + run: ci/build.sh + + # Run also the CMake tests to avoid having to setup another matrix for CMake on MSYS + - name: Run CMake tests run: | - ctest --test-dir build --rerun-failed --output-on-failure -C ${{ matrix.config }} - MacOS: - runs-on: macos-latest + cd "$BOOST_ROOT" + mkdir __build_cmake_test__ && cd __build_cmake_test__ + cmake -G Ninja -DCMAKE_BUILD_TYPE=Debug -DBOOST_INCLUDE_LIBRARIES=$SELF -DBUILD_SHARED_LIBS=ON -DBUILD_TESTING=ON -DBoost_VERBOSE=ON .. + cmake --build . --target tests --config Debug -j$B2_JOBS + ctest --output-on-failure --build-config Debug + + CMake: + defaults: + run: + shell: bash + strategy: fail-fast: false matrix: - config: [Debug, Release] + include: + - { os: 'ubuntu-20.04', build_shared: ON, build_type: Debug, generator: 'Unix Makefiles' } + - { os: 'windows-2019', build_shared: ON, build_type: Debug, generator: 'Visual Studio 16 2019' } + + timeout-minutes: 120 + needs: [runner-selection] + runs-on: ${{ fromJSON(needs.runner-selection.outputs.labelmatrix)[matrix.os] }} + steps: - uses: actions/checkout@v3 - - uses: ilammy/msvc-dev-cmd@v1 - - name: Install boost - run: brew install boost - - name: Configure + - name: Fetch Boost.CI + uses: actions/checkout@v3 + with: + repository: boostorg/boost-ci + ref: master + path: boost-ci-cloned + - name: Get CI scripts folder run: | - cmake -DCMAKE_BUILD_TYPE=${{ matrix.config }} -DBUILD_TESTING=1 -DBUILD_EXAMPLES=1 -Bbuild - - name: Build + # Copy ci folder if not testing Boost.CI + [[ "$GITHUB_REPOSITORY" =~ "boost-ci" ]] || cp -r boost-ci-cloned/ci . + rm -rf boost-ci-cloned + - name: Setup Boost + env: {B2_DONT_BOOTSTRAP: 1} + run: source ci/github/install.sh + + - name: Run CMake tests run: | - cmake --build build - - name: Test + cd "$BOOST_ROOT" + mkdir __build_cmake_test__ && cd __build_cmake_test__ + cmake -G "${{matrix.generator}}" -DCMAKE_BUILD_TYPE=${{matrix.build_type}} -DBOOST_INCLUDE_LIBRARIES=$SELF -DBUILD_SHARED_LIBS=${{matrix.build_shared}} -DBUILD_TESTING=ON -DBoost_VERBOSE=ON .. + cmake --build . --target tests --config ${{matrix.build_type}} -j$B2_JOBS + ctest --output-on-failure --build-config ${{matrix.build_type}} + + - name: Run CMake subdir tests run: | - ctest --test-dir build --rerun-failed --output-on-failure - Artifacts: - if: github.ref_name == 'master' - runs-on: ubuntu-latest - environment: - name: github-pages - url: ${{ steps.deployment.outputs.page_url }} - steps: - - uses: actions/checkout@v4 - - name: Install asciidoctor + cmake_test_folder="$BOOST_ROOT/libs/$SELF/test/cmake_test" # New unified folder + [ -d "$cmake_test_folder" ] || cmake_test_folder="$BOOST_ROOT/libs/$SELF/test/cmake_subdir_test" + cd "$cmake_test_folder" + mkdir __build_cmake_subdir_test__ && cd __build_cmake_subdir_test__ + cmake -G "${{matrix.generator}}" -DBOOST_CI_INSTALL_TEST=OFF -DCMAKE_BUILD_TYPE=${{matrix.build_type}} -DBUILD_SHARED_LIBS=${{matrix.build_shared}} .. + cmake --build . --config ${{matrix.build_type}} -j$B2_JOBS + ctest --output-on-failure --build-config ${{matrix.build_type}} + + - name: Install Library run: | - sudo apt-get install asciidoctor - asciidoctor doc/openmethod.adoc -o build_outputs_folder/index.html - - name: Generate documentation + cd "$BOOST_ROOT" + mkdir __build_cmake_install_test__ && cd __build_cmake_install_test__ + cmake -G "${{matrix.generator}}" -DCMAKE_BUILD_TYPE=${{matrix.build_type}} -DBOOST_INCLUDE_LIBRARIES=$SELF -DBUILD_SHARED_LIBS=${{matrix.build_shared}} -DCMAKE_INSTALL_PREFIX=~/.local -DBoost_VERBOSE=ON -DBoost_DEBUG=ON .. + cmake --build . --target install --config ${{matrix.build_type}} -j$B2_JOBS + - name: Run CMake install tests run: | - sudo apt-get install asciidoctor - asciidoctor doc/openmethod.adoc -o build_outputs_folder/index.html - - name: Build flat headers - run: dev/flatten.sh - - name: Upload static files as artifact - uses: actions/upload-pages-artifact@v3 - with: - path: build_outputs_folder/ - - name: Deploy to GitHub Pages - uses: actions/deploy-pages@v4 + cmake_test_folder="$BOOST_ROOT/libs/$SELF/test/cmake_test" # New unified folder + [ -d "$cmake_test_folder" ] || cmake_test_folder="$BOOST_ROOT/libs/$SELF/test/cmake_install_test" + cd "$cmake_test_folder" + mkdir __build_cmake_install_test__ && cd __build_cmake_install_test__ + cmake -G "${{matrix.generator}}" -DBOOST_CI_INSTALL_TEST=ON -DCMAKE_BUILD_TYPE=${{matrix.build_type}} -DBUILD_SHARED_LIBS=${{matrix.build_shared}} -DCMAKE_PREFIX_PATH=~/.local .. + cmake --build . --config ${{matrix.build_type}} -j$B2_JOBS + ctest --output-on-failure --build-config ${{matrix.build_type}} From 4ff7edf010c9fbee8bab67a28c99fd6a7176a10b Mon Sep 17 00:00:00 2001 From: Jean-Louis Leroy Date: Sun, 22 Jun 2025 11:07:38 -0400 Subject: [PATCH 2/7] copy CI from Unordered --- .github/workflows/main.yml | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 1fd65706..394ab986 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -8,16 +8,18 @@ --- name: CI -on: - pull_request: - push: - branches: - - master - - develop - - bugfix/** - - feature/** - - fix/** - - pr/** +on: [push, pull_request, workflow_dispatch] + +# on: +# pull_request: +# push: +# branches: +# - master +# - develop +# - bugfix/** +# - feature/** +# - fix/** +# - pr/** concurrency: group: ${{format('{0}:{1}', github.repository, github.ref)}} From e827c328d23c0462b71f70c038c4623e004dcbae Mon Sep 17 00:00:00 2001 From: Jean-Louis Leroy Date: Sun, 22 Jun 2025 12:03:46 -0400 Subject: [PATCH 3/7] wip --- .github/workflows/main.yml | 486 +++++++------------------------------ meta/libraries.json | 15 ++ 2 files changed, 96 insertions(+), 405 deletions(-) create mode 100644 meta/libraries.json diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 394ab986..1abf5669 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -1,11 +1,3 @@ -# Copyright 2020-2021 Peter Dimov -# Copyright 2021 Andrey Semashev -# Copyright 2021 Alexander Grund -# Copyright 2022 James E. King III -# -# 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: [push, pull_request, workflow_dispatch] @@ -21,425 +13,109 @@ on: [push, pull_request, workflow_dispatch] # - fix/** # - pr/** -concurrency: - group: ${{format('{0}:{1}', github.repository, github.ref)}} - cancel-in-progress: true - env: - GIT_FETCH_JOBS: 8 - NET_RETRY_COUNT: 5 - B2_CI_VERSION: 1 - B2_VARIANT: debug,release - LCOV_BRANCH_COVERAGE: 0 - CODECOV_NAME: Github Actions + UBSAN_OPTIONS: print_stacktrace=1 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: - defaults: - run: - shell: bash - strategy: fail-fast: false matrix: include: - # Linux, gcc - - { compiler: gcc-7, cxxstd: '11,14,17', os: 'ubuntu-20.04', install: 'g++-7' } - - { compiler: gcc-8, cxxstd: '11,14,17', os: 'ubuntu-20.04', install: 'g++-8' } - - { compiler: gcc-9, cxxstd: '11,14,17', os: 'ubuntu-22.04', install: 'g++-9' } - - { compiler: gcc-10, cxxstd: '11,14,17,20', os: 'ubuntu-22.04', install: 'g++-10' } - - { compiler: gcc-11, cxxstd: '11,14,17,20', os: 'ubuntu-22.04', install: 'g++-11' } - - { name: "gcc-12 w/ sanitizers (11)", sanitize: yes, - compiler: gcc-12, cxxstd: '11', os: 'ubuntu-22.04', ccache_key: "san1" } - - { name: "gcc-12 w/ sanitizers (14)", sanitize: yes, - compiler: gcc-12, cxxstd: '14', os: 'ubuntu-22.04', ccache_key: "san1" } - - { name: "gcc-12 w/ sanitizers (17)", sanitize: yes, - compiler: gcc-12, cxxstd: '17', os: 'ubuntu-22.04', ccache_key: "san2" } - - { name: "gcc-12 w/ sanitizers (20)", sanitize: yes, - compiler: gcc-12, cxxstd: '20', os: 'ubuntu-22.04', ccache_key: "san2" } - - { name: "gcc-12 w/ sanitizers (2b)", sanitize: yes, - compiler: gcc-12, cxxstd: '2b', os: 'ubuntu-22.04', ccache_key: "san2" } - - { name: Collect coverage, coverage: yes, - compiler: gcc-12, cxxstd: '20', os: 'ubuntu-22.04', install: 'g++-12-multilib', address-model: '32,64', ccache_key: "cov" } - - - { name: "cfoa tsan (gcc-12)", cxxstd: '11,14,17,20,2b', os: 'ubuntu-22.04', compiler: gcc-12, - targets: 'libs/unordered/test//cfoa_tests', thread-sanitize: yes, ccache_key: "tsan" } - - # Linux, clang, libc++ - - { compiler: clang-7, cxxstd: '11,14,17', os: 'ubuntu-20.04', stdlib: libc++, install: 'clang-7 libc++-7-dev libc++abi-7-dev' } - - { compiler: clang-10, cxxstd: '11,14,17,20', os: 'ubuntu-20.04', stdlib: libc++, install: 'clang-10 libc++-10-dev libc++abi-10-dev' } - - { compiler: clang-11, cxxstd: '11,14,17,20', os: 'ubuntu-22.04', stdlib: libc++, install: 'clang-11 libc++-11-dev libc++abi-11-dev' } - # clang-12 doesn't work on 'ubuntu-22.04', the linker can't find -lunwind for some reason - - { name: "clang-12 w/ sanitizers (11,14)", sanitize: yes, - compiler: clang-12, cxxstd: '11,14', os: 'ubuntu-20.04', stdlib: libc++, install: 'clang-12 libc++-12-dev libc++abi-12-dev', ccache_key: "san1" } - - { name: "clang-12 w/ sanitizers (17)", sanitize: yes, - compiler: clang-12, cxxstd: '17', os: 'ubuntu-20.04', stdlib: libc++, install: 'clang-12 libc++-12-dev libc++abi-12-dev', ccache_key: "san2" } - - { name: "clang-12 w/ sanitizers (20)", sanitize: yes, - compiler: clang-12, cxxstd: '20', os: 'ubuntu-20.04', stdlib: libc++, install: 'clang-12 libc++-12-dev libc++abi-12-dev', ccache_key: "san2" } - - { name: "clang-12 w/ sanitizers (2b)", sanitize: yes, - compiler: clang-12, cxxstd: '2b', os: 'ubuntu-20.04', stdlib: libc++, install: 'clang-12 libc++-12-dev libc++abi-12-dev', ccache_key: "san2" } - - { compiler: 'clang-13', cxxstd: '11,14', os: 'ubuntu-22.04', stdlib: libc++, install: 'clang-13 libc++-13-dev libc++abi-13-dev' } - - { compiler: 'clang-13', cxxstd: '17,20,2b', os: 'ubuntu-22.04', stdlib: libc++, install: 'clang-13 libc++-13-dev libc++abi-13-dev' } - - # not using libc++ because of https://github.com/llvm/llvm-project/issues/52771 - - { name: "clang-14 w/ sanitizers (11,14)", sanitize: yes, - compiler: clang-14, cxxstd: '11,14', os: 'ubuntu-22.04', ccache_key: "san1" } - - { name: "clang-14 w/ sanitizers (17)", sanitize: yes, - compiler: clang-14, cxxstd: '17', os: 'ubuntu-22.04', ccache_key: "san2" } - - { name: "clang-14 w/ sanitizers (20)", sanitize: yes, - compiler: clang-14, cxxstd: '20', container: 'ubuntu:22.04', os: 'ubuntu-latest', ccache_key: "san2" } - - { name: "clang-14 w/ sanitizers (2b)", sanitize: yes, - compiler: clang-14, cxxstd: '2b', container: 'ubuntu:22.04', os: 'ubuntu-latest', ccache_key: "san2" } - - - { name: "cfoa tsan (clang-14)", cxxstd: '11,14,17,20,2b', os: 'ubuntu-22.04', compiler: clang-14, - targets: 'libs/unordered/test//cfoa_tests', thread-sanitize: yes, - stdlib: libc++, install: 'clang-14 libc++-14-dev libc++abi-14-dev', ccache_key: "tsan" } - - - { compiler: 'clang-15', cxxstd: '11,14', os: 'ubuntu-22.04', stdlib: libc++, install: 'clang-15 libc++-15-dev libc++abi-15-dev' } - - { compiler: 'clang-15', cxxstd: '17,20,2b', os: 'ubuntu-22.04', stdlib: libc++, install: 'clang-15 libc++-15-dev libc++abi-15-dev' } - - # OSX, clang - - { compiler: clang, cxxstd: '11,14,17,2a', os: 'macos-12', sanitize: yes, ccache_key: "san1" } - - { compiler: clang, cxxstd: '11,14,17,2a', os: 'macos-12', thread-sanitize: yes, targets: 'libs/unordered/test//cfoa_tests', ccache_key: "tsan" } - - { compiler: clang, cxxstd: '11,14,17,20,2b', os: 'macos-13' } - - { compiler: clang, cxxstd: '11,14,17,20,2b', os: 'macos-14' } - - timeout-minutes: 360 - # posix (gcc-12 w/ sanitizers is taking longer than 210 minutes - # timeout-minutes: 210 - needs: [runner-selection] - runs-on: ${{ fromJSON(needs.runner-selection.outputs.labelmatrix)[matrix.os] }} + - toolset: gcc-11 + cxxstd: "17,20" + os: ubuntu-20.04 + install: g++-11 + - toolset: gcc-12 + cxxstd: "17,20" + os: ubuntu-22.04 + install: g++-12 + - toolset: gcc-13 + cxxstd: "17,20" + os: ubuntu-latest + container: ubuntu:23.04 + install: g++-13 + - toolset: clang + compiler: clang++-13 + cxxstd: "17,20" + os: ubuntu-22.04 + install: clang-13 + - toolset: clang + compiler: clang++-14 + cxxstd: "17,20" + os: ubuntu-22.04 + install: clang-14 + - toolset: clang + compiler: clang++-15 + cxxstd: "17,20" + os: ubuntu-22.04 + install: clang-15 + - toolset: clang + compiler: clang++-16 + cxxstd: "17,20" + os: ubuntu-latest + container: ubuntu:23.04 + install: clang-16 + - toolset: clang + cxxstd: "17,20" + os: macos-11 + - toolset: clang + cxxstd: "17,20" + os: macos-12 + - toolset: clang + cxxstd: "17,20" + os: macos-13 + + runs-on: ${{matrix.os}} container: ${{matrix.container}} - env: {B2_USE_CCACHE: 1} - - steps: - - name: Setup environment - run: | - if [ -f "/etc/debian_version" ]; then - echo "DEBIAN_FRONTEND=noninteractive" >> $GITHUB_ENV - export DEBIAN_FRONTEND=noninteractive - fi - if [ -n "${{matrix.container}}" ] && [ -f "/etc/debian_version" ]; then - apt-get -o Acquire::Retries=$NET_RETRY_COUNT update - apt-get -o Acquire::Retries=$NET_RETRY_COUNT install -y sudo software-properties-common - # Need (newer) git, and the older Ubuntu container may require requesting the key manually using port 80 - apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys E1DD270288B4E6030699E45FA1715D88E1DF1F24 - for i in {1..${NET_RETRY_COUNT:-3}}; do sudo -E add-apt-repository -y ppa:git-core/ppa && break || sleep 10; done - apt-get -o Acquire::Retries=$NET_RETRY_COUNT update - apt-get -o Acquire::Retries=$NET_RETRY_COUNT install -y g++ python-is-python3 git - fi - # For jobs not compatible with ccache, use "ccache: no" in the matrix - if [[ "${{ matrix.ccache }}" == "no" ]]; then - echo "B2_USE_CCACHE=0" >> $GITHUB_ENV - fi - git config --global pack.threads 0 - - uses: actions/checkout@v3 - with: - # For coverage builds fetch the whole history, else only 1 commit using a 'fake ternary' - fetch-depth: ${{ matrix.coverage && '0' || '1' }} - - - name: Cache ccache - uses: actions/cache@v3 - if: env.B2_USE_CCACHE - with: - path: ~/.ccache - key: ${{matrix.os}}-${{matrix.container}}-${{matrix.compiler}}-${{matrix.ccache_key}}-${{github.sha}} - restore-keys: ${{matrix.os}}-${{matrix.container}}-${{matrix.compiler}}-${{matrix.ccache_key}}- - - - name: Fetch Boost.CI - uses: actions/checkout@v3 - with: - repository: boostorg/boost-ci - ref: master - path: boost-ci-cloned - - - name: Get CI scripts folder - run: | - # Copy ci folder if not testing Boost.CI - [[ "$GITHUB_REPOSITORY" =~ "boost-ci" ]] || cp -r boost-ci-cloned/ci . - rm -rf boost-ci-cloned - - - name: Install packages - if: startsWith(matrix.os, 'ubuntu') - run: | - SOURCE_KEYS=(${{join(matrix.source_keys, ' ')}}) - SOURCES=(${{join(matrix.sources, ' ')}}) - # Add this by default - SOURCES+=(ppa:ubuntu-toolchain-r/test) - for key in "${SOURCE_KEYS[@]}"; do - for i in {1..$NET_RETRY_COUNT}; do - wget -O - "$key" | sudo apt-key add - && break || sleep 10 - done - done - for source in "${SOURCES[@]}"; do - for i in {1..$NET_RETRY_COUNT}; do - sudo add-apt-repository $source && break || sleep 10 - done - done - sudo apt-get -o Acquire::Retries=$NET_RETRY_COUNT update - if [[ -z "${{matrix.install}}" ]]; then - pkgs="${{matrix.compiler}}" - pkgs="${pkgs/gcc-/g++-}" - else - pkgs="${{matrix.install}}" - fi - sudo apt-get -o Acquire::Retries=$NET_RETRY_COUNT install -y $pkgs - - - name: Setup GCC Toolchain - if: matrix.gcc_toolchain - run: | - GCC_TOOLCHAIN_ROOT="$HOME/gcc-toolchain" - echo "GCC_TOOLCHAIN_ROOT=$GCC_TOOLCHAIN_ROOT" >> $GITHUB_ENV - MULTIARCH_TRIPLET="$(dpkg-architecture -qDEB_HOST_MULTIARCH)" - mkdir -p "$GCC_TOOLCHAIN_ROOT" - ln -s /usr/include "$GCC_TOOLCHAIN_ROOT/include" - ln -s /usr/bin "$GCC_TOOLCHAIN_ROOT/bin" - mkdir -p "$GCC_TOOLCHAIN_ROOT/lib/gcc/$MULTIARCH_TRIPLET" - ln -s "/usr/lib/gcc/$MULTIARCH_TRIPLET/${{matrix.gcc_toolchain}}" "$GCC_TOOLCHAIN_ROOT/lib/gcc/$MULTIARCH_TRIPLET/${{matrix.gcc_toolchain}}" - - - name: Setup multiarch - if: matrix.multiarch - run: | - sudo apt-get install --no-install-recommends -y binfmt-support qemu-user-static - sudo docker run --rm --privileged multiarch/qemu-user-static --reset -p yes - git clone https://github.com/jeking3/bdde.git - echo "$(pwd)/bdde/bin/linux" >> ${GITHUB_PATH} - echo "BDDE_DISTRO=${{ matrix.distro }}" >> ${GITHUB_ENV} - echo "BDDE_EDITION=${{ matrix.edition }}" >> ${GITHUB_ENV} - echo "BDDE_ARCH=${{ matrix.arch }}" >> ${GITHUB_ENV} - echo "B2_WRAPPER=bdde" >> ${GITHUB_ENV} - - - name: Setup Boost - env: - B2_ADDRESS_MODEL: ${{matrix.address-model}} - B2_COMPILER: ${{matrix.compiler}} - B2_CXXSTD: ${{matrix.cxxstd}} - B2_SANITIZE: ${{matrix.sanitize}} - B2_TSAN: ${{matrix.thread-sanitize}} - B2_TARGETS: ${{matrix.targets}} - B2_STDLIB: ${{matrix.stdlib}} - # More entries can be added in the same way, see the B2_ARGS assignment in ci/enforce.sh for the possible keys. - # B2_DEFINES: ${{matrix.defines}} - # Variables set here (to non-empty) will override the top-level environment variables, e.g. - # B2_VARIANT: ${{matrix.variant}} - run: source ci/github/install.sh - - - name: Setup coverage collection - if: matrix.coverage - run: ci/github/codecov.sh "setup" - - - name: Run tests - if: '!matrix.coverity' - run: B2_TARGETS=${{matrix.targets}} ci/build.sh - - - name: Upload coverage - if: matrix.coverage - run: ci/codecov.sh "upload" - env: - CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} - - - name: Run coverity - if: matrix.coverity && github.event_name == 'push' && (github.ref_name == 'develop' || github.ref_name == 'master') - run: ci/github/coverity.sh - env: - COVERITY_SCAN_NOTIFICATION_EMAIL: ${{ secrets.COVERITY_SCAN_NOTIFICATION_EMAIL }} - COVERITY_SCAN_TOKEN: ${{ secrets.COVERITY_SCAN_TOKEN }} - - windows: defaults: run: - shell: cmd - strategy: - fail-fast: false - matrix: - include: - - { toolset: msvc-14.0, cxxstd: '14,latest', addrmd: '32,64', os: 'windows-2019', variant: 'debug,release' } - - { toolset: msvc-14.2, cxxstd: '14,17,20,latest', addrmd: '32,64', os: 'windows-2019', variant: 'debug,release' } - - { toolset: msvc-14.3, cxxstd: '14,17,20,latest', addrmd: '32,64', os: 'windows-2022', variant: 'debug,release' } - - { toolset: msvc-14.3, cxxstd: '14', addrmd: '64', os: 'windows-2022', variant: 'debug', defines: '_ALLOW_RTCc_IN_STL', cxxflags: '/RTCc' } - - { toolset: msvc-14.3, cxxstd: '14', addrmd: '32', os: 'windows-2022', variant: 'debug', defines: '_ALLOW_RTCc_IN_STL', cxxflags: '"/RTCc /arch:IA32"' } - - { toolset: msvc-14.3, cxxstd: '14,17', addrmd: '32,64', os: 'windows-2022', variant: 'debug,release', cxxflags: '/permissive-' } - - { toolset: clang-win, cxxstd: '14,17,latest', addrmd: '32,64', os: 'windows-2022', variant: 'debug,release' } - - { toolset: gcc, cxxstd: '11,14,17,2a', addrmd: '64', os: 'windows-2019', variant: 'debug,release' } - - needs: [runner-selection] - runs-on: ${{ fromJSON(needs.runner-selection.outputs.labelmatrix)[matrix.os] }} - - steps: - - uses: actions/checkout@v3 - - - name: Fetch Boost.CI - uses: actions/checkout@v3 - with: - repository: boostorg/boost-ci - ref: master - path: boost-ci-cloned - - name: Get CI scripts folder - run: | - REM Copy ci folder if not testing Boost.CI - if "%GITHUB_REPOSITORY%" == "%GITHUB_REPOSITORY:boost-ci=%" xcopy /s /e /q /i /y boost-ci-cloned\ci .\ci - rmdir /s /q boost-ci-cloned - - - name: Setup Boost - run: ci\github\install.bat - - - name: Run tests - if: '!matrix.coverage' - run: ci\build.bat - env: - B2_TOOLSET: ${{matrix.toolset}} - B2_CXXSTD: ${{matrix.cxxstd}} - B2_ADDRESS_MODEL: ${{matrix.addrmd}} - B2_DEFINES: ${{matrix.defines}} - B2_VARIANT: ${{matrix.variant}} - B2_CXXFLAGS: ${{matrix.cxxflags}} - - - name: Collect coverage - shell: powershell - if: matrix.coverage - run: ci\opencppcoverage.ps1 - env: - B2_TOOLSET: ${{matrix.toolset}} - B2_CXXSTD: ${{matrix.cxxstd}} - B2_ADDRESS_MODEL: ${{matrix.addrmd}} - - - name: Upload coverage - if: matrix.coverage - uses: codecov/codecov-action@v2 - with: - files: __out/cobertura.xml - - MSYS2: - defaults: - run: - shell: msys2 {0} - strategy: - fail-fast: false - matrix: - include: - - { sys: MINGW32, compiler: gcc, cxxstd: '11,17,20' } - - { sys: MINGW64, compiler: gcc, cxxstd: '11,17,20' } - - needs: [runner-selection] - runs-on: ${{ fromJSON(needs.runner-selection.outputs.labelmatrix)['windows-latest'] }} + shell: bash steps: - uses: actions/checkout@v3 - - name: Setup MSYS2 environment - uses: msys2/setup-msys2@v2 - with: - msystem: ${{matrix.sys}} - update: true - install: git python - pacboy: gcc:p cmake:p ninja:p - - - name: Fetch Boost.CI - uses: actions/checkout@v3 - with: - repository: boostorg/boost-ci - ref: master - path: boost-ci-cloned - - name: Get CI scripts folder + - name: Setup container environment + if: matrix.container run: | - # Copy ci folder if not testing Boost.CI - [[ "$GITHUB_REPOSITORY" =~ "boost-ci" ]] || cp -r boost-ci-cloned/ci . - rm -rf boost-ci-cloned - - - name: Setup Boost - env: - B2_COMPILER: ${{matrix.compiler}} - B2_CXXSTD: ${{matrix.cxxstd}} - B2_SANITIZE: ${{matrix.sanitize}} - B2_STDLIB: ${{matrix.stdlib}} - run: ci/github/install.sh - - - name: Run tests - run: ci/build.sh + apt-get update + apt-get -y install sudo python3 git g++ - # Run also the CMake tests to avoid having to setup another matrix for CMake on MSYS - - name: Run CMake tests + - name: Install packages + if: matrix.install run: | - cd "$BOOST_ROOT" - mkdir __build_cmake_test__ && cd __build_cmake_test__ - cmake -G Ninja -DCMAKE_BUILD_TYPE=Debug -DBOOST_INCLUDE_LIBRARIES=$SELF -DBUILD_SHARED_LIBS=ON -DBUILD_TESTING=ON -DBoost_VERBOSE=ON .. - cmake --build . --target tests --config Debug -j$B2_JOBS - ctest --output-on-failure --build-config Debug + sudo apt-get update + sudo apt-get -y install ${{matrix.install}} - CMake: - defaults: - run: - shell: bash - - strategy: - fail-fast: false - matrix: - include: - - { os: 'ubuntu-20.04', build_shared: ON, build_type: Debug, generator: 'Unix Makefiles' } - - { os: 'windows-2019', build_shared: ON, build_type: Debug, generator: 'Visual Studio 16 2019' } - - timeout-minutes: 120 - needs: [runner-selection] - runs-on: ${{ fromJSON(needs.runner-selection.outputs.labelmatrix)[matrix.os] }} - - steps: - - uses: actions/checkout@v3 - - name: Fetch Boost.CI - uses: actions/checkout@v3 - with: - repository: boostorg/boost-ci - ref: master - path: boost-ci-cloned - - name: Get CI scripts folder - run: | - # Copy ci folder if not testing Boost.CI - [[ "$GITHUB_REPOSITORY" =~ "boost-ci" ]] || cp -r boost-ci-cloned/ci . - rm -rf boost-ci-cloned - name: Setup Boost - env: {B2_DONT_BOOTSTRAP: 1} - run: source ci/github/install.sh - - - name: Run CMake tests run: | - cd "$BOOST_ROOT" - mkdir __build_cmake_test__ && cd __build_cmake_test__ - cmake -G "${{matrix.generator}}" -DCMAKE_BUILD_TYPE=${{matrix.build_type}} -DBOOST_INCLUDE_LIBRARIES=$SELF -DBUILD_SHARED_LIBS=${{matrix.build_shared}} -DBUILD_TESTING=ON -DBoost_VERBOSE=ON .. - cmake --build . --target tests --config ${{matrix.build_type}} -j$B2_JOBS - ctest --output-on-failure --build-config ${{matrix.build_type}} - - - name: Run CMake subdir tests + 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 + python3 tools/boostdep/depinst/depinst.py --git_args "--jobs 3" $LIBRARY + ./bootstrap.sh + ./b2 -d0 headers + + - name: Create user-config.jam + if: matrix.compiler run: | - cmake_test_folder="$BOOST_ROOT/libs/$SELF/test/cmake_test" # New unified folder - [ -d "$cmake_test_folder" ] || cmake_test_folder="$BOOST_ROOT/libs/$SELF/test/cmake_subdir_test" - cd "$cmake_test_folder" - mkdir __build_cmake_subdir_test__ && cd __build_cmake_subdir_test__ - cmake -G "${{matrix.generator}}" -DBOOST_CI_INSTALL_TEST=OFF -DCMAKE_BUILD_TYPE=${{matrix.build_type}} -DBUILD_SHARED_LIBS=${{matrix.build_shared}} .. - cmake --build . --config ${{matrix.build_type}} -j$B2_JOBS - ctest --output-on-failure --build-config ${{matrix.build_type}} + echo "using ${{matrix.toolset}} : : ${{matrix.compiler}} ;" > ~/user-config.jam - - name: Install Library - run: | - cd "$BOOST_ROOT" - mkdir __build_cmake_install_test__ && cd __build_cmake_install_test__ - cmake -G "${{matrix.generator}}" -DCMAKE_BUILD_TYPE=${{matrix.build_type}} -DBOOST_INCLUDE_LIBRARIES=$SELF -DBUILD_SHARED_LIBS=${{matrix.build_shared}} -DCMAKE_INSTALL_PREFIX=~/.local -DBoost_VERBOSE=ON -DBoost_DEBUG=ON .. - cmake --build . --target install --config ${{matrix.build_type}} -j$B2_JOBS - - name: Run CMake install tests + - name: Run tests run: | - cmake_test_folder="$BOOST_ROOT/libs/$SELF/test/cmake_test" # New unified folder - [ -d "$cmake_test_folder" ] || cmake_test_folder="$BOOST_ROOT/libs/$SELF/test/cmake_install_test" - cd "$cmake_test_folder" - mkdir __build_cmake_install_test__ && cd __build_cmake_install_test__ - cmake -G "${{matrix.generator}}" -DBOOST_CI_INSTALL_TEST=ON -DCMAKE_BUILD_TYPE=${{matrix.build_type}} -DBUILD_SHARED_LIBS=${{matrix.build_shared}} -DCMAKE_PREFIX_PATH=~/.local .. - cmake --build . --config ${{matrix.build_type}} -j$B2_JOBS - ctest --output-on-failure --build-config ${{matrix.build_type}} + cd ../boost-root + ./b2 -j3 libs/$LIBRARY/test toolset=${{matrix.toolset}} cxxstd=${{matrix.cxxstd}} variant=debug,release diff --git a/meta/libraries.json b/meta/libraries.json new file mode 100644 index 00000000..fd941d7c --- /dev/null +++ b/meta/libraries.json @@ -0,0 +1,15 @@ +{ + "key": "openmethod", + "name": "OpenMethod", + "authors": [ + "Jean-Louis Leroy" + ], + "maintainers": [ + "Jean-Louis Leroy" + ], + "description": "Open methods for C++17 and above.", + "category": [ + "Programming" + ], + "cxxstd": "17" +} From ae4c0d64faa1ca04b717f189a15447618a7eaf62 Mon Sep 17 00:00:00 2001 From: Jean-Louis Leroy Date: Sun, 22 Jun 2025 13:52:34 -0400 Subject: [PATCH 4/7] wip --- .github/workflows/ci.yml | 483 +++++++++++++++++++++++++++++++++++++ .github/workflows/main.yml | 121 ---------- 2 files changed, 483 insertions(+), 121 deletions(-) create mode 100644 .github/workflows/ci.yml delete mode 100644 .github/workflows/main.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 00000000..87c550ee --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,483 @@ +# Copyright 2020-2021 Peter Dimov +# Copyright 2021 Andrey Semashev +# Copyright 2021-2024 Alexander Grund +# Copyright 2022 James E. King III +# +# 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: + - master + - develop + - bugfix/** + - feature/** + - fix/** + - pr/** + paths-ignore: + - LICENSE + - meta/** + - README.md + +concurrency: + group: ${{format('{0}:{1}', github.repository, github.ref)}} + cancel-in-progress: true + +env: + GIT_FETCH_JOBS: 8 + NET_RETRY_COUNT: 5 + B2_CI_VERSION: 1 + B2_VARIANT: debug,release + B2_LINK: shared,static + LCOV_BRANCH_COVERAGE: 0 + CODECOV_NAME: Github Actions + +jobs: + posix: + defaults: + run: + shell: bash + + strategy: + fail-fast: false + matrix: + include: + # Linux, gcc + - { compiler: gcc-4.4, cxxstd: '98,0x', os: ubuntu-latest, container: 'ubuntu:16.04' } + - { compiler: gcc-4.6, cxxstd: '0x', os: ubuntu-latest, container: 'ubuntu:16.04' } + - { compiler: gcc-4.7, cxxstd: '11', os: ubuntu-latest, container: 'ubuntu:16.04' } + - { compiler: gcc-4.8, cxxstd: '11', os: ubuntu-latest, container: 'ubuntu:16.04' } + - { compiler: gcc-4.9, cxxstd: '11', os: ubuntu-latest, container: 'ubuntu:16.04' } + - { compiler: gcc-5, cxxstd: '11,14,1z', os: ubuntu-latest, container: 'ubuntu:18.04' } + - { compiler: gcc-6, cxxstd: '11,14,17', os: ubuntu-latest, container: 'ubuntu:18.04' } + - { compiler: gcc-7, cxxstd: '11,14,17', os: ubuntu-latest, container: 'ubuntu:20.04' } + - { compiler: gcc-8, cxxstd: '11,14,17,2a', os: ubuntu-latest, container: 'ubuntu:20.04' } + - { compiler: gcc-9, cxxstd: '11,14,17,2a', os: ubuntu-22.04 } + - { compiler: gcc-10, cxxstd: '11,14,17,20', os: ubuntu-22.04 } + - { compiler: gcc-11, cxxstd: '11,14,17,20', os: ubuntu-22.04 } + - { compiler: gcc-12, cxxstd: '11,14,17,20', os: ubuntu-22.04 } + - { compiler: gcc-13, cxxstd: '11,14,17,20,2b', os: ubuntu-24.04 } + - { compiler: gcc-14, cxxstd: '11,14,17,20,2b', os: ubuntu-24.04 } + + - { name: GCC w/ sanitizers, sanitize: yes, + compiler: gcc-13, cxxstd: '11,14,17,20', os: ubuntu-24.04 } + - { name: Collect coverage, coverage: yes, + compiler: gcc-13, cxxstd: '2b', os: ubuntu-24.04, install: 'g++-13-multilib gcc-multilib', address-model: '32,64' } + + # Linux, clang + - { compiler: clang-3.5, cxxstd: '11', os: ubuntu-latest, container: 'ubuntu:16.04' } + - { compiler: clang-3.6, cxxstd: '11,14', os: ubuntu-latest, container: 'ubuntu:16.04' } + - { compiler: clang-3.7, cxxstd: '11,14', os: ubuntu-latest, container: 'ubuntu:16.04' } + - { compiler: clang-3.8, cxxstd: '11,14', os: ubuntu-latest, container: 'ubuntu:16.04' } + - { compiler: clang-3.9, cxxstd: '11,14', os: ubuntu-latest, container: 'ubuntu:18.04' } + - { compiler: clang-4.0, cxxstd: '11,14', os: ubuntu-latest, container: 'ubuntu:18.04' } + - { compiler: clang-5.0, cxxstd: '11,14,1z', os: ubuntu-latest, container: 'ubuntu:18.04' } + - { compiler: clang-6.0, cxxstd: '11,14,17', os: ubuntu-latest, container: 'ubuntu:20.04' } + - { compiler: clang-7, cxxstd: '11,14,17', os: ubuntu-latest, container: 'ubuntu:20.04' } + # Note: clang-8 does not fully support C++20, so it is not compatible with some libstdc++ versions in this mode + - { compiler: clang-8, cxxstd: '11,14,17', os: ubuntu-latest, container: 'ubuntu:20.04' } + - { compiler: clang-9, cxxstd: '11,14,17,2a', os: ubuntu-latest, container: 'ubuntu:20.04' } + - { compiler: clang-10, cxxstd: '11,14,17,20', os: ubuntu-latest, container: 'ubuntu:20.04' } + - { compiler: clang-11, cxxstd: '11,14,17,20', os: ubuntu-latest, container: 'ubuntu:20.04' } + - { compiler: clang-12, cxxstd: '11,14,17,20', os: ubuntu-latest, container: 'ubuntu:20.04' } + - { compiler: clang-13, cxxstd: '11,14,17,20', os: ubuntu-latest, container: 'ubuntu:22.04' } + - { compiler: clang-14, cxxstd: '11,14,17,20', os: ubuntu-latest, container: 'ubuntu:22.04' } + - { compiler: clang-15, cxxstd: '11,14,17,20', os: ubuntu-latest, container: 'ubuntu:22.04' } + - { compiler: clang-16, cxxstd: '11,14,17,20,2b', os: ubuntu-24.04 } + - { compiler: clang-17, cxxstd: '11,14,17,20,23', os: ubuntu-latest, container: 'ubuntu:24.04' } + - { compiler: clang-18, cxxstd: '11,14,17,20,23,2c', os: ubuntu-24.04 } + + # libc++ + - { compiler: clang-6.0, cxxstd: '11,14', os: ubuntu-latest, container: 'ubuntu:18.04', stdlib: libc++, install: 'clang-6.0 libc++-dev libc++abi-dev' } + - { compiler: clang-7, cxxstd: '11,14,17', os: ubuntu-latest, container: 'ubuntu:20.04', stdlib: libc++ } + - { name: Clang w/ sanitizers, sanitize: yes, + compiler: clang-12, cxxstd: '11,14,17,20', os: ubuntu-latest, container: 'ubuntu:20.04', stdlib: libc++ } + + # OSX, clang + - { name: MacOS w/ clang and sanitizers, + compiler: clang, cxxstd: '11,14,17,20,2b', os: macos-13, sanitize: yes } + - { compiler: clang, cxxstd: '11,14,17,20,2b', os: macos-14 } + - { compiler: clang, cxxstd: '11,14,17,20,2b', os: macos-15 } + + # Coverity Scan + # requires two github secrets in repo to activate; see ci/github/coverity.sh + # does not run on pull requests, only on pushes into develop and master + - { name: Coverity, coverity: yes, + compiler: clang-12, cxxstd: '20', os: ubuntu-22.04, ccache: no } + + # multiarch (bigendian testing) - does not support coverage yet + - { name: Big-endian, multiarch: yes, + compiler: clang, cxxstd: '17', os: ubuntu-22.04, ccache: no, distro: fedora, edition: 34, arch: s390x } + + + timeout-minutes: 120 + runs-on: ${{matrix.os}} + container: + image: ${{matrix.container}} + volumes: + - /node20217:/node20217:rw,rshared + - ${{ startsWith(matrix.container, 'ubuntu:1') && '/node20217:/__e/node20:ro,rshared' || ' ' }} + env: {B2_USE_CCACHE: 1} + + steps: + - name: Setup environment + run: | + if [ -f "/etc/debian_version" ]; then + echo "DEBIAN_FRONTEND=noninteractive" >> $GITHUB_ENV + export DEBIAN_FRONTEND=noninteractive + fi + if [ -n "${{matrix.container}}" ] && [ -f "/etc/debian_version" ]; then + apt-get -o Acquire::Retries=$NET_RETRY_COUNT update + apt-get -o Acquire::Retries=$NET_RETRY_COUNT -y -q --no-install-suggests --no-install-recommends install sudo software-properties-common curl + # Need (newer) git, 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 -o /etc/apt/trusted.gpg.d/git-core_ubuntu_ppa.gpg + for i in {1..${NET_RETRY_COUNT:-3}}; do sudo -E add-apt-repository -y ppa:git-core/ppa && break || sleep 10; done + apt-get -o Acquire::Retries=$NET_RETRY_COUNT update + osver=$(lsb_release -sr | cut -f1 -d.) + pkgs="g++ git xz-utils" + # Ubuntu 22+ has only Python 3 in the repos + if [ -n "$osver" ] && [ "$osver" -ge "20" ]; then + pkgs+=" python-is-python3 libpython3-dev" + else + pkgs+=" python libpython-dev" + fi + apt-get -o Acquire::Retries=$NET_RETRY_COUNT -y -q --no-install-suggests --no-install-recommends install $pkgs + fi + # For jobs not compatible with ccache, use "ccache: no" in the matrix + if [[ "${{ matrix.ccache }}" == "no" ]]; then + echo "B2_USE_CCACHE=0" >> $GITHUB_ENV + fi + if [[ "${{ matrix.sanitize }}" == "yes" ]]; then + echo "LSAN_OPTIONS=suppressions=${GITHUB_WORKSPACE}/test/suppressions.txt" >> $GITHUB_ENV + fi + git config --global pack.threads 0 + if [[ "${{matrix.container}}" == "ubuntu:1"* ]]; then + # Node 20 doesn't work with Ubuntu 16/18 glibc: https://github.com/actions/checkout/issues/1590 + curl -sL https://archives.boost.io/misc/node/node-v20.9.0-linux-x64-glibc-217.tar.xz | tar -xJ --strip-components 1 -C /node20217 + fi + + - 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' }} + + - name: Cache ccache + uses: actions/cache@v4 + 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: Fetch Boost.CI + uses: actions/checkout@v4 + with: + repository: boostorg/boost-ci + ref: master + path: boost-ci-cloned + + - name: Get CI scripts folder + run: | + # Copy ci folder if not testing Boost.CI + [[ "$GITHUB_REPOSITORY" =~ "boost-ci" ]] || cp -r boost-ci-cloned/ci . + rm -rf boost-ci-cloned + + - name: Install packages + if: startsWith(matrix.os, 'ubuntu') + run: | + SOURCE_KEYS=("${{join(matrix.source_keys, '" "')}}") + SOURCES=("${{join(matrix.sources, '" "')}}") + # Add this by default + SOURCE_KEYS+=('http://keyserver.ubuntu.com/pks/lookup?op=get&search=0x1E9377A2BA9EF27F') + SOURCES+=(ppa:ubuntu-toolchain-r/test) + + ci/add-apt-keys.sh "${SOURCE_KEYS[@]}" + # Initial update before adding sources required to get e.g. keys + sudo apt-get -o Acquire::Retries=$NET_RETRY_COUNT update + ci/add-apt-repositories.sh "${SOURCES[@]}" + + sudo apt-get -o Acquire::Retries=$NET_RETRY_COUNT update + if [[ -z "${{matrix.install}}" ]]; then + compiler="${{matrix.compiler}}" + pkgs="${compiler/gcc-/g++-}" + [[ -z "${{matrix.gcc_toolchain}}" ]] || pkgs+=" g++-${{matrix.gcc_toolchain}}" + if [[ "${{matrix.stdlib}}" == "libc++" && $compiler == "clang-"* ]]; then + ver=${compiler#*-} + pkgs+=" libc++-${ver}-dev libc++abi-${ver}-dev" + fi + else + pkgs="${{matrix.install}}" + fi + sudo apt-get -o Acquire::Retries=$NET_RETRY_COUNT -y -q --no-install-suggests --no-install-recommends install $pkgs + + - name: Setup GCC Toolchain + if: matrix.gcc_toolchain + run: | + GCC_TOOLCHAIN_ROOT="$HOME/gcc-toolchain" + echo "GCC_TOOLCHAIN_ROOT=$GCC_TOOLCHAIN_ROOT" >> $GITHUB_ENV + if ! command -v dpkg-architecture; then + apt-get -o Acquire::Retries=$NET_RETRY_COUNT -y -q --no-install-suggests --no-install-recommends install dpkg-dev + fi + MULTIARCH_TRIPLET="$(dpkg-architecture -qDEB_HOST_MULTIARCH)" + mkdir -p "$GCC_TOOLCHAIN_ROOT" + ln -s /usr/include "$GCC_TOOLCHAIN_ROOT/include" + ln -s /usr/bin "$GCC_TOOLCHAIN_ROOT/bin" + mkdir -p "$GCC_TOOLCHAIN_ROOT/lib/gcc/$MULTIARCH_TRIPLET" + ln -s "/usr/lib/gcc/$MULTIARCH_TRIPLET/${{matrix.gcc_toolchain}}" "$GCC_TOOLCHAIN_ROOT/lib/gcc/$MULTIARCH_TRIPLET/${{matrix.gcc_toolchain}}" + + - name: Setup multiarch + if: matrix.multiarch + run: ci/github/setup_bdde.sh + env: + BDDE_DISTRO: ${{matrix.distro}} + BDDE_EDITION: ${{matrix.edition}} + BDDE_ARCH: ${{matrix.arch}} + + - name: Setup Boost + run: source ci/github/install.sh + env: + B2_ADDRESS_MODEL: ${{matrix.address-model}} + B2_COMPILER: ${{matrix.compiler}} + B2_CXXSTD: ${{matrix.cxxstd}} + B2_SANITIZE: ${{matrix.sanitize}} + B2_STDLIB: ${{matrix.stdlib}} + # Optional. Variables set here (to non-empty) will override the top-level environment variables + B2_DEFINES: ${{matrix.defines}} + B2_VARIANT: ${{matrix.variant}} + B2_LINK: ${{matrix.link}} + # More entries can be added in the same way, see the B2_ARGS assignment in ci/enforce.sh for the possible keys. + # Set the (B2) target(s) to build, defaults to the test folder of the current library + # Can alternatively be done like this in the build step or in the build command of the build step, e.g. `run: B2_TARGETS=libs/$SELF/doc ci/build.sh` + # B2_TARGETS: libs/foo/test//bar + + - name: Setup coverage collection + if: matrix.coverage + run: ci/github/codecov.sh "setup" + + - name: Run tests + if: '!matrix.coverity' + run: ci/build.sh + + - name: Collect coverage + if: matrix.coverage + run: ci/codecov.sh "collect" + + - name: Upload coverage + if: matrix.coverage + uses: codecov/codecov-action@v5 + with: + fail_ci_if_error: true + disable_search: true + files: coverage.info + name: ${{env.CODECOV_NAME}} (POSIX) + token: ${{secrets.CODECOV_TOKEN}} + verbose: true + + - name: Run coverity + if: matrix.coverity && github.event_name == 'push' && (github.ref_name == 'develop' || github.ref_name == 'master') + run: ci/github/coverity.sh + env: + COVERITY_SCAN_NOTIFICATION_EMAIL: ${{ secrets.COVERITY_SCAN_NOTIFICATION_EMAIL }} + COVERITY_SCAN_TOKEN: ${{ secrets.COVERITY_SCAN_TOKEN }} + + windows: + defaults: + run: + shell: cmd + strategy: + fail-fast: false + matrix: + include: + - { toolset: msvc-14.0, cxxstd: '14,latest', addrmd: '32,64', os: windows-2019 } + - { toolset: msvc-14.2, cxxstd: '14,17,20', addrmd: '32,64', os: windows-2019 } + - { toolset: msvc-14.3, cxxstd: '14,17,20,latest',addrmd: '32,64', os: windows-2022 } + - { name: Collect coverage, coverage: yes, + toolset: msvc-14.3, cxxstd: 'latest', addrmd: '64', os: windows-2022 } + - { toolset: clang-win, cxxstd: '14,17,latest', addrmd: '32,64', os: windows-2022 } + - { toolset: gcc, cxxstd: '11,14,17,2a', addrmd: '64', os: windows-2019 } + + runs-on: ${{matrix.os}} + + 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: | + REM Copy ci folder if not testing Boost.CI + if "%GITHUB_REPOSITORY%" == "%GITHUB_REPOSITORY:boost-ci=%" xcopy /s /e /q /i /y boost-ci-cloned\ci .\ci + rmdir /s /q boost-ci-cloned + + - name: Setup Boost + run: ci\github\install.bat + + - name: Run tests + if: '!matrix.coverage' + run: ci\build.bat + env: + B2_TOOLSET: ${{matrix.toolset}} + B2_CXXSTD: ${{matrix.cxxstd}} + B2_ADDRESS_MODEL: ${{matrix.addrmd}} + B2_DEFINES: ${{matrix.defines}} + B2_VARIANT: ${{matrix.variant}} + B2_LINK: ${{matrix.link}} + + - name: Collect coverage + shell: powershell + if: matrix.coverage + run: ci\opencppcoverage.ps1 + env: + B2_TOOLSET: ${{matrix.toolset}} + B2_CXXSTD: ${{matrix.cxxstd}} + B2_ADDRESS_MODEL: ${{matrix.addrmd}} + B2_DEFINES: ${{matrix.defines}} + B2_VARIANT: ${{matrix.variant}} + B2_LINK: ${{matrix.link}} + + - name: Upload coverage + if: matrix.coverage + uses: codecov/codecov-action@v5 + with: + disable_search: true + files: __out/cobertura.xml + name: ${{env.CODECOV_NAME}} (Windows) + token: ${{secrets.CODECOV_TOKEN}} + verbose: true + + MSYS2: + defaults: + run: + shell: msys2 {0} + strategy: + fail-fast: false + matrix: + include: + - { sys: MINGW32, compiler: gcc, cxxstd: '11,17,20' } + - { sys: MINGW64, compiler: gcc, cxxstd: '11,17,20' } + + runs-on: windows-latest + + steps: + - uses: actions/checkout@v4 + + - name: Setup MSYS2 environment + uses: msys2/setup-msys2@v2 + with: + msystem: ${{matrix.sys}} + update: true + install: git python + pacboy: gcc:p cmake:p ninja:p + + - 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: | + # Copy ci folder if not testing Boost.CI + [[ "$GITHUB_REPOSITORY" =~ "boost-ci" ]] || cp -r boost-ci-cloned/ci . + rm -rf boost-ci-cloned + + - name: Setup Boost + run: ci/github/install.sh + env: + B2_COMPILER: ${{matrix.compiler}} + B2_CXXSTD: ${{matrix.cxxstd}} + B2_SANITIZE: ${{matrix.sanitize}} + B2_STDLIB: ${{matrix.stdlib}} + B2_DEFINES: ${{matrix.defines}} + B2_VARIANT: ${{matrix.variant}} + B2_LINK: ${{matrix.link}} + + - name: Run tests + run: ci/build.sh + + # Run also the CMake tests to avoid having to setup another matrix for CMake on MSYS + - name: Run CMake tests + run: | + cd "$BOOST_ROOT" + mkdir __build_cmake_test__ && cd __build_cmake_test__ + cmake -G Ninja -DCMAKE_BUILD_TYPE=Debug -DBOOST_INCLUDE_LIBRARIES=$SELF -DBUILD_SHARED_LIBS=ON -DBUILD_TESTING=ON -DBoost_VERBOSE=ON .. + cmake --build . --target tests --config Debug -j$B2_JOBS + ctest --output-on-failure --build-config Debug + + CMake: + defaults: + run: + shell: bash + + strategy: + fail-fast: false + matrix: + include: + - { os: ubuntu-latest, build_shared: ON, build_type: Debug, generator: 'Unix Makefiles' } + - { os: ubuntu-latest, build_shared: OFF, build_type: Debug, generator: 'Unix Makefiles' } + - { os: windows-2019, build_shared: ON, build_type: Debug, generator: 'Visual Studio 16 2019' } + - { os: windows-2019, build_shared: OFF, build_type: Debug, generator: 'Visual Studio 16 2019' } + + timeout-minutes: 120 + runs-on: ${{matrix.os}} + + 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: | + # Copy ci folder if not testing Boost.CI + [[ "$GITHUB_REPOSITORY" =~ "boost-ci" ]] || cp -r boost-ci-cloned/ci . + rm -rf boost-ci-cloned + + - name: Setup Boost + run: source ci/github/install.sh + env: {B2_DONT_BOOTSTRAP: 1} + + - name: Run CMake tests + run: | + cd "$BOOST_ROOT" + mkdir __build_cmake_test__ && cd __build_cmake_test__ + cmake -G "${{matrix.generator}}" -DCMAKE_BUILD_TYPE=${{matrix.build_type}} -DBOOST_INCLUDE_LIBRARIES=$SELF -DBUILD_SHARED_LIBS=${{matrix.build_shared}} -DBUILD_TESTING=ON -DBoost_VERBOSE=ON .. + cmake --build . --target tests --config ${{matrix.build_type}} -j$B2_JOBS + ctest --output-on-failure --build-config ${{matrix.build_type}} + + - name: Run CMake subdir tests + run: | + cmake_test_folder="$BOOST_ROOT/libs/$SELF/test/cmake_test" # New unified folder + [ -d "$cmake_test_folder" ] || cmake_test_folder="$BOOST_ROOT/libs/$SELF/test/cmake_subdir_test" + cd "$cmake_test_folder" + mkdir __build_cmake_subdir_test__ && cd __build_cmake_subdir_test__ + cmake -G "${{matrix.generator}}" -DBOOST_CI_INSTALL_TEST=OFF -DCMAKE_BUILD_TYPE=${{matrix.build_type}} -DBUILD_SHARED_LIBS=${{matrix.build_shared}} .. + cmake --build . --config ${{matrix.build_type}} -j$B2_JOBS + ctest --output-on-failure --build-config ${{matrix.build_type}} + + - name: Install Library + run: | + cd "$BOOST_ROOT" + mkdir __build_cmake_install_test__ && cd __build_cmake_install_test__ + cmake -G "${{matrix.generator}}" -DCMAKE_BUILD_TYPE=${{matrix.build_type}} -DBOOST_INCLUDE_LIBRARIES=$SELF -DBUILD_SHARED_LIBS=${{matrix.build_shared}} -DCMAKE_INSTALL_PREFIX=$HOME/local -DBoost_VERBOSE=ON -DBoost_DEBUG=ON .. + cmake --build . --target install --config ${{matrix.build_type}} -j$B2_JOBS + - name: Run CMake install tests + run: | + cmake_test_folder="$BOOST_ROOT/libs/$SELF/test/cmake_test" # New unified folder + [ -d "$cmake_test_folder" ] || cmake_test_folder="$BOOST_ROOT/libs/$SELF/test/cmake_install_test" + cd "$cmake_test_folder" + mkdir __build_cmake_install_test__ && cd __build_cmake_install_test__ + cmake -G "${{matrix.generator}}" -DBOOST_CI_INSTALL_TEST=ON -DCMAKE_BUILD_TYPE=${{matrix.build_type}} -DBUILD_SHARED_LIBS=${{matrix.build_shared}} -DCMAKE_PREFIX_PATH=$HOME/local .. + cmake --build . --config ${{matrix.build_type}} -j$B2_JOBS + ctest --output-on-failure --build-config ${{matrix.build_type}} diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml deleted file mode 100644 index 1abf5669..00000000 --- a/.github/workflows/main.yml +++ /dev/null @@ -1,121 +0,0 @@ -name: CI - -on: [push, pull_request, workflow_dispatch] - -# on: -# pull_request: -# push: -# branches: -# - master -# - develop -# - bugfix/** -# - feature/** -# - fix/** -# - pr/** - -env: - UBSAN_OPTIONS: print_stacktrace=1 - -jobs: - posix: - strategy: - fail-fast: false - matrix: - include: - - toolset: gcc-11 - cxxstd: "17,20" - os: ubuntu-20.04 - install: g++-11 - - toolset: gcc-12 - cxxstd: "17,20" - os: ubuntu-22.04 - install: g++-12 - - toolset: gcc-13 - cxxstd: "17,20" - os: ubuntu-latest - container: ubuntu:23.04 - install: g++-13 - - toolset: clang - compiler: clang++-13 - cxxstd: "17,20" - os: ubuntu-22.04 - install: clang-13 - - toolset: clang - compiler: clang++-14 - cxxstd: "17,20" - os: ubuntu-22.04 - install: clang-14 - - toolset: clang - compiler: clang++-15 - cxxstd: "17,20" - os: ubuntu-22.04 - install: clang-15 - - toolset: clang - compiler: clang++-16 - cxxstd: "17,20" - os: ubuntu-latest - container: ubuntu:23.04 - install: clang-16 - - toolset: clang - cxxstd: "17,20" - os: macos-11 - - toolset: clang - cxxstd: "17,20" - os: macos-12 - - toolset: clang - cxxstd: "17,20" - os: macos-13 - - runs-on: ${{matrix.os}} - container: ${{matrix.container}} - - defaults: - run: - shell: bash - - steps: - - uses: actions/checkout@v3 - - - name: Setup container environment - if: matrix.container - run: | - apt-get update - apt-get -y install sudo python3 git g++ - - - name: Install packages - if: matrix.install - run: | - sudo apt-get update - 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 - python3 tools/boostdep/depinst/depinst.py --git_args "--jobs 3" $LIBRARY - ./bootstrap.sh - ./b2 -d0 headers - - - name: Create user-config.jam - if: matrix.compiler - run: | - echo "using ${{matrix.toolset}} : : ${{matrix.compiler}} ;" > ~/user-config.jam - - - name: Run tests - run: | - cd ../boost-root - ./b2 -j3 libs/$LIBRARY/test toolset=${{matrix.toolset}} cxxstd=${{matrix.cxxstd}} variant=debug,release From 4e64bec99b2d115447d9c4dfb91170b10368a4c7 Mon Sep 17 00:00:00 2001 From: Jean-Louis Leroy Date: Sun, 22 Jun 2025 14:00:49 -0400 Subject: [PATCH 5/7] wip --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 87c550ee..6063a887 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -6,7 +6,7 @@ # 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 +name: CI (Boost) on: pull_request: From c256497069611640bb1df10e4cb28b6832fd01cd Mon Sep 17 00:00:00 2001 From: Jean-Louis Leroy Date: Sun, 22 Jun 2025 14:08:35 -0400 Subject: [PATCH 6/7] wip --- .github/workflows/ci.yml | 44 ++++++++++------------------------------ 1 file changed, 11 insertions(+), 33 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6063a887..5a7aa4be 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -47,46 +47,24 @@ jobs: matrix: include: # Linux, gcc - - { compiler: gcc-4.4, cxxstd: '98,0x', os: ubuntu-latest, container: 'ubuntu:16.04' } - - { compiler: gcc-4.6, cxxstd: '0x', os: ubuntu-latest, container: 'ubuntu:16.04' } - - { compiler: gcc-4.7, cxxstd: '11', os: ubuntu-latest, container: 'ubuntu:16.04' } - - { compiler: gcc-4.8, cxxstd: '11', os: ubuntu-latest, container: 'ubuntu:16.04' } - - { compiler: gcc-4.9, cxxstd: '11', os: ubuntu-latest, container: 'ubuntu:16.04' } - - { compiler: gcc-5, cxxstd: '11,14,1z', os: ubuntu-latest, container: 'ubuntu:18.04' } - - { compiler: gcc-6, cxxstd: '11,14,17', os: ubuntu-latest, container: 'ubuntu:18.04' } - - { compiler: gcc-7, cxxstd: '11,14,17', os: ubuntu-latest, container: 'ubuntu:20.04' } - - { compiler: gcc-8, cxxstd: '11,14,17,2a', os: ubuntu-latest, container: 'ubuntu:20.04' } - - { compiler: gcc-9, cxxstd: '11,14,17,2a', os: ubuntu-22.04 } - - { compiler: gcc-10, cxxstd: '11,14,17,20', os: ubuntu-22.04 } - - { compiler: gcc-11, cxxstd: '11,14,17,20', os: ubuntu-22.04 } - - { compiler: gcc-12, cxxstd: '11,14,17,20', os: ubuntu-22.04 } + - { compiler: gcc-10, cxxstd: '20', os: ubuntu-22.04 } + - { compiler: gcc-11, cxxstd: '20', os: ubuntu-22.04 } + - { compiler: gcc-12, cxxstd: '20', os: ubuntu-22.04 } - { compiler: gcc-13, cxxstd: '11,14,17,20,2b', os: ubuntu-24.04 } - { compiler: gcc-14, cxxstd: '11,14,17,20,2b', os: ubuntu-24.04 } - { name: GCC w/ sanitizers, sanitize: yes, - compiler: gcc-13, cxxstd: '11,14,17,20', os: ubuntu-24.04 } + compiler: gcc-13, cxxstd: '20', os: ubuntu-24.04 } - { name: Collect coverage, coverage: yes, compiler: gcc-13, cxxstd: '2b', os: ubuntu-24.04, install: 'g++-13-multilib gcc-multilib', address-model: '32,64' } # Linux, clang - - { compiler: clang-3.5, cxxstd: '11', os: ubuntu-latest, container: 'ubuntu:16.04' } - - { compiler: clang-3.6, cxxstd: '11,14', os: ubuntu-latest, container: 'ubuntu:16.04' } - - { compiler: clang-3.7, cxxstd: '11,14', os: ubuntu-latest, container: 'ubuntu:16.04' } - - { compiler: clang-3.8, cxxstd: '11,14', os: ubuntu-latest, container: 'ubuntu:16.04' } - - { compiler: clang-3.9, cxxstd: '11,14', os: ubuntu-latest, container: 'ubuntu:18.04' } - - { compiler: clang-4.0, cxxstd: '11,14', os: ubuntu-latest, container: 'ubuntu:18.04' } - - { compiler: clang-5.0, cxxstd: '11,14,1z', os: ubuntu-latest, container: 'ubuntu:18.04' } - - { compiler: clang-6.0, cxxstd: '11,14,17', os: ubuntu-latest, container: 'ubuntu:20.04' } - - { compiler: clang-7, cxxstd: '11,14,17', os: ubuntu-latest, container: 'ubuntu:20.04' } - # Note: clang-8 does not fully support C++20, so it is not compatible with some libstdc++ versions in this mode - - { compiler: clang-8, cxxstd: '11,14,17', os: ubuntu-latest, container: 'ubuntu:20.04' } - - { compiler: clang-9, cxxstd: '11,14,17,2a', os: ubuntu-latest, container: 'ubuntu:20.04' } - - { compiler: clang-10, cxxstd: '11,14,17,20', os: ubuntu-latest, container: 'ubuntu:20.04' } - - { compiler: clang-11, cxxstd: '11,14,17,20', os: ubuntu-latest, container: 'ubuntu:20.04' } - - { compiler: clang-12, cxxstd: '11,14,17,20', os: ubuntu-latest, container: 'ubuntu:20.04' } - - { compiler: clang-13, cxxstd: '11,14,17,20', os: ubuntu-latest, container: 'ubuntu:22.04' } - - { compiler: clang-14, cxxstd: '11,14,17,20', os: ubuntu-latest, container: 'ubuntu:22.04' } - - { compiler: clang-15, cxxstd: '11,14,17,20', os: ubuntu-latest, container: 'ubuntu:22.04' } + - { compiler: clang-10, cxxstd: '20', os: ubuntu-latest, container: 'ubuntu:20.04' } + - { compiler: clang-11, cxxstd: '20', os: ubuntu-latest, container: 'ubuntu:20.04' } + - { compiler: clang-12, cxxstd: '20', os: ubuntu-latest, container: 'ubuntu:20.04' } + - { compiler: clang-13, cxxstd: '20', os: ubuntu-latest, container: 'ubuntu:22.04' } + - { compiler: clang-14, cxxstd: '20', os: ubuntu-latest, container: 'ubuntu:22.04' } + - { compiler: clang-15, cxxstd: '20', os: ubuntu-latest, container: 'ubuntu:22.04' } - { compiler: clang-16, cxxstd: '11,14,17,20,2b', os: ubuntu-24.04 } - { compiler: clang-17, cxxstd: '11,14,17,20,23', os: ubuntu-latest, container: 'ubuntu:24.04' } - { compiler: clang-18, cxxstd: '11,14,17,20,23,2c', os: ubuntu-24.04 } @@ -95,7 +73,7 @@ jobs: - { compiler: clang-6.0, cxxstd: '11,14', os: ubuntu-latest, container: 'ubuntu:18.04', stdlib: libc++, install: 'clang-6.0 libc++-dev libc++abi-dev' } - { compiler: clang-7, cxxstd: '11,14,17', os: ubuntu-latest, container: 'ubuntu:20.04', stdlib: libc++ } - { name: Clang w/ sanitizers, sanitize: yes, - compiler: clang-12, cxxstd: '11,14,17,20', os: ubuntu-latest, container: 'ubuntu:20.04', stdlib: libc++ } + compiler: clang-12, cxxstd: '20', os: ubuntu-latest, container: 'ubuntu:20.04', stdlib: libc++ } # OSX, clang - { name: MacOS w/ clang and sanitizers, From f2e79311bf5e5ba4d81fc4e45ea12262a42edd79 Mon Sep 17 00:00:00 2001 From: Jean-Louis Leroy Date: Sun, 22 Jun 2025 14:27:54 -0400 Subject: [PATCH 7/7] use my fork of boost-ci --- .github/workflows/ci.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5a7aa4be..9e1bbb4a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -154,7 +154,7 @@ jobs: - name: Fetch Boost.CI uses: actions/checkout@v4 with: - repository: boostorg/boost-ci + repository: jll63/boost-ci ref: master path: boost-ci-cloned @@ -286,7 +286,7 @@ jobs: - name: Fetch Boost.CI uses: actions/checkout@v4 with: - repository: boostorg/boost-ci + repository: jll63/boost-ci ref: master path: boost-ci-cloned - name: Get CI scripts folder @@ -358,7 +358,7 @@ jobs: - name: Fetch Boost.CI uses: actions/checkout@v4 with: - repository: boostorg/boost-ci + repository: jll63/boost-ci ref: master path: boost-ci-cloned - name: Get CI scripts folder @@ -412,7 +412,7 @@ jobs: - name: Fetch Boost.CI uses: actions/checkout@v4 with: - repository: boostorg/boost-ci + repository: jll63/boost-ci ref: master path: boost-ci-cloned