Skip to content

wip

wip #96

Workflow file for this run

# 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 (Boost)
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
permissions:
id-token: write
pages: write
jobs:
# posix:
# defaults:
# run:
# shell: bash
# strategy:
# fail-fast: false
# matrix:
# include:
# # Linux, gcc
# - { 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: '17,20,2b', os: ubuntu-24.04 }
# - { compiler: gcc-14, cxxstd: '17,20,2b', os: ubuntu-24.04 }
# - { name: GCC w/ sanitizers, sanitize: yes,
# 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-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: '17,20', os: ubuntu-24.04 } # removed 2b: error: no matching function for call to 'get'
# - { compiler: clang-17, cxxstd: '17,20,23', os: ubuntu-latest, container: 'ubuntu:24.04' }
# - { compiler: clang-18, cxxstd: '17,20,23,2c', os: ubuntu-24.04 }
# # libc++
# - { compiler: clang-12, cxxstd: '17', os: ubuntu-latest, container: 'ubuntu:20.04', stdlib: libc++ }
# - { name: Clang w/ sanitizers, sanitize: yes,
# compiler: clang-12, cxxstd: '20', os: ubuntu-latest, container: 'ubuntu:20.04', stdlib: libc++ }
# # OSX, clang
# - { name: MacOS w/ clang and sanitizers,
# compiler: clang, cxxstd: '17,20,2b', os: macos-13, sanitize: yes }
# - { compiler: clang, cxxstd: '17,20,2b', os: macos-14 }
# - { compiler: clang, cxxstd: '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.2, cxxstd: '17,20', addrmd: '32,64', os: windows-2022 }
# - { toolset: msvc-14.3, cxxstd: '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: '17,latest', addrmd: '32,64', os: windows-2022 }
# - { toolset: gcc, cxxstd: '17,2a', addrmd: '64', os: windows-2022 }
# 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: '17,20' }
# - { sys: MINGW64, compiler: gcc, cxxstd: '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_type: Debug, generator: 'Unix Makefiles' }
# - { os: windows-2022, build_type: Debug, generator: 'Visual Studio 17 2022' }
# 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}}" -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 -DBUILD_SHARED_LIBS=${{matrix.build_shared}} -DCMAKE_CXX_STANDARD=17 ..
# 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}}
antora:
name: Antora Docs
runs-on: ubuntu-latest
defaults:
run:
shell: bash
steps:
- name: Install packages
uses: alandefreitas/cpp-actions/package-install@v1.8.10
with:
apt-get: git cmake
- name: Clone Boost.OpenMethod
uses: actions/checkout@v4
- name: Clone Boost
uses: alandefreitas/cpp-actions/boost-clone@v1.8.10
id: boost-clone
with:
branch: ${{ (github.ref_name == 'master' && github.ref_name) || 'develop' }}
boost-dir: ../boost-source
scan-modules-dir: .
scan-modules-ignore: openmethod
- uses: actions/setup-node@v4
with:
node-version: 18
- name: Build Antora Docs
# env:
# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
git config --global --add safe.directory "$(pwd)"
cd ..
BOOST_SRC_DIR="$(pwd)/boost-source"
export BOOST_SRC_DIR
cd Boost.OpenMethod
cd doc
bash ./build_antora.sh
# Antora returns zero even if it fails, so we check if the site directory exists
if [ ! -d "build/site" ]; then
echo "Antora build failed"
exit 1
fi
- name: Create Antora Docs Artifact
uses: actions/upload-artifact@v4
with:
name: antora-docs-${{ matrix.name }}
path: doc/build/site
- name: Upload static files as artifact
uses: actions/upload-pages-artifact@v3
with:
path: doc/build/site
- name: Deploy to GitHub Pages
uses: actions/deploy-pages@v4