aboutsummaryrefslogtreecommitdiff
path: root/plugins/base/frontend/build.gradle.kts
blob: a4e0bbc04d402ac0d7225f56b22d65955f697b54 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
/*
 * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
 */

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 {
    id("org.jetbrains.conventions.dokka-html-frontend-files")
    alias(libs.plugins.gradleNode)
}

node {
    version.set(libs.versions.node)

    // https://github.com/node-gradle/gradle-node-plugin/blob/3.5.1/docs/faq.md#is-this-plugin-compatible-with-centralized-repositories-declaration
    download.set(true)
    distBaseUrl.set(null as String?) // Strange cast to avoid overload ambiguity
}

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 }
}

configurations.dokkaHtmlFrontendFilesElements.configure {
    outgoing {
        artifact(distributionDirectory) {
            builtBy(npmRunBuild)
        }
    }
}

tasks.clean {
    delete(
        file("node_modules"),
        file("dist"),
    )
}