[WIP] symbol name lookup #1685
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/cpp-matrix@v1.5.0 | |
id: cpp-matrix | |
with: | |
compilers: | | |
gcc 13.2 | |
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: ${{ matrix.container }} | |
permissions: | |
contents: write | |
steps: | |
- name: Clone MrDox | |
uses: actions/checkout@v3 | |
- name: Install LLVM | |
id: llvm-install | |
shell: bash | |
run: | | |
set -xe | |
# Determine LLVM configuration type | |
llvm_config_type="${{ matrix.build-type }}" | |
if [ "${{ runner.os }}" == "Windows" ]; then | |
llvm_runner_os="Windows" | |
# if [ "$llvm_config_type" == "Release" ]; then | |
# llvm_config_type="RelWithDebInfo" | |
# fi | |
llvm_archive_type="7z" | |
llvm_config_type="Release" | |
else | |
llvm_runner_os="Linux" | |
llvm_archive_type="tar.xz" | |
llvm_config_type="Release" | |
fi | |
llvm_commit_id=29b20829 | |
llvm_archive_filename="$llvm_runner_os-$llvm_config_type-$llvm_commit_id.$llvm_archive_type" | |
llvm_url="https://github.com/cppalliance/mrdox/releases/download/llvm-package-release/$llvm_archive_filename" | |
if ! curl --head --silent --fail "$llvm_url"; then | |
llvm_url="https://mrdox.com/llvm+clang/$llvm_archive_filename" | |
fi | |
# Download LLVM binaries | |
curl -L -o "$llvm_archive_filename" "$llvm_url" | |
# Install LLVM to runner.tool_cache/llvm+clang | |
llvm_root="${{runner.tool_cache}}/llvm+clang" | |
llvm_root=$(echo "$llvm_root" | sed 's/\\/\//g') | |
mkdir -p "$llvm_root" | |
if [ "${{ runner.os }}" != "Windows" ]; then | |
tar -xvf "$llvm_archive_filename" -C "$llvm_root" --strip-components=1 | |
else | |
7z x "$llvm_archive_filename" | |
cd "$llvm_config_type" | |
mv * "$llvm_root" | |
cd .. | |
rm -rf "$llvm_config_type" | |
fi | |
# Export LLVM_ROOT | |
echo "llvm_root=$llvm_root" | |
echo -E "llvm-root=$llvm_root" >> $GITHUB_OUTPUT | |
- 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/setup-cpp@v1.5.0 | |
id: setup-cpp | |
with: | |
compiler: ${{ matrix.compiler }} | |
version: ${{ matrix.version }} | |
check-latest: ${{ matrix.compiler == 'clang' }} | |
- name: Install packages | |
uses: alandefreitas/cpp-actions/package-install@v1.5.0 | |
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/cmake-workflow@v1.5.0 | |
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-root || '/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/flamegraph@v1.5.0 | |
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 | |
chmod 755 -R $(pwd)/docs/build/site | |
scp -r $(pwd)/docs/build/site/* ubuntu@dev-websites.cpp.al:/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/setup-cpp@v1.5.0 | |
id: setup-cpp | |
with: | |
compiler: clang | |
version: 16 | |
check-latest: true | |
- name: Install packages | |
uses: alandefreitas/cpp-actions/package-install@v1.5.0 | |
id: package-install | |
with: | |
apt-get: libstdc++-12-dev asciidoctor | |
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/boost-clone@v1.5.0 | |
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 demos | |
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 "inaccessible-members: never" >> $(pwd)/boost/libs/url/mrdox-single.yml | |
echo "filters:" >> $(pwd)/boost/libs/url/mrdox-single.yml | |
echo " symbols:" >> $(pwd)/boost/libs/url/mrdox-single.yml | |
echo " exclude:" >> $(pwd)/boost/libs/url/mrdox-single.yml | |
echo " - 'boost::urls::detail'" >> $(pwd)/boost/libs/url/mrdox-single.yml | |
echo " - 'boost::urls::*::detail'" >> $(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 | |
echo "inaccessible-members: never" >> $(pwd)/boost/libs/url/mrdox-multi.yml | |
echo "filters:" >> $(pwd)/boost/libs/url/mrdox-multi.yml | |
echo " symbols:" >> $(pwd)/boost/libs/url/mrdox-multi.yml | |
echo " exclude:" >> $(pwd)/boost/libs/url/mrdox-multi.yml | |
echo " - 'boost::urls::detail'" >> $(pwd)/boost/libs/url/mrdox-multi.yml | |
echo " - 'boost::urls::*::detail'" >> $(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 | |
asciidoctor -R "$(pwd)/demos/boost-url/$variant/adoc" -D "$(pwd)/demos/boost-url/$variant/adoc-asciidoc" "$(pwd)/demos/boost-url/$variant/adoc/**/*.adoc" | |
done | |
tar -cjf $(pwd)/demos.tar.gz -C $(pwd)/demos --strip-components 1 . | |
echo "demos_path=$(pwd)/demos.tar.gz" >> $GITHUB_ENV | |
- name: Upload demo artifacts | |
uses: actions/upload-artifact@v3 | |
with: | |
name: demos | |
path: ${{ env.demos_path }} | |
retention-days: 1 | |
- 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 | |
demo_dir="/var/www/mrdox.com/demos/${{ github.ref_name }}" | |
ssh ubuntu@dev-websites.cpp.al "rm -rf $demo_dir; mkdir -p $demo_dir" | |
chmod 755 -R $(pwd)/demos | |
scp -r $(pwd)/demos/* ubuntu@dev-websites.cpp.al:$demo_dir/ | |
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/create-changelog@v1.5.0 | |
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/delete-tag-and-release@v1.0 | |
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/delete-older-releases@v0.2.1 | |
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 }} | |