aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdam <897017+aSemy@users.noreply.github.com>2023-05-25 23:19:27 +0100
committerGitHub <noreply@github.com>2023-05-26 00:19:27 +0200
commitf182a0add34876f74c47100e604f79f46c4ddca2 (patch)
treeab13fdef2c3ae4b807aa5defbff39bb89c3ec2b0
parentf55e22d5fe3f9121b7ed81d0c3f8c6a094dff45c (diff)
downloaddokka-f182a0add34876f74c47100e604f79f46c4ddca2.tar.gz
dokka-f182a0add34876f74c47100e604f79f46c4ddca2.tar.bz2
dokka-f182a0add34876f74c47100e604f79f46c4ddca2.zip
Improve copying base-frontend files between subprojects (#2970)
-rw-r--r--build-logic/src/main/kotlin/org/jetbrains/conventions/dokka-html-frontend-files.gradle.kts31
-rw-r--r--build.gradle.kts1
-rw-r--r--gradle/libs.versions.toml2
-rw-r--r--plugins/base/.gitignore7
-rw-r--r--plugins/base/build.gradle.kts50
-rw-r--r--plugins/base/frontend/build.gradle.kts43
-rw-r--r--settings.gradle.kts1
7 files changed, 87 insertions, 48 deletions
diff --git a/build-logic/src/main/kotlin/org/jetbrains/conventions/dokka-html-frontend-files.gradle.kts b/build-logic/src/main/kotlin/org/jetbrains/conventions/dokka-html-frontend-files.gradle.kts
new file mode 100644
index 00000000..4ccbef26
--- /dev/null
+++ b/build-logic/src/main/kotlin/org/jetbrains/conventions/dokka-html-frontend-files.gradle.kts
@@ -0,0 +1,31 @@
+package org.jetbrains.conventions
+
+import org.gradle.api.attributes.Usage.USAGE_ATTRIBUTE
+
+/**
+ * Utility for sharing the Dokka HTML frontend files between subprojects in a safe, cacheable way.
+ */
+
+plugins {
+ id("org.jetbrains.conventions.base")
+}
+
+/** Apply a distinct attribute to the incoming/outgoing configuration */
+fun AttributeContainer.dokkaHtmlFrontendFilesAttribute() =
+ attribute(USAGE_ATTRIBUTE, objects.named("org.jetbrains.dokka.html-frontend-files"))
+
+// incoming configuration
+val dokkaHtmlFrontendFiles by configurations.registering {
+ description = "Retrieve Dokka HTML frontend files from other subprojects"
+ isCanBeConsumed = false
+ isCanBeResolved = true
+ attributes { dokkaHtmlFrontendFilesAttribute() }
+}
+
+// outgoing configuration
+val dokkaHtmlFrontendFilesElements by configurations.registering {
+ description = "Provide Dokka HTML frontend files to other subprojects"
+ isCanBeConsumed = true
+ isCanBeResolved = false
+ attributes { dokkaHtmlFrontendFilesAttribute() }
+}
diff --git a/build.gradle.kts b/build.gradle.kts
index 0fa437e7..f91a02ac 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -39,7 +39,6 @@ apiValidation {
// note that subprojects are ignored by their name, not their path https://github.com/Kotlin/binary-compatibility-validator/issues/16
ignoredProjects += setOf(
// NAME PATH
- "search-component", // :plugins:search-component
"frontend", // :plugins:base:frontend
"kotlin-analysis", // :kotlin-analysis
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index 9bdb7901..7060a3f1 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -41,6 +41,7 @@ node = "16.13.0"
gradlePlugin-shadow = "7.1.2"
gradlePlugin-nexusPublish = "1.1.0"
gradlePlugin-gradlePluginPublish = "0.20.0"
+gradlePlugin-gradleNode = "3.5.1"
## Test
junit = "5.9.2"
@@ -109,3 +110,4 @@ kotlinx-binaryCompatibilityValidator = { id = "org.jetbrains.kotlinx.binary-comp
shadow = { id = "com.github.johnrengelman.shadow", version.ref = "gradlePlugin-shadow" }
gradlePublish = { id = "com.gradle.plugin-publish", version.ref = "gradlePlugin-gradlePluginPublish" }
nexusPublish = { id = "io.github.gradle-nexus.publish-plugin", version.ref = "gradlePlugin-nexusPublish" }
+gradleNode = { id = "com.github.node-gradle.node", version.ref = "gradlePlugin-gradleNode" }
diff --git a/plugins/base/.gitignore b/plugins/base/.gitignore
deleted file mode 100644
index 11d1825b..00000000
--- a/plugins/base/.gitignore
+++ /dev/null
@@ -1,7 +0,0 @@
-src/main/resources/dokka/scripts/main.js
-src/main/resources/dokka/scripts/main.css
-src/main/resources/dokka/scripts/main.js.map
-src/main/resources/dokka/scripts/highlight-*
-src/main/resources/dokka/scripts/vendors~*
-search-component/dist/
-/src/main/resources/dokka/styles/main.css
diff --git a/plugins/base/build.gradle.kts b/plugins/base/build.gradle.kts
index 98a929ae..b6ba2917 100644
--- a/plugins/base/build.gradle.kts
+++ b/plugins/base/build.gradle.kts
@@ -3,6 +3,7 @@ import org.jetbrains.registerDokkaArtifactPublication
plugins {
id("org.jetbrains.conventions.kotlin-jvm")
id("org.jetbrains.conventions.maven-publish")
+ id("org.jetbrains.conventions.dokka-html-frontend-files")
}
dependencies {
@@ -33,45 +34,40 @@ dependencies {
testImplementation(projects.core.testApi)
testImplementation(platform(libs.junit.bom))
testImplementation(libs.junit.jupiter)
+
+ dokkaHtmlFrontendFiles(projects.plugins.base.frontend) {
+ because("fetch frontend files from subproject :plugins:base:frontend")
+ }
}
-val projectDistDir = project(":plugins:base:frontend").file("dist")
-val generateFrontendFiles = tasks.getByPath(":plugins:base:frontend:generateFrontendFiles")
+// access the frontend files via the dependency on :plugins:base:frontend
+val dokkaHtmlFrontendFiles: Provider<FileCollection> =
+ configurations.dokkaHtmlFrontendFiles.map { frontendFiles ->
+ frontendFiles.incoming.artifacts.artifactFiles
+ }
+
+val preparedokkaHtmlFrontendFiles by tasks.registering(Sync::class) {
+ description = "copy Dokka Base frontend files into the resources directory"
-val copyJsFiles by tasks.registering(Copy::class) {
- from(projectDistDir) {
+ from(dokkaHtmlFrontendFiles) {
include("*.js")
+ into("dokka/scripts")
}
- dependsOn(generateFrontendFiles)
- destinationDir =
- File(sourceSets.main.get().resources.sourceDirectories.singleFile, "dokka/scripts")
-}
-val copyCssFiles by tasks.registering(Copy::class) {
- from(projectDistDir) {
+ from(dokkaHtmlFrontendFiles) {
include("*.css")
+ into("dokka/styles")
}
- dependsOn(generateFrontendFiles)
- destinationDir =
- File(sourceSets.main.get().resources.sourceDirectories.singleFile, "dokka/styles")
-}
-val copyFrontend by tasks.registering {
- dependsOn(copyJsFiles, copyCssFiles)
+ into(layout.buildDirectory.dir("generated/src/main/resources"))
}
-tasks {
- processResources {
- dependsOn(copyFrontend)
- }
-
- sourcesJar {
- dependsOn(processResources)
- }
+sourceSets.main {
+ resources.srcDir(preparedokkaHtmlFrontendFiles.map { it.destinationDir })
+}
- test {
- maxHeapSize = "4G"
- }
+tasks.test {
+ maxHeapSize = "4G"
}
registerDokkaArtifactPublication("dokkaBase") {
diff --git a/plugins/base/frontend/build.gradle.kts b/plugins/base/frontend/build.gradle.kts
index cadf3fae..2d8bbb7f 100644
--- a/plugins/base/frontend/build.gradle.kts
+++ b/plugins/base/frontend/build.gradle.kts
@@ -1,6 +1,10 @@
+import com.github.gradle.node.npm.task.NpmTask
+import org.jetbrains.kotlin.util.parseSpaceSeparatedArgs
+
+@Suppress("DSL_SCOPE_VIOLATION") // fixed in Gradle 8.1 https://github.com/gradle/gradle/pull/23639
plugins {
- base
- id("com.github.node-gradle.node") version "3.2.1"
+ id("org.jetbrains.conventions.dokka-html-frontend-files")
+ alias(libs.plugins.gradleNode)
}
node {
@@ -11,19 +15,34 @@ node {
distBaseUrl.set(null as String?) // Strange cast to avoid overload ambiguity
}
-val npmRunBuild = tasks.getByName("npm_run_build") {
- inputs.dir(file("src/main"))
- inputs.files(file("package.json"), file("webpack.config.js"))
- outputs.dir(file("dist/"))
+val distributionDirectory = layout.projectDirectory.dir("dist")
+
+val npmRunBuild by tasks.registering(NpmTask::class) {
+ dependsOn(tasks.npmInstall)
+
+ npmCommand.set(parseSpaceSeparatedArgs("run build"))
+
+ inputs.dir("src/main")
+ inputs.files(
+ "package.json",
+ "webpack.config.js",
+ )
+
+ outputs.dir(distributionDirectory)
outputs.cacheIf { true }
}
-task("generateFrontendFiles") {
- dependsOn(npmRunBuild)
+configurations.dokkaHtmlFrontendFilesElements.configure {
+ outgoing {
+ artifact(distributionDirectory) {
+ builtBy(npmRunBuild)
+ }
+ }
}
-tasks {
- clean {
- delete(file("node_modules"), file("dist"))
- }
+tasks.clean {
+ delete(
+ file("node_modules"),
+ file("dist"),
+ )
}
diff --git a/settings.gradle.kts b/settings.gradle.kts
index 42fc9fdd..a1229458 100644
--- a/settings.gradle.kts
+++ b/settings.gradle.kts
@@ -68,7 +68,6 @@ include(
":plugins:base",
":plugins:base:frontend",
- ":plugins:base:search-component",
":plugins:base:base-test-utils",
":plugins:all-modules-page",
":plugins:templating",