fix(native): external crash reporter #4429
Workflow file for this run
This file contains hidden or 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: | |
| push: | |
| branches: | |
| - master | |
| - "release/**" | |
| paths-ignore: | |
| - "*.md" | |
| pull_request: | |
| paths-ignore: | |
| - "*.md" | |
| workflow_dispatch: | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.ref }} | |
| cancel-in-progress: true | |
| jobs: | |
| lint: | |
| name: Lint | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - run: make style | |
| build-ios-inproc: | |
| name: Xcode Build for inproc on iOS | |
| runs-on: macos-latest | |
| steps: | |
| - uses: actions/checkout@v6 | |
| with: | |
| submodules: "recursive" | |
| - run: | | |
| cmake -B sentry-native-xcode -GXcode -DCMAKE_SYSTEM_NAME=iOS -DSENTRY_BACKEND=inproc | |
| xcodebuild build -project sentry-native-xcode/Sentry-Native.xcodeproj -sdk iphonesimulator | |
| build-ios-breakpad: | |
| name: Xcode Build for breakpad on iOS | |
| runs-on: macos-latest | |
| steps: | |
| - uses: actions/checkout@v6 | |
| with: | |
| submodules: "recursive" | |
| - run: | | |
| cmake -B sentry-native-xcode -GXcode -DCMAKE_SYSTEM_NAME=iOS -DSENTRY_BACKEND=breakpad | |
| 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 | |
| CC: gcc | |
| CXX: g++ | |
| SYSTEM_PYTHON: 1 | |
| - name: Linux (clang + musl + libunwind) | |
| os: ubuntu-latest | |
| container: ghcr.io/getsentry/sentry-native-alpine:3.21 | |
| 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: macOS 26 (arm64e + PAC test) | |
| os: macos-26 | |
| ERROR_ON_WARNINGS: 1 | |
| SYSTEM_VERSION_COMPAT: 0 | |
| CMAKE_DEFINES: -DCMAKE_OSX_ARCHITECTURES=arm64e | |
| - name: Windows (old VS, 32-bit) | |
| os: windows-2022 | |
| TEST_X86: 1 | |
| - name: Windows (latest) | |
| os: windows-latest | |
| - name: Windows arm64 | |
| os: windows-11-arm | |
| - 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 | |
| - name: Android (API 21, NDK 23) | |
| os: ubuntu-latest | |
| ANDROID_API: 21 | |
| ANDROID_NDK: 23.2.8568313 | |
| ANDROID_ARCH: x86_64 | |
| - name: Android (API 26, NDK 27) | |
| os: ubuntu-latest | |
| ANDROID_API: 26 | |
| ANDROID_NDK: 27.3.13750724 | |
| ANDROID_ARCH: x86_64 | |
| - name: Android (API 31, NDK 27) | |
| os: ubuntu-latest | |
| ANDROID_API: 31 | |
| ANDROID_NDK: 27.3.13750724 | |
| ANDROID_ARCH: x86_64 | |
| - name: Android (API 35, NDK 29) | |
| os: macos-15-large | |
| ANDROID_API: 35 | |
| ANDROID_NDK: 29.0.14206865 | |
| 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@v6 | |
| with: | |
| submodules: recursive | |
| - name: Debug runner architecture | |
| if: ${{ runner.os == 'macOS' }} | |
| run: | | |
| echo "Runner arch: $(uname -m)" | |
| - uses: actions/setup-python@v6 | |
| with: | |
| python-version: ${{ !env['SYSTEM_PYTHON'] && '3.12' || '' }} | |
| cache: "pip" | |
| - name: Check Linux CC/CXX | |
| if: ${{ runner.os == 'Linux' && !env['ANDROID_API'] &&!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'] && !env['ANDROID_API'] && !matrix.container }} | |
| run: | | |
| sudo apt update | |
| # Install common dependencies | |
| sudo apt install cmake llvm valgrind zlib1g-dev libcurl4-openssl-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'] && !env['ANDROID_API'] &&!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 liblzma-dev:i386 | |
| - name: Installing Alpine Linux Dependencies | |
| if: ${{ contains(matrix.container, 'alpine') }} | |
| run: | | |
| apk update | |
| apk add curl-dev 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@v5 | |
| with: | |
| distribution: "temurin" | |
| java-version: "17" | |
| - name: Setup Gradle | |
| if: ${{ env['ANDROID_API'] }} | |
| uses: gradle/actions/setup-gradle@03ee1e1693f571d64506b3ed4cdf120520300ff2 # pin@v3 | |
| with: | |
| gradle-home-cache-cleanup: true | |
| - name: Setup .NET for Android | |
| if: ${{ env['ANDROID_API'] }} | |
| uses: actions/setup-dotnet@v5 | |
| with: | |
| dotnet-version: '10.0.x' | |
| - name: Install .NET Android workload | |
| if: ${{ env['ANDROID_API'] }} | |
| run: dotnet workload restore tests/fixtures/dotnet_signal/test_dotnet.csproj | |
| - name: Enable KVM group perms | |
| if: ${{ runner.os == 'Linux' && env['ANDROID_API'] }} | |
| run: | | |
| echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules | |
| sudo udevadm control --reload-rules | |
| sudo udevadm trigger --name-match=kvm | |
| - 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 (Android) | |
| if: ${{ env['ANDROID_API'] }} | |
| uses: reactivecircus/android-emulator-runner@e89f39f1abbbd05b1113a29cf4db69e7540cae5a # v2.37.0 | |
| with: | |
| api-level: ${{ env.ANDROID_API }} | |
| ndk: ${{ env.ANDROID_NDK }} | |
| arch: ${{ env.ANDROID_ARCH }} | |
| target: google_apis | |
| emulator-boot-timeout: 1200 | |
| script: | | |
| # Sync emulator clock with host to avoid timestamp assertion failures | |
| adb shell cmd alarm set-time $(date +%s000) || adb shell su root date $(date -u +%m%d%H%M%Y.%S) | |
| pip install --upgrade --requirement tests/requirements.txt | |
| pytest --capture=no --verbose tests | |
| - name: Test | |
| if: ${{ !env['ANDROID_API'] }} | |
| 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@671740ac38dd9b0130fbe1cec585b89eea48d3de # pin@v5.5.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@v6 | |
| with: | |
| submodules: recursive | |
| - name: Setup Java Version | |
| uses: actions/setup-java@v5 | |
| with: | |
| distribution: "temurin" | |
| java-version: "17" | |
| - name: Setup Gradle | |
| uses: gradle/actions/setup-gradle@03ee1e1693f571d64506b3ed4cdf120520300ff2 # 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@v7 | |
| 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/* |