Skip to content

Commit 047d93a

Browse files
authored
Merge branch 'main' into add-pr-template
2 parents 729fc22 + 1df7eb6 commit 047d93a

File tree

22 files changed

+470
-279
lines changed

22 files changed

+470
-279
lines changed

.cursor/rules/new_module.mdc

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
---
2+
description: Module Addition Rules for sentry-java
3+
alwaysApply: false
4+
---
5+
# Module Addition Rules for sentry-java
6+
7+
## Overview
8+
9+
This document outlines the complete process for adding a new module to the sentry-java repository. Follow these steps in order to ensure proper integration and release management.
10+
11+
## Step-by-Step Process
12+
13+
### 1. Create the Module Structure
14+
15+
1. Create the new module, conforming to the existing naming conventions and build scripts
16+
17+
2. Add the module to the include list in `settings.gradle.kts`
18+
19+
If adding a `sentry-samples` module, also add it to the `ignoredProjects` list in the root `build.gradle.kts`:
20+
21+
```kotlin
22+
ignoredProjects.addAll(
23+
listOf(
24+
// ... existing projects ...
25+
"sentry-samples-{module-name}"
26+
)
27+
)
28+
```
29+
30+
3. If adding a JVM sample, add E2E (system) tests, following the structure we have in the existing JVM examples.
31+
The test should then be added to `test/system-test-runner.py` and `.github/workflows/system-tests-backend.yml`.
32+
33+
### 2. Create Module Documentation
34+
35+
Create a `README.md` in the module directory with the following structure:
36+
37+
```markdown
38+
# sentry-{module-name}
39+
40+
This module provides an integration for [Technology/Framework Name].
41+
42+
Please consult the documentation on how to install and use this integration in the Sentry Docs for [Android](https://docs.sentry.io/platforms/android/integrations/{module-name}/) or [Java](https://docs.sentry.io/platforms/java/tracing/instrumentation/{module-name}/).
43+
```
44+
45+
The following tasks are required only when adding a module that isn't a sample.
46+
47+
### 3. Update Main README.md
48+
49+
Add the new module to the packages table in the main `README.md` with a placeholder link to the badge:
50+
51+
```markdown
52+
| sentry-{module-name} | [![Maven Central](https://maven-badges.herokuapp.com/maven-central/io.sentry/sentry-{module-name}/badge.svg)](https://maven-badges.herokuapp.com/maven-central/io.sentry/sentry-{module-name}) | |
53+
```
54+
55+
Note that the badge will only work after the module is released to Maven Central.
56+
57+
### 4. Add Documentation to docs.sentry.io
58+
59+
Add the necessary documentation to [docs.sentry.io](https://docs.sentry.io):
60+
- For Java modules: Add to Java platform docs, usually in integrations section
61+
- For Android modules: Add to Android platform docs, usually in integrations section
62+
- Include installation instructions, configuration options, and usage examples
63+
64+
### 5. Post release tasks
65+
66+
Remind the user to perform the following tasks after the module is merged and released:
67+
68+
1. Add the SDK to the Sentry release registry, following the instructions in the [sentry-release-registry README](https://github.com/getsentry/sentry-release-registry#adding-new-sdks)
69+
70+
2. Add the module to `.craft.yml` in the `sdks` section:
71+
```yaml
72+
sdks:
73+
# ... existing modules ...
74+
maven:io.sentry:sentry-{module-name}:
75+
```
76+
77+
## Module Naming Conventions
78+
79+
- Use kebab-case for module names: `sentry-{module-name}`
80+
- Follow existing patterns: `sentry-okhttp`, `sentry-apollo-4`, `sentry-spring-boot`
81+
- For version-specific modules, include the version: `sentry-apollo-3`, `sentry-apollo-4`
82+
83+
## Important Notes
84+
85+
1. **API Files**: Do not modify `.api` files manually. Run `./gradlew apiDump` to regenerate them
86+
2. **Backwards Compatibility**: Ensure new features are opt-in by default
87+
3. **Testing**: Write comprehensive tests for all new functionality
88+
4. **Documentation**: Always include proper documentation and examples

.cursor/rules/overview_dev.mdc

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ Use the `fetch_rules` tool to include these rules when working on specific areas
4242
- `OtelSpanFactory`, `SentrySpanExporter`
4343
- Tracing, distributed tracing
4444

45+
- **`new_module`**: Use when adding a new integration or sample module
46+
4547
### Testing
4648
- **`e2e_tests`**: Use when working with:
4749
- System tests, sample applications
@@ -58,5 +60,6 @@ Use the `fetch_rules` tool to include these rules when working on specific areas
5860
- Scope/Hub/forking → `scopes`
5961
- Duplicate/dedup → `deduplication`
6062
- OpenTelemetry/tracing/spans → `opentelemetry`
63+
- new module/integration/sample → `new_module`
6164
- Cache/offline/network → `offline`
6265
- System test/e2e/sample → `e2e_tests`

sentry-android-core/proguard-rules.pro

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,6 @@
8080
##---------------End: proguard configuration for sentry-android-replay ----------
8181

8282
##---------------Begin: proguard configuration for sentry-android-distribution ----------
83-
-dontwarn io.sentry.android.distribution.internal.DistributionIntegration
84-
-keepnames class io.sentry.android.distribution.internal.DistributionIntegration
83+
-dontwarn io.sentry.android.distribution.DistributionIntegration
84+
-keepnames class io.sentry.android.distribution.DistributionIntegration
8585
##---------------End: proguard configuration for sentry-android-distribution ----------

sentry-android-core/src/main/java/io/sentry/android/core/AndroidOptionsInitializer.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
import io.sentry.android.core.internal.util.AndroidThreadChecker;
3333
import io.sentry.android.core.internal.util.SentryFrameMetricsCollector;
3434
import io.sentry.android.core.performance.AppStartMetrics;
35-
import io.sentry.android.distribution.internal.DistributionIntegration;
35+
import io.sentry.android.distribution.DistributionIntegration;
3636
import io.sentry.android.fragment.FragmentLifecycleIntegration;
3737
import io.sentry.android.replay.DefaultReplayBreadcrumbConverter;
3838
import io.sentry.android.replay.ReplayIntegration;
@@ -394,7 +394,9 @@ static void installDefaultIntegrations(
394394
options.setReplayController(replay);
395395
}
396396
if (isDistributionAvailable) {
397-
options.addIntegration(new DistributionIntegration());
397+
final DistributionIntegration distribution = new DistributionIntegration((context));
398+
options.setDistributionController(distribution);
399+
options.addIntegration(distribution);
398400
}
399401
options
400402
.getFeedbackOptions()

sentry-android-core/src/main/java/io/sentry/android/core/SentryAndroid.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ public final class SentryAndroid {
4242
"io.sentry.android.replay.ReplayIntegration";
4343

4444
static final String SENTRY_DISTRIBUTION_INTEGRATION_CLASS_NAME =
45-
"io.sentry.android.distribution.internal.DistributionIntegration";
45+
"io.sentry.android.distribution.DistributionIntegration";
4646

4747
private static final String TIMBER_CLASS_NAME = "timber.log.Timber";
4848
private static final String FRAGMENT_CLASS_NAME =
Lines changed: 5 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -1,79 +1,8 @@
1-
public final class io/sentry/android/distribution/Distribution {
2-
public static final field INSTANCE Lio/sentry/android/distribution/Distribution;
3-
public final fun checkForUpdate (Landroid/content/Context;Lkotlin/jvm/functions/Function1;)V
4-
public final fun checkForUpdateBlocking (Landroid/content/Context;)Lio/sentry/android/distribution/UpdateStatus;
5-
public final fun downloadUpdate (Landroid/content/Context;Lio/sentry/android/distribution/UpdateInfo;)V
6-
public final fun init (Landroid/content/Context;)V
7-
public final fun init (Landroid/content/Context;Lkotlin/jvm/functions/Function1;)V
8-
public final fun isEnabled ()Z
9-
}
10-
11-
public final class io/sentry/android/distribution/DistributionOptions {
12-
public fun <init> ()V
13-
public final fun getBuildConfiguration ()Ljava/lang/String;
14-
public final fun getOrgAuthToken ()Ljava/lang/String;
15-
public final fun getOrganizationSlug ()Ljava/lang/String;
16-
public final fun getProjectSlug ()Ljava/lang/String;
17-
public final fun getSentryBaseUrl ()Ljava/lang/String;
18-
public final fun setBuildConfiguration (Ljava/lang/String;)V
19-
public final fun setOrgAuthToken (Ljava/lang/String;)V
20-
public final fun setOrganizationSlug (Ljava/lang/String;)V
21-
public final fun setProjectSlug (Ljava/lang/String;)V
22-
public final fun setSentryBaseUrl (Ljava/lang/String;)V
23-
}
24-
25-
public final class io/sentry/android/distribution/UpdateInfo {
26-
public fun <init> (Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
27-
public final fun component1 ()Ljava/lang/String;
28-
public final fun component2 ()Ljava/lang/String;
29-
public final fun component3 ()I
30-
public final fun component4 ()Ljava/lang/String;
31-
public final fun component5 ()Ljava/lang/String;
32-
public final fun component6 ()Ljava/lang/String;
33-
public final fun copy (Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lio/sentry/android/distribution/UpdateInfo;
34-
public static synthetic fun copy$default (Lio/sentry/android/distribution/UpdateInfo;Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Object;)Lio/sentry/android/distribution/UpdateInfo;
35-
public fun equals (Ljava/lang/Object;)Z
36-
public final fun getAppName ()Ljava/lang/String;
37-
public final fun getBuildNumber ()I
38-
public final fun getBuildVersion ()Ljava/lang/String;
39-
public final fun getCreatedDate ()Ljava/lang/String;
40-
public final fun getDownloadUrl ()Ljava/lang/String;
41-
public final fun getId ()Ljava/lang/String;
42-
public fun hashCode ()I
43-
public fun toString ()Ljava/lang/String;
44-
}
45-
46-
public abstract class io/sentry/android/distribution/UpdateStatus {
47-
}
48-
49-
public final class io/sentry/android/distribution/UpdateStatus$Error : io/sentry/android/distribution/UpdateStatus {
50-
public fun <init> (Ljava/lang/String;)V
51-
public final fun component1 ()Ljava/lang/String;
52-
public final fun copy (Ljava/lang/String;)Lio/sentry/android/distribution/UpdateStatus$Error;
53-
public static synthetic fun copy$default (Lio/sentry/android/distribution/UpdateStatus$Error;Ljava/lang/String;ILjava/lang/Object;)Lio/sentry/android/distribution/UpdateStatus$Error;
54-
public fun equals (Ljava/lang/Object;)Z
55-
public final fun getMessage ()Ljava/lang/String;
56-
public fun hashCode ()I
57-
public fun toString ()Ljava/lang/String;
58-
}
59-
60-
public final class io/sentry/android/distribution/UpdateStatus$NewRelease : io/sentry/android/distribution/UpdateStatus {
61-
public fun <init> (Lio/sentry/android/distribution/UpdateInfo;)V
62-
public final fun component1 ()Lio/sentry/android/distribution/UpdateInfo;
63-
public final fun copy (Lio/sentry/android/distribution/UpdateInfo;)Lio/sentry/android/distribution/UpdateStatus$NewRelease;
64-
public static synthetic fun copy$default (Lio/sentry/android/distribution/UpdateStatus$NewRelease;Lio/sentry/android/distribution/UpdateInfo;ILjava/lang/Object;)Lio/sentry/android/distribution/UpdateStatus$NewRelease;
65-
public fun equals (Ljava/lang/Object;)Z
66-
public final fun getInfo ()Lio/sentry/android/distribution/UpdateInfo;
67-
public fun hashCode ()I
68-
public fun toString ()Ljava/lang/String;
69-
}
70-
71-
public final class io/sentry/android/distribution/UpdateStatus$UpToDate : io/sentry/android/distribution/UpdateStatus {
72-
public static final field INSTANCE Lio/sentry/android/distribution/UpdateStatus$UpToDate;
73-
}
74-
75-
public final class io/sentry/android/distribution/internal/DistributionIntegration : io/sentry/Integration {
76-
public fun <init> ()V
1+
public final class io/sentry/android/distribution/DistributionIntegration : io/sentry/IDistributionApi, io/sentry/Integration {
2+
public fun <init> (Landroid/content/Context;)V
3+
public fun checkForUpdate (Lio/sentry/IDistributionApi$UpdateCallback;)V
4+
public fun checkForUpdateBlocking ()Lio/sentry/UpdateStatus;
5+
public fun downloadUpdate (Lio/sentry/UpdateInfo;)V
776
public fun register (Lio/sentry/IScopes;Lio/sentry/SentryOptions;)V
787
}
798

sentry-android-distribution/build.gradle.kts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,5 +25,8 @@ androidComponents.beforeVariants {
2525

2626
dependencies {
2727
implementation(projects.sentry)
28+
implementation(
29+
libs.jetbrains.annotations
30+
) // Use implementation instead of compileOnly to override kotlin stdlib's version
2831
implementation(kotlin(Config.kotlinStdLib, Config.kotlinStdLibVersionAndroid))
2932
}

sentry-android-distribution/src/main/AndroidManifest.xml

Lines changed: 0 additions & 3 deletions
This file was deleted.

sentry-android-distribution/src/main/java/io/sentry/android/distribution/Distribution.kt

Lines changed: 0 additions & 87 deletions
This file was deleted.

0 commit comments

Comments
 (0)