Skip to content

ci: Utilize Xcode's ASan and UBSan tools #447

ci: Utilize Xcode's ASan and UBSan tools

ci: Utilize Xcode's ASan and UBSan tools #447

name: Building and testing
on:
push:
branches:
- main
pull_request:
branches:
- main
permissions: {}
jobs:
windows_msvc:
name: Build and test on Windows with MSVC
env:
CONFIGURE_PRESET_NAME: windows-x64
DEBUG_BUILD_PRESET_NAME: windows-x64-debug
RELEASE_BUILD_PRESET_NAME: windows-x64-release
DEBUG_BINARY_DIR: ${{ github.workspace }}\out\build\windows-x64\Debug
RELEASE_BINARY_DIR: ${{ github.workspace }}\out\build\windows-x64\Release
runs-on: windows-latest
steps:
- name: Check out repository
uses: actions/checkout@v4
with:
persist-credentials: false
- name: Check out vcpkg
uses: actions/checkout@v4
with:
repository: microsoft/vcpkg
path: ${{ github.workspace }}\vcpkg
persist-credentials: false
- name: Bootstrap vcpkg
run: .\vcpkg\bootstrap-vcpkg.bat -disableMetrics
- name: Apply vcpkg cache
id: vcpkg-cache
uses: actions/cache@v4
with:
path: |-
%VCPKG_DEFAULT_BINARY_CACHE%
${{ github.workspace }}\vcpkg
key: >-
${{ runner.os }}-vcpkg-archives-cache-${{ hashFiles(
'vcpkg\ports\catch2\vcpkg.json',
'vcpkg\ports\fmt\vcpkg.json',
'vcpkg\ports\nameof\vcpkg.json',
'vcpkg\ports\nanobench\vcpkg.json'
) }}
- name: Configure CMake
run: >-
cmake
--preset '${{ env.CONFIGURE_PRESET_NAME }}'
- name: Build for testing
run: >-
cmake
--build
--parallel
--preset '${{ env.DEBUG_BUILD_PRESET_NAME }}'
- name: Build for benchmarking
run: >-
cmake
--build
--parallel
--preset '${{ env.RELEASE_BUILD_PRESET_NAME }}'
- name: Run tests
run: >-
.\test_driver.exe
--reporter console::out=-::colour-mode=ansi
--success
working-directory: ${{ env.DEBUG_BINARY_DIR }}
- name: Run benchmarks
run: >-
.\benchmark_driver.exe
--durations yes
--reporter console::out=-::colour-mode=ansi
working-directory: ${{ env.RELEASE_BINARY_DIR }}
linux:
name: Build and test on Ubuntu
env:
CC: /usr/bin/gcc-14
CXX: /usr/bin/g++-14
CONFIGURE_PRESET_NAME: generic
DEBUG_BUILD_PRESET_NAME: generic-debug
RELEASE_BUILD_PRESET_NAME: generic-release
DEBUG_BINARY_DIR: ${{ github.workspace }}/out/build/generic/Debug
RELEASE_BINARY_DIR: ${{ github.workspace }}/out/build/generic/Release
runs-on: ubuntu-24.04
steps:
- name: Install Ninja
run: |-
sudo apt-get update
sudo apt-get install ninja-build
- name: Check out repository
uses: actions/checkout@v4
with:
persist-credentials: false
- name: Check out vcpkg
uses: actions/checkout@v4
with:
repository: microsoft/vcpkg
path: ${{ github.workspace }}/vcpkg
persist-credentials: false
- name: Bootstrap vcpkg
run: ./vcpkg/bootstrap-vcpkg.sh -disableMetrics
- name: Apply vcpkg cache
id: vcpkg-cache
uses: actions/cache@v4
with:
path: |-
%VCPKG_DEFAULT_BINARY_CACHE%
${{ github.workspace }}/vcpkg
key: >-
${{ runner.os }}-vcpkg-archives-cache-${{ hashFiles(
'vcpkg/ports/catch2/vcpkg.json',
'vcpkg/ports/fmt/vcpkg.json',
'vcpkg/ports/nameof/vcpkg.json',
'vcpkg/ports/nanobench/vcpkg.json'
) }}
- name: Configure CMake for testing
run: >-
cmake
--preset '${{ env.CONFIGURE_PRESET_NAME }}'
- name: Build for testing
run: >-
cmake
--build
--parallel
--preset '${{ env.DEBUG_BUILD_PRESET_NAME }}'
- name: Build for benchmarking
run: >-
cmake
--build
--parallel
--preset '${{ env.RELEASE_BUILD_PRESET_NAME }}'
- name: Run tests
run: >-
./test_driver
--reporter console::out=-::colour-mode=ansi
--success
working-directory: ${{ env.DEBUG_BINARY_DIR }}
- name: Run benchmarks
run: >-
./benchmark_driver
--durations yes
--reporter console::out=-::colour-mode=ansi
working-directory: ${{ env.RELEASE_BINARY_DIR }}
macos_xcode:
name: Build and test on macOS with Xcode
env:
CONFIGURE_PRESET_NAME: xcode
BUILD_PRESET_NAME: xcode
DEBUG_BINARY_DIR: ${{ github.workspace }}/out/build/xcode/Debug
RELEASE_BINARY_DIR: ${{ github.workspace }}/out/build/xcode/Release
BENCHMARK_BUILD_CONFIGURATION: Release
TEST_BUILD_CONFIGURATION: Debug
XCODE_RELEASE: "15.4"
runs-on: macos-latest
steps:
- name: Set default Xcode release
run: sudo xcode-select -switch '/Applications/Xcode_${{ env.XCODE_RELEASE }}.app'
- name: Check out repository
uses: actions/checkout@v4
with:
persist-credentials: false
- name: Check out vcpkg
uses: actions/checkout@v4
with:
repository: microsoft/vcpkg
path: ${{ github.workspace }}/vcpkg
persist-credentials: false
- name: Bootstrap vcpkg
run: ./vcpkg/bootstrap-vcpkg.sh -disableMetrics
- name: Apply vcpkg cache
id: vcpkg-cache
uses: actions/cache@v4
with:
path: |-
%VCPKG_DEFAULT_BINARY_CACHE%
${{ github.workspace }}/vcpkg
key: >-
${{ runner.os }}-vcpkg-archives-cache-${{ hashFiles(
'vcpkg/ports/catch2/vcpkg.json',
'vcpkg/ports/fmt/vcpkg.json',
'vcpkg/ports/nameof/vcpkg.json',
'vcpkg/ports/nanobench/vcpkg.json'
) }}
- name: Configure CMake for testing
run: >-
cmake
--preset '${{ env.CONFIGURE_PRESET_NAME }}'
- name: Build with sanitizers for testing
run: >-
cmake
--build
--config '${{ env.TEST_BUILD_CONFIGURATION }}'
--parallel
--preset '${{ env.BUILD_PRESET_NAME }}'
--
-enableAddressSanitizer YES
-enableUndefinedBehaviorSanitizer YES
- name: Build for benchmarking
run: >-
cmake
--build
--config '${{ env.BENCHMARK_BUILD_CONFIGURATION }}'
--parallel
--preset '${{ env.BUILD_PRESET_NAME }}'
--
-enableAddressSanitizer YES
-enableUndefinedBehaviorSanitizer YES
- name: Run tests
run: >-
./test_driver
--reporter console::out=-::colour-mode=ansi
--success
working-directory: ${{ env.DEBUG_BINARY_DIR }}
- name: Run benchmarks
run: >-
./benchmark_driver
--durations yes
--reporter console::out=-::colour-mode=ansi
working-directory: ${{ env.RELEASE_BINARY_DIR }}