diff --git a/dd-sdk-android-dependencies/build.gradle.kts b/dd-sdk-android-dependencies/build.gradle.kts index 58a2fdd13c..a4a3e46b33 100644 --- a/dd-sdk-android-dependencies/build.gradle.kts +++ b/dd-sdk-android-dependencies/build.gradle.kts @@ -6,11 +6,15 @@ import com.datadog.gradle.config.AndroidConfig import com.datadog.gradle.config.MavenConfig +import com.vanniktech.maven.publish.MavenPublishBaseExtension +import java.util.Base64 plugins { `java-library` id("com.gradleup.shadow") `maven-publish` + signing + id("com.vanniktech.maven.publish.base") } dependencies { @@ -34,6 +38,13 @@ tasks.shadowJar { configurations = listOf(project.configurations.runtimeClasspath.get()) } +// Use Vanniktech plugin ONLY for Maven Central Portal repository setup (not for artifact configuration) +// This ensures the same publishToSonatype / Central Portal API is used as other modules +configure { + publishToMavenCentral(automaticRelease = false) +} + +// Manual publication configuration with shadow jar as the artifact publishing { publications { register("maven") { @@ -42,10 +53,68 @@ publishing { version = AndroidConfig.VERSION.name artifact(tasks.shadowJar) + + pom { + name.set(project.name) + description.set("Shaded dependencies for FlashCat Android SDK") + inceptionYear.set("2026") + url.set("https://github.com/flashcatcloud/fc-sdk-android/") + + licenses { + license { + name.set("The Apache License, Version 2.0") + url.set("https://www.apache.org/licenses/LICENSE-2.0.txt") + distribution.set("repo") + } + } + + organization { + name.set("FlashCat") + url.set("https://flashcat.cloud/") + } + + developers { + developer { + id.set("flashcat") + name.set("FlashCat") + email.set("support@flashcat.cloud") + organization.set("FlashCat") + organizationUrl.set("https://flashcat.cloud/") + } + } + + scm { + url.set("https://github.com/flashcatcloud/fc-sdk-android/") + connection.set("scm:git:git@github.com:flashcatcloud/fc-sdk-android.git") + developerConnection.set("scm:git:git@github.com:flashcatcloud/fc-sdk-android.git") + } + } } } } +// Signing configuration (consistent with MavenConfig.publishingConfig()) +signing { + val isLocalPublish = gradle.startParameter.taskNames.any { + it.contains("publishToMavenLocal", ignoreCase = true) + } + isRequired = !hasProperty("dd-skip-signing") && !isLocalPublish + + val privateKey = System.getenv("GPG_PRIVATE_KEY") + val password = System.getenv("GPG_PASSWORD") + + if (privateKey != null && password != null) { + val decodedKey = try { + String(Base64.getDecoder().decode(privateKey)) + } catch (e: Exception) { + privateKey // Already decoded / plain text + } + useInMemoryPgpKeys(decodedKey, password) + } + + sign(publishing.publications["maven"]) +} + // Force the shadowJar to be the ONLY exported artifact for this module // This prevents R8 duplicate class errors while ensuring the file exists for KSP configurations.apiElements { diff --git a/features/dd-sdk-android-logs/build.gradle.kts b/features/dd-sdk-android-logs/build.gradle.kts index c3c3bea28c..be802a3fff 100644 --- a/features/dd-sdk-android-logs/build.gradle.kts +++ b/features/dd-sdk-android-logs/build.gradle.kts @@ -84,10 +84,8 @@ androidLibraryConfig() junitConfig() javadocConfig() dependencyUpdateConfig() -/* -// publishingConfig( -// "The Logs feature to use with the Datadog monitoring " + -// "library for Android applications." -// ) -*/ +publishingConfig( + "The Logs feature to use with the Datadog monitoring " + + "library for Android applications." +) detektCustomConfig() diff --git a/features/dd-sdk-android-session-replay-compose/build.gradle.kts b/features/dd-sdk-android-session-replay-compose/build.gradle.kts index 0131c2523b..6daff87b71 100644 --- a/features/dd-sdk-android-session-replay-compose/build.gradle.kts +++ b/features/dd-sdk-android-session-replay-compose/build.gradle.kts @@ -85,9 +85,7 @@ androidLibraryConfig() junitConfig() javadocConfig() dependencyUpdateConfig() -/* -// publishingConfig( -// "Session Replay Extension Support for Jetpack Compose." -// ) -*/ +publishingConfig( + "Session Replay Extension Support for Jetpack Compose." +) detektCustomConfig() diff --git a/features/dd-sdk-android-session-replay-material/build.gradle.kts b/features/dd-sdk-android-session-replay-material/build.gradle.kts index 46ebbd4f44..4fdae7e961 100644 --- a/features/dd-sdk-android-session-replay-material/build.gradle.kts +++ b/features/dd-sdk-android-session-replay-material/build.gradle.kts @@ -69,9 +69,7 @@ androidLibraryConfig() junitConfig() javadocConfig() dependencyUpdateConfig() -/* -// publishingConfig( -// "Session Replay Extension Support for Material UI components." -// ) -*/ +publishingConfig( + "Session Replay Extension Support for Material UI components." +) detektCustomConfig() diff --git a/features/dd-sdk-android-session-replay/build.gradle.kts b/features/dd-sdk-android-session-replay/build.gradle.kts index bc3fd8f847..2e4eb06efa 100644 --- a/features/dd-sdk-android-session-replay/build.gradle.kts +++ b/features/dd-sdk-android-session-replay/build.gradle.kts @@ -87,10 +87,8 @@ androidLibraryConfig() junitConfig() javadocConfig() dependencyUpdateConfig() -/* -// publishingConfig( -// "The Session Replay feature to use with the Datadog monitoring " + -// "library for Android applications." -// ) -*/ +publishingConfig( + "The Session Replay feature to use with the Datadog monitoring " + + "library for Android applications." +) detektCustomConfig()