Merge pull request #111 from cschreib/xml_report #371
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: CI | |
on: | |
workflow_dispatch: | |
pull_request: | |
push: | |
branches: | |
- main | |
env: | |
EM_VERSION: 3.1.35 | |
EM_CACHE_FOLDER: 'emsdk-cache' | |
CODECOV_TOKEN: 'f8197851-e753-4291-a835-2d76090f2c92' | |
jobs: | |
build: | |
strategy: | |
fail-fast: false | |
matrix: | |
platform: | |
- { name: Ubuntu GCC, os: ubuntu-latest, publish: true, compiler: g++, arch: "64", build: "ubuntu64-libstdc++", cmakepp: "", flags: "-DCMAKE_CXX_COMPILER=g++ -DCMAKE_CXX_FLAGS='--coverage'"} | |
- { name: Ubuntu GCC noexcept, os: ubuntu-latest, publish: false, compiler: g++, arch: "64", build: "ubuntu64-libstdc++", cmakepp: "", flags: "-DCMAKE_CXX_COMPILER=g++ -DCMAKE_CXX_FLAGS='-fno-exceptions'"} | |
- { name: Ubuntu GCC notime, os: ubuntu-latest, publish: false, compiler: g++, arch: "64", build: "ubuntu64-libstdc++", cmakepp: "", flags: "-DCMAKE_CXX_COMPILER=g++ -DSNITCH_WITH_TIMINGS=0"} | |
- { name: Ubuntu GCC nounity, os: ubuntu-latest, publish: false, compiler: g++, arch: "64", build: "ubuntu64-libstdc++", cmakepp: "", flags: "-DCMAKE_CXX_COMPILER=g++ -DSNITCH_UNITY_BUILD=0"} | |
- { name: Ubuntu Clang, os: ubuntu-latest, publish: true, compiler: clang++, arch: "64", build: "ubuntu64-libc++", cmakepp: "", flags: "-DCMAKE_CXX_COMPILER=clang++ -DCMAKE_CXX_FLAGS='-stdlib=libc++'"} | |
- { name: Ubuntu Clang noexcept, os: ubuntu-latest, publish: false, compiler: clang++, arch: "64", build: "ubuntu64-libc++", cmakepp: "", flags: "-DCMAKE_CXX_COMPILER=clang++ -DCMAKE_CXX_FLAGS='-stdlib=libc++ -fno-exceptions'"} | |
- { name: Windows 32, os: windows-latest, publish: true, compiler: vs2019, arch: "32", build: "win32-vs2019", cmakepp: "", flags: "-A Win32"} | |
- { name: Windows 64, os: windows-latest, publish: true, compiler: vs2019, arch: "64", build: "win64-vs2019", cmakepp: "", flags: "-A x64"} | |
- { name: Windows 64 noexcept, os: windows-latest, publish: false, compiler: vs2019, arch: "64", build: "win64-vs2019", cmakepp: "", flags: "-A x64"} | |
- { name: MacOS, os: macos-latest, publish: true, compiler: clang++, arch: "64", build: "osx-libc++", cmakepp: "", flags: ""} | |
- { name: MacOS noexcept, os: macos-latest, publish: false, compiler: clang++, arch: "64", build: "osx-libc++", cmakepp: "", flags: "-DCMAKE_CXX_FLAGS='-fno-exceptions'"} | |
- { name: WebAssembly, os: ubuntu-latest, publish: true, compiler: em++, arch: "32", build: "wasm32", cmakepp: "emcmake", flags: "-DCMAKE_CXX_FLAGS='-s DISABLE_EXCEPTION_CATCHING=0' -DCMAKE_CROSSCOMPILING_EMULATOR=node"} | |
- { name: WebAssembly noexcept, os: ubuntu-latest, publish: false, compiler: em++, arch: "32", build: "wasm32", cmakepp: "emcmake", flags: "-DCMAKE_CXX_FLAGS='-fno-exceptions' -DCMAKE_CROSSCOMPILING_EMULATOR=node"} | |
build-type: | |
- Release | |
- Debug | |
name: ${{matrix.platform.name}} ${{matrix.build-type}} | |
runs-on: ${{matrix.platform.os}} | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v3 | |
with: | |
submodules: 'recursive' | |
- name: Setup Clang | |
if: matrix.platform.compiler == 'clang++' && matrix.platform.os == 'ubuntu-latest' | |
run: sudo apt install clang libc++-dev libc++abi-dev | |
- name: Setup Emscripten cache | |
if: matrix.platform.compiler == 'em++' | |
id: cache-system-libraries | |
uses: actions/[email protected] | |
with: | |
path: ${{env.EM_CACHE_FOLDER}} | |
key: ${{env.EM_VERSION}}-${{matrix.platform.name}}-${{matrix.build-type}} | |
- name: Setup Emscripten | |
if: matrix.platform.compiler == 'em++' | |
uses: mymindstorm/setup-emsdk@v12 | |
with: | |
version: ${{env.EM_VERSION}} | |
actions-cache-folder: ${{env.EM_CACHE_FOLDER}} | |
- name: Setup GCC | |
if: matrix.platform.compiler == 'g++' | |
run: | | |
sudo apt install g++-11 | |
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 100 --slave /usr/bin/g++ g++ /usr/bin/g++-11 --slave /usr/bin/gcov gcov /usr/bin/gcov-11 | |
sudo update-alternatives --set gcc /usr/bin/gcc-11 | |
- name: Create Build Environment | |
run: cmake -E make_directory ${{github.workspace}}/build | |
- name: Configure CMake | |
shell: bash | |
working-directory: ${{github.workspace}}/build | |
run: ${{matrix.platform.cmakepp}} cmake .. -DCMAKE_BUILD_TYPE=${{matrix.build-type}} ${{matrix.platform.flags}} -DSNITCH_DO_TEST=1 -DCMAKE_INSTALL_PREFIX=../install | |
- name: Build | |
shell: bash | |
working-directory: ${{github.workspace}}/build | |
run: cmake --build . --config ${{matrix.build-type}} --parallel 2 | |
- name: Test (with doctest) | |
# A bug in Node.js/V8 prevents these tests from running in Debug config for WebAssembly. | |
# https://bugs.chromium.org/p/v8/issues/detail?id=13961 | |
if: ${{!(matrix.platform.compiler == 'em++' && matrix.build-type == 'Debug')}} | |
shell: bash | |
working-directory: ${{github.workspace}}/build | |
run: cmake --build . --config ${{matrix.build-type}} --target snitch_runtime_tests_run | |
- name: Test (with snitch) | |
shell: bash | |
working-directory: ${{github.workspace}}/build | |
run: cmake --build . --config ${{matrix.build-type}} --target snitch_runtime_tests_self_run | |
- name: Test header-only (with snitch) | |
shell: bash | |
working-directory: ${{github.workspace}}/build | |
run: cmake --build . --config ${{matrix.build-type}} --target snitch_runtime_tests_self_header_only_run | |
- name: Approval tests (with doctest) | |
# Approval tests only run on "default" library configuration, which happens to be the published one | |
if: matrix.platform.publish | |
shell: bash | |
working-directory: ${{github.workspace}}/build | |
run: cmake --build . --config ${{matrix.build-type}} --target snitch_approval_tests_run | |
- name: Compute code coverage | |
if: runner.os == 'Linux' && matrix.platform.compiler == 'g++' && matrix.build-type == 'Debug' && matrix.platform.name == 'Ubuntu GCC' | |
run: | | |
gcov ${{github.workspace}}/build/tests/CMakeFiles/snitch_runtime_tests.dir/runtime_tests/*.gcda ${{github.workspace}}/build/tests/CMakeFiles/snitch_runtime_tests_self.dir/runtime_tests/*.gcda | |
ls | grep '.gcov' | grep -v snitch | xargs -d"\n" rm | |
bash <(curl -s https://codecov.io/bash) | |
- name: Install | |
if: matrix.build-type == 'Release' && matrix.platform.publish && github.ref == 'refs/heads/main' | |
working-directory: ${{github.workspace}}/build | |
shell: bash | |
run: cmake --build . --config ${{matrix.build-type}} --target install | |
# In action-zip, all paths are relative to ${{github.workspace}} | |
- name: Zip full build | |
if: matrix.build-type == 'Release' && matrix.platform.publish && github.ref == 'refs/heads/main' | |
uses: vimtor/action-zip@v1 | |
with: | |
files: install/ LICENSE | |
dest: snitch-${{matrix.platform.build}}.zip | |
# In action-zip, all paths are relative to ${{github.workspace}} | |
- name: Zip header-only | |
if: matrix.build-type == 'Release' && matrix.platform.publish && github.ref == 'refs/heads/main' | |
uses: vimtor/action-zip@v1 | |
with: | |
files: install/include/snitch/snitch_all.hpp LICENSE | |
dest: snitch-header-only.zip | |
- name: Upload build as an artifact | |
if: matrix.build-type == 'Release' && matrix.platform.publish && github.ref == 'refs/heads/main' | |
uses: actions/upload-artifact@v2 | |
with: | |
name: snitch-build | |
path: | | |
${{github.workspace}}/snitch-${{matrix.platform.build}}.zip | |
${{github.workspace}}/snitch-header-only.zip | |