Skip to content

Commit

Permalink
Setup multi-module docs build task
Browse files Browse the repository at this point in the history
(cherry picked from commit d695b0e)
  • Loading branch information
ilya-g committed Apr 27, 2023
1 parent d0c9e38 commit 442f3f8
Showing 1 changed file with 55 additions and 42 deletions.
97 changes: 55 additions & 42 deletions libraries/tools/kotlin-stdlib-docs/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import org.jetbrains.dokka.Platform
import org.jetbrains.dokka.DokkaConfiguration
import org.jetbrains.dokka.gradle.DokkaTask
import org.jetbrains.dokka.gradle.*
import java.net.URL

plugins {
Expand All @@ -13,8 +13,8 @@ evaluationDependsOnChildren()
fun pKotlinBig() = project("kotlin_big").ext

val outputDir = file(findProperty("docsBuildDir") as String? ?: "$buildDir/doc")
val outputDirLatest = file("$outputDir/latest")
val outputDirPrevious = file("$outputDir/previous")
val inputDirPrevious = file(findProperty("docsPreviousVersionsDir") as String? ?: "$outputDir/previous")
val outputDirPartial = outputDir.resolve("partial")
val kotlin_root: String by pKotlinBig()
val kotlin_libs: String by pKotlinBig()
val kotlin_native_root = file("$kotlin_root/kotlin-native").absolutePath
Expand Down Expand Up @@ -49,7 +49,7 @@ dependencies {
}

fun createStdLibVersionedDocTask(version: String, isLatest: Boolean) =
tasks.register<DokkaTask>("kotlin-stdlib_" + version + (if (isLatest) "_latest" else "")) {
tasks.register<DokkaTaskPartial>("kotlin-stdlib_" + version + (if (isLatest) "_latest" else "")) {
dependsOn(prepare)

val kotlin_stdlib_dir = file("$kotlin_root/libraries/stdlib")
Expand All @@ -74,21 +74,17 @@ fun createStdLibVersionedDocTask(version: String, isLatest: Boolean) =

moduleName.set("kotlin-stdlib")
val moduleDirName = "kotlin-stdlib"
with(pluginsMapConfiguration) {
put("org.jetbrains.dokka.base.DokkaBase" , """{ "mergeImplicitExpectActualDeclarations": "true", "templatesDir": "$templatesDir" }""")
put("org.jetbrains.dokka.kotlinlang.StdLibConfigurationPlugin", """{ "ignoreCommonBuiltIns": "true" }""")
put("org.jetbrains.dokka.versioning.VersioningPlugin" , """{ "version": "$version" }" }""")
}
if (isLatest) {
outputDirectory.set(outputDirLatest.resolve(moduleDirName))
with(pluginsMapConfiguration) {
put("org.jetbrains.dokka.base.DokkaBase" , """{ "mergeImplicitExpectActualDeclarations": "true", "templatesDir": "$templatesDir" }""")
put("org.jetbrains.dokka.kotlinlang.StdLibConfigurationPlugin", """{ "ignoreCommonBuiltIns": "true" }""")
put("org.jetbrains.dokka.versioning.VersioningPlugin" , """{ "version": "$version", "olderVersionsDir": "${outputDirPrevious.resolve(moduleDirName).invariantSeparatorsPath}" }""")
}
outputDirectory.set(file("$outputDirPartial/latest").resolve(moduleDirName))
} else {
outputDirectory.set(outputDirPrevious.resolve(moduleDirName).resolve(version))
with(pluginsMapConfiguration) {
put("org.jetbrains.dokka.base.DokkaBase" , """{ "mergeImplicitExpectActualDeclarations": "true", "templatesDir": "$templatesDir" }""")
put("org.jetbrains.dokka.kotlinlang.StdLibConfigurationPlugin", """{ "ignoreCommonBuiltIns": "true" }""")
put("org.jetbrains.dokka.kotlinlang.VersionFilterPlugin" , """{ "targetVersion": "$version" }""")
put("org.jetbrains.dokka.versioning.VersioningPlugin" , """{ "version": "$version" }""")
}
outputDirectory.set(file("$outputDirPartial/previous").resolve(moduleDirName).resolve(version))
pluginsMapConfiguration
.put("org.jetbrains.dokka.kotlinlang.VersionFilterPlugin" , """{ "targetVersion": "$version" }""")
}
dokkaSourceSets {
if (version != "1.0" && version != "1.1") { // Common platform since Kotlin 1.2
Expand Down Expand Up @@ -224,9 +220,9 @@ fun createStdLibVersionedDocTask(version: String, isLatest: Boolean) =
}
}

fun createKotlinTestVersionedDocTask(version: String, isLatest: Boolean, stdlibDocTask: TaskProvider<DokkaTask>) =
tasks.register<DokkaTask>("kotlin-test_" + version + (if (isLatest) "_latest" else "")) {
dependsOn(prepare, stdlibDocTask)
fun createKotlinTestVersionedDocTask(version: String, isLatest: Boolean) =
tasks.register<DokkaTaskPartial>("kotlin-test_" + version + (if (isLatest) "_latest" else "")) {
dependsOn(prepare)

val kotlinTestIncludeMd = file("$kotlin_root/libraries/kotlin.test/Module.md")

Expand All @@ -237,25 +233,20 @@ fun createKotlinTestVersionedDocTask(version: String, isLatest: Boolean, stdlibD
val kotlinTestJsClasspath = fileTree("$kotlin_libs/kotlin-test-js")
val kotlinTestJvmClasspath = fileTree("$kotlin_libs/kotlin-test")

val stdlibPackageList = URL("file:///${stdlibDocTask.get().outputDirectory.get()}/kotlin-stdlib/package-list")
val kotlinLanguageVersion = version

moduleName.set("kotlin-test")

val moduleDirName = "kotlin-test"
with(pluginsMapConfiguration) {
put("org.jetbrains.dokka.base.DokkaBase", """{ "templatesDir": "$templatesDir" }""")
put("org.jetbrains.dokka.versioning.VersioningPlugin", """{ "version": "$version" }""")
}
if (isLatest) {
outputDirectory.set(outputDirLatest.resolve(moduleDirName))
with(pluginsMapConfiguration) {
put("org.jetbrains.dokka.base.DokkaBase" , """{ "mergeImplicitExpectActualDeclarations": "true", "templatesDir": "$templatesDir" }""")
put("org.jetbrains.dokka.versioning.VersioningPlugin" , """{ "version": "$version", "olderVersionsDir": "${outputDirPrevious.resolve(moduleDirName).invariantSeparatorsPath}" }""")
}
outputDirectory.set(file("$outputDirPartial/latest").resolve(moduleDirName))
} else {
outputDirectory.set(outputDirPrevious.resolve(moduleDirName).resolve(version))
with(pluginsMapConfiguration) {
put("org.jetbrains.dokka.base.DokkaBase" , """{ "mergeImplicitExpectActualDeclarations": "true", "templatesDir": "$templatesDir" }""")
put("org.jetbrains.dokka.kotlinlang.VersionFilterPlugin" , """{ "targetVersion": "$version" }""")
put("org.jetbrains.dokka.versioning.VersioningPlugin" , """{ "version": "$version" }""")
}
outputDirectory.set(file("$outputDirPartial/previous").resolve(moduleDirName).resolve(version))
pluginsMapConfiguration.put("org.jetbrains.dokka.kotlinlang.VersionFilterPlugin", """{ "targetVersion": "$version" }""")
}

dokkaSourceSets {
Expand Down Expand Up @@ -369,14 +360,35 @@ fun createKotlinTestVersionedDocTask(version: String, isLatest: Boolean, stdlibD
languageVersion.set(kotlinLanguageVersion)
noStdlibLink.set(true)
sourceLinksFromRoot()
externalDocumentationLink {
url.set(URL("https://kotlinlang.org/api/latest/jvm/stdlib/"))
packageListUrl.set(stdlibPackageList)
}
}
}
}


fun createAllLibsVersionedDocTask(version: String, isLatest: Boolean, vararg libTasks: TaskProvider<DokkaTaskPartial>) =
tasks.register<DokkaMultiModuleTask>("all-libs_" + version + (if (isLatest) "_latest" else "")) {
moduleName.set("Kotlin libraries")
plugins.extendsFrom(configurations.dokkaHtmlMultiModulePlugin.get())
runtime.extendsFrom(configurations.dokkaHtmlMultiModuleRuntime.get())
libTasks.forEach { addChildTask(it.name) }

fileLayout.set(DokkaMultiModuleFileLayout { parent, child ->
parent.outputDirectory.get().resolve(child.moduleName.get())
})

val moduleDirName = "all-libs"
val outputDirLatest = file("$outputDir/latest")
val outputDirPrevious = file("$outputDir/previous")
pluginsMapConfiguration.put("org.jetbrains.dokka.base.DokkaBase", """{ "templatesDir": "$templatesDir" }""")
if (isLatest) {
outputDirectory.set(outputDirLatest.resolve(moduleDirName))
pluginsMapConfiguration.put("org.jetbrains.dokka.versioning.VersioningPlugin", """{ "version": "$version", "olderVersionsDir": "${inputDirPrevious.resolve(moduleDirName).invariantSeparatorsPath}" }""")
} else {
outputDirectory.set(outputDirPrevious.resolve(moduleDirName).resolve(version))
pluginsMapConfiguration.put("org.jetbrains.dokka.versioning.VersioningPlugin", """{ "version": "$version" }""")
}
}

fun GradleDokkaSourceSetBuilder.perPackageOption(packageNamePrefix: String, action: Action<in GradlePackageOptionsBuilder>) =
perPackageOption {
matchingRegex.set(Regex.escape(packageNamePrefix) + "(\$|\\..*)")
Expand All @@ -401,17 +413,18 @@ gradle.projectsEvaluated {
val buildLatestVersion by tasks.registering

val latestStdlib = createStdLibVersionedDocTask(latestVersion, true)
val latestTest = createKotlinTestVersionedDocTask(latestVersion, true, latestStdlib)
val latestTest = createKotlinTestVersionedDocTask(latestVersion, true)
val latestAll = createAllLibsVersionedDocTask(latestVersion, true, latestStdlib, latestTest)

buildLatestVersion.configure { dependsOn(latestStdlib, latestTest) }
buildLatestVersion.configure { dependsOn(latestStdlib, latestTest, latestAll) }

versions.forEach { version ->
val versionStdlib = createStdLibVersionedDocTask(version, false)
val versionTest = createKotlinTestVersionedDocTask(version, false, versionStdlib)
val versionTest = createKotlinTestVersionedDocTask(version, false)
val versionAll = createAllLibsVersionedDocTask(version, isLatest = false, versionStdlib, versionTest)
if (version != latestVersion) {
latestStdlib.configure { dependsOn(versionStdlib) }
latestTest.configure { dependsOn(versionTest) }
latestAll.configure { dependsOn(versionAll) }
}
buildAllVersions.configure { dependsOn(versionStdlib, versionTest) }
buildAllVersions.configure { dependsOn(versionStdlib, versionTest, versionAll) }
}
}

0 comments on commit 442f3f8

Please sign in to comment.