diff options
author | Ignat Beresnev <ignat.beresnev@jetbrains.com> | 2023-11-10 11:46:54 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-11-10 11:46:54 +0100 |
commit | 8e5c63d035ef44a269b8c43430f43f5c8eebfb63 (patch) | |
tree | 1b915207b2b9f61951ddbf0ff2e687efd053d555 /plugins/versioning/src/main/kotlin/org/jetbrains | |
parent | a44efd4ba0c2e4ab921ff75e0f53fc9335aa79db (diff) | |
download | dokka-8e5c63d035ef44a269b8c43430f43f5c8eebfb63.tar.gz dokka-8e5c63d035ef44a269b8c43430f43f5c8eebfb63.tar.bz2 dokka-8e5c63d035ef44a269b8c43430f43f5c8eebfb63.zip |
Restructure the project to utilize included builds (#3174)
* Refactor and simplify artifact publishing
* Update Gradle to 8.4
* Refactor and simplify convention plugins and build scripts
Fixes #3132
---------
Co-authored-by: Adam <897017+aSemy@users.noreply.github.com>
Co-authored-by: Oleg Yukhnevich <whyoleg@gmail.com>
Diffstat (limited to 'plugins/versioning/src/main/kotlin/org/jetbrains')
9 files changed, 0 insertions, 486 deletions
diff --git a/plugins/versioning/src/main/kotlin/org/jetbrains/dokka/versioning/DefaultPreviousDocumentationCopyPostAction.kt b/plugins/versioning/src/main/kotlin/org/jetbrains/dokka/versioning/DefaultPreviousDocumentationCopyPostAction.kt deleted file mode 100644 index 7e03f59c..00000000 --- a/plugins/versioning/src/main/kotlin/org/jetbrains/dokka/versioning/DefaultPreviousDocumentationCopyPostAction.kt +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license. - */ - -package org.jetbrains.dokka.versioning - -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.coroutineScope -import kotlinx.coroutines.launch -import kotlinx.coroutines.runBlocking -import org.jetbrains.dokka.plugability.DokkaContext -import org.jetbrains.dokka.plugability.plugin -import org.jetbrains.dokka.plugability.query -import org.jetbrains.dokka.plugability.querySingle -import org.jetbrains.dokka.renderers.PostAction -import org.jetbrains.dokka.templates.TemplateProcessingStrategy -import org.jetbrains.dokka.templates.TemplatingPlugin -import java.io.File - -public class DefaultPreviousDocumentationCopyPostAction( - private val context: DokkaContext -) : PostAction { - private val versioningStorage by lazy { context.plugin<VersioningPlugin>().querySingle { versioningStorage } } - private val processingStrategies: List<TemplateProcessingStrategy> = - context.plugin<TemplatingPlugin>().query { templateProcessingStrategy } - - override fun invoke() { - versioningStorage.createVersionFile() - versioningStorage.previousVersions.forEach { (_, dirs) -> copyVersion(dirs.src, dirs.dst) } - } - - private fun copyVersion(versionRoot: File, targetParent: File) { - targetParent.apply { mkdirs() } - val ignoreDir = versionRoot.resolve(VersioningConfiguration.OLDER_VERSIONS_DIR) - runBlocking(Dispatchers.Default) { - coroutineScope { - versionRoot.listFiles().orEmpty() - .filter { it.absolutePath != ignoreDir.absolutePath } - .forEach { versionRootContent -> - launch { - processRecursively(versionRootContent, targetParent) - } - } - } - } - } - - private fun processRecursively(versionRootContent: File, targetParent: File) { - if (versionRootContent.isDirectory) { - val target = targetParent.resolve(versionRootContent.name).also { it.mkdir() } - versionRootContent.listFiles()?.forEach { - processRecursively(it, target) - } - } else if (versionRootContent.extension == "html") processingStrategies.first { - it.process(versionRootContent, targetParent.resolve(versionRootContent.name), null) - } else { - versionRootContent.copyTo(targetParent.resolve(versionRootContent.name), overwrite = true) - } - } -} diff --git a/plugins/versioning/src/main/kotlin/org/jetbrains/dokka/versioning/ReplaceVersionCommandConsumer.kt b/plugins/versioning/src/main/kotlin/org/jetbrains/dokka/versioning/ReplaceVersionCommandConsumer.kt deleted file mode 100644 index b31afb9a..00000000 --- a/plugins/versioning/src/main/kotlin/org/jetbrains/dokka/versioning/ReplaceVersionCommandConsumer.kt +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license. - */ - -package org.jetbrains.dokka.versioning - -import kotlinx.html.unsafe -import kotlinx.html.visit -import kotlinx.html.visitAndFinalize -import org.jetbrains.dokka.base.renderers.html.TemplateBlock -import org.jetbrains.dokka.base.renderers.html.command.consumers.ImmediateResolutionTagConsumer -import org.jetbrains.dokka.base.renderers.html.templateCommandFor -import org.jetbrains.dokka.base.templating.Command -import org.jetbrains.dokka.base.templating.ImmediateHtmlCommandConsumer -import org.jetbrains.dokka.base.templating.ReplaceVersionsCommand -import org.jetbrains.dokka.plugability.DokkaContext -import org.jetbrains.dokka.plugability.plugin -import org.jetbrains.dokka.plugability.querySingle - -public class ReplaceVersionCommandConsumer(context: DokkaContext) : ImmediateHtmlCommandConsumer { - - private val versionsNavigationCreator = - context.plugin<VersioningPlugin>().querySingle { versionsNavigationCreator } - private val versioningStorage = - context.plugin<VersioningPlugin>().querySingle { versioningStorage } - - override fun canProcess(command: Command): Boolean = command is ReplaceVersionsCommand - - override fun <R> processCommand( - command: Command, - block: TemplateBlock, - tagConsumer: ImmediateResolutionTagConsumer<R> - ) { - command as ReplaceVersionsCommand - templateCommandFor(command, tagConsumer).visit { - unsafe { - +versionsNavigationCreator(versioningStorage.currentVersion.dir.resolve(command.location)) - } - } - } - - override fun <R> processCommandAndFinalize( - command: Command, - block: TemplateBlock, - tagConsumer: ImmediateResolutionTagConsumer<R> - ): R { - command as ReplaceVersionsCommand - return templateCommandFor(command, tagConsumer).visitAndFinalize(tagConsumer) { - unsafe { - +versionsNavigationCreator(versioningStorage.currentVersion.dir.resolve(command.location)) - } - } - } -} diff --git a/plugins/versioning/src/main/kotlin/org/jetbrains/dokka/versioning/ReplaceVersionsCommand.kt b/plugins/versioning/src/main/kotlin/org/jetbrains/dokka/versioning/ReplaceVersionsCommand.kt deleted file mode 100644 index c9bc57b2..00000000 --- a/plugins/versioning/src/main/kotlin/org/jetbrains/dokka/versioning/ReplaceVersionsCommand.kt +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license. - */ - -package org.jetbrains.dokka.versioning - - -import org.jetbrains.dokka.base.templating.Command -import org.jetbrains.dokka.base.templating.ReplaceVersionsCommand -import org.jetbrains.dokka.plugability.DokkaContext -import org.jetbrains.dokka.plugability.plugin -import org.jetbrains.dokka.plugability.querySingle -import org.jetbrains.dokka.templates.CommandHandler -import org.jsoup.nodes.Element -import java.io.File - -public class ReplaceVersionCommandHandler(context: DokkaContext) : CommandHandler { - - public val versionsNavigationCreator: VersionsNavigationCreator by lazy { - context.plugin<VersioningPlugin>().querySingle { versionsNavigationCreator } - } - - override fun canHandle(command: Command): Boolean = command is ReplaceVersionsCommand - - override fun handleCommandAsTag(command: Command, body: Element, input: File, output: File) { - body.empty() - body.append(versionsNavigationCreator(output)) - } -} diff --git a/plugins/versioning/src/main/kotlin/org/jetbrains/dokka/versioning/VersioningConfiguration.kt b/plugins/versioning/src/main/kotlin/org/jetbrains/dokka/versioning/VersioningConfiguration.kt deleted file mode 100644 index 91b1117d..00000000 --- a/plugins/versioning/src/main/kotlin/org/jetbrains/dokka/versioning/VersioningConfiguration.kt +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license. - */ - -package org.jetbrains.dokka.versioning - -import org.jetbrains.dokka.plugability.ConfigurableBlock -import org.jetbrains.dokka.plugability.DokkaContext -import java.io.File - -public data class VersioningConfiguration( - var olderVersionsDir: File? = defaultOlderVersionsDir, - var olderVersions: List<File>? = defaultOlderVersions, - var versionsOrdering: List<String>? = defaultVersionsOrdering, - var version: String? = defaultVersion, - var renderVersionsNavigationOnAllPages: Boolean? = defaultRenderVersionsNavigationOnAllPages -) : ConfigurableBlock { - internal fun versionFromConfigurationOrModule(dokkaContext: DokkaContext): String = - version ?: dokkaContext.configuration.moduleVersion ?: "1.0" - - internal fun allOlderVersions(): List<File> { - if (olderVersionsDir != null) - assert(olderVersionsDir!!.isDirectory) { "Supplied previous version $olderVersionsDir is not a directory!" } - - return olderVersionsDir?.listFiles()?.toList().orEmpty() + olderVersions.orEmpty() - } - - public companion object { - public val defaultOlderVersionsDir: File? = null - public val defaultOlderVersions: List<File>? = null - public val defaultVersionsOrdering: List<String>? = null - public val defaultVersion: String? = null - public val defaultRenderVersionsNavigationOnAllPages: Boolean = true - - public const val OLDER_VERSIONS_DIR: String = "older" - public const val VERSIONS_FILE: String = "version.json" - } -} diff --git a/plugins/versioning/src/main/kotlin/org/jetbrains/dokka/versioning/VersioningPlugin.kt b/plugins/versioning/src/main/kotlin/org/jetbrains/dokka/versioning/VersioningPlugin.kt deleted file mode 100644 index 2e1fde8d..00000000 --- a/plugins/versioning/src/main/kotlin/org/jetbrains/dokka/versioning/VersioningPlugin.kt +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license. - */ - -package org.jetbrains.dokka.versioning - -import org.jetbrains.dokka.CoreExtensions.postActions -import org.jetbrains.dokka.base.DokkaBase -import org.jetbrains.dokka.base.templating.ImmediateHtmlCommandConsumer -import org.jetbrains.dokka.plugability.* -import org.jetbrains.dokka.renderers.PostAction -import org.jetbrains.dokka.templates.CommandHandler -import org.jetbrains.dokka.templates.TemplatingPlugin -import org.jetbrains.dokka.transformers.pages.PageTransformer - -public class VersioningPlugin : DokkaPlugin() { - - public val versioningStorage: ExtensionPoint<VersioningStorage> by extensionPoint() - public val versionsNavigationCreator: ExtensionPoint<VersionsNavigationCreator> by extensionPoint() - public val versionsOrdering: ExtensionPoint<VersionsOrdering> by extensionPoint() - - private val dokkaBase by lazy { plugin<DokkaBase>() } - private val templatingPlugin by lazy { plugin<TemplatingPlugin>() } - - public val defaultVersioningStorage: Extension<VersioningStorage, *, *> by extending { - versioningStorage providing ::DefaultVersioningStorage - } - - public val defaultVersioningNavigationCreator: Extension<VersionsNavigationCreator, *, *> by extending { - versionsNavigationCreator providing ::HtmlVersionsNavigationCreator - } - - public val replaceVersionCommandHandler: Extension<CommandHandler, *, *> by extending { - templatingPlugin.directiveBasedCommandHandlers providing ::ReplaceVersionCommandHandler override templatingPlugin.replaceVersionCommandHandler - } - - public val resolveLinkConsumer: Extension<ImmediateHtmlCommandConsumer, *, *> by extending { - dokkaBase.immediateHtmlCommandConsumer providing ::ReplaceVersionCommandConsumer override dokkaBase.replaceVersionConsumer - } - - public val cssStyleInstaller: Extension<PageTransformer, *, *> by extending { - dokkaBase.htmlPreprocessors providing ::MultiModuleStylesInstaller order { - after(dokkaBase.assetsInstaller) - before(dokkaBase.customResourceInstaller) - } - } - - public val notFoundPageInstaller: Extension<PageTransformer, *, *> by extending { - dokkaBase.htmlPreprocessors providing ::NotFoundPageInstaller order { - after(dokkaBase.assetsInstaller) - before(dokkaBase.customResourceInstaller) - } applyIf { !delayTemplateSubstitution } - } - - public val versionsDefaultOrdering: Extension<VersionsOrdering, *, *> by extending { - versionsOrdering providing { ctx -> - configuration<VersioningPlugin, VersioningConfiguration>(ctx)?.versionsOrdering?.let { - ByConfigurationVersionOrdering(ctx) - } ?: SemVerVersionOrdering() - } - } - - public val previousDocumentationCopyPostAction: Extension<PostAction, *, *> by extending { - postActions providing ::DefaultPreviousDocumentationCopyPostAction applyIf { !delayTemplateSubstitution } - } - - @OptIn(DokkaPluginApiPreview::class) - override fun pluginApiPreviewAcknowledgement(): PluginApiPreviewAcknowledgement = - PluginApiPreviewAcknowledgement -} diff --git a/plugins/versioning/src/main/kotlin/org/jetbrains/dokka/versioning/VersioningStorage.kt b/plugins/versioning/src/main/kotlin/org/jetbrains/dokka/versioning/VersioningStorage.kt deleted file mode 100644 index 7c9d1da0..00000000 --- a/plugins/versioning/src/main/kotlin/org/jetbrains/dokka/versioning/VersioningStorage.kt +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license. - */ - -package org.jetbrains.dokka.versioning - -import com.fasterxml.jackson.annotation.JsonProperty -import com.fasterxml.jackson.databind.ObjectMapper -import com.fasterxml.jackson.module.kotlin.readValue -import org.jetbrains.dokka.plugability.DokkaContext -import org.jetbrains.dokka.plugability.configuration -import java.io.File - -public data class VersionDirs(val src: File, val dst: File) -public data class CurrentVersion(val name: String, val dir: File) - -public interface VersioningStorage { - public val previousVersions: Map<VersionId, VersionDirs> - public val currentVersion: CurrentVersion - - public fun createVersionFile() -} - -public typealias VersionId = String - -public class DefaultVersioningStorage( - public val context: DokkaContext -) : VersioningStorage { - - private val mapper = ObjectMapper() - private val configuration = configuration<VersioningPlugin, VersioningConfiguration>(context) - - override val previousVersions: Map<VersionId, VersionDirs> by lazy { - configuration?.let { versionsConfiguration -> - getPreviousVersions(versionsConfiguration.allOlderVersions(), context.configuration.outputDir) - } ?: emptyMap() - } - - override val currentVersion: CurrentVersion by lazy { - configuration?.let { versionsConfiguration -> - CurrentVersion(versionsConfiguration.versionFromConfigurationOrModule(context), - context.configuration.outputDir) - }?: CurrentVersion(context.configuration.moduleVersion.orEmpty(), context.configuration.outputDir) - } - - override fun createVersionFile() { - mapper.writeValue( - currentVersion.dir.resolve(VersioningConfiguration.VERSIONS_FILE), - Version(currentVersion.name) - ) - } - - private fun getPreviousVersions(olderVersions: List<File>, output: File): Map<String, VersionDirs> = - versionsFrom(olderVersions).associate { (key, srcDir) -> - key to VersionDirs(srcDir, output.resolve(VersioningConfiguration.OLDER_VERSIONS_DIR).resolve(key)) - } - - private fun versionsFrom(olderVersions: List<File>) = - olderVersions.mapNotNull { versionDir -> - versionDir.listFiles { _, name -> name == VersioningConfiguration.VERSIONS_FILE }?.firstOrNull() - ?.let { file -> - val versionsContent = mapper.readValue<Version>(file) - Pair(versionsContent.version, versionDir) - }.also { - if (it == null) context.logger.warn("Failed to find versions file named ${VersioningConfiguration.VERSIONS_FILE} in $versionDir") - } - } - - private data class Version( - @JsonProperty("version") val version: String, - ) -} diff --git a/plugins/versioning/src/main/kotlin/org/jetbrains/dokka/versioning/VersionsNavigationCreator.kt b/plugins/versioning/src/main/kotlin/org/jetbrains/dokka/versioning/VersionsNavigationCreator.kt deleted file mode 100644 index 59ce93e2..00000000 --- a/plugins/versioning/src/main/kotlin/org/jetbrains/dokka/versioning/VersionsNavigationCreator.kt +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license. - */ - -package org.jetbrains.dokka.versioning - -import kotlinx.html.a -import kotlinx.html.div -import kotlinx.html.stream.appendHTML -import org.jetbrains.dokka.plugability.DokkaContext -import org.jetbrains.dokka.plugability.configuration -import org.jetbrains.dokka.plugability.plugin -import org.jetbrains.dokka.plugability.querySingle -import org.jetbrains.dokka.utilities.urlEncoded -import java.io.File - -public fun interface VersionsNavigationCreator { - public operator fun invoke(output: File): String -} - -public class HtmlVersionsNavigationCreator( - private val context: DokkaContext -) : VersionsNavigationCreator { - - private val versioningStorage by lazy { context.plugin<VersioningPlugin>().querySingle { versioningStorage } } - - private val versionsOrdering by lazy { context.plugin<VersioningPlugin>().querySingle { versionsOrdering } } - - private val isOnlyOnRootPage = - configuration<VersioningPlugin, VersioningConfiguration>(context)?.renderVersionsNavigationOnAllPages == false - - private val versions: Map<VersionId, File> by lazy { - versioningStorage.previousVersions.map { (k, v) -> k to v.dst }.toMap() + - (versioningStorage.currentVersion.name to versioningStorage.currentVersion.dir) - } - - override fun invoke(output: File): String { - if (versions.size == 1) { - return versioningStorage.currentVersion.name - } - val position = output.takeIf { it.isDirectory } ?: output.parentFile - if (isOnlyOnRootPage) { - getActiveVersion(position)?.takeIf { - it.value == versioningStorage.currentVersion.dir - && it.value != position - }?.also { return@invoke it.key } - } - return versions - .let { versions -> versionsOrdering.order(versions.keys.toList()).map { it to versions[it] } } - .takeIf { it.isNotEmpty() } - ?.let { orderedVersions -> - StringBuilder().appendHTML().div(classes = "versions-dropdown") { - val activeVersion = getActiveVersion(position) - val relativePosition: String = activeVersion?.value?.let { output.toRelativeString(it) } ?: "index.html" - div(classes = "versions-dropdown-button") { - activeVersion?.key?.let { text(it) } - } - div(classes = "versions-dropdown-data") { - orderedVersions.forEach { (version, path) -> - if (version == activeVersion?.key) { - a(href = output.name) { text(version) } - } else { - val isExistsFile = - if (version == versioningStorage.currentVersion.name) - path?.resolve(relativePosition)?.exists() == true - else - versioningStorage.previousVersions[version]?.src?.resolve(relativePosition) - ?.exists() == true - - val absolutePath = - if (isExistsFile) - path?.resolve(relativePosition) - else - versioningStorage.currentVersion.dir.resolve("not-found-version.html") - - a(href = absolutePath?.toRelativeString(position) + - if (!isExistsFile) "?v=" + version.urlEncoded() else "") { - text(version) - } - } - } - } - }.toString() - }.orEmpty() - } - - private fun getActiveVersion(position: File) = - versions.minByOrNull { (_, versionLocation) -> - versionLocation.let { position.toRelativeString(it).length } - } -} diff --git a/plugins/versioning/src/main/kotlin/org/jetbrains/dokka/versioning/VersionsOrdering.kt b/plugins/versioning/src/main/kotlin/org/jetbrains/dokka/versioning/VersionsOrdering.kt deleted file mode 100644 index 3d1fbe3d..00000000 --- a/plugins/versioning/src/main/kotlin/org/jetbrains/dokka/versioning/VersionsOrdering.kt +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license. - */ - -package org.jetbrains.dokka.versioning - -import org.apache.maven.artifact.versioning.ComparableVersion -import org.jetbrains.dokka.plugability.DokkaContext -import org.jetbrains.dokka.plugability.configuration - -public fun interface VersionsOrdering { - public fun order(records: List<VersionId>): List<VersionId> -} - -public class ByConfigurationVersionOrdering( - public val dokkaContext: DokkaContext -) : VersionsOrdering { - override fun order(records: List<VersionId>): List<VersionId> = - configuration<VersioningPlugin, VersioningConfiguration>(dokkaContext)?.versionsOrdering - ?: throw IllegalStateException("Attempted to use a configuration ordering without providing configuration") -} - -public class SemVerVersionOrdering : VersionsOrdering { - override fun order(records: List<VersionId>): List<VersionId> = - records.map { it to ComparableVersion(it) }.sortedByDescending { it.second }.map { it.first } -} diff --git a/plugins/versioning/src/main/kotlin/org/jetbrains/dokka/versioning/htmlPreprocessors.kt b/plugins/versioning/src/main/kotlin/org/jetbrains/dokka/versioning/htmlPreprocessors.kt deleted file mode 100644 index 9bdaf7d5..00000000 --- a/plugins/versioning/src/main/kotlin/org/jetbrains/dokka/versioning/htmlPreprocessors.kt +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license. - */ - -package org.jetbrains.dokka.versioning - -import org.jetbrains.dokka.pages.RendererSpecificResourcePage -import org.jetbrains.dokka.pages.RenderingStrategy -import org.jetbrains.dokka.pages.RootPageNode -import org.jetbrains.dokka.plugability.DokkaContext -import org.jetbrains.dokka.transformers.pages.PageTransformer - -public class MultiModuleStylesInstaller( - private val dokkaContext: DokkaContext -) : PageTransformer { - private val stylesPages = listOf( - "styles/multimodule.css", - ) - - override fun invoke(input: RootPageNode): RootPageNode = - input.let { root -> - if (dokkaContext.configuration.delayTemplateSubstitution) root - else root.modified(children = input.children + stylesPages.toRenderSpecificResourcePage()) - }.transformContentPagesTree { - it.modified( - embeddedResources = it.embeddedResources + stylesPages - ) - } -} - -public class NotFoundPageInstaller( - private val dokkaContext: DokkaContext -) : PageTransformer { - private val notFoundPage = listOf( - "not-found-version.html", - ) - - override fun invoke(input: RootPageNode): RootPageNode = - input.let { root -> - if (dokkaContext.configuration.delayTemplateSubstitution) root - else root.modified(children = input.children + notFoundPage.toRenderSpecificResourcePage()) - } -} - -private fun List<String>.toRenderSpecificResourcePage(): List<RendererSpecificResourcePage> = - map { RendererSpecificResourcePage(it, emptyList(), RenderingStrategy.Copy("/dokka/$it")) } |