Skip to content

Commit 44d8bfa

Browse files
committed
Merge branch 'main' into markushi/feat/anr-profiling
2 parents 3d502b8 + 0d66c0b commit 44d8bfa

File tree

62 files changed

+2144
-519
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

62 files changed

+2144
-519
lines changed

.github/workflows/codeql-analysis.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ jobs:
3636
cache-encryption-key: ${{ secrets.GRADLE_ENCRYPTION_KEY }}
3737

3838
- name: Initialize CodeQL
39-
uses: github/codeql-action/init@45cbd0c69e560cd9e7cd7f8c32362050c9b7ded2 # pin@v2
39+
uses: github/codeql-action/init@89a39a4e59826350b863aa6b6252a07ad50cf83e # pin@v2
4040
with:
4141
languages: 'java'
4242

@@ -45,4 +45,4 @@ jobs:
4545
./gradlew buildForCodeQL --no-build-cache
4646
4747
- name: Perform CodeQL Analysis
48-
uses: github/codeql-action/analyze@45cbd0c69e560cd9e7cd7f8c32362050c9b7ded2 # pin@v2
48+
uses: github/codeql-action/analyze@89a39a4e59826350b863aa6b6252a07ad50cf83e # pin@v2

.github/workflows/release.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ jobs:
3434
fetch-depth: 0
3535
submodules: 'recursive'
3636
- name: Prepare release
37-
uses: getsentry/craft@63d1636bead951f6e034ed62c2a3610965fef010 # v2
37+
uses: getsentry/craft@41defb379de52e5f0e3943944fa5575b22fb9f92 # v2
3838
env:
3939
GITHUB_TOKEN: ${{ steps.token.outputs.token }}
4040
with:

AGENTS.md

Lines changed: 168 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,168 @@
1+
# AGENTS.md
2+
3+
This file provides guidance to AI coding agents when working with code in this repository.
4+
5+
## STOP — Required Reading (Do This First)
6+
7+
Before doing ANYTHING else (including answering questions), you MUST use the Read tool to load these files:
8+
1. `.cursor/rules/coding.mdc`
9+
2. `.cursor/rules/overview_dev.mdc`
10+
11+
Then identify and read any topically relevant `.cursor/rules/*.mdc` files for the area you're working on (e.g., `opentelemetry.mdc` for OTel work, `metrics.mdc` for metrics work). Use the Glob tool on `.cursor/rules/*.mdc` to discover available rule files.
12+
13+
Do NOT skip this step. Do NOT proceed without reading these files first.
14+
15+
## Project Overview
16+
17+
This is the Sentry Java/Android SDK - a comprehensive error monitoring and performance tracking SDK for Java and Android applications. The repository contains multiple modules for different integrations and platforms.
18+
19+
## Build System
20+
21+
The project uses **Gradle** with Kotlin DSL. Key build files:
22+
- `build.gradle.kts` - Root build configuration
23+
- `settings.gradle.kts` - Multi-module project structure
24+
- `buildSrc/` and `build-logic/` - Custom build logic and plugins
25+
- `Makefile` - High-level build commands
26+
27+
## Essential Commands
28+
29+
### Development Workflow
30+
```bash
31+
# Format code and regenerate .api files (REQUIRED before committing)
32+
./gradlew spotlessApply apiDump
33+
34+
# Run all tests and linter
35+
./gradlew check
36+
37+
# Build entire project
38+
./gradlew build
39+
40+
# Create coverage reports
41+
./gradlew jacocoTestReport koverXmlReportRelease
42+
43+
# Generate documentation
44+
./gradlew aggregateJavadocs
45+
```
46+
47+
### Testing
48+
```bash
49+
# Run unit tests for a specific file
50+
./gradlew ':<module>:testDebugUnitTest' --tests="*<file name>*" --info
51+
52+
# Run system tests (requires Python virtual env)
53+
make systemTest
54+
55+
# Run specific test suites
56+
./gradlew :sentry-android-core:testDebugUnitTest
57+
./gradlew :sentry:test
58+
```
59+
60+
### Code Quality
61+
```bash
62+
# Check code formatting
63+
./gradlew spotlessJavaCheck spotlessKotlinCheck
64+
65+
# Apply code formatting
66+
./gradlew spotlessApply
67+
68+
# Update API dump files (after API changes)
69+
./gradlew apiDump
70+
71+
# Dependency updates check
72+
./gradlew dependencyUpdates -Drevision=release
73+
```
74+
75+
### Android-Specific Commands
76+
```bash
77+
# Assemble Android test APKs
78+
./gradlew :sentry-android-integration-tests:sentry-uitest-android:assembleRelease
79+
./gradlew :sentry-android-integration-tests:sentry-uitest-android:assembleAndroidTest -DtestBuildType=release
80+
81+
# Run critical UI tests
82+
./scripts/test-ui-critical.sh
83+
```
84+
85+
## Development Workflow Rules
86+
87+
### Planning and Implementation Process
88+
1. **First think through the problem**: Read the codebase for relevant files and propose a plan
89+
2. **Check in before beginning**: Verify the plan before starting implementation
90+
3. **Use todo tracking**: Work through todo items, marking them as complete as you go
91+
4. **High-level communication**: Give high-level explanations of changes made, not step-by-step descriptions
92+
5. **Simplicity first**: Make every task and code change as simple as possible. Avoid massive or complex changes. Impact as little code as possible.
93+
6. **Format and regenerate**: Once done, format code and regenerate .api files: `./gradlew spotlessApply apiDump`
94+
7. **Propose commit**: As final step, git stage relevant files and propose (but not execute) a single git commit command
95+
96+
## Module Architecture
97+
98+
The repository is organized into multiple modules:
99+
100+
### Core Modules
101+
- **`sentry`** - Core Java SDK implementation
102+
- **`sentry-android-core`** - Core Android SDK implementation
103+
- **`sentry-android`** - High-level Android SDK
104+
105+
### Integration Modules
106+
- **Spring Framework**: `sentry-spring*`, `sentry-spring-boot*`
107+
- **Logging**: `sentry-logback`, `sentry-log4j2`, `sentry-jul`
108+
- **Web**: `sentry-servlet*`, `sentry-okhttp`, `sentry-apache-http-client-5`
109+
- **GraphQL**: `sentry-graphql*`, `sentry-apollo*`
110+
- **Android UI**: `sentry-android-fragment`, `sentry-android-navigation`, `sentry-compose`
111+
- **Reactive**: `sentry-reactor`, `sentry-ktor-client`
112+
- **Monitoring**: `sentry-opentelemetry*`, `sentry-quartz`
113+
114+
### Utility Modules
115+
- **`sentry-test-support`** - Shared test utilities
116+
- **`sentry-system-test-support`** - System testing infrastructure
117+
- **`sentry-samples`** - Example applications
118+
- **`sentry-bom`** - Bill of Materials for dependency management
119+
120+
### Key Architectural Patterns
121+
- **Multi-platform**: Supports JVM, Android, and Kotlin Multiplatform (Compose modules)
122+
- **Modular Design**: Each integration is a separate module with minimal dependencies
123+
- **Options Pattern**: Features are opt-in via `SentryOptions` and similar configuration classes
124+
- **Transport Layer**: Pluggable transport implementations for different environments
125+
- **Scope Management**: Thread-safe scope/context management for error tracking
126+
127+
## Development Guidelines
128+
129+
### Code Style
130+
- **Languages**: Java 8+ and Kotlin
131+
- **Formatting**: Enforced via Spotless - always run `./gradlew spotlessApply` before committing
132+
- **API Compatibility**: Binary compatibility is enforced - run `./gradlew apiDump` after API changes
133+
134+
### Testing Requirements
135+
- Write comprehensive unit tests for new features
136+
- Android modules require both unit tests and instrumented tests where applicable
137+
- System tests validate end-to-end functionality with sample applications
138+
- Coverage reports are generated for both JaCoCo (Java/Android) and Kover (KMP modules)
139+
140+
### Contributing Guidelines
141+
1. Follow existing code style and language
142+
2. Do not modify API files (e.g. sentry.api) manually - run `./gradlew apiDump` to regenerate them
143+
3. Write comprehensive tests
144+
4. New features must be **opt-in by default** - extend `SentryOptions` or similar Option classes with getters/setters
145+
5. Consider backwards compatibility
146+
147+
### Getting PR Information
148+
149+
Use `gh pr view` to get PR details from the current branch. This is needed when adding changelog entries, which require the PR number.
150+
151+
```bash
152+
# Get PR number for current branch
153+
gh pr view --json number -q '.number'
154+
155+
# Get PR number for a specific branch
156+
gh pr view <branch-name> --json number -q '.number'
157+
158+
# Get PR URL
159+
gh pr view --json url -q '.url'
160+
```
161+
162+
## Useful Resources
163+
164+
- Main SDK documentation: https://develop.sentry.dev/sdk/overview/
165+
- Internal contributing guide: https://docs.sentry.io/internal/contributing/
166+
- Git commit message conventions: https://develop.sentry.dev/engineering-practices/commit-messages/
167+
168+
This SDK is production-ready and used by thousands of applications. Changes should be thoroughly tested and maintain backwards compatibility.

CHANGELOG.md

Lines changed: 41 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,56 @@
44

55
### Features
66

7+
- Add screenshot masking support using view hierarchy ([#5077](https://github.com/getsentry/sentry-java/pull/5077))
8+
- Masks sensitive content (text, images) in error screenshots using the same view hierarchy approach as Session Replay
9+
- Requires the `sentry-android-replay` module to be present at runtime for masking to work
10+
- Enable via code:
11+
```kotlin
12+
SentryAndroid.init(context) { options ->
13+
options.isAttachScreenshot = true
14+
options.screenshot.setMaskAllText(true)
15+
options.screenshot.setMaskAllImages(true)
16+
// Or mask specific view classes
17+
options.screenshot.addMaskViewClass("com.example.MyCustomView")
18+
}
19+
```
20+
- Or via `AndroidManifest.xml`:
21+
```xml
22+
<meta-data android:name="io.sentry.attach-screenshot" android:value="true" />
23+
<meta-data android:name="io.sentry.screenshot.mask-all-text" android:value="true" />
24+
<meta-data android:name="io.sentry.screenshot.mask-all-images" android:value="true" />
25+
```
26+
27+
### Fixes
28+
29+
- Fix crash when unregistering `SystemEventsBroadcastReceiver` with try-catch block. ([#5106](https://github.com/getsentry/sentry-java/pull/5106))
30+
31+
## 8.33.0
32+
33+
### Features
34+
735
- Add `installGroupsOverride` parameter to Build Distribution SDK for programmatic filtering, with support for configuration via properties file using `io.sentry.distribution.install-groups-override` ([#5066](https://github.com/getsentry/sentry-java/pull/5066))
836
- Add new experimental option to capture profiles for ANRs ([#4899](https://github.com/getsentry/sentry-java/pull/4899))
937
- This feature will capture a stack profile of the main thread when it gets unresponsive
1038
- The profile gets attached to the ANR event on the next app start, providing a flamegraph of the ANR issue on the sentry issue details page
1139
- Breaking change: if the ANR stacktrace contains only system frames (e.g. `java.lang` or `android.os`), a static fingerprint is set on the ANR event, causing all ANR events to be grouped into a single issue, reducing the overall ANR issue noise
1240
- Enable via `options.setEnableAnrProfiling(true)` or Android manifest: `<meta-data android:name="io.sentry.anr.profiling.enable" android:value="true" />`
1341

42+
### Fixes
43+
44+
- When merging tombstones with Native SDK, use the tombstone message if the Native SDK didn't explicitly provide one. ([#5095](https://github.com/getsentry/sentry-java/pull/5095))
45+
- Fix thread leak caused by eager creation of `SentryExecutorService` in `SentryOptions` ([#5093](https://github.com/getsentry/sentry-java/pull/5093))
46+
- There were cases where we created options that ended up unused but we failed to clean those up.
47+
- Attach user attributes to logs and metrics regardless of `sendDefaultPii` ([#5099](https://github.com/getsentry/sentry-java/pull/5099))
48+
- No longer log a warning if a logging integration cannot initialize Sentry due to missing DSN ([#5075](https://github.com/getsentry/sentry-java/pull/5075))
49+
- While this may have been useful to some, it caused lots of confusion.
50+
- Session Replay: Add `androidx.camera.view.PreviewView` to default `maskedViewClasses` to mask camera previews by default. ([#5097](https://github.com/getsentry/sentry-java/pull/5097))
51+
1452
### Dependencies
1553

16-
- Bump Native SDK from v0.12.4 to v0.12.6 ([#5071](https://github.com/getsentry/sentry-java/pull/5071))
17-
- [changelog](https://github.com/getsentry/sentry-native/blob/master/CHANGELOG.md#0126)
18-
- [diff](https://github.com/getsentry/sentry-native/compare/0.12.4...0.12.6)
54+
- Bump Native SDK from v0.12.4 to v0.12.7 ([#5071](https://github.com/getsentry/sentry-java/pull/5071), [#5098](https://github.com/getsentry/sentry-java/pull/5098))
55+
- [changelog](https://github.com/getsentry/sentry-native/blob/master/CHANGELOG.md#0127)
56+
- [diff](https://github.com/getsentry/sentry-native/compare/0.12.4...0.12.7)
1957

2058
### Internal
2159

0 commit comments

Comments
 (0)