Skip to content

Unit Tests

Unit Tests #18

Workflow file for this run

name: Unit Tests
permissions: read-all
on:
workflow_dispatch:
merge_group:
push:
branches: [ main ]
pull_request:
branches: [ main ]
env:
DEBIAN_FRONTEND: noninteractive
CMAKE_GENERATOR: Ninja
DEFAULT_CXX_STANDARD: 20
DEFAULT_LLVM_VERSION: 18
DEFAULT_GCC_VERSION: 13
MULL_LLVM_VERSION: 17
concurrency:
group: ${{ github.head_ref || github.run_id }}
cancel-in-progress: true
jobs:
# build_and_test_24:
# runs-on: ${{ github.repository_owner == 'intel' && 'intel-' || '' }}ubuntu-24.04
# strategy:
# fail-fast: false
# matrix:
# compiler: [clang, gcc]
# version: [12, 13, 16, 17, 18]
# cxx_standard: [17, 20]
# stdlib: [libstdc++, libc++]
# build_type: [Debug]
# include:
# - compiler: clang
# cc: "clang"
# cxx: "clang++"
# cxx_flags: "-stdlib=libstdc++"
# - version: 18
# compiler: clang
# install: sudo apt update && sudo apt install -y clang-18
# toolchain_root: "/usr/lib/llvm-18"
# - version: 18
# compiler: clang
# stdlib: libc++
# install: sudo apt update && sudo apt install -y clang-18 libc++-18-dev libc++abi-18-dev
# cxx_flags: "-stdlib=libc++"
# - version: 17
# compiler: clang
# install: sudo apt update && sudo apt install -y clang-17
# toolchain_root: "/usr/lib/llvm-17"
# - version: 17
# compiler: clang
# stdlib: libc++
# install: sudo apt update && sudo apt install -y clang-17 libc++-17-dev libc++abi-17-dev
# cxx_flags: "-stdlib=libc++"
# - version: 16
# compiler: clang
# install: sudo apt update && sudo apt install -y clang-16
# toolchain_root: "/usr/lib/llvm-16"
# - version: 16
# compiler: clang
# stdlib: libc++
# install: sudo apt update && sudo apt install -y clang-16 libc++-16-dev libc++abi-16-dev
# cxx_flags: "-stdlib=libc++"
# - compiler: gcc
# toolchain_root: "/usr"
# cxx_flags: ""
# - version: 13
# compiler: gcc
# install: sudo apt update && sudo apt install -y gcc-13 g++-13
# cc: "gcc-13"
# cxx: "g++-13"
# - version: 12
# compiler: gcc
# install: sudo apt update && sudo apt install -y gcc-12 g++-12
# cc: "gcc-12"
# cxx: "g++-12"
# cxx_flags: ""
# exclude:
# - compiler: gcc
# version: 18
# - compiler: gcc
# version: 17
# - compiler: gcc
# version: 16
# - compiler: clang
# version: 13
# - compiler: clang
# version: 12
# - compiler: gcc
# stdlib: libc++
# steps:
# - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0
# - name: Install build tools
# run: |
# ${{ matrix.install }}
# sudo apt install -y ninja-build
# - name: Restore CPM cache
# env:
# cache-name: cpm-cache-0
# id: cpm-cache-restore
# uses: actions/cache/restore@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2
# with:
# path: ~/cpm-cache
# key: ${{runner.os}}-${{env.cache-name}}-${{ hashFiles('**/CMakeLists.txt', 'cmake/**') }}
# restore-keys: |
# ${{runner.os}}-${{env.cache-name}}-
# - name: Configure CMake
# env:
# CC: ${{matrix.toolchain_root}}/bin/${{matrix.cc}}
# CXX: ${{matrix.toolchain_root}}/bin/${{matrix.cxx}}
# run: cmake -B ${{github.workspace}}/build -DCMAKE_CXX_STANDARD=${{matrix.cxx_standard}} -DCMAKE_CXX_FLAGS_INIT=${{matrix.cxx_flags}} -DCMAKE_BUILD_TYPE=${{matrix.build_type}} -DCPM_SOURCE_CACHE=~/cpm-cache
# - name: Save CPM cache
# env:
# cache-name: cpm-cache-0
# if: steps.cpm-cache-restore.outputs.cache-hit != 'true'
# uses: actions/cache/save@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2
# with:
# path: ~/cpm-cache
# key: ${{runner.os}}-${{env.cache-name}}-${{ hashFiles('**/CMakeLists.txt', 'cmake/**') }}
# - name: Build Unit Tests
# run: cmake --build ${{github.workspace}}/build --config ${{matrix.build_type}} -v -t build_unit_tests
# - name: Test
# working-directory: ${{github.workspace}}/build
# run: ctest --output-on-failure -j $(nproc) -C ${{matrix.build_type}}
# build_and_test_22:
# runs-on: ${{ github.repository_owner == 'intel' && 'intel-' || '' }}ubuntu-22.04
# strategy:
# fail-fast: false
# matrix:
# compiler: [clang]
# version: [14, 15]
# cxx_standard: [17, 20]
# stdlib: [libstdc++, libc++]
# build_type: [Debug]
# include:
# - compiler: clang
# cc: "clang"
# cxx: "clang++"
# cxx_flags: "-stdlib=libstdc++"
# - version: 15
# compiler: clang
# install: sudo apt update && sudo apt install -y clang-15
# toolchain_root: "/usr/lib/llvm-15"
# - version: 15
# compiler: clang
# stdlib: libc++
# install: sudo apt update && sudo apt install -y clang-15 libc++-15-dev libc++abi-15-dev
# cxx_flags: "-stdlib=libc++"
# - version: 14
# compiler: clang
# install: sudo apt update && sudo apt install -y clang-14
# toolchain_root: "/usr/lib/llvm-14"
# - version: 14
# compiler: clang
# stdlib: libc++
# install: sudo apt update && sudo apt install -y clang-14 libc++-14-dev libc++abi-14-dev
# cxx_flags: "-stdlib=libc++"
# exclude:
# - compiler: clang
# version: 14
# stdlib: libstdc++
# steps:
# - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0
# - name: Install build tools
# run: |
# ${{ matrix.install }}
# sudo apt install -y ninja-build
# - name: Restore CPM cache
# env:
# cache-name: cpm-cache-0
# id: cpm-cache-restore
# uses: actions/cache/restore@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2
# with:
# path: ~/cpm-cache
# key: ${{runner.os}}-${{env.cache-name}}-${{ hashFiles('**/CMakeLists.txt', 'cmake/**') }}
# restore-keys: |
# ${{runner.os}}-${{env.cache-name}}-
# - name: Configure CMake
# env:
# CC: ${{matrix.toolchain_root}}/bin/${{matrix.cc}}
# CXX: ${{matrix.toolchain_root}}/bin/${{matrix.cxx}}
# run: cmake -B ${{github.workspace}}/build -DCMAKE_CXX_STANDARD=${{matrix.cxx_standard}} -DCMAKE_CXX_FLAGS_INIT=${{matrix.cxx_flags}} -DCMAKE_BUILD_TYPE=${{matrix.build_type}} -DCPM_SOURCE_CACHE=~/cpm-cache
# - name: Save CPM cache
# env:
# cache-name: cpm-cache-0
# if: steps.cpm-cache-restore.outputs.cache-hit != 'true'
# uses: actions/cache/save@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2
# with:
# path: ~/cpm-cache
# key: ${{runner.os}}-${{env.cache-name}}-${{ hashFiles('**/CMakeLists.txt', 'cmake/**') }}
# - name: Build Unit Tests
# run: cmake --build ${{github.workspace}}/build --config ${{matrix.build_type}} -v -t build_unit_tests
# - name: Test
# working-directory: ${{github.workspace}}/build
# run: ctest --output-on-failure -j $(nproc) -C ${{matrix.build_type}}
# quality_checks_pass:
# runs-on: ${{ github.repository_owner == 'intel' && 'intel-' || '' }}ubuntu-24.04
# steps:
# - name: Checkout target branch
# uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0
# with:
# ref: ${{github.base_ref}}
# - name: Extract target branch SHA
# run: echo "branch=$(git rev-parse HEAD)" >> $GITHUB_OUTPUT
# id: target_branch
# - name: Checkout PR branch
# uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0
# - name: Install build tools
# run: |
# sudo apt update && sudo apt install -y pipx ninja-build clang-tidy-${{env.DEFAULT_LLVM_VERSION}} clang-format-${{env.DEFAULT_LLVM_VERSION}}
# - name: Install cmake-format
# run: |
# pipx install cmakelang
# pipx inject cmakelang pyyaml
# - name: Restore CPM cache
# env:
# cache-name: cpm-cache-0
# id: cpm-cache-restore
# uses: actions/cache/restore@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2
# with:
# path: ~/cpm-cache
# key: ${{runner.os}}-${{env.cache-name}}-${{ hashFiles('**/CMakeLists.txt', 'cmake/**') }}
# restore-keys: |
# ${{runner.os}}-${{env.cache-name}}-
# - name: Configure CMake
# env:
# CC: "/usr/lib/llvm-${{env.DEFAULT_LLVM_VERSION}}/bin/clang"
# CXX: "/usr/lib/llvm-${{env.DEFAULT_LLVM_VERSION}}/bin/clang++"
# PR_TARGET_BRANCH: ${{ steps.target_branch.outputs.branch }}
# run: cmake -B ${{github.workspace}}/build -DCMAKE_CXX_STANDARD=${{env.DEFAULT_CXX_STANDARD}} -DCPM_SOURCE_CACHE=~/cpm-cache
# - name: Save CPM cache
# env:
# cache-name: cpm-cache-0
# if: steps.cpm-cache-restore.outputs.cache-hit != 'true'
# uses: actions/cache/save@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2
# with:
# path: ~/cpm-cache
# key: ${{runner.os}}-${{env.cache-name}}-${{ hashFiles('**/CMakeLists.txt', 'cmake/**') }}
# - name: Run quality checks
# run: cmake --build ${{github.workspace}}/build -t ci-quality
# sanitize:
# runs-on: ${{ github.repository_owner == 'intel' && 'intel-' || '' }}ubuntu-24.04
# strategy:
# fail-fast: false
# matrix:
# sanitizer: [undefined, address, thread]
# compiler: [clang, gcc]
# include:
# - compiler: clang
# cc: "clang"
# cxx: "clang++"
# install: sudo apt update && sudo apt install -y clang-18
# toolchain_root: "/usr/lib/llvm-18"
# - compiler: gcc
# cc: "gcc-13"
# cxx: "g++-13"
# install: sudo apt update && sudo apt install -y gcc-13 g++-13
# toolchain_root: "/usr"
# steps:
# - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0
# - name: Install build tools
# run: |
# ${{ matrix.install }}
# sudo apt install -y ninja-build
# - name: Restore CPM cache
# env:
# cache-name: cpm-cache-0
# id: cpm-cache-restore
# uses: actions/cache/restore@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2
# with:
# path: ~/cpm-cache
# key: ${{runner.os}}-${{env.cache-name}}-${{ hashFiles('**/CMakeLists.txt', 'cmake/**') }}
# restore-keys: |
# ${{runner.os}}-${{env.cache-name}}-
# - name: Configure CMake
# env:
# CC: ${{matrix.toolchain_root}}/bin/${{matrix.cc}}
# CXX: ${{matrix.toolchain_root}}/bin/${{matrix.cxx}}
# SANITIZERS: ${{matrix.sanitizer}}
# run: cmake -B ${{github.workspace}}/build -DCMAKE_CXX_STANDARD=${{env.DEFAULT_CXX_STANDARD}} -DCPM_SOURCE_CACHE=~/cpm-cache
# - name: Save CPM cache
# env:
# cache-name: cpm-cache-0
# if: steps.cpm-cache-restore.outputs.cache-hit != 'true'
# uses: actions/cache/save@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2
# with:
# path: ~/cpm-cache
# key: ${{runner.os}}-${{env.cache-name}}-${{ hashFiles('**/CMakeLists.txt', 'cmake/**') }}
# # https://github.com/actions/runner-images/issues/9524
# - name: Fix kernel mmap rnd bits
# # Asan in llvm 14 provided in ubuntu 22.04 is incompatible with
# # high-entropy ASLR in much newer kernels that GitHub runners are
# # using leading to random crashes: https://reviews.llvm.org/D148280
# run: sudo sysctl vm.mmap_rnd_bits=28
# - name: Build Unit Tests
# run: cmake --build ${{github.workspace}}/build -t unit_tests
# valgrind:
# runs-on: ${{ github.repository_owner == 'intel' && 'intel-' || '' }}ubuntu-24.04
# steps:
# - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0
# - name: Install build tools
# run: |
# sudo apt update && sudo apt install -y gcc-${{env.DEFAULT_GCC_VERSION}} g++-${{env.DEFAULT_GCC_VERSION}} ninja-build valgrind
# - name: Restore CPM cache
# env:
# cache-name: cpm-cache-0
# id: cpm-cache-restore
# uses: actions/cache/restore@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2
# with:
# path: ~/cpm-cache
# key: ${{runner.os}}-${{env.cache-name}}-${{ hashFiles('**/CMakeLists.txt', 'cmake/**') }}
# restore-keys: |
# ${{runner.os}}-${{env.cache-name}}-
# - name: Configure CMake
# env:
# CC: "/usr/bin/gcc-${{env.DEFAULT_GCC_VERSION}}"
# CXX: "/usr/bin/g++-${{env.DEFAULT_GCC_VERSION}}"
# run: cmake -B ${{github.workspace}}/build -DCMAKE_CXX_STANDARD=${{env.DEFAULT_CXX_STANDARD}} -DCPM_SOURCE_CACHE=~/cpm-cache
# - name: Save CPM cache
# env:
# cache-name: cpm-cache-0
# if: steps.cpm-cache-restore.outputs.cache-hit != 'true'
# uses: actions/cache/save@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2
# with:
# path: ~/cpm-cache
# key: ${{runner.os}}-${{env.cache-name}}-${{ hashFiles('**/CMakeLists.txt', 'cmake/**') }}
# - name: Build Unit Tests
# run: cmake --build ${{github.workspace}}/build -t build_unit_tests
# - name: Test
# working-directory: ${{github.workspace}}/build
# run: |
# ctest --output-on-failure -j $(nproc) -E EXPECT_FAIL -T memcheck
# LOGFILE=$(ls ./Testing/Temporary/LastDynamicAnalysis_*.log)
# FAILSIZE=$(du -c ./Testing/Temporary/MemoryChecker.* | tail -1 | cut -f1)
# echo "<details>" >> $GITHUB_STEP_SUMMARY
# echo "<summary>" >> $GITHUB_STEP_SUMMARY
# if [ $FAILSIZE != "0" ]; then
# echo "Failing tests:" | tee -a $GITHUB_STEP_SUMMARY
# else
# echo "No failing tests" >> $GITHUB_STEP_SUMMARY
# fi
# echo "</summary>" >> $GITHUB_STEP_SUMMARY
# for f in ./Testing/Temporary/MemoryChecker.*
# do
# if [ -s $f ]; then
# FILENAME=$(cd $(dirname $f) && pwd)/$(basename $f)
# TEST_COMMAND=$(grep $FILENAME $LOGFILE)
# echo "" | tee -a $GITHUB_STEP_SUMMARY
# echo "========================================"
# echo $TEST_COMMAND | tee -a $GITHUB_STEP_SUMMARY
# echo "--------------------"
# cat $f
# fi
# done
# echo "</details>" >> $GITHUB_STEP_SUMMARY
# test $FAILSIZE = "0"
mutate:
runs-on: ${{ github.repository_owner == 'intel' && 'intel-' || '' }}ubuntu-24.04
steps:
- uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0
- name: Install build tools
run: |
sudo apt update && sudo apt install -y clang-${{env.MULL_LLVM_VERSION}} ninja-build
- name: Install mull
env:
MULL_VERSION: 0.23.0
run: |
wget https://github.com/mull-project/mull/releases/download/${{env.MULL_VERSION}}/Mull-${{env.MULL_LLVM_VERSION}}-${{env.MULL_VERSION}}-LLVM-${{env.MULL_LLVM_VERSION}}.0-ubuntu-24.04.deb
sudo dpkg -i Mull-${{env.MULL_LLVM_VERSION}}-${{env.MULL_VERSION}}-LLVM-${{env.MULL_LLVM_VERSION}}.0-ubuntu-24.04.deb
- name: Restore CPM cache
env:
cache-name: cpm-cache-0
id: cpm-cache-restore
uses: actions/cache/restore@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2
with:
path: ~/cpm-cache
key: ${{runner.os}}-${{env.cache-name}}-${{ hashFiles('**/CMakeLists.txt', 'cmake/**') }}
restore-keys: |
${{runner.os}}-${{env.cache-name}}-
- name: Configure CMake
env:
CC: "/usr/lib/llvm-${{env.MULL_LLVM_VERSION}}/bin/clang"
CXX: "/usr/lib/llvm-${{env.MULL_LLVM_VERSION}}/bin/clang++"
run: cmake -B ${{github.workspace}}/build -DCMAKE_CXX_STANDARD=${{env.DEFAULT_CXX_STANDARD}} -DCPM_SOURCE_CACHE=~/cpm-cache
- name: Save CPM cache
env:
cache-name: cpm-cache-0
if: steps.cpm-cache-restore.outputs.cache-hit != 'true'
uses: actions/cache/save@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2
with:
path: ~/cpm-cache
key: ${{runner.os}}-${{env.cache-name}}-${{ hashFiles('**/CMakeLists.txt', 'cmake/**') }}
- name: Build and run mull tests
run: cmake --build build -t mull_tests
# merge_ok:
# runs-on: ${{ github.repository_owner == 'intel' && 'intel-' || '' }}ubuntu-22.04
# needs: [build_and_test_24, build_and_test_22, quality_checks_pass, sanitize, valgrind]
# if: ${{ !cancelled() }}
# steps:
# - name: Enable merge
# if: >-
# ${{
# contains(needs.*.result, 'failure')
# || contains(needs.*.result, 'cancelled')
# || contains(needs.*.result, 'skipped')
# }}
# run: exit 1