From 8668ee9e7b887b5c1447be059c4b06dea6bbd072 Mon Sep 17 00:00:00 2001 From: Aleksander Nowakowski Date: Mon, 23 Dec 2024 10:06:23 +0100 Subject: [PATCH] Applying Dokka v1 if v2 isn't enabled. Warnings with migration steps added. --- .../kotlin/AndroidNexusRepositoryPlugin.kt | 47 +++++++++++++++++-- .../main/kotlin/JvmNexusRepositoryPlugin.kt | 47 +++++++++++++++++-- 2 files changed, 84 insertions(+), 10 deletions(-) diff --git a/plugins/src/main/kotlin/AndroidNexusRepositoryPlugin.kt b/plugins/src/main/kotlin/AndroidNexusRepositoryPlugin.kt index f625338..8a66818 100644 --- a/plugins/src/main/kotlin/AndroidNexusRepositoryPlugin.kt +++ b/plugins/src/main/kotlin/AndroidNexusRepositoryPlugin.kt @@ -36,6 +36,8 @@ import no.nordicsemi.android.from import no.nordicsemi.android.tasks.ReleaseStagingRepositoriesTask import org.gradle.api.Plugin import org.gradle.api.Project +import org.gradle.api.UnknownDomainObjectException +import org.gradle.api.logging.LogLevel import org.gradle.api.publish.PublishingExtension import org.gradle.api.publish.maven.MavenPublication import org.gradle.api.tasks.bundling.Jar @@ -44,9 +46,12 @@ import org.gradle.kotlin.dsl.extra import org.gradle.kotlin.dsl.get import org.gradle.kotlin.dsl.getByType import org.gradle.kotlin.dsl.register +import org.gradle.kotlin.dsl.withType import org.gradle.plugins.signing.SigningExtension import org.jetbrains.dokka.gradle.DokkaExtension +import org.jetbrains.dokka.gradle.DokkaTask import org.jetbrains.dokka.gradle.engine.plugins.DokkaHtmlPluginParameters +import org.jetbrains.kotlin.gradle.tasks.Kapt import java.util.Calendar class AndroidNexusRepositoryPlugin : Plugin { @@ -66,7 +71,15 @@ class AndroidNexusRepositoryPlugin : Plugin { val nexusPluginExt = extensions.create("nordicNexusPublishing", NexusRepositoryPluginExt::class.java) val library = extensions.getByType() val signing = extensions.getByType() - val dokka = extensions.getByType() + val dokka = try { + extensions.getByType() + } catch (e: UnknownDomainObjectException) { + logger.log( + LogLevel.WARN, + "WARNING: Dokka V2 could not be applied, add \"org.jetbrains.dokka.experimental.gradle.pluginMode=V2Enabled\" to gradle.properties." + ) + null + } // The signing configuration will be user by signing plugin. extra.set("signing.keyId", System.getenv("GPG_SIGNING_KEY")) @@ -84,7 +97,7 @@ class AndroidNexusRepositoryPlugin : Plugin { } // Instead, configure Dokka to generate HTML docs for the module. - dokka.apply { + dokka?.apply { dokkaSourceSets.configureEach { enableAndroidDocumentationLink.set(true) } @@ -103,9 +116,33 @@ class AndroidNexusRepositoryPlugin : Plugin { archiveClassifier.set("html-docs") } } - } - parent?.dependencies { - add("dokka", this@with) + // Add Dokka dependency to root project. + rootProject.dependencies { + try { + add("dokka", this@with) + } catch (e: Exception) { + logger.log( + LogLevel.WARN, + "WARNING: Dokka could not be configured for module ':$name', apply dokka plugin (libs.plugins.nordic.dokka) in main build.gradle.kts." + ) + } + } + } ?: run { + // Use Dokka V1 if V2 is not enabled. + logger.log(LogLevel.INFO, "Applying Dokka V1.") + tasks.withType().configureEach { + dependsOn(tasks.withType()) + dokkaSourceSets.configureEach { + noAndroidSdkLink.set(false) + } + } + + tasks.register("dokkaHtmlJar").configure { + val dokkaHtml = tasks.named("dokkaHtml", DokkaTask::class.java) + dependsOn(dokkaHtml) + from(dokkaHtml.flatMap { it.outputDirectory }) + archiveClassifier.set("html-docs") + } } afterEvaluate { diff --git a/plugins/src/main/kotlin/JvmNexusRepositoryPlugin.kt b/plugins/src/main/kotlin/JvmNexusRepositoryPlugin.kt index 6d0b85a..a935e07 100644 --- a/plugins/src/main/kotlin/JvmNexusRepositoryPlugin.kt +++ b/plugins/src/main/kotlin/JvmNexusRepositoryPlugin.kt @@ -35,6 +35,8 @@ import no.nordicsemi.android.from import no.nordicsemi.android.tasks.ReleaseStagingRepositoriesTask import org.gradle.api.Plugin import org.gradle.api.Project +import org.gradle.api.UnknownDomainObjectException +import org.gradle.api.logging.LogLevel import org.gradle.api.plugins.JavaPluginExtension import org.gradle.api.publish.PublishingExtension import org.gradle.api.publish.maven.MavenPublication @@ -44,9 +46,12 @@ import org.gradle.kotlin.dsl.extra import org.gradle.kotlin.dsl.get import org.gradle.kotlin.dsl.getByType import org.gradle.kotlin.dsl.register +import org.gradle.kotlin.dsl.withType import org.gradle.plugins.signing.SigningExtension import org.jetbrains.dokka.gradle.DokkaExtension +import org.jetbrains.dokka.gradle.DokkaTask import org.jetbrains.dokka.gradle.engine.plugins.DokkaHtmlPluginParameters +import org.jetbrains.kotlin.gradle.tasks.Kapt import java.util.Calendar class JvmNexusRepositoryPlugin : Plugin { @@ -66,7 +71,15 @@ class JvmNexusRepositoryPlugin : Plugin { val nexusPluginExt = extensions.create("nordicNexusPublishing", NexusRepositoryPluginExt::class.java) val library = extensions.getByType() val signing = extensions.getByType() - val dokka = extensions.getByType() + val dokka = try { + extensions.getByType() + } catch (e: UnknownDomainObjectException) { + logger.log( + LogLevel.WARN, + "WARNING: Dokka V2 could not be applied, add \"org.jetbrains.dokka.experimental.gradle.pluginMode=V2Enabled\" to gradle.properties." + ) + null + } // The signing configuration will be user by signing plugin. extra.set("signing.keyId", System.getenv("GPG_SIGNING_KEY")) @@ -80,7 +93,7 @@ class JvmNexusRepositoryPlugin : Plugin { // library.withJavadocJar() // Instead, configure Dokka to generate HTML docs for the module. - dokka.apply { + dokka?.apply { dokkaSourceSets.configureEach { enableAndroidDocumentationLink.set(true) } @@ -99,9 +112,33 @@ class JvmNexusRepositoryPlugin : Plugin { archiveClassifier.set("javadoc") } } - } - parent?.dependencies { - add("dokka", this@with) + // Add Dokka dependency to root project. + rootProject.dependencies { + try { + add("dokka", this@with) + } catch (e: Exception) { + logger.log( + LogLevel.WARN, + "WARNING: Dokka could not be configured for module ':$name', apply dokka plugin (libs.plugins.nordic.dokka) in main build.gradle.kts." + ) + } + } + } ?: run { + // Use Dokka V1 if V2 is not enabled. + logger.log(LogLevel.INFO, "Applying Dokka V1.") + tasks.withType().configureEach { + dependsOn(tasks.withType()) + dokkaSourceSets.configureEach { + noAndroidSdkLink.set(false) + } + } + + tasks.register("dokkaHtmlJar").configure { + val dokkaHtml = tasks.named("dokkaHtml", DokkaTask::class.java) + dependsOn(dokkaHtml) + from(dokkaHtml.flatMap { it.outputDirectory }) + archiveClassifier.set("html-docs") + } } afterEvaluate {