Repository navigation
Merge pull request #125 from jll63/fix/format #642
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # | |
| # Copyright 2020-2021 Peter Dimov | |
| # Copyright 2021 Andrey Semashev | |
| # Copyright 2021-2024 Alexander Grund | |
| # Copyright 2022-2025 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) | |
| # | |
| # This workflow uses the Boost.CI reusable workflow which builds a variety of | |
| # configurations of your project, runs tests, and generates code coverage reports. | |
| # | |
| # To use it, copy this file into your repository as `.github/workflows/ci.yml` and | |
| # customize it appropriately. | |
| # | |
| --- | |
| name: Boost.CI | |
| permissions: | |
| contents: read | |
| id-token: write | |
| pages: write | |
| on: | |
| workflow_dispatch: | |
| pull_request: | |
| push: | |
| branches: | |
| - master | |
| - develop | |
| - bugfix/** | |
| - feature/** | |
| - fix/** | |
| - github/** | |
| - pr/** | |
| paths-ignore: | |
| - LICENSE | |
| - meta/** | |
| # - README.md | |
| jobs: | |
| call-boost-ci: | |
| name: Run Boost.CI | |
| uses: boostorg/boost-ci/.github/workflows/reusable.yml@master | |
| with: | |
| exclude_cxxstd: '98,03,0x,11,14' | |
| exclude_compiler: gcc-4.9,gcc-5,gcc-6,gcc-7,gcc-8,gcc-9,clang-3.9,clang-4.0,clang-5.0,clang-6.0,clang-7,clang-16 | |
| timeout: 180 | |
| enable_multiarch: false | |
| # exclude clang-16 because it seems to use the c++14 standard library on ubuntu-24.04: | |
| # include/c++/14/bits/stl_pair.h:410:35: error: no matching function for call to 'get' | |
| # maybe similar to this: https://github.com/actions/runner-images/issues/9679 | |
| secrets: | |
| CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} | |
| COVERITY_SCAN_NOTIFICATION_EMAIL: ${{ secrets.COVERITY_SCAN_NOTIFICATION_EMAIL }} | |
| COVERITY_SCAN_TOKEN: ${{ secrets.COVERITY_SCAN_TOKEN }} | |
| reflection: | |
| name: C++26 reflection | |
| runs-on: ubuntu-24.04 | |
| steps: | |
| - name: Install GCC 16 | |
| run: | | |
| sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test | |
| sudo apt-get update | |
| sudo apt-get install -y g++-16 cmake ninja-build | |
| - name: Clone Boost.OpenMethod | |
| uses: actions/checkout@v4 | |
| - name: Clone Boost | |
| uses: alandefreitas/cpp-actions/boost-clone@v1.8.8 | |
| with: | |
| # boost-clone excludes `test` and `tests` from the scan | |
| # (modules-exclude-paths defaults to them), so it never sees the | |
| # includes in our own test/ and would clone neither Boost.Test nor | |
| # Boost.DLL - CMake then fails to generate on a missing | |
| # Boost::unit_test_framework. `modules` is unioned with the scan, | |
| # and their own dependencies are resolved afterwards. | |
| modules: test dll | |
| branch: ${{ (github.ref_name == 'master' && github.ref_name) || 'develop' }} | |
| boost-dir: ../boost-source | |
| scan-modules-dir: . | |
| scan-modules-ignore: openmethod | |
| # The suite is the reflection test: BOOST_OPENMETHOD_TEST_CLASSES expands | |
| # to nothing here, so every class has to be found by the scan that | |
| # BOOST_OPENMETHOD_REGISTER_CLASSES starts. BUILD_SHARED_LIBS brings in | |
| # test/dynamic_loading, where the registrar that scan instantiates - one | |
| # inline variable per class, for the whole program - crosses module | |
| # boundaries. | |
| - name: Build and test | |
| run: | | |
| cmake -S . -B ../build -G Ninja \ | |
| -DCMAKE_BUILD_TYPE=Debug \ | |
| -DCMAKE_CXX_COMPILER=g++-16 \ | |
| -DBUILD_SHARED_LIBS=ON \ | |
| -DBOOST_OPENMETHOD_ENABLE_REFLECTION=ON \ | |
| -DBOOST_OPENMETHOD_BUILD_TESTS=ON \ | |
| -DBOOST_OPENMETHOD_WARNINGS_AS_ERRORS=ON \ | |
| -DBOOST_SRC_DIR="$(cd .. && pwd)/boost-source" | |
| cmake --build ../build --target tests -j $(nproc) | |
| ctest --test-dir ../build -j $(nproc) --output-on-failure | |
| file-size: | |
| name: File size | |
| # Only meaningful for a pull request: github.event.pull_request is unset | |
| # on a push, and a push's commits are only ever ones already checked here | |
| # as part of the PR that introduced them. | |
| if: github.event_name == 'pull_request' | |
| runs-on: ubuntu-24.04 | |
| steps: | |
| - name: Clone Boost.OpenMethod | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| # Every blob any commit in the PR introduces, not just the files that | |
| # differ in the final base...head diff - a commit that adds an | |
| # oversized file and a later commit in the same PR that shrinks or | |
| # removes it still leaves that blob in history forever once merged. | |
| # Same limit and message as the local dev/git-hooks/pre-commit hook | |
| # (dev/check-blob-size), so a contributor who skipped installing it | |
| # still can't land an oversized file. | |
| - name: Check for oversized blobs | |
| run: | | |
| status=0 | |
| git rev-list "${{ github.event.pull_request.base.sha }}..${{ github.event.pull_request.head.sha }}" | | |
| while read -r c; do | |
| git diff-tree -r --no-commit-id --diff-filter=ACMR "$c" | |
| done | awk '{print $4, $NF}' | sort -u > /tmp/blobs.txt | |
| while read -r oid path; do | |
| dev/check-blob-size "$oid" "$path" || status=1 | |
| done < /tmp/blobs.txt | |
| exit "$status" | |
| flat-headers: | |
| name: Flat headers | |
| runs-on: ubuntu-24.04 | |
| steps: | |
| # ce/reflection.cpp needs C++26 reflection; dev/check-flat.sh finds this | |
| # compiler on its own, and reports the example as skipped without it. | |
| - name: Install GCC 16 | |
| run: | | |
| sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test | |
| sudo apt-get update | |
| sudo apt-get install -y g++-16 | |
| - name: Clone Boost.OpenMethod | |
| uses: actions/checkout@v4 | |
| - name: Clone Boost | |
| uses: alandefreitas/cpp-actions/boost-clone@v1.8.8 | |
| with: | |
| branch: ${{ (github.ref_name == 'master' && github.ref_name) || 'develop' }} | |
| boost-dir: ../boost-source | |
| scan-modules-dir: . | |
| scan-modules-ignore: openmethod | |
| # Each flattened header must compile after boost/openmethod.hpp, and fail | |
| # with our own diagnostic without it; the ce/ examples must build and run | |
| # against the generated tree. | |
| - name: Check the flat headers | |
| env: | |
| BOOST_SRC_DIR: ${{ github.workspace }}/../boost-source | |
| run: dev/check-flat.sh | |
| antora: | |
| name: Antora docs | |
| strategy: | |
| matrix: | |
| include: | |
| - { name: Windows, os: windows-latest } | |
| - { name: Ubuntu, os: ubuntu-latest } | |
| - { name: macOS, os: macos-15 } | |
| runs-on: ${{ matrix.os }} | |
| defaults: | |
| run: | |
| shell: bash | |
| steps: | |
| - name: Install packages | |
| uses: alandefreitas/cpp-actions/package-install@v1.8.8 | |
| with: | |
| apt-get: git cmake | |
| - name: Clone Boost.OpenMethod | |
| uses: actions/checkout@v4 | |
| - name: Clone Boost | |
| uses: alandefreitas/cpp-actions/boost-clone@v1.8.8 | |
| 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: Setup Ninja | |
| if: runner.os == 'Windows' | |
| uses: seanmiddleditch/gha-setup-ninja@v5 | |
| - 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 openmethod | |
| cd doc | |
| bash ./build_antora.sh | |
| # Antora returns zero even if it fails, so we check if the site directory exists. | |
| if [ ! -d "html" ] | |
| then | |
| echo "Antora build failed" | |
| exit 1 | |
| fi | |
| # Published alongside the docs, at the root of the site, so that a | |
| # Compiler Explorer example can include them by URL. See ce/README.md. | |
| - name: Build flat headers | |
| if: matrix.os == 'ubuntu-latest' | |
| # The base URL goes into the banner and the guard-check messages of | |
| # every generated header, so it has to name the site this artifact is | |
| # about to be deployed to - jll63's fork, or boostorg. | |
| run: | | |
| python3 dev/flatten.py --output-dir doc/html \ | |
| --base-url "https://${{ github.repository_owner }}.github.io/${{ github.event.repository.name }}" | |
| - name: Create Antora docs artifact | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: antora-docs-${{ matrix.name }} | |
| path: doc/html | |
| - name: Upload static files as artifact | |
| if: matrix.os == 'ubuntu-latest' | |
| uses: actions/upload-pages-artifact@v3 | |
| with: | |
| path: doc/html | |
| # Upstream deploys from develop only - every other branch would clobber | |
| # the site. The fork has no such restriction: it is where a branch is | |
| # tried out before it is merged. | |
| - name: Deploy to GitHub Pages | |
| if: >- | |
| matrix.os == 'ubuntu-latest' | |
| && github.event_name != 'pull_request' | |
| && (github.repository == 'jll63/openmethod' | |
| || (github.repository == 'boostorg/openmethod' | |
| && github.ref_name == 'develop')) | |
| uses: actions/deploy-pages@v4 |