tests: run tests under a minimal debugger that can create minidumps #15191
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: Build | |
on: [push, pull_request] | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }} | |
cancel-in-progress: true | |
jobs: | |
Build: | |
name: ${{ matrix.platform.name }} | |
runs-on: ${{ matrix.platform.os }} | |
defaults: | |
run: | |
shell: ${{ matrix.platform.shell }} | |
strategy: | |
fail-fast: false | |
matrix: | |
platform: | |
- { name: Windows (mingw32), os: windows-latest, shell: 'msys2 {0}', msystem: mingw32, msys-env: mingw-w64-i686, cmake: '-DSDLTEST_PROCDUMP=ON', artifact: 'SDL-mingw32', no-perl: true } | |
- { name: Windows (mingw64), os: windows-latest, shell: 'msys2 {0}', msystem: mingw64, msys-env: mingw-w64-x86_64, cmake: '-DSDLTEST_PROCDUMP=ON', artifact: 'SDL-mingw64' } | |
- { name: Windows (clang32), os: windows-latest, shell: 'msys2 {0}', msystem: clang32, msys-env: mingw-w64-clang-i686, cmake: '-DSDLTEST_PROCDUMP=ON', artifact: 'SDL-msys2-clang32', no-perl: true } | |
- { name: Windows (clang64), os: windows-latest, shell: 'msys2 {0}', msystem: clang64, msys-env: mingw-w64-clang-x86_64, cmake: '-DSDLTEST_PROCDUMP=ON', artifact: 'SDL-msys2-clang64' } | |
- { name: Windows (ucrt64), os: windows-latest, shell: 'msys2 {0}', msystem: ucrt64, msys-env: mingw-w64-ucrt-x86_64, cmake: '-DSDLTEST_PROCDUMP=ON', artifact: 'SDL-msys2-ucrt64' } | |
- { name: Ubuntu 20.04, os: ubuntu-20.04, shell: sh, artifact: 'SDL-ubuntu20.04' } | |
- { name: Intel oneAPI (Ubuntu 20.04), os: ubuntu-20.04, shell: bash, artifact: 'SDL-ubuntu20.04-oneapi', intel: true, | |
source_cmd: 'source /opt/intel/oneapi/setvars.sh; export CC=icx; export CXX=icx;'} | |
- { name: Intel Compiler (Ubuntu 20.04), os: ubuntu-20.04, shell: bash, artifact: 'SDL-ubuntu20.04-icc', intel: true, cmake: '-DSDL_CLANG_TIDY=OFF', | |
source_cmd: 'source /opt/intel/oneapi/setvars.sh; export CC=icc; export CXX=icpc; export CFLAGS=-diag-disable=10441; export CXXFLAGS=-diag-disable=10441; '} | |
- { name: Ubuntu 22.04, os: ubuntu-22.04, shell: sh, artifact: 'SDL-ubuntu22.04' } | |
- { name: MacOS (Framework) (x86_64), os: macos-12, shell: sh, cmake-platform: '-DCMAKE_OSX_ARCHITECTURES="x86_64;arm64"', cmake: '-DSDL_FRAMEWORK=ON -DSDL_CLANG_TIDY=OFF', skip_test_pkgconfig: true, artifact: 'SDL-macos-framework', no-static: true } | |
- { name: MacOS (Framework) (arm64), os: macos-latest, shell: sh, cmake-platform: '-DCMAKE_OSX_ARCHITECTURES="x86_64;arm64"', cmake: '-DSDL_FRAMEWORK=ON -DSDL_CLANG_TIDY=OFF', skip_test_pkgconfig: true, no-static: true } | |
- { name: MacOS (GNU prefix), os: macos-latest, shell: sh, cmake-platform: '-DCMAKE_OSX_ARCHITECTURES="arm64"', cmake: '-DCLANG_TIDY_BINARY="$(brew --prefix llvm)/bin/clang-tidy"', artifact: 'SDL-macos-arm64-gnu' } | |
- { name: iOS (GNU prefix), os: macos-latest, shell: sh, cmake-platform: '-DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_ARCHITECTURES="x86_64;arm64"', cross-build: true, skip_test_pkgconfig: true, artifact: 'SDL-ios-gnu' } | |
- { name: tvOS (GNU prefix), os: macos-latest, shell: sh, cmake-platform: '-DCMAKE_SYSTEM_NAME=tvOS -DCMAKE_OSX_ARCHITECTURES="x86_64;arm64"', cross-build: true, skip_test_pkgconfig: true, artifact: 'SDL-tvos-gnu' } | |
steps: | |
- name: Set up MSYS2 | |
if: matrix.platform.shell == 'msys2 {0}' | |
uses: msys2/setup-msys2@v2 | |
with: | |
msystem: ${{ matrix.platform.msystem }} | |
install: >- | |
${{ matrix.platform.msys-env }}-cc | |
${{ matrix.platform.msys-env }}-cmake | |
${{ matrix.platform.msys-env }}-ninja | |
${{ (!matrix.platform.no-perl && format('{0}-perl', matrix.platform.msys-env)) || '' }} | |
${{ matrix.platform.msys-env }}-pkg-config | |
${{ matrix.platform.msys-env }}-clang-tools-extra | |
- name: Setup Linux dependencies | |
if: runner.os == 'Linux' | |
run: | | |
sudo apt-get update | |
sudo apt-get install build-essential git \ | |
pkg-config cmake ninja-build gnome-desktop-testing libasound2-dev libpulse-dev \ | |
libaudio-dev libjack-dev libsndio-dev libusb-1.0-0-dev libx11-dev libxext-dev \ | |
libxrandr-dev libxcursor-dev libxfixes-dev libxi-dev libxss-dev libwayland-dev \ | |
libxkbcommon-dev libdrm-dev libgbm-dev libgl1-mesa-dev libgles2-mesa-dev \ | |
libegl1-mesa-dev libdbus-1-dev libibus-1.0-dev libudev-dev fcitx-libs-dev | |
- name: Setup extra Ubuntu 22.04 dependencies | |
if: matrix.platform.os == 'ubuntu-22.04' | |
run: | | |
sudo apt-get install libpipewire-0.3-dev libdecor-0-dev | |
- name: Setup Macos dependencies | |
if: runner.os == 'macOS' | |
run: | | |
export HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK=1 | |
brew update | |
brew install \ | |
ninja \ | |
pkg-config \ | |
llvm | |
- name: Setup Intel oneAPI | |
if: matrix.platform.intel | |
run: | | |
# Download the key to system keyring | |
wget -O- https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB \ | |
| gpg --dearmor | sudo tee /usr/share/keyrings/oneapi-archive-keyring.gpg > /dev/null | |
# Add signed entry to apt sources and configure the APT client to use Intel repository: | |
echo "deb [signed-by=/usr/share/keyrings/oneapi-archive-keyring.gpg] https://apt.repos.intel.com/oneapi all main" | sudo tee /etc/apt/sources.list.d/oneAPI.list | |
# Update package list | |
sudo apt-get update -y | |
# Install oneAPI | |
sudo apt-get install -y intel-oneapi-compiler-dpcpp-cpp-and-cpp-classic | |
- uses: actions/checkout@v4 | |
- name: Check that versioning is consistent | |
# We only need to run this once: arbitrarily use the Linux/CMake build | |
if: "runner.os == 'Linux'" | |
run: ./build-scripts/test-versioning.sh | |
- name: Configure (CMake) | |
run: | | |
${{ matrix.platform.source_cmd }} | |
cmake -S . -B build -G Ninja \ | |
-Wdeprecated -Wdev -Werror \ | |
-DSDL_SHARED=ON \ | |
-DSDL_STATIC=ON \ | |
-DSDL_TESTS=ON \ | |
-DSDL_WERROR=ON \ | |
-DSDL_INSTALL_TESTS=ON \ | |
-DSDL_VENDOR_INFO="Github Workflow" \ | |
-DSDL_CLANG_TIDY=ON \ | |
-DSDL_DISABLE_INSTALL_DOCS=${{ !matrix.platform.no-perl }} \ | |
-DCMAKE_INSTALL_PREFIX=cmake_prefix \ | |
-DCMAKE_POSITION_INDEPENDENT_CODE=ON \ | |
-DCMAKE_BUILD_TYPE=Release \ | |
${{ matrix.platform.cmake-platform }} \ | |
${{ matrix.platform.cmake }} | |
- name: Build (CMake) | |
id: build | |
run: | | |
${{ matrix.platform.source_cmd }} | |
cmake --build build/ --config Release --verbose --parallel | |
- name: Run build-time tests (CMake) | |
id: tests | |
if: ${{ !matrix.platform.cross-build }} | |
run: | | |
${{ matrix.platform.source_cmd }} | |
set -eu | |
export SDL_TESTS_QUICK=1 | |
ctest -VV --test-dir build/ -j2 | |
if test "${{ runner.os }}" = "Linux"; then | |
# This should show us the SDL_REVISION | |
strings build/libSDL3.so.0 | grep SDL- | |
fi | |
- name: Install (CMake) | |
run: | | |
${{ matrix.platform.source_cmd }} | |
set -eu | |
cmake --install build/ --config Release | |
( cd cmake_prefix; find . ) | LC_ALL=C sort -u | |
- name: Package (CPack) | |
if: ${{ always() && steps.build.outcome == 'success' }} | |
run: | | |
# DMG creation on macOS occasionally fails, so try multiple times | |
# https://gitlab.kitware.com/cmake/cmake/-/issues/25671 | |
success=0 | |
max_tries=10 | |
for i in $(seq $max_tries); do | |
cmake --build build/ --config Release --target package && success=1 | |
if test $success = 1; then | |
break | |
fi | |
echo "Package creation failed. Sleep 1 second and try again." | |
sleep 1 | |
done | |
if test $success = 0; then | |
echo "Package creation failed after $max_tries attempts." | |
exit 1 | |
fi | |
- name: Verify CMake configuration files | |
run: | | |
${{ matrix.platform.source_cmd }} | |
cmake -S cmake/test -B cmake_config_build -G Ninja \ | |
${{ matrix.platform.cmake-platform }} \ | |
-DTEST_SHARED=ON \ | |
-DTEST_STATIC=${{ !matrix.platform.no-static }} \ | |
-DCMAKE_BUILD_TYPE=Release \ | |
-DCMAKE_PREFIX_PATH=$(echo "${{ github.workspace }}/cmake_prefix" | sed -e 's#\\#/#g') | |
cmake --build cmake_config_build --verbose | |
- name: Verify sdl3.pc | |
if: ${{ !matrix.platform.skip_test_pkgconfig }} | |
run: | | |
${{ matrix.platform.source_cmd }} | |
export PKG_CONFIG_PATH=$(echo "${{ github.workspace }}/cmake_prefix/lib/pkgconfig" | sed -e 's#\\#/#g') | |
cmake/test/test_pkgconfig.sh | |
- uses: actions/upload-artifact@v4 | |
if: ${{ always() && steps.tests.outcome == 'failure' }} | |
with: | |
if-no-files-found: ignore | |
name: '${{ matrix.platform.artifact }}-minidumps' | |
path: build/minidumps/* | |
- uses: actions/upload-artifact@v4 | |
if: ${{ always() && matrix.platform.artifact != '' && steps.build.outcome == 'success' }} | |
with: | |
if-no-files-found: error | |
name: ${{ matrix.platform.artifact }} | |
path: build/dist/SDL3* |