Skip to content

Commit 6782842

Browse files
Enable publishing for Session Replay and Logs modules (#11)
* Publish new (#1) * feat: change group id * feat: update maven plugin * feat: flashcat site * chore: configure SDK v0.3.0 release settings - Exclude logs, flags, session-replay modules from publishing - Update version to 0.3.0 with dynamic versioning from git tags - Add JVM --add-opens for java.lang.invoke to fix JDK 17+ reflection - Comment out excluded module dependencies in samples and integration tests - Exclude sample projects from build (depend on removed features) * feat: add ding notify * chore: update GitHub Actions trigger branch to publish Update workflows to trigger on the publish branch instead of publish-new: - publish-maven.yml: Change publish trigger branch - codeql-analysis.yml: Change push and pull request target branches * Add "No-Op" modules for Session Replay, Logs, and Profiling features to provide empty implementations with minimal footprint. * refactor: optimize dependency isolation and compatibility - Downgrade androidx.core to 1.12.0 and move key dependencies (Gson, OkHttp, WorkManager) to compileOnly scope to reduce SDK footprint and avoid version conflicts. - Implement WorkManagerUtils with reflection-based safe initialization check to handle optional WorkManager dependency. - Update API surface and transitive dependency lists across multiple modules. - Fix Detekt configuration to handle missing classpath files gracefully. - Bump SDK version to 0.3.1-SNAPSHOT. * Enable Logging, Session Replay, and Feature Flags in sample applications - Add `setApplicationLaunchSampleRate` and `useCustomEndpoint` to `ProfilingConfiguration.Builder` in the no-op profiling module. - Uncomment and enable Log, Session Replay, Feature Flag, and Timber integration dependencies across multiple sample modules (automotive, benchmark, kotlin, tv, vendor-lib, wear). - Restore initialization code for Logs, Session Replay, and Timber in sample application classes. - Downgrade several transitive dependencies (e.g., Gson, OkHttp, Okio, and various AndroidX libraries) to older versions across multiple modules. - Include `:features:dd-sdk-android-flags` and related modules in the global settings. - Implement a dependency substitution rule in the Kotlin sample to use no-op logs when appropriate. * Add no-op implementations for Feature Flags and OpenFeature modules * feat: add `dd-sdk-android-flags-noop` module - Provides a no-op implementation of the Flags SDK to allow safe compilation without the full feature. - Includes core interfaces: `FlagsClient`, `FlagsConfiguration`, `EvaluationContext`, and `ResolutionDetails`. - Defines `NoOpFlagsClient` which returns default values for all flag evaluations. * feat: add `dd-sdk-android-flags-openfeature-noop` module - Provides a no-op implementation of the OpenFeature provider. - Includes `DatadogFlagsProvider` which implements `FeatureProvider` by returning default values. - Adds `asOpenFeatureProvider()` extension on `FlagsClient`. * chore: update sample application - Configure Kotlin sample to use `noop` variants for the `noop` build flavor. - Uncomment and initialize Feature Flags in `SampleApplication.kt` using the new APIs. * build: include new modules in project settings and build configurations. * Noop logs profiling session replay (#2) * Add "No-Op" modules for Session Replay, Logs, and Profiling features to provide empty implementations with minimal footprint. * refactor: optimize dependency isolation and compatibility - Downgrade androidx.core to 1.12.0 and move key dependencies (Gson, OkHttp, WorkManager) to compileOnly scope to reduce SDK footprint and avoid version conflicts. - Implement WorkManagerUtils with reflection-based safe initialization check to handle optional WorkManager dependency. - Update API surface and transitive dependency lists across multiple modules. - Fix Detekt configuration to handle missing classpath files gracefully. - Bump SDK version to 0.3.1-SNAPSHOT. * Enable Logging, Session Replay, and Feature Flags in sample applications - Add `setApplicationLaunchSampleRate` and `useCustomEndpoint` to `ProfilingConfiguration.Builder` in the no-op profiling module. - Uncomment and enable Log, Session Replay, Feature Flag, and Timber integration dependencies across multiple sample modules (automotive, benchmark, kotlin, tv, vendor-lib, wear). - Restore initialization code for Logs, Session Replay, and Timber in sample application classes. - Downgrade several transitive dependencies (e.g., Gson, OkHttp, Okio, and various AndroidX libraries) to older versions across multiple modules. - Include `:features:dd-sdk-android-flags` and related modules in the global settings. - Implement a dependency substitution rule in the Kotlin sample to use no-op logs when appropriate. * Add no-op implementations for Feature Flags and OpenFeature modules * feat: add `dd-sdk-android-flags-noop` module - Provides a no-op implementation of the Flags SDK to allow safe compilation without the full feature. - Includes core interfaces: `FlagsClient`, `FlagsConfiguration`, `EvaluationContext`, and `ResolutionDetails`. - Defines `NoOpFlagsClient` which returns default values for all flag evaluations. * feat: add `dd-sdk-android-flags-openfeature-noop` module - Provides a no-op implementation of the OpenFeature provider. - Includes `DatadogFlagsProvider` which implements `FeatureProvider` by returning default values. - Adds `asOpenFeatureProvider()` extension on `FlagsClient`. * chore: update sample application - Configure Kotlin sample to use `noop` variants for the `noop` build flavor. - Uncomment and initialize Feature Flags in `SampleApplication.kt` using the new APIs. * build: include new modules in project settings and build configurations. * Update build configuration and test dependencies across SDK modules - Add missing test dependencies (`gson`, `okHttp`, `fresco`, `robolectric`) to multiple feature modules - Update `dd-sdk-android-profiling` to use version catalog for AndroidX Core dependencies - Add several unit test exclusions in `dd-sdk-android-flags` and `dd-sdk-android-internal` - Register no-op and alias tasks in `dd-sdk-android-dependencies` to support Android aggregation tasks (assemble, lint, test, etc.) - Define new AndroidX core versions and modules in `libs.versions.toml` - Temporarily comment out `WorkerParametersForgeryFactory` in core tests * Update shadowJar configuration and dependencies * chore: update shadowJar and jar tasks - Change shadowJar archive classifier to "all" - Configure jar task to depend on and include contents of shadowJar (excluding manifest) * chore: update transitive dependencies - Add okhttp, okio, and collection to dd-sdk-android-flags-noop - Add coroutines and kotlin-stdlib-jdk variants to dd-sdk-android-flags-openfeature-noop * Noop logs profiling session replay (#3) * Add "No-Op" modules for Session Replay, Logs, and Profiling features to provide empty implementations with minimal footprint. * refactor: optimize dependency isolation and compatibility - Downgrade androidx.core to 1.12.0 and move key dependencies (Gson, OkHttp, WorkManager) to compileOnly scope to reduce SDK footprint and avoid version conflicts. - Implement WorkManagerUtils with reflection-based safe initialization check to handle optional WorkManager dependency. - Update API surface and transitive dependency lists across multiple modules. - Fix Detekt configuration to handle missing classpath files gracefully. - Bump SDK version to 0.3.1-SNAPSHOT. * Enable Logging, Session Replay, and Feature Flags in sample applications - Add `setApplicationLaunchSampleRate` and `useCustomEndpoint` to `ProfilingConfiguration.Builder` in the no-op profiling module. - Uncomment and enable Log, Session Replay, Feature Flag, and Timber integration dependencies across multiple sample modules (automotive, benchmark, kotlin, tv, vendor-lib, wear). - Restore initialization code for Logs, Session Replay, and Timber in sample application classes. - Downgrade several transitive dependencies (e.g., Gson, OkHttp, Okio, and various AndroidX libraries) to older versions across multiple modules. - Include `:features:dd-sdk-android-flags` and related modules in the global settings. - Implement a dependency substitution rule in the Kotlin sample to use no-op logs when appropriate. * Add no-op implementations for Feature Flags and OpenFeature modules * feat: add `dd-sdk-android-flags-noop` module - Provides a no-op implementation of the Flags SDK to allow safe compilation without the full feature. - Includes core interfaces: `FlagsClient`, `FlagsConfiguration`, `EvaluationContext`, and `ResolutionDetails`. - Defines `NoOpFlagsClient` which returns default values for all flag evaluations. * feat: add `dd-sdk-android-flags-openfeature-noop` module - Provides a no-op implementation of the OpenFeature provider. - Includes `DatadogFlagsProvider` which implements `FeatureProvider` by returning default values. - Adds `asOpenFeatureProvider()` extension on `FlagsClient`. * chore: update sample application - Configure Kotlin sample to use `noop` variants for the `noop` build flavor. - Uncomment and initialize Feature Flags in `SampleApplication.kt` using the new APIs. * build: include new modules in project settings and build configurations. * Update build configuration and test dependencies across SDK modules - Add missing test dependencies (`gson`, `okHttp`, `fresco`, `robolectric`) to multiple feature modules - Update `dd-sdk-android-profiling` to use version catalog for AndroidX Core dependencies - Add several unit test exclusions in `dd-sdk-android-flags` and `dd-sdk-android-internal` - Register no-op and alias tasks in `dd-sdk-android-dependencies` to support Android aggregation tasks (assemble, lint, test, etc.) - Define new AndroidX core versions and modules in `libs.versions.toml` - Temporarily comment out `WorkerParametersForgeryFactory` in core tests * Update shadowJar configuration and dependencies * chore: update shadowJar and jar tasks - Change shadowJar archive classifier to "all" - Configure jar task to depend on and include contents of shadowJar (excluding manifest) * chore: update transitive dependencies - Add okhttp, okio, and collection to dd-sdk-android-flags-noop - Add coroutines and kotlin-stdlib-jdk variants to dd-sdk-android-flags-openfeature-noop * Remove shadowJar artifacts from API and runtime elements - Remove `shadowJar` task artifacts from `apiElements` and `runtimeElements` configurations in `dd-sdk-android-dependencies/build.gradle.kts`. * Remove shadowJar artifacts from API and runtime elements (#4) * Add "No-Op" modules for Session Replay, Logs, and Profiling features to provide empty implementations with minimal footprint. * refactor: optimize dependency isolation and compatibility - Downgrade androidx.core to 1.12.0 and move key dependencies (Gson, OkHttp, WorkManager) to compileOnly scope to reduce SDK footprint and avoid version conflicts. - Implement WorkManagerUtils with reflection-based safe initialization check to handle optional WorkManager dependency. - Update API surface and transitive dependency lists across multiple modules. - Fix Detekt configuration to handle missing classpath files gracefully. - Bump SDK version to 0.3.1-SNAPSHOT. * Enable Logging, Session Replay, and Feature Flags in sample applications - Add `setApplicationLaunchSampleRate` and `useCustomEndpoint` to `ProfilingConfiguration.Builder` in the no-op profiling module. - Uncomment and enable Log, Session Replay, Feature Flag, and Timber integration dependencies across multiple sample modules (automotive, benchmark, kotlin, tv, vendor-lib, wear). - Restore initialization code for Logs, Session Replay, and Timber in sample application classes. - Downgrade several transitive dependencies (e.g., Gson, OkHttp, Okio, and various AndroidX libraries) to older versions across multiple modules. - Include `:features:dd-sdk-android-flags` and related modules in the global settings. - Implement a dependency substitution rule in the Kotlin sample to use no-op logs when appropriate. * Add no-op implementations for Feature Flags and OpenFeature modules * feat: add `dd-sdk-android-flags-noop` module - Provides a no-op implementation of the Flags SDK to allow safe compilation without the full feature. - Includes core interfaces: `FlagsClient`, `FlagsConfiguration`, `EvaluationContext`, and `ResolutionDetails`. - Defines `NoOpFlagsClient` which returns default values for all flag evaluations. * feat: add `dd-sdk-android-flags-openfeature-noop` module - Provides a no-op implementation of the OpenFeature provider. - Includes `DatadogFlagsProvider` which implements `FeatureProvider` by returning default values. - Adds `asOpenFeatureProvider()` extension on `FlagsClient`. * chore: update sample application - Configure Kotlin sample to use `noop` variants for the `noop` build flavor. - Uncomment and initialize Feature Flags in `SampleApplication.kt` using the new APIs. * build: include new modules in project settings and build configurations. * Update build configuration and test dependencies across SDK modules - Add missing test dependencies (`gson`, `okHttp`, `fresco`, `robolectric`) to multiple feature modules - Update `dd-sdk-android-profiling` to use version catalog for AndroidX Core dependencies - Add several unit test exclusions in `dd-sdk-android-flags` and `dd-sdk-android-internal` - Register no-op and alias tasks in `dd-sdk-android-dependencies` to support Android aggregation tasks (assemble, lint, test, etc.) - Define new AndroidX core versions and modules in `libs.versions.toml` - Temporarily comment out `WorkerParametersForgeryFactory` in core tests * Update shadowJar configuration and dependencies * chore: update shadowJar and jar tasks - Change shadowJar archive classifier to "all" - Configure jar task to depend on and include contents of shadowJar (excluding manifest) * chore: update transitive dependencies - Add okhttp, okio, and collection to dd-sdk-android-flags-noop - Add coroutines and kotlin-stdlib-jdk variants to dd-sdk-android-flags-openfeature-noop * Remove shadowJar artifacts from API and runtime elements - Remove `shadowJar` task artifacts from `apiElements` and `runtimeElements` configurations in `dd-sdk-android-dependencies/build.gradle.kts`. * Prevent task registration collisions by checking for existing tasks before registering shadow and aggregation tasks in `dd-sdk-android-dependencies/build.gradle.kts`. * Update task registration for `assembleDebug`, `assembleRelease`, `testDebugUnitTest`, and `testReleaseUnitTest` to use conditional checks. * Apply the same conditional logic to no-op tasks including `lintRelease`, `checkDependencyLicenses`, `checkApiSurfaceChanges`, `checkCompilerMetadataChanges`, `checkTransitiveDependenciesList`, `koverXmlReportRelease`, and `printDetektClasspath`. * fix(build): resolve R8 conflicts, missing test dependencies, and JDK compatibility issues * Fix R8 "defined multiple times" error by optimizing shadowJar configurations. * Fix WorkManager 2.7.1 unit test compilation and runtime errors. * Enhance reflection tools for JDK 17+ compatibility. * Globally add missing test dependencies (Gson/OkHttp) to fix NoClassDefFoundError in feature and integration modules. * Add Proguard -dontwarn rules for missing classes in reliability tests. * Re-enable publishing and logs/session-replay features * chore: enable publishing for feature flags modules - Uncomment `publishingConfig` in `dd-sdk-android-flags` - Uncomment `publishingConfig` in `dd-sdk-android-flags-openfeature` * feat: restore logs and session-replay in sample applications - Re-enable `dd-sdk-android-logs` dependency and implementation across `vendor-lib`, `benchmark`, `automotive`, `tv`, and `wear` samples - Re-enable `dd-sdk-android-session-replay` (and material/compose variants) in `benchmark` and `tv` samples - Uncomment Log and Session Replay initialization and usage in `LocalServer.kt` and `TvSampleApplication.kt` - Restore Timber integration in the `tv` sample * feat: Publish dd-sdk-android-dependencies artifact Enable publishing for the `dd-sdk-android-dependencies` module. This configures the `maven-publish` plugin to create and publish a shadow JAR containing all transitive dependencies. * Enable publishing for Session Replay and Logs modules - Uncomment `publishingConfig` in `dd-sdk-android-session-replay-compose` - Uncomment `publishingConfig` in `dd-sdk-android-session-replay` - Uncomment `publishingConfig` in `dd-sdk-android-logs` - Uncomment `publishingConfig` in `dd-sdk-android-session-replay-material` * Configure Maven Central publishing and signing for shaded dependencies - Add `com.vanniktech.maven.publish.base` plugin for Maven Central Portal integration - Implement manual Maven publication for the shadow JAR including POM metadata (license, organization, developer, and SCM info) - Add signing configuration using GPG environment variables (`GPG_PRIVATE_KEY`, `GPG_PASSWORD`) - Ensure signing is skipped for local publications or when `dd-skip-signing` is set --------- Co-authored-by: Fiona <baiyang.feng@outlook.com>
1 parent 4fb7c07 commit 6782842

5 files changed

Lines changed: 83 additions & 22 deletions

File tree

dd-sdk-android-dependencies/build.gradle.kts

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,15 @@
66

77
import com.datadog.gradle.config.AndroidConfig
88
import com.datadog.gradle.config.MavenConfig
9+
import com.vanniktech.maven.publish.MavenPublishBaseExtension
10+
import java.util.Base64
911

1012
plugins {
1113
`java-library`
1214
id("com.gradleup.shadow")
1315
`maven-publish`
16+
signing
17+
id("com.vanniktech.maven.publish.base")
1418
}
1519

1620
dependencies {
@@ -34,6 +38,13 @@ tasks.shadowJar {
3438
configurations = listOf(project.configurations.runtimeClasspath.get())
3539
}
3640

41+
// Use Vanniktech plugin ONLY for Maven Central Portal repository setup (not for artifact configuration)
42+
// This ensures the same publishToSonatype / Central Portal API is used as other modules
43+
configure<MavenPublishBaseExtension> {
44+
publishToMavenCentral(automaticRelease = false)
45+
}
46+
47+
// Manual publication configuration with shadow jar as the artifact
3748
publishing {
3849
publications {
3950
register<MavenPublication>("maven") {
@@ -42,10 +53,68 @@ publishing {
4253
version = AndroidConfig.VERSION.name
4354

4455
artifact(tasks.shadowJar)
56+
57+
pom {
58+
name.set(project.name)
59+
description.set("Shaded dependencies for FlashCat Android SDK")
60+
inceptionYear.set("2026")
61+
url.set("https://github.com/flashcatcloud/fc-sdk-android/")
62+
63+
licenses {
64+
license {
65+
name.set("The Apache License, Version 2.0")
66+
url.set("https://www.apache.org/licenses/LICENSE-2.0.txt")
67+
distribution.set("repo")
68+
}
69+
}
70+
71+
organization {
72+
name.set("FlashCat")
73+
url.set("https://flashcat.cloud/")
74+
}
75+
76+
developers {
77+
developer {
78+
id.set("flashcat")
79+
name.set("FlashCat")
80+
email.set("support@flashcat.cloud")
81+
organization.set("FlashCat")
82+
organizationUrl.set("https://flashcat.cloud/")
83+
}
84+
}
85+
86+
scm {
87+
url.set("https://github.com/flashcatcloud/fc-sdk-android/")
88+
connection.set("scm:git:git@github.com:flashcatcloud/fc-sdk-android.git")
89+
developerConnection.set("scm:git:git@github.com:flashcatcloud/fc-sdk-android.git")
90+
}
91+
}
4592
}
4693
}
4794
}
4895

96+
// Signing configuration (consistent with MavenConfig.publishingConfig())
97+
signing {
98+
val isLocalPublish = gradle.startParameter.taskNames.any {
99+
it.contains("publishToMavenLocal", ignoreCase = true)
100+
}
101+
isRequired = !hasProperty("dd-skip-signing") && !isLocalPublish
102+
103+
val privateKey = System.getenv("GPG_PRIVATE_KEY")
104+
val password = System.getenv("GPG_PASSWORD")
105+
106+
if (privateKey != null && password != null) {
107+
val decodedKey = try {
108+
String(Base64.getDecoder().decode(privateKey))
109+
} catch (e: Exception) {
110+
privateKey // Already decoded / plain text
111+
}
112+
useInMemoryPgpKeys(decodedKey, password)
113+
}
114+
115+
sign(publishing.publications["maven"])
116+
}
117+
49118
// Force the shadowJar to be the ONLY exported artifact for this module
50119
// This prevents R8 duplicate class errors while ensuring the file exists for KSP
51120
configurations.apiElements {

features/dd-sdk-android-logs/build.gradle.kts

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -84,10 +84,8 @@ androidLibraryConfig()
8484
junitConfig()
8585
javadocConfig()
8686
dependencyUpdateConfig()
87-
/*
88-
// publishingConfig(
89-
// "The Logs feature to use with the Datadog monitoring " +
90-
// "library for Android applications."
91-
// )
92-
*/
87+
publishingConfig(
88+
"The Logs feature to use with the Datadog monitoring " +
89+
"library for Android applications."
90+
)
9391
detektCustomConfig()

features/dd-sdk-android-session-replay-compose/build.gradle.kts

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -85,9 +85,7 @@ androidLibraryConfig()
8585
junitConfig()
8686
javadocConfig()
8787
dependencyUpdateConfig()
88-
/*
89-
// publishingConfig(
90-
// "Session Replay Extension Support for Jetpack Compose."
91-
// )
92-
*/
88+
publishingConfig(
89+
"Session Replay Extension Support for Jetpack Compose."
90+
)
9391
detektCustomConfig()

features/dd-sdk-android-session-replay-material/build.gradle.kts

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -69,9 +69,7 @@ androidLibraryConfig()
6969
junitConfig()
7070
javadocConfig()
7171
dependencyUpdateConfig()
72-
/*
73-
// publishingConfig(
74-
// "Session Replay Extension Support for Material UI components."
75-
// )
76-
*/
72+
publishingConfig(
73+
"Session Replay Extension Support for Material UI components."
74+
)
7775
detektCustomConfig()

features/dd-sdk-android-session-replay/build.gradle.kts

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -87,10 +87,8 @@ androidLibraryConfig()
8787
junitConfig()
8888
javadocConfig()
8989
dependencyUpdateConfig()
90-
/*
91-
// publishingConfig(
92-
// "The Session Replay feature to use with the Datadog monitoring " +
93-
// "library for Android applications."
94-
// )
95-
*/
90+
publishingConfig(
91+
"The Session Replay feature to use with the Datadog monitoring " +
92+
"library for Android applications."
93+
)
9694
detektCustomConfig()

0 commit comments

Comments
 (0)