Skip to content

fix: split inproc handler thread #3609

fix: split inproc handler thread

fix: split inproc handler thread #3609

Workflow file for this run

name: CI
on:
push:
branches:
- master
- "release/**"
paths-ignore:
- "*.md"
pull_request:
paths-ignore:
- "*.md"
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
lint:
name: Lint
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: make style
build-ios:
name: Xcode Build for iOS
runs-on: macos-latest
steps:
- uses: actions/checkout@v4
with:
submodules: "recursive"
- run: |
cmake -B sentry-native-xcode -GXcode -DCMAKE_SYSTEM_NAME=iOS
xcodebuild build -project sentry-native-xcode/Sentry-Native.xcodeproj -sdk iphonesimulator
test:
strategy:
fail-fast: false
matrix:
include:
# toolchain per runner-image availability:
# ubuntu 22.04
# GCC: 9-12
# clang: 11-15
# kcov: 9-12
# ubuntu 24.04
# GCC: 9-14
# clang: 16-20
# kcov: 9-14
# note:
# Since available GCCs on 22.04 are a strict
# subset of the ones available on 24.04, we
# run all GCC tests on the latter version.
- name: Linux (GCC 9.5.0, 32-bit)
os: ubuntu-24.04
CC: gcc-9
CXX: g++-9
TEST_X86: 1
- name: Linux (GCC 9.5.0)
os: ubuntu-24.04
CC: gcc-9
CXX: g++-9
- name: Linux (GCC 12.3.0)
os: ubuntu-24.04
CC: gcc-12
CXX: g++-12
- name: Linux Arm64 (GCC 14.2.0)
os: ubuntu-24.04-arm
CC: gcc-14
CXX: g++-14
- name: Linux (GCC 14.2.0)
os: ubuntu-24.04
CC: gcc-14
CXX: g++-14
- name: Linux Arm64 (GCC 14.2.0 + tsan)
os: ubuntu-24.04-arm
CC: gcc-14
CXX: g++-14
RUN_ANALYZER: tsan
- name: Linux (GCC 14.2.0 + tsan)
os: ubuntu-24.04
CC: gcc-14
CXX: g++-14
RUN_ANALYZER: tsan
- name: Linux (clang 11)
os: ubuntu-22.04
CC: clang-11
CXX: clang++-11
- name: Linux (clang 20 + asan + llvm-cov)
os: ubuntu-24.04
CC: clang-20
CXX: clang++-20
ERROR_ON_WARNINGS: 1
RUN_ANALYZER: asan,llvm-cov
- name: Linux Arm64 (clang 20 + asan + llvm-cov)
os: ubuntu-24.04-arm
CC: clang-20
CXX: clang++-20
ERROR_ON_WARNINGS: 1
RUN_ANALYZER: asan,llvm-cov
- name: Linux (clang 20 + tsan)
os: ubuntu-24.04
CC: clang-20
CXX: clang++-20
ERROR_ON_WARNINGS: 1
RUN_ANALYZER: tsan
- name: Linux Arm64 (clang 20 + tsan)
os: ubuntu-24.04-arm
CC: clang-20
CXX: clang++-20
ERROR_ON_WARNINGS: 1
RUN_ANALYZER: tsan
- name: Linux (clang 20 + kcov)
os: ubuntu-24.04
CC: clang-20
CXX: clang++-20
ERROR_ON_WARNINGS: 1
RUN_ANALYZER: kcov
- name: Linux (GCC 13.3.0 + code-checker + valgrind)
CC: gcc-13
CXX: g++-13
os: ubuntu-24.04
RUN_ANALYZER: code-checker,valgrind
- name: Linux (GCC + musl + libunwind)
os: ubuntu-latest
container: ghcr.io/getsentry/sentry-native-alpine:3.21
CMAKE_DEFINES: -DSENTRY_LIBUNWIND_SHARED=OFF
CC: gcc
CXX: g++
SYSTEM_PYTHON: 1
- name: Linux (clang + musl + libunwind)
os: ubuntu-latest
container: ghcr.io/getsentry/sentry-native-alpine:3.21
CMAKE_DEFINES: -DSENTRY_LIBUNWIND_SHARED=OFF
CC: clang
CXX: clang++
SYSTEM_PYTHON: 1
- name: macOS 14 (xcode llvm)
os: macos-14
ERROR_ON_WARNINGS: 1
SYSTEM_VERSION_COMPAT: 0
- name: macOS 26 (xcode llvm)
os: macos-26
ERROR_ON_WARNINGS: 1
SYSTEM_VERSION_COMPAT: 0
- name: macOS 14 (xcode llvm + universal)
os: macos-14
ERROR_ON_WARNINGS: 1
SYSTEM_VERSION_COMPAT: 0
CMAKE_DEFINES: -DCMAKE_OSX_ARCHITECTURES=arm64;x86_64
- name: macOS 15 (clang 18 + asan + llvm-cov)
os: macos-15-large
CC: clang
CXX: clang++
ERROR_ON_WARNINGS: 1
SYSTEM_VERSION_COMPAT: 0
RUN_ANALYZER: asan,llvm-cov
- name: Windows (old VS, 32-bit)
os: windows-2022
TEST_X86: 1
- name: Windows (latest)
os: windows-latest
- name: Windows (latest, UTF-8 paths)
os: windows-latest
UTF8_TEST_CWD: 1
- name: Windows ClangCL (latest)
os: windows-latest
VS_GENERATOR_TOOLSET: ClangCL
- name: LLVM-Mingw
os: windows-latest
TEST_MINGW: 1
MINGW_PKG_PREFIX: x86_64-w64-mingw32
MINGW_ASM_MASM_COMPILER: llvm-ml
MINGW_ASM_MASM_FLAGS: -m64
# The Android emulator is currently only available on macos, see:
# https://docs.microsoft.com/en-us/azure/devops/pipelines/ecosystems/android?view=azure-devops#test-on-the-android-emulator
# TODO: switch to reactivecircus/android-emulator-runner, concurrently running emulators continuously fail now.
# - name: Android (API 31, NDK 23)
# os: macos-15-large
# ANDROID_API: 31
# ANDROID_NDK: 23.2.8568313
# ANDROID_ARCH: x86_64
- name: Android (API 35, NDK 27)
os: macos-15-large
ANDROID_API: 35
ANDROID_NDK: 27.2.12479018
ANDROID_ARCH: x86_64
name: ${{ matrix.name }}
runs-on: ${{ matrix.os }}
container: ${{ matrix.container }}
env:
CC: ${{ matrix.CC }}
CXX: ${{ matrix.CXX }}
TEST_X86: ${{ matrix.TEST_X86 }}
TEST_MINGW: ${{ matrix.TEST_MINGW }}
ERROR_ON_WARNINGS: ${{ matrix.ERROR_ON_WARNINGS }}
RUN_ANALYZER: ${{ matrix.RUN_ANALYZER }}
ANDROID_API: ${{ matrix.ANDROID_API }}
ANDROID_NDK: ${{ matrix.ANDROID_NDK }}
ANDROID_ARCH: ${{ matrix.ANDROID_ARCH }}
CMAKE_DEFINES: ${{ matrix.CMAKE_DEFINES }}
SYSTEM_VERSION_COMPAT: ${{ matrix.SYSTEM_VERSION_COMPAT }}
VS_GENERATOR_TOOLSET: ${{ matrix.VS_GENERATOR_TOOLSET }}
SYSTEM_PYTHON: ${{ matrix.SYSTEM_PYTHON }}
UTF8_TEST_CWD: ${{ matrix.UTF8_TEST_CWD }}
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
- uses: actions/setup-python@v5
with:
python-version: ${{ !env['SYSTEM_PYTHON'] && '3.12' || '' }}
cache: "pip"
- name: Check Linux CC/CXX
if: ${{ runner.os == 'Linux' && !matrix.container }}
run: |
[ -n "$CC" ] && [ -n "$CXX" ] || { echo "Ubuntu runner configurations require toolchain selection via CC and CXX" >&2; exit 1; }
- name: Installing Linux Dependencies
if: ${{ runner.os == 'Linux' && !env['TEST_X86'] && !matrix.container }}
run: |
sudo apt update
# Install common dependencies
sudo apt install cmake llvm valgrind zlib1g-dev libcurl4-openssl-dev libunwind-dev
# For GCC, install both gcc-X and g++-X. For Clang, only install clang-X (includes C++ compiler)
if [[ "$CC" == gcc-* ]]; then
sudo apt install "${CC}" "${CXX}"
elif [[ "$CC" == clang-* ]]; then
sudo apt install "${CC}"
else
echo "Unknown CC: $CC" >&2
exit 1
fi
- name: Installing kcov dependencies
if: ${{ contains(env['RUN_ANALYZER'], 'kcov') }}
run: |
# Install kcov from source
sudo apt-get install binutils-dev libssl-dev libelf-dev libstdc++-14-dev libdw-dev libiberty-dev
git clone https://github.com/SimonKagstrom/kcov.git
cd kcov
# pin to a known good version with the coveralls git integration and performance bottlenecks fixed
git checkout b370df05ccc96facfd83a9e101e35263457b8035
mkdir build
cd build
cmake ..
make
sudo make install
- name: Installing Linux 32-bit Dependencies
if: ${{ runner.os == 'Linux' && env['TEST_X86'] && !matrix.container }}
run: |
sudo dpkg --add-architecture i386
sudo apt update
sudo apt install cmake "${CC}-multilib" "${CXX}-multilib" zlib1g-dev:i386 libssl-dev:i386 libcurl4-openssl-dev:i386 libunwind-dev:i386 liblzma-dev:i386
- name: Installing Alpine Linux Dependencies
if: ${{ contains(matrix.container, 'alpine') }}
run: |
apk update
apk add curl-dev libunwind-dev libunwind-static xz-dev
# install manually until available by default (also for future .NET updates)
- name: Install .NET 10 SDK for ARM64 runners
if: ${{ runner.os == 'Linux' && runner.arch == 'ARM64' && !matrix.container }}
run: |
wget https://dot.net/v1/dotnet-install.sh -O dotnet-install.sh
chmod +x dotnet-install.sh
./dotnet-install.sh --channel 10.0 --install-dir $HOME/.dotnet
echo "$HOME/.dotnet" >> $GITHUB_PATH
echo "DOTNET_ROOT=$HOME/.dotnet" >> $GITHUB_ENV
- name: Installing CodeChecker
if: ${{ contains(env['RUN_ANALYZER'], 'code-checker') }}
run: sudo snap install codechecker --classic
- name: Expose llvm@15 PATH for Mac
if: ${{ runner.os == 'macOS' }}
run: echo $(brew --prefix llvm@15)/bin >> $GITHUB_PATH
- name: Expose llvm@18 PATH for Mac
if: ${{ runner.os == 'macOS' && matrix.os == 'macos-15-large' && matrix.RUN_ANALYZER == 'asan,llvm-cov' }}
run: echo $(brew --prefix llvm@18)/bin >> $GITHUB_PATH
- name: Set macOS SDKROOT
if: ${{ runner.os == 'macOS' }}
run: echo "SDKROOT=$(xcrun --sdk macosx --show-sdk-path)" >> "$GITHUB_ENV"
- name: Remove Strawberry Perl from PATH
if: ${{ runner.os == 'Windows' }}
shell: powershell
run: |
$strawberryBins = @(
'C:\Strawberry\c\bin',
'C:\Strawberry\perl\site\bin',
'C:\Strawberry\perl\bin'
)
$cleanedPaths = $env:Path -split ';' | Where-Object { $_ -and ($strawberryBins -notcontains $_) }
$newPath = ($cleanedPaths -join ';')
"PATH=$newPath" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
- name: Installing LLVM-MINGW Dependencies
if: ${{ runner.os == 'Windows' && env['TEST_MINGW'] }}
shell: powershell
env:
MINGW_PKG_PREFIX: ${{ matrix.MINGW_PKG_PREFIX }}
MINGW_ASM_MASM_COMPILER: ${{ matrix.MINGW_ASM_MASM_COMPILER }}
MINGW_ASM_MASM_FLAGS: ${{ matrix.MINGW_ASM_MASM_FLAGS }}
run: . "scripts\install-llvm-mingw.ps1"
- name: Set up zlib for Windows
if: ${{ runner.os == 'Windows' }}
shell: powershell
run: . "scripts\install-zlib.ps1"
- name: Setup Java Version
if: ${{ env['ANDROID_API'] }}
uses: actions/setup-java@v4
with:
distribution: "temurin"
java-version: "17"
- name: Setup Gradle
if: ${{ env['ANDROID_API'] }}
uses: gradle/actions/setup-gradle@579fbbe7221704325eb4c4d4bf20c2b0859fba76 # pin@v3
with:
gradle-home-cache-cleanup: true
- name: Starting Android Simulator
if: ${{ env['ANDROID_API'] }}
run: bash scripts/start-android.sh
timeout-minutes: 20
- name: Add sentry.native.test hostname
if: ${{ runner.os == 'Windows' }}
# The path is usually C:\Windows\System32\drivers\etc\hosts
run: |
Add-Content -Path $env:SystemRoot\System32\drivers\etc\hosts -Value "127.0.0.1 sentry.native.test"
shell: powershell
- name: Print hosts file
if: ${{ runner.os == 'Windows' }}
run: type $env:SystemRoot\System32\drivers\etc\hosts
shell: powershell
- name: Add sentry.native.test hostname
if: ${{ runner.os == 'macOS' || runner.os == 'Linux' }}
run: |
echo "127.0.0.1 sentry.native.test" | sudo tee -a /etc/hosts
# remove "::1 localhost ..." to avoid conflicts with proxy tests (musl)
sed '/^::1/d' /etc/hosts | sudo tee /etc/hosts
cat /etc/hosts
shell: bash
- name: Test
shell: bash
run: |
pip install --upgrade --requirement tests/requirements.txt
pytest --capture=no --verbose tests
- name: Check NDK
if: ${{ env['ANDROID_API'] }}
working-directory: ndk
run: make check
- name: "Upload to codecov.io"
if: ${{ contains(env['RUN_ANALYZER'], 'cov') }}
uses: codecov/codecov-action@ad3126e916f78f00edff4ed0317cf185271ccc2d # pin@v5.4.2
with:
directory: coverage
token: ${{ secrets.CODECOV_TOKEN }}
fail_ci_if_error: false
verbose: true
archive:
name: Create Release Archive
runs-on: ubuntu-latest
needs: [lint, test]
# only run this on pushes, combined with the CI triggers, this will only
# run on master or the release branch
if: ${{ needs.test.result == 'success' && github.event_name == 'push' }}
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
- name: Setup Java Version
uses: actions/setup-java@v4
with:
distribution: "temurin"
java-version: "17"
- name: Setup Gradle
uses: gradle/actions/setup-gradle@579fbbe7221704325eb4c4d4bf20c2b0859fba76 # pin@v3
with:
gradle-home-cache-cleanup: true
- name: Create source archive
run: |
rm -rf build .c* .e* .git* scripts Makefile external/breakpad/src/tools external/breakpad/src/processor
zip -r sentry-native.zip .
- name: Build NDK artifacts
working-directory: ndk
run: ./gradlew clean distZip
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: ${{ github.sha }}
if-no-files-found: error
path: |
sentry-native.zip
ndk/lib/build/distributions/*.zip
ndk/lib/build/intermediates/merged_native_libs/release/mergeReleaseNativeLibs/out/lib/*