1*3c321d95SSadaf Ebrahimi /* 2*3c321d95SSadaf Ebrahimi * Copyright (C) 2019 Square, Inc. 3*3c321d95SSadaf Ebrahimi * 4*3c321d95SSadaf Ebrahimi * Licensed under the Apache License, Version 2.0 (the "License"); 5*3c321d95SSadaf Ebrahimi * you may not use this file except in compliance with the License. 6*3c321d95SSadaf Ebrahimi * You may obtain a copy of the License at 7*3c321d95SSadaf Ebrahimi * 8*3c321d95SSadaf Ebrahimi * https://www.apache.org/licenses/LICENSE-2.0 9*3c321d95SSadaf Ebrahimi * 10*3c321d95SSadaf Ebrahimi * Unless required by applicable law or agreed to in writing, software 11*3c321d95SSadaf Ebrahimi * distributed under the License is distributed on an "AS IS" BASIS, 12*3c321d95SSadaf Ebrahimi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*3c321d95SSadaf Ebrahimi * See the License for the specific language governing permissions and 14*3c321d95SSadaf Ebrahimi * limitations under the License. 15*3c321d95SSadaf Ebrahimi */ 16*3c321d95SSadaf Ebrahimi import com.diffplug.gradle.spotless.SpotlessExtension 17*3c321d95SSadaf Ebrahimi import org.gradle.api.tasks.testing.logging.TestExceptionFormat 18*3c321d95SSadaf Ebrahimi import org.jetbrains.dokka.gradle.DokkaTask 19*3c321d95SSadaf Ebrahimi import org.jetbrains.kotlin.gradle.dsl.JvmTarget 20*3c321d95SSadaf Ebrahimi import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension 21*3c321d95SSadaf Ebrahimi import org.jetbrains.kotlin.gradle.dsl.KotlinProjectExtension 22*3c321d95SSadaf Ebrahimi import org.jetbrains.kotlin.gradle.tasks.KotlinCompile 23*3c321d95SSadaf Ebrahimi 24*3c321d95SSadaf Ebrahimi plugins { 25*3c321d95SSadaf Ebrahimi alias(libs.plugins.kotlin.multiplatform) apply false 26*3c321d95SSadaf Ebrahimi alias(libs.plugins.kotlin.jvm) apply false 27*3c321d95SSadaf Ebrahimi alias(libs.plugins.ksp) apply false 28*3c321d95SSadaf Ebrahimi alias(libs.plugins.dokka) apply false 29*3c321d95SSadaf Ebrahimi alias(libs.plugins.spotless) apply false 30*3c321d95SSadaf Ebrahimi alias(libs.plugins.mavenPublish) apply false 31*3c321d95SSadaf Ebrahimi alias(libs.plugins.kotlinBinaryCompatibilityValidator) 32*3c321d95SSadaf Ebrahimi } 33*3c321d95SSadaf Ebrahimi 34*3c321d95SSadaf Ebrahimi allprojects { 35*3c321d95SSadaf Ebrahimi // Note that the group name for publishing is "com.squareup" and is declared in gradle.properties. It's set to a 36*3c321d95SSadaf Ebrahimi // different value here to disambiguate the Maven coordinates of the :interop:javapoet submodule and the JavaPoet 37*3c321d95SSadaf Ebrahimi // dependency. 38*3c321d95SSadaf Ebrahimi group = "com.squareup.kotlinpoet" 39*3c321d95SSadaf Ebrahimi version = property("VERSION_NAME") as String 40*3c321d95SSadaf Ebrahimi 41*3c321d95SSadaf Ebrahimi repositories { 42*3c321d95SSadaf Ebrahimi mavenCentral() 43*3c321d95SSadaf Ebrahimi } 44*3c321d95SSadaf Ebrahimi } 45*3c321d95SSadaf Ebrahimi 46*3c321d95SSadaf Ebrahimi subprojects { 47*3c321d95SSadaf Ebrahimi tasks.withType<KotlinCompile> { 48*3c321d95SSadaf Ebrahimi compilerOptions { 49*3c321d95SSadaf Ebrahimi jvmTarget.set(JvmTarget.JVM_1_8) 50*3c321d95SSadaf Ebrahimi freeCompilerArgs.add("-Xjvm-default=all") 51*3c321d95SSadaf Ebrahimi } 52*3c321d95SSadaf Ebrahimi } 53*3c321d95SSadaf Ebrahimi // Ensure "org.gradle.jvm.version" is set to "8" in Gradle metadata. 54*3c321d95SSadaf Ebrahimi tasks.withType<JavaCompile> { 55*3c321d95SSadaf Ebrahimi options.release.set(8) 56*3c321d95SSadaf Ebrahimi } 57*3c321d95SSadaf Ebrahimi 58*3c321d95SSadaf Ebrahimi if ("test" !in name && buildFile.exists()) { 59*3c321d95SSadaf Ebrahimi apply(plugin = "org.jetbrains.dokka") 60*3c321d95SSadaf Ebrahimi apply(plugin = "com.vanniktech.maven.publish") 61*3c321d95SSadaf Ebrahimi pluginManager.withPlugin("org.jetbrains.kotlin.multiplatform") { 62*3c321d95SSadaf Ebrahimi configure<KotlinMultiplatformExtension> { 63*3c321d95SSadaf Ebrahimi explicitApi() 64*3c321d95SSadaf Ebrahimi } 65*3c321d95SSadaf Ebrahimi } 66*3c321d95SSadaf Ebrahimi pluginManager.withPlugin("org.jetbrains.kotlin.jvm") { 67*3c321d95SSadaf Ebrahimi configure<KotlinProjectExtension> { 68*3c321d95SSadaf Ebrahimi explicitApi() 69*3c321d95SSadaf Ebrahimi } 70*3c321d95SSadaf Ebrahimi } 71*3c321d95SSadaf Ebrahimi afterEvaluate { 72*3c321d95SSadaf Ebrahimi tasks.named<DokkaTask>("dokkaHtml") { 73*3c321d95SSadaf Ebrahimi val projectFolder = project.path.trim(':').replace(':', '-') 74*3c321d95SSadaf Ebrahimi outputDirectory.set(rootProject.rootDir.resolve("docs/1.x/$projectFolder")) 75*3c321d95SSadaf Ebrahimi dokkaSourceSets.configureEach { 76*3c321d95SSadaf Ebrahimi skipDeprecated.set(true) 77*3c321d95SSadaf Ebrahimi } 78*3c321d95SSadaf Ebrahimi } 79*3c321d95SSadaf Ebrahimi } 80*3c321d95SSadaf Ebrahimi } 81*3c321d95SSadaf Ebrahimi apply(plugin = "com.diffplug.spotless") 82*3c321d95SSadaf Ebrahimi configure<SpotlessExtension> { 83*3c321d95SSadaf Ebrahimi kotlin { 84*3c321d95SSadaf Ebrahimi target("**/*.kt") 85*3c321d95SSadaf Ebrahimi ktlint(libs.versions.ktlint.get()).editorConfigOverride( 86*3c321d95SSadaf Ebrahimi mapOf("ktlint_standard_filename" to "disabled"), 87*3c321d95SSadaf Ebrahimi ) 88*3c321d95SSadaf Ebrahimi trimTrailingWhitespace() 89*3c321d95SSadaf Ebrahimi endWithNewline() 90*3c321d95SSadaf Ebrahimi 91*3c321d95SSadaf Ebrahimi licenseHeader( 92*3c321d95SSadaf Ebrahimi """ 93*3c321d95SSadaf Ebrahimi |/* 94*3c321d95SSadaf Ebrahimi | * Copyright (C) ${'$'}YEAR Square, Inc. 95*3c321d95SSadaf Ebrahimi | * 96*3c321d95SSadaf Ebrahimi | * Licensed under the Apache License, Version 2.0 (the "License"); 97*3c321d95SSadaf Ebrahimi | * you may not use this file except in compliance with the License. 98*3c321d95SSadaf Ebrahimi | * You may obtain a copy of the License at 99*3c321d95SSadaf Ebrahimi | * 100*3c321d95SSadaf Ebrahimi | * https://www.apache.org/licenses/LICENSE-2.0 101*3c321d95SSadaf Ebrahimi | * 102*3c321d95SSadaf Ebrahimi | * Unless required by applicable law or agreed to in writing, software 103*3c321d95SSadaf Ebrahimi | * distributed under the License is distributed on an "AS IS" BASIS, 104*3c321d95SSadaf Ebrahimi | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 105*3c321d95SSadaf Ebrahimi | * See the License for the specific language governing permissions and 106*3c321d95SSadaf Ebrahimi | * limitations under the License. 107*3c321d95SSadaf Ebrahimi | */ 108*3c321d95SSadaf Ebrahimi """.trimMargin(), 109*3c321d95SSadaf Ebrahimi ) 110*3c321d95SSadaf Ebrahimi } 111*3c321d95SSadaf Ebrahimi } 112*3c321d95SSadaf Ebrahimi 113*3c321d95SSadaf Ebrahimi // Only enable the extra toolchain tests on CI. Otherwise local development is broken on Apple Silicon macs 114*3c321d95SSadaf Ebrahimi // because there are no matching toolchains for several older JDK versions. 115*3c321d95SSadaf Ebrahimi if ("CI" in System.getenv()) { 116*3c321d95SSadaf Ebrahimi fun Project.setupCheckTask(testTaskName: String) { 117*3c321d95SSadaf Ebrahimi // Copied from https://github.com/square/retrofit/blob/master/retrofit/build.gradle#L28. 118*3c321d95SSadaf Ebrahimi // Create a test task for each supported JDK. We check every "LTS" + current version. 119*3c321d95SSadaf Ebrahimi val versionsToTest = listOf(8, 11, 17, 19) 120*3c321d95SSadaf Ebrahimi for (majorVersion in versionsToTest) { 121*3c321d95SSadaf Ebrahimi val jdkTest = tasks.register<Test>("testJdk$majorVersion") { 122*3c321d95SSadaf Ebrahimi val javaToolchains = project.extensions.getByType(JavaToolchainService::class) 123*3c321d95SSadaf Ebrahimi javaLauncher.set( 124*3c321d95SSadaf Ebrahimi javaToolchains.launcherFor { 125*3c321d95SSadaf Ebrahimi languageVersion.set(JavaLanguageVersion.of(majorVersion)) 126*3c321d95SSadaf Ebrahimi vendor.set(JvmVendorSpec.AZUL) 127*3c321d95SSadaf Ebrahimi }, 128*3c321d95SSadaf Ebrahimi ) 129*3c321d95SSadaf Ebrahimi 130*3c321d95SSadaf Ebrahimi description = "Runs the test suite on JDK $majorVersion" 131*3c321d95SSadaf Ebrahimi group = LifecycleBasePlugin.VERIFICATION_GROUP 132*3c321d95SSadaf Ebrahimi 133*3c321d95SSadaf Ebrahimi // Copy inputs from normal Test task. 134*3c321d95SSadaf Ebrahimi val testTask = 135*3c321d95SSadaf Ebrahimi tasks.getByName<Test>(testTaskName) 136*3c321d95SSadaf Ebrahimi 137*3c321d95SSadaf Ebrahimi classpath = testTask.classpath 138*3c321d95SSadaf Ebrahimi testClassesDirs = testTask.testClassesDirs 139*3c321d95SSadaf Ebrahimi 140*3c321d95SSadaf Ebrahimi testLogging { 141*3c321d95SSadaf Ebrahimi exceptionFormat = TestExceptionFormat.FULL 142*3c321d95SSadaf Ebrahimi } 143*3c321d95SSadaf Ebrahimi } 144*3c321d95SSadaf Ebrahimi tasks.named("check").configure { 145*3c321d95SSadaf Ebrahimi dependsOn(jdkTest) 146*3c321d95SSadaf Ebrahimi } 147*3c321d95SSadaf Ebrahimi } 148*3c321d95SSadaf Ebrahimi } 149*3c321d95SSadaf Ebrahimi pluginManager.withPlugin("org.jetbrains.kotlin.multiplatform") { 150*3c321d95SSadaf Ebrahimi setupCheckTask("jvmTest") 151*3c321d95SSadaf Ebrahimi } 152*3c321d95SSadaf Ebrahimi pluginManager.withPlugin("org.jetbrains.kotlin.jvm") { 153*3c321d95SSadaf Ebrahimi setupCheckTask("test") 154*3c321d95SSadaf Ebrahimi } 155*3c321d95SSadaf Ebrahimi } 156*3c321d95SSadaf Ebrahimi } 157*3c321d95SSadaf Ebrahimi 158*3c321d95SSadaf Ebrahimi apiValidation { 159*3c321d95SSadaf Ebrahimi nonPublicMarkers += "com.squareup.kotlinpoet.ExperimentalKotlinPoetApi" 160*3c321d95SSadaf Ebrahimi ignoredProjects += listOf( 161*3c321d95SSadaf Ebrahimi "interop", // Empty middle package 162*3c321d95SSadaf Ebrahimi "test-processor", // Test only 163*3c321d95SSadaf Ebrahimi ) 164*3c321d95SSadaf Ebrahimi } 165