154 lines
4.5 KiB
Kotlin
Vendored
154 lines
4.5 KiB
Kotlin
Vendored
import nl.jolanrensen.kodex.gradle.creatingRunKodexTask
|
|
import org.gradle.jvm.tasks.Jar
|
|
|
|
plugins {
|
|
with(convention.plugins) {
|
|
alias(kotlinJvm8)
|
|
}
|
|
with(libs.plugins) {
|
|
alias(publisher)
|
|
alias(serialization)
|
|
alias(kodex)
|
|
alias(binary.compatibility.validator)
|
|
alias(kotlinx.benchmark)
|
|
}
|
|
idea
|
|
}
|
|
|
|
group = "org.jetbrains.kotlinx"
|
|
|
|
dependencies {
|
|
api(projects.core)
|
|
|
|
// for reading/writing JSON <-> DataFrame/DataRow in CSV/TSV/Delim
|
|
// can safely be excluded when working without JSON and only writing flat dataframes
|
|
api(projects.dataframeJson)
|
|
|
|
// for csv reading
|
|
api(libs.deephavenCsv)
|
|
// for csv writing
|
|
api(libs.commonsCsv)
|
|
implementation(libs.commonsIo)
|
|
implementation(libs.sl4j)
|
|
implementation(libs.kotlinLogging)
|
|
implementation(libs.kotlin.reflect)
|
|
|
|
testImplementation(libs.kotlinx.benchmark.runtime)
|
|
testImplementation(libs.junit)
|
|
testImplementation(libs.sl4jsimple)
|
|
testImplementation(libs.kotestAssertions) {
|
|
exclude("org.jetbrains.kotlin", "kotlin-stdlib-jdk8")
|
|
}
|
|
}
|
|
|
|
benchmark {
|
|
targets {
|
|
register("test")
|
|
}
|
|
}
|
|
|
|
val generatedSourcesFolderName = "generated-sources"
|
|
|
|
// Backup the kotlin source files location
|
|
val kotlinMainSources = kotlin.sourceSets.main
|
|
.get()
|
|
.kotlin.sourceDirectories
|
|
.toList()
|
|
val kotlinTestSources = kotlin.sourceSets.test
|
|
.get()
|
|
.kotlin.sourceDirectories
|
|
.toList()
|
|
|
|
fun pathOf(vararg parts: String) = parts.joinToString(File.separator)
|
|
|
|
// Include both test and main sources for cross-referencing, Exclude generated sources
|
|
val processKDocsMainSources = (kotlinMainSources + kotlinTestSources)
|
|
.filterNot { pathOf("build", "generated") in it.path }
|
|
|
|
// sourceset of the generated sources as a result of `processKDocsMain`, this will create linter tasks
|
|
val generatedSources by kotlin.sourceSets.creating {
|
|
kotlin {
|
|
setSrcDirs(
|
|
listOf(
|
|
"$generatedSourcesFolderName/src/main/kotlin",
|
|
"$generatedSourcesFolderName/src/main/java",
|
|
),
|
|
)
|
|
}
|
|
}
|
|
|
|
// Task to generate the processed documentation
|
|
val processKDocsMain by creatingRunKodexTask(processKDocsMainSources) {
|
|
group = "KDocs"
|
|
target = file(generatedSourcesFolderName)
|
|
|
|
// false, so `runKtlintFormatOverGeneratedSourcesSourceSet` can format the output
|
|
outputReadOnly = false
|
|
|
|
exportAsHtml {
|
|
dir = file("../docs/StardustDocs/resources/snippets/kdocs")
|
|
}
|
|
finalizedBy("runKtlintFormatOverGeneratedSourcesSourceSet")
|
|
}
|
|
|
|
tasks.named("ktlintGeneratedSourcesSourceSetCheck") {
|
|
onlyIf { false }
|
|
}
|
|
tasks.named("runKtlintCheckOverGeneratedSourcesSourceSet") {
|
|
onlyIf { false }
|
|
}
|
|
|
|
// If `changeJarTask` is run, modify all Jar tasks such that before running the Kotlin sources are set to
|
|
// the target of `processKdocMain`, and they are returned to normal afterward.
|
|
// This is usually only done when publishing
|
|
val changeJarTask by tasks.registering {
|
|
outputs.upToDateWhen { project.hasProperty("skipKodex") }
|
|
doFirst {
|
|
tasks.withType<Jar> {
|
|
doFirst {
|
|
require(generatedSources.kotlin.srcDirs.toList().isNotEmpty()) {
|
|
logger.error("`processKDocsMain`'s outputs are empty, did `processKDocsMain` run before this task?")
|
|
}
|
|
kotlin.sourceSets.main {
|
|
kotlin.setSrcDirs(generatedSources.kotlin.srcDirs)
|
|
}
|
|
logger.lifecycle("$this is run with modified sources: \"$generatedSourcesFolderName\"")
|
|
}
|
|
|
|
doLast {
|
|
kotlin.sourceSets.main {
|
|
kotlin.setSrcDirs(kotlinMainSources)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// if `processKDocsMain` runs, the Jar tasks must run after it so the generated-sources are there
|
|
tasks.withType<Jar> {
|
|
mustRunAfter(changeJarTask, processKDocsMain)
|
|
}
|
|
|
|
// modify all publishing tasks to depend on `changeJarTask` so the sources are swapped out with generated sources
|
|
tasks.configureEach {
|
|
if (!project.hasProperty("skipKodex") && name.startsWith("publish")) {
|
|
dependsOn(processKDocsMain, changeJarTask)
|
|
}
|
|
}
|
|
|
|
// Exclude the generated/processed sources from the IDE
|
|
idea {
|
|
module {
|
|
excludeDirs.add(file(generatedSourcesFolderName))
|
|
}
|
|
}
|
|
|
|
kotlinPublications {
|
|
publication {
|
|
publicationName = "dataframeCsv"
|
|
artifactId = project.name
|
|
description = "CSV support for Kotlin DataFrame"
|
|
packageName = artifactId
|
|
}
|
|
}
|