/*
* SPDX-FileCopyrightText: 2024 The Refinery Authors
*
* SPDX-License-Identifier: EPL-2.0
*/
import org.siouan.frontendgradleplugin.infrastructure.gradle.RunYarn
import tools.refinery.gradle.utils.SonarPropertiesUtils
plugins {
id("tools.refinery.gradle.frontend-workspace")
id("tools.refinery.gradle.sonarqube")
}
frontend {
assembleScript.set("run build")
}
val javadocs: Configuration by configurations.creating {
isCanBeConsumed = false
isCanBeResolved = true
}
dependencies {
javadocs(project(":refinery-generator", "javadocElements"))
javadocs(project(":refinery-generator-cli", "javadocElements"))
javadocs(project(":refinery-interpreter", "javadocElements"))
javadocs(project(":refinery-interpreter-localsearch", "javadocElements"))
javadocs(project(":refinery-interpreter-rete", "javadocElements"))
javadocs(project(":refinery-interpreter-rete-recipes", "javadocElements"))
javadocs(project(":refinery-language", "javadocElements"))
javadocs(project(":refinery-language-ide", "javadocElements"))
javadocs(project(":refinery-language-model", "javadocElements"))
javadocs(project(":refinery-language-semantics", "javadocElements"))
javadocs(project(":refinery-language-web", "javadocElements"))
javadocs(project(":refinery-logic", "javadocElements"))
javadocs(project(":refinery-store", "javadocElements"))
javadocs(project(":refinery-store-dse", "javadocElements"))
javadocs(project(":refinery-store-dse-visualization", "javadocElements"))
javadocs(project(":refinery-store-query", "javadocElements"))
javadocs(project(":refinery-store-query-interpreter", "javadocElements"))
javadocs(project(":refinery-store-reasoning", "javadocElements"))
javadocs(project(":refinery-store-reasoning-scope", "javadocElements"))
javadocs(project(":refinery-store-reasoning-smt", "javadocElements"))
}
val srcDir = "src"
val docusaurusOutputDir = layout.buildDirectory.dir("docusaurus")
val javadocsDir = layout.buildDirectory.dir("javadocs/api/javadoc")
val configFiles: FileCollection = files(
rootProject.file("yarn.lock"),
rootProject.file("package.json"),
"package.json",
rootProject.file("tsconfig.base.json"),
"tsconfig.json",
"babel.config.config.ts",
"docusaurus.config.ts",
)
val lintConfigFiles: FileCollection = configFiles + files(
rootProject.file(".eslintrc.cjs"),
rootProject.file("prettier.config.cjs")
)
tasks {
val extractJavadocs by registering {
dependsOn(javadocs)
outputs.dir(javadocsDir)
doFirst {
delete(javadocsDir)
}
doLast {
javadocs.resolvedConfiguration.resolvedArtifacts.forEach { artifact ->
copy {
from(zipTree(artifact.file))
into(javadocsDir.map { root -> root.dir(artifact.moduleVersion.id.name) })
}
}
}
}
assembleFrontend {
dependsOn(extractJavadocs)
inputs.dir(srcDir)
inputs.dir("static")
inputs.dir(javadocsDir)
inputs.files(configFiles)
outputs.dir(docusaurusOutputDir)
}
val typeCheckFrontend by registering(RunYarn::class) {
dependsOn(installFrontend)
inputs.dir(srcDir)
inputs.files(configFiles)
outputs.dir(layout.buildDirectory.dir("typescript"))
script.set("run typecheck")
group = "verification"
description = "Check for TypeScript type errors."
}
val lintFrontend by registering(RunYarn::class) {
dependsOn(installFrontend)
dependsOn(typeCheckFrontend)
inputs.dir(srcDir)
inputs.files(lintConfigFiles)
outputs.file(layout.buildDirectory.file("eslint.json"))
script.set("run lint")
group = "verification"
description = "Check for TypeScript lint errors and warnings."
}
register("fixFrontend") {
dependsOn(installFrontend)
dependsOn(typeCheckFrontend)
inputs.dir(srcDir)
inputs.files(lintConfigFiles)
script.set("run lint:fix")
group = "verification"
description = "Check for TypeScript lint errors and warnings."
}
check {
dependsOn(typeCheckFrontend)
dependsOn(lintFrontend)
}
clean {
delete(".docusaurus")
delete(".yarn")
}
}
sonarqube.properties {
SonarPropertiesUtils.addToList(properties, "sonar.sources", srcDir)
property("sonar.nodejs.executable", "${frontend.nodeInstallDirectory.get()}/bin/node")
property("sonar.eslint.reportPaths", "${layout.buildDirectory.get()}/eslint.json")
}