feat: add breadcrumb ringbuffer to avoid O(n) memmove #1638
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: CI | |
on: | |
push: | |
branches: | |
- master | |
- "release/**" | |
pull_request: | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.ref }} | |
cancel-in-progress: true | |
jobs: | |
lint: | |
name: Lint | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- run: | | |
sudo apt update | |
sudo apt install clang-format-15 | |
make style-15 | |
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: | |
- name: Linux (old gcc, 32-bit) | |
os: ubuntu-20.04 | |
CC: gcc-7 | |
CXX: g++-7 | |
TEST_X86: 1 | |
- name: Linux (new gcc) | |
os: ubuntu-22.04 | |
CC: gcc-12 | |
CXX: g++-12 | |
# ERROR_ON_WARNINGS: 1 | |
# The GCC analyzer 10.0.1 (as on CI) has an internal compiler error | |
# currently, and is not stable enough to activate. | |
# RUN_ANALYZER: gcc | |
- name: Linux (clang + asan + llvm-cov) | |
os: ubuntu-22.04 | |
CC: clang-15 | |
CXX: clang++-15 | |
ERROR_ON_WARNINGS: 1 | |
RUN_ANALYZER: asan,llvm-cov | |
- name: Linux (clang + kcov) | |
os: ubuntu-22.04 | |
CC: clang-15 | |
CXX: clang++-15 | |
ERROR_ON_WARNINGS: 1 | |
RUN_ANALYZER: kcov | |
- name: Linux (gcc + code-checker + valgrind) | |
os: ubuntu-22.04 | |
RUN_ANALYZER: code-checker,valgrind | |
- name: macOS (xcode llvm) | |
os: macOs-14 | |
ERROR_ON_WARNINGS: 1 | |
SYSTEM_VERSION_COMPAT: 0 | |
- name: macOS 13 (xcode llvm) | |
os: macOs-13 | |
ERROR_ON_WARNINGS: 1 | |
SYSTEM_VERSION_COMPAT: 0 | |
- name: macOS (xcode llvm + universal) | |
os: macOs-14 | |
ERROR_ON_WARNINGS: 1 | |
SYSTEM_VERSION_COMPAT: 0 | |
CMAKE_DEFINES: -DCMAKE_OSX_ARCHITECTURES=arm64;x86_64 | |
- name: macOS (clang + asan + llvm-cov) | |
os: macOs-12 | |
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-2019 | |
TEST_X86: 1 | |
- name: Windows (latest) | |
os: windows-latest | |
- name: LLVM-Mingw | |
os: windows-latest | |
TEST_MINGW: 1 | |
MINGW_PKG_PREFIX: x86_64-w64-mingw32 | |
MINGW_ASM_MASM_COMPILER: llvm-ml;-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 | |
- name: Android (old API/NDK) | |
os: macOs-12 | |
ANDROID_API: 16 | |
ANDROID_NDK: 20.1.5948944 | |
ANDROID_ARCH: x86 | |
- name: Android (new API/NDK) | |
os: macOs-12 | |
ANDROID_API: 34 | |
ANDROID_NDK: 26.1.10909125 | |
ANDROID_ARCH: x86_64 | |
name: ${{ matrix.name }} | |
runs-on: ${{ matrix.os }} | |
env: | |
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 }} | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
submodules: recursive | |
- uses: actions/setup-python@v5 | |
with: | |
python-version: "3.11" | |
cache: "pip" | |
- name: Installing Linux Dependencies | |
if: ${{ runner.os == 'Linux' && !env['TEST_X86'] }} | |
run: | | |
sudo apt update | |
sudo apt install cmake clang-14 clang-tools llvm kcov g++-12 valgrind zlib1g-dev libcurl4-openssl-dev | |
- name: Installing Linux 32-bit Dependencies | |
if: ${{ runner.os == 'Linux' && env['TEST_X86'] }} | |
run: | | |
sudo dpkg --add-architecture i386 | |
sudo apt update | |
sudo apt install cmake gcc-7-multilib g++-7-multilib zlib1g-dev:i386 libssl-dev:i386 libcurl4-openssl-dev:i386 | |
# https://github.com/actions/runner-images/issues/9491 | |
- name: Decrease vm.mmap_rnd_bit to prevent ASLR ASAN issues | |
if: ${{ runner.os == 'Linux' && contains(env['RUN_ANALYZER'], 'asan') }} | |
run: sudo sysctl vm.mmap_rnd_bits=28 | |
- name: Installing CodeChecker | |
if: ${{ contains(env['RUN_ANALYZER'], 'code-checker') }} | |
run: sudo snap install codechecker --classic | |
- name: Expose llvm PATH for Mac | |
if: ${{ runner.os == 'macOS' }} | |
run: echo $(brew --prefix llvm@15)/bin >> $GITHUB_PATH | |
- 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 }} | |
run: . "scripts\install-llvm-mingw.ps1" | |
- name: Set up zlib for Windows | |
if: ${{ runner.os == 'Windows' }} | |
shell: powershell | |
run: . "scripts\install-zlib.ps1" | |
- name: Installing Android SDK Dependencies | |
if: ${{ env['ANDROID_API'] }} | |
run: | | |
export ANDROID_IMAGE="system-images;android-$ANDROID_API;google_apis;$ANDROID_ARCH" | |
echo "Downloading ndk;$ANDROID_NDK and $ANDROID_IMAGE" | |
echo "y" | $ANDROID_HOME/tools/bin/sdkmanager --install \ | |
"ndk;$ANDROID_NDK" "$ANDROID_IMAGE" | \ | |
grep -v "\[=" || true # suppress the progress bar, so we get meaningful logs | |
- name: Starting Android Simulator | |
if: ${{ env['ANDROID_API'] }} | |
run: bash scripts/start-android.sh | |
timeout-minutes: 10 | |
- name: Test | |
shell: bash | |
run: | | |
pip install --upgrade --requirement tests/requirements.txt | |
[ "${{ matrix.CC }}" ] && export CC="${{ matrix.CC }}" | |
[ "${{ matrix.CXX }}" ] && export CXX="${{ matrix.CXX }}" | |
pytest --capture=no --verbose tests | |
- name: "Upload to codecov.io" | |
if: ${{ contains(env['RUN_ANALYZER'], 'cov') }} | |
uses: codecov/codecov-action@e28ff129e5465c2c0dcc6f003fc735cb6ae0c673 # pin@v4.5.0 | |
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: | | |
ndk/lib/build/distributions/*.zip | |
sentry-native.zip |