Symbol filtering #1428
Workflow file for this run
This file contains 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
name: Continuous Integration | |
on: | |
push: | |
branches: | |
- develop | |
- master | |
- '*' | |
tags: | |
- "v*.*.*" | |
pull_request: | |
branches: | |
- develop | |
concurrency: | |
group: ${{format('{0}:{1}', github.repository, github.ref)}} | |
cancel-in-progress: true | |
jobs: | |
cpp-matrix: | |
runs-on: ubuntu-latest | |
name: Generate Test Matrix | |
outputs: | |
matrix: ${{ steps.cpp-matrix.outputs.matrix }} | |
steps: | |
- name: Clone cpp-actions | |
uses: actions/checkout@v3 | |
- name: Generate Test Matrix | |
uses: alandefreitas/cpp-actions/[email protected] | |
id: cpp-matrix | |
with: | |
compilers: | | |
gcc 13 | |
clang 16 | |
msvc 14.34 | |
standards: '>=20' | |
max-standards: 1 | |
latest-factors: gcc | |
factors: clang # Don't include Asan because `clang/AST/Decl.h` fails | |
build: | |
needs: cpp-matrix | |
strategy: | |
fail-fast: false | |
matrix: | |
include: ${{ fromJSON(needs.cpp-matrix.outputs.matrix) }} | |
defaults: | |
run: | |
shell: bash | |
name: ${{ matrix.name }} | |
runs-on: ${{ matrix.runs-on }} | |
container: ${{ ( !startsWith( matrix.runs-on , 'windows' ) && 'cppalliance/droneubuntu2204:llvm-731264b' ) || null }} | |
permissions: | |
contents: write | |
steps: | |
- name: Clone mrdox | |
uses: actions/checkout@v3 | |
- name: Install LLVM | |
id: llvm-install | |
if: ${{ startsWith( matrix.runs-on , 'windows' ) }} | |
shell: bash | |
run: | | |
set -xe | |
curl -L -o "RelWithDebInfo-731264b0.7z" "https://github.com/cppalliance/mrdox/releases/download/llvm-package-release/RelWithDebInfo-731264b0.7z" | |
llvm_dir="${{runner.tool_cache}}/llvm-install" | |
llvm_dir=$(echo "$llvm_dir" | sed 's/\\/\//g') | |
7z x RelWithDebInfo-731264b0.7z -o"${llvm_dir}" | |
echo "llvm-dir=$llvm_dir/RelWithDebInfo" >> $GITHUB_OUTPUT | |
substring="C:/Program Files/Microsoft Visual Studio/2022/Community/DIA SDK/lib/amd64/diaguids.lib;" | |
sed -i "s|$substring||g" "$llvm_dir/RelWithDebInfo/lib/cmake/llvm/LLVMExports.cmake" | |
echo "llvm_dir=$llvm_dir" | |
# find "$llvm_dir" -type f | |
- name: Install Duktape | |
id: duktape-install | |
shell: bash | |
run: | | |
set -xe | |
curl -L -o "duktape-2.7.0.tar.xz" "https://github.com/svaarala/duktape/releases/download/v2.7.0/duktape-2.7.0.tar.xz" | |
duktape_dir="${{runner.tool_cache}}/duktape" | |
duktape_dir=$(echo "$duktape_dir" | sed 's/\\/\//g') | |
mkdir -p "$duktape_dir" | |
tar -xvf "duktape-2.7.0.tar.xz" -C "$duktape_dir" | |
echo "duktape-dir=$duktape_dir/duktape-2.7.0" >> $GITHUB_OUTPUT | |
echo "duktape_dir=$duktape_dir/duktape-2.7.0" | |
- name: Install Node.js | |
uses: actions/setup-node@v3 | |
with: | |
node-version: '18' | |
- name: Setup C++ | |
uses: alandefreitas/cpp-actions/[email protected] | |
id: setup-cpp | |
with: | |
compiler: ${{ matrix.compiler }} | |
version: ${{ matrix.version }} | |
check-latest: ${{ matrix.compiler == 'clang' }} | |
- name: Install packages | |
uses: alandefreitas/cpp-actions/[email protected] | |
id: package-install | |
with: | |
apt-get: ${{ matrix.install }} openjdk-11-jdk ninja-build ${{ matrix.compiler == 'clang' && 'libstdc++-12-dev' || '' }} | |
vcpkg: fmt libxml2[tools] | |
cc: ${{ steps.setup-cpp.outputs.cc || matrix.cc }} | |
ccflags: ${{ matrix.ccflags }} | |
cxx: ${{ steps.setup-cpp.outputs.cxx || matrix.cxx }} | |
cxxflags: ${{ matrix.cxxflags }} | |
- name: CMake Workflow | |
uses: alandefreitas/cpp-actions/[email protected] | |
with: | |
cmake-version: '>=3.20' | |
generator: Ninja | |
toolchain: ${{ steps.package-install.outputs.vcpkg-toolchain }} | |
build-type: ${{ matrix.build-type }} | |
cxxstd: ${{ matrix.cxxstd }} | |
cc: ${{ steps.setup-cpp.outputs.cc || matrix.cc }} | |
ccflags: ${{ matrix.ccflags }} | |
cxx: ${{ steps.setup-cpp.outputs.cxx || matrix.cxx }} | |
cxxflags: ${{ matrix.cxxflags }}${{ ( matrix.compiler == 'gcc' && ' -static-libstdc++') || '' }}${{ ( matrix.asan && ' -static-libasan') || '' }}${{ ( matrix.tsan && ' -static-libtsan') || '' }} | |
install-prefix: .local | |
extra-args: ${{ format('-D LLVM_ROOT="{0}" -D Clang_ROOT="{0}" -D DUKTAPE_SOURCE_ROOT="{1}" -D CMAKE_EXPORT_COMPILE_COMMANDS=ON', steps.llvm-install.outputs.llvm-dir || '/usr/local', steps.duktape-install.outputs.duktape-dir) }} | |
export-compile-commands: ${{ matrix.time-trace }} | |
package: ${{ matrix.is-main }} | |
package-dir: packages | |
- name: Upload GitHub Release Artifacts | |
if: ${{ matrix.is-main && matrix.compiler != 'clang' }} | |
uses: actions/upload-artifact@v3 | |
with: | |
name: release-packages-${{ runner.os }} | |
path: build/packages | |
retention-days: 1 | |
- name: FlameGraph | |
uses: alandefreitas/cpp-actions/[email protected] | |
if: matrix.time-trace | |
with: | |
build-dir: build | |
github_token: ${{ secrets.GITHUB_TOKEN }} | |
- name: Codecov | |
if: ${{ matrix.coverage }} | |
run: | | |
set -x | |
# Find gcov | |
gcov_tool="gcov" | |
if command -v "gcov-${{ steps.setup-cpp.outputs.version-major }}.${{ steps.setup-cpp.outputs.version-minor }}" &> /dev/null; then | |
gcov_tool="gcov" | |
elif command -v "gcov-${{ steps.setup-cpp.outputs.version-major }}" &> /dev/null; then | |
gcov_tool="gcov-${{ steps.setup-cpp.outputs.version-major }}" | |
fi | |
lcov -c -q -o "./build/coverage.info" -d "./build" --include "$(pwd)/*" --gcov-tool "$gcov_tool" | |
# Upload to codecov | |
bash <(curl -s https://codecov.io/bash) -f "./build/coverage.info" | |
# Update summary | |
echo "# Coverage" >> $GITHUB_STEP_SUMMARY | |
echo "" >> $GITHUB_STEP_SUMMARY | |
echo "[![codecov](https://codecov.io/github/$GITHUB_REPOSITORY/commit/$GITHUB_SHA/graphs/sunburst.svg)](https://codecov.io/github/$GITHUB_REPOSITORY/commit/$GITHUB_SHA)" >> $GITHUB_STEP_SUMMARY | |
echo "" >> $GITHUB_STEP_SUMMARY | |
echo "" >> $GITHUB_STEP_SUMMARY | |
echo "$GITHUB_REF_NAME: [![codecov](https://codecov.io/github/$GITHUB_REPOSITORY/branch/$GITHUB_REF_NAME/graph/badge.svg)](https://codecov.io/github/$GITHUB_REPOSITORY/commit/$GITHUB_SHA)" >> $GITHUB_STEP_SUMMARY | |
echo "" >> $GITHUB_STEP_SUMMARY | |
docs: | |
needs: build | |
defaults: | |
run: | |
shell: bash | |
name: Documentation | |
timeout-minutes: 30 | |
runs-on: ubuntu-22.04 | |
permissions: | |
contents: write | |
steps: | |
- name: Clone mrdox | |
uses: actions/checkout@v3 | |
- name: Install Node.js | |
uses: actions/setup-node@v3 | |
with: | |
node-version: '18' | |
- name: Generate Site | |
working-directory: docs | |
run: | | |
npm install | |
master_antora_exists=$(curl --silent --fail --head https://github.com/cppalliance/mrdox/blob/master/docs/antora.yml >/dev/null && echo "true" || echo "false") | |
develop_antora_exists=$(curl --silent --fail --head https://github.com/cppalliance/mrdox/blob/develop/docs/antora.yml >/dev/null && echo "true" || echo "false") | |
if [ "$master_antora_exists" == "true" ] && [ "$develop_antora_exists" == "true" ]; then | |
# Antora is set up in both master and develop: render complete playbook | |
npx antora antora-playbook.yml | |
else | |
# Antora is not set up in master and develop yet: render local playbook while integration is not complete | |
# The local playbook is used for local development and for the documentation included in the release | |
npx antora local-antora-playbook.yml | |
fi | |
- name: Publish to GitHub Pages | |
if: ${{ github.event_name == 'push' && (contains(fromJSON('["master", "develop"]'), github.ref_name) || startsWith(github.ref, 'refs/tags/')) }} | |
uses: peaceiris/actions-gh-pages@v3 | |
with: | |
github_token: ${{ secrets.GITHUB_TOKEN }} | |
publish_dir: docs/build/site | |
force_orphan: true | |
- name: Update website | |
if: ${{ github.event_name == 'push' && (contains(fromJSON('["master", "develop"]'), github.ref_name) || startsWith(github.ref, 'refs/tags/')) }} | |
env: | |
SSH_AUTH_SOCK: /tmp/ssh_agent.sock | |
run: | | |
# Add SSH key | |
mkdir -p /home/runner/.ssh | |
ssh-keyscan dev-websites.cpp.al >> /home/runner/.ssh/known_hosts | |
echo "${{ secrets.DEV_WEBSITES_SSH_KEY }}" > /home/runner/.ssh/github_actions | |
chmod 600 /home/runner/.ssh/github_actions | |
ssh-agent -a $SSH_AUTH_SOCK > /dev/null | |
ssh-add /home/runner/.ssh/github_actions | |
# Copy files | |
scp -r $(pwd)/docs/build/site/* [email protected]:/var/www/mrdox.com/ | |
demos: | |
needs: build | |
defaults: | |
run: | |
shell: bash | |
name: Demos | |
timeout-minutes: 120 | |
runs-on: ubuntu-22.04 | |
permissions: | |
contents: write | |
steps: | |
- name: Clone mrdox | |
uses: actions/checkout@v3 | |
- uses: actions/download-artifact@v3 | |
with: | |
name: release-packages-Linux | |
path: packages | |
- name: List artifacts | |
run: ls -R | |
working-directory: packages | |
- name: Setup C++ | |
uses: alandefreitas/cpp-actions/[email protected] | |
id: setup-cpp | |
with: | |
compiler: clang | |
version: 16 | |
check-latest: true | |
- name: Install packages | |
uses: alandefreitas/cpp-actions/[email protected] | |
id: package-install | |
with: | |
apt-get: libstdc++-12-dev | |
cc: ${{ steps.setup-cpp.outputs.cc }} | |
cxx: ${{ steps.setup-cpp.outputs.cxx }} | |
- name: Install mrdox from release package | |
run: | | |
set -x | |
sudo find packages -name 'MrDox-*-Linux.tar.gz' -exec tar -xzf {} -C /usr/local --strip-components=1 \; | |
mrdox --version | |
- name: Clone Boost.URL | |
uses: alandefreitas/cpp-actions/[email protected] | |
id: boost-url-clone | |
with: | |
branch: master | |
modules: url | |
boost-dir: boost | |
modules-scan-paths: '"test example"' | |
modules-exclude-paths: '' | |
trace-commands: true | |
- name: Configure Boost.URL | |
working-directory: boost/libs/url | |
run: | | |
set -x | |
if [ -d "__build__" ]; then | |
rm -rf __build__ | |
fi | |
mkdir __build__ | |
cd __build__ | |
mkdir __include_dirs__ | |
cd __include_dirs__ | |
output_file="include_dirs.txt" | |
echo "cmake_minimum_required(VERSION 3.22)" > CMakeLists.txt | |
echo "project(get_implicit_dirs)" >> CMakeLists.txt | |
echo "file(WRITE \"${output_file}\" \"\${CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES}\")" >> CMakeLists.txt | |
mkdir __build__ | |
cd __build__ | |
cmake -D CMAKE_CXX_COMPILER=${{ steps.setup-cpp.outputs.cxx }} -D CMAKE_C_COMPILER=${{ steps.setup-cpp.outputs.cc }} .. | |
cd .. | |
default_includes=$(cat "$output_file") | |
cd .. | |
cmake -D BOOST_URL_BUILD_TESTS=OFF -D BOOST_URL_BUILD_EXAMPLES=OFF -D CMAKE_EXPORT_COMPILE_COMMANDS=ON -D CMAKE_CXX_STANDARD_INCLUDE_DIRECTORIES="$default_includes" -D CMAKE_CXX_COMPILER=${{ steps.setup-cpp.outputs.cxx }} -D CMAKE_C_COMPILER=${{ steps.setup-cpp.outputs.cc }} .. | |
- name: Generate reference | |
run: | | |
echo "verbose: true" > $(pwd)/boost/libs/url/mrdox-single.yml | |
echo "source-root: ." >> $(pwd)/boost/libs/url/mrdox-single.yml | |
echo "multipage: false" >> $(pwd)/boost/libs/url/mrdox-single.yml | |
echo "verbose: true" > $(pwd)/boost/libs/url/mrdox-multi.yml | |
echo "source-root: ." >> $(pwd)/boost/libs/url/mrdox-multi.yml | |
echo "multipage: true" >> $(pwd)/boost/libs/url/mrdox-multi.yml | |
set -x | |
for variant in single multi; do | |
for format in adoc html xml; do | |
mkdir -p "demos/boost-url/$variant/$format" | |
mrdox --config="$(pwd)/boost/libs/url/mrdox-$variant.yml" "$(pwd)/boost/libs/url/__build__/compile_commands.json" --addons="$(pwd)/share/mrdox/addons" --format="$format" --output="$(pwd)/demos/boost-url/$variant/$format" | |
done | |
done | |
- name: Update website demos | |
if: ${{ github.event_name == 'push' && (contains(fromJSON('["master", "develop"]'), github.ref_name) || startsWith(github.ref, 'refs/tags/')) }} | |
env: | |
SSH_AUTH_SOCK: /tmp/ssh_agent.sock | |
run: | | |
# Add SSH key | |
mkdir -p /home/runner/.ssh | |
ssh-keyscan dev-websites.cpp.al >> /home/runner/.ssh/known_hosts | |
echo "${{ secrets.DEV_WEBSITES_SSH_KEY }}" > /home/runner/.ssh/github_actions | |
chmod 600 /home/runner/.ssh/github_actions | |
ssh-agent -a $SSH_AUTH_SOCK > /dev/null | |
ssh-add /home/runner/.ssh/github_actions | |
# Copy files | |
ssh [email protected] "mkdir -p /var/www/mrdox.com/demos/${{ github.ref_name }}" | |
scp -r $(pwd)/demos/* [email protected]:/var/www/mrdox.com/demos/${{ github.ref_name }}/ | |
releases: | |
needs: build | |
defaults: | |
run: | |
shell: bash | |
name: Releases | |
timeout-minutes: 120 | |
runs-on: ubuntu-22.04 | |
permissions: | |
contents: write | |
steps: | |
- name: Clone mrdox | |
uses: actions/checkout@v3 | |
- uses: actions/download-artifact@v3 | |
with: | |
name: release-packages-Linux | |
path: build | |
- uses: actions/download-artifact@v3 | |
with: | |
name: release-packages-Windows | |
path: build | |
- name: List artifacts | |
run: ls -R | |
working-directory: build | |
- name: Create changelog | |
uses: alandefreitas/cpp-actions/[email protected] | |
with: | |
output-path: CHANGELOG.md | |
thank-non-regular: ${{ startsWith(github.ref, 'refs/tags/') }} | |
github-token: ${{ secrets.GITHUB_TOKEN }} | |
limit: 150 | |
- name: Remove branch release | |
if: ${{ github.event_name == 'push' && (contains(fromJSON('["master", "develop"]'), github.ref_name)) }} | |
uses: dev-drprasad/[email protected] | |
with: | |
tag_name: ${{ github.ref_name }}-release | |
github_token: ${{ secrets.GITHUB_TOKEN }} | |
delete_release: true | |
- name: Create GitHub Package Release | |
if: ${{ github.event_name == 'push' && (contains(fromJSON('["master", "develop"]'), github.ref_name) || startsWith(github.ref, 'refs/tags/')) }} | |
uses: softprops/action-gh-release@v1 | |
with: | |
files: build/MrDox-?.?.?-*.* | |
name: ${{ github.ref_name || github.ref }} | |
tag_name: ${{ github.ref_name || github.ref }}${{ ((!startsWith(github.ref, 'refs/tags/')) && '-release') || '' }} | |
body_path: CHANGELOG.md | |
prerelease: false | |
draft: false | |
token: ${{ github.token }} | |
- uses: dev-drprasad/[email protected] | |
if: ${{ github.event_name == 'push' && contains(fromJSON('["master", "develop"]'), github.ref_name) }} | |
with: | |
keep_latest: 1 | |
delete_tag_pattern: ${{ github.ref_name }} | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |