/* * Copyright 2017-2022 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license. */ import kotlinx.validation.* import org.jetbrains.dokka.gradle.* plugins { base alias(libs.plugins.knit) id("org.jetbrains.kotlinx.binary-compatibility-validator") id("org.jetbrains.dokka") id("benchmark-conventions") id("publishing-check-conventions") id("kover-conventions") alias(libs.plugins.serialization) apply false } repositories { mavenCentral() maven("https://maven.pkg.jetbrains.space/kotlin/p/dokka/dev") // kotlin-dev with space redirector maven("https://cache-redirector.jetbrains.com/maven.pkg.jetbrains.space/kotlin/p/kotlin/dev") // For Dokka that depends on kotlinx-html maven("https://maven.pkg.jetbrains.space/public/p/kotlinx-html/maven") // For local development mavenLocal() } // == common projects settings setup allprojects { // group setup group = "org.jetbrains.kotlinx" // version setup val deployVersion = properties["DeployVersion"] if (deployVersion != null) version = deployVersion if (project.hasProperty("bootstrap")) { version = "$version-SNAPSHOT" } // repositories setup if (propertyIsTrue("build_snapshot_train")) { // Snapshot-specific repositories { mavenLocal() maven("https://oss.sonatype.org/content/repositories/snapshots") } } val snapshotRepoUrl = findProperty("kotlin_repo_url") if (snapshotRepoUrl != null && snapshotRepoUrl != "") { // Snapshot-specific for K2 CI configurations repositories { maven(snapshotRepoUrl) } } repositories { mavenCentral() maven("https://cache-redirector.jetbrains.com/maven.pkg.jetbrains.space/kotlin/p/kotlin/dev") } } // == BCV setup == apiValidation { ignoredProjects.addAll(listOf("benchmark", "guide", "kotlinx-serialization", "kotlinx-serialization-json-tests")) @OptIn(ExperimentalBCVApi::class) klib { enabled = true } } // == Knit setup == knit { siteRoot = "https://kotlinlang.org/api/kotlinx.serialization" moduleDocs = "build/dokka/htmlMultiModule" } // Build API docs for all modules with dokka before running Knit tasks.named("knitPrepare") { dependsOn("dokka") } // == compiler flags setup == tasks.withType().configureEach { compilerOptions { freeCompilerArgs.add("-Xpartial-linkage-loglevel=ERROR") } } tasks.withType().configureEach { compilerOptions { freeCompilerArgs.add("-Xpartial-linkage-loglevel=ERROR") } } subprojects { tasks.withType>().configureEach { compilerOptions.freeCompilerArgs.addAll(globalCompilerArgs) } } // == TeamCity setup == subprojects { apply(plugin = "teamcity-conventions") } // == publishing setup == subprojects { if (name in unpublishedProjects) return@subprojects apply(plugin = "publishing-conventions") } // == publishing setup == val mergeProject = project subprojects { if (name in unpublishedProjects) return@subprojects apply(plugin = "publishing-conventions") mergeProject.dependencies.add(Publishing_check_conventions_gradle.TestPublishing.configurationName, this) } // == animalsniffer setup == subprojects { // Can't be applied to BOM if (project.name in excludedFromBomProjects) return@subprojects apply(plugin = "animalsniffer-conventions") } // == BOM setup == subprojects { // Can't be applied to BOM if (project.name in excludedFromBomProjects) return@subprojects apply(plugin = "bom-conventions") } // == Dokka setup == subprojects { if (name in documentedSubprojects) { apply(plugin = "dokka-conventions") } } // Knit relies on Dokka task and it's pretty convenient tasks.register("dokka") { dependsOn("dokkaHtmlMultiModule") } tasks.withType().named("dokkaHtmlMultiModule") { pluginsMapConfiguration.put("org.jetbrains.dokka.base.DokkaBase", """{ "templatesDir": "${projectDir.toString().replace("\\", "/")}/dokka-templates" }""") } dependencies { dokkaPlugin(libs.dokka.pathsaver) } // == NPM setup == tasks.withType().configureEach { args.add("--ignore-engines") } // == compiler version setup == gradle.taskGraph.whenReady { println("Using Kotlin compiler version: ${org.jetbrains.kotlin.config.KotlinCompilerVersion.VERSION}") } // == projects lists and flags == // getters are required because of variable lazy initialization in Gradle val unpublishedProjects get() = setOf("benchmark", "guide", "kotlinx-serialization-json-tests") val excludedFromBomProjects get() = unpublishedProjects + "kotlinx-serialization-bom" val globalCompilerArgs get() = listOf( "-P", "plugin:org.jetbrains.kotlinx.serialization:disableIntrinsic=false" ) val documentedSubprojects get() = setOf("kotlinx-serialization-core", "kotlinx-serialization-json", "kotlinx-serialization-json-okio", "kotlinx-serialization-json-io", "kotlinx-serialization-cbor", "kotlinx-serialization-properties", "kotlinx-serialization-hocon", "kotlinx-serialization-protobuf")