Skip to content

Commit

Permalink
Merge pull request #288 from NordicSemiconductor/improvement/compat
Browse files Browse the repository at this point in the history
Migration improvement
  • Loading branch information
philips77 authored Dec 23, 2024
2 parents ba42ecb + 8668ee9 commit 2d0cb9b
Show file tree
Hide file tree
Showing 2 changed files with 84 additions and 10 deletions.
47 changes: 42 additions & 5 deletions plugins/src/main/kotlin/AndroidNexusRepositoryPlugin.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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<Project> {
Expand All @@ -66,7 +71,15 @@ class AndroidNexusRepositoryPlugin : Plugin<Project> {
val nexusPluginExt = extensions.create("nordicNexusPublishing", NexusRepositoryPluginExt::class.java)
val library = extensions.getByType<LibraryExtension>()
val signing = extensions.getByType<SigningExtension>()
val dokka = extensions.getByType<DokkaExtension>()
val dokka = try {
extensions.getByType<DokkaExtension>()
} 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"))
Expand All @@ -84,7 +97,7 @@ class AndroidNexusRepositoryPlugin : Plugin<Project> {
}

// Instead, configure Dokka to generate HTML docs for the module.
dokka.apply {
dokka?.apply {
dokkaSourceSets.configureEach {
enableAndroidDocumentationLink.set(true)
}
Expand All @@ -103,9 +116,33 @@ class AndroidNexusRepositoryPlugin : Plugin<Project> {
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<DokkaTask>().configureEach {
dependsOn(tasks.withType<Kapt>())
dokkaSourceSets.configureEach {
noAndroidSdkLink.set(false)
}
}

tasks.register<Jar>("dokkaHtmlJar").configure {
val dokkaHtml = tasks.named("dokkaHtml", DokkaTask::class.java)
dependsOn(dokkaHtml)
from(dokkaHtml.flatMap { it.outputDirectory })
archiveClassifier.set("html-docs")
}
}

afterEvaluate {
Expand Down
47 changes: 42 additions & 5 deletions plugins/src/main/kotlin/JvmNexusRepositoryPlugin.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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<Project> {
Expand All @@ -66,7 +71,15 @@ class JvmNexusRepositoryPlugin : Plugin<Project> {
val nexusPluginExt = extensions.create("nordicNexusPublishing", NexusRepositoryPluginExt::class.java)
val library = extensions.getByType<JavaPluginExtension>()
val signing = extensions.getByType<SigningExtension>()
val dokka = extensions.getByType<DokkaExtension>()
val dokka = try {
extensions.getByType<DokkaExtension>()
} 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"))
Expand All @@ -80,7 +93,7 @@ class JvmNexusRepositoryPlugin : Plugin<Project> {
// library.withJavadocJar()

// Instead, configure Dokka to generate HTML docs for the module.
dokka.apply {
dokka?.apply {
dokkaSourceSets.configureEach {
enableAndroidDocumentationLink.set(true)
}
Expand All @@ -99,9 +112,33 @@ class JvmNexusRepositoryPlugin : Plugin<Project> {
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<DokkaTask>().configureEach {
dependsOn(tasks.withType<Kapt>())
dokkaSourceSets.configureEach {
noAndroidSdkLink.set(false)
}
}

tasks.register<Jar>("dokkaHtmlJar").configure {
val dokkaHtml = tasks.named("dokkaHtml", DokkaTask::class.java)
dependsOn(dokkaHtml)
from(dokkaHtml.flatMap { it.outputDirectory })
archiveClassifier.set("html-docs")
}
}

afterEvaluate {
Expand Down

0 comments on commit 2d0cb9b

Please sign in to comment.