xref: /aosp_15_r20/external/ksp/gradle-plugin/build.gradle.kts (revision af87fb4bb8e3042070d2a054e912924f599b22b7)
1*af87fb4bSXin Li import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
2*af87fb4bSXin Li 
3*af87fb4bSXin Li description = "Kotlin Symbol Processor"
4*af87fb4bSXin Li 
5*af87fb4bSXin Li val kotlinBaseVersion: String by project
6*af87fb4bSXin Li val junitVersion: String by project
7*af87fb4bSXin Li val googleTruthVersion: String by project
8*af87fb4bSXin Li val agpBaseVersion: String by project
9*af87fb4bSXin Li val signingKey: String? by project
10*af87fb4bSXin Li val signingPassword: String? by project
11*af87fb4bSXin Li 
<lambda>null12*af87fb4bSXin Li tasks.withType<KotlinCompile> {
13*af87fb4bSXin Li     compilerOptions.freeCompilerArgs.add("-Xjvm-default=all-compatibility")
14*af87fb4bSXin Li }
15*af87fb4bSXin Li 
<lambda>null16*af87fb4bSXin Li plugins {
17*af87fb4bSXin Li     kotlin("jvm")
18*af87fb4bSXin Li     id("java-gradle-plugin")
19*af87fb4bSXin Li     `maven-publish`
20*af87fb4bSXin Li     signing
21*af87fb4bSXin Li     id("org.jetbrains.dokka") version ("1.7.20")
22*af87fb4bSXin Li }
23*af87fb4bSXin Li 
<lambda>null24*af87fb4bSXin Li dependencies {
25*af87fb4bSXin Li     implementation("org.jetbrains.kotlin:kotlin-gradle-plugin-api:$kotlinBaseVersion")
26*af87fb4bSXin Li     implementation("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinBaseVersion")
27*af87fb4bSXin Li     compileOnly("org.jetbrains.kotlin:kotlin-compiler-embeddable:$kotlinBaseVersion")
28*af87fb4bSXin Li     // replace AGP dependency w/ gradle-api when we have source registering API available.
29*af87fb4bSXin Li     compileOnly("com.android.tools.build:gradle:$agpBaseVersion")
30*af87fb4bSXin Li     compileOnly(gradleApi())
31*af87fb4bSXin Li     testImplementation(gradleApi())
32*af87fb4bSXin Li     testImplementation(project(":api"))
33*af87fb4bSXin Li     testImplementation("junit:junit:$junitVersion")
34*af87fb4bSXin Li     testImplementation("com.google.truth:truth:$googleTruthVersion")
35*af87fb4bSXin Li     testImplementation(gradleTestKit())
36*af87fb4bSXin Li }
37*af87fb4bSXin Li 
<lambda>null38*af87fb4bSXin Li tasks.named("validatePlugins").configure {
39*af87fb4bSXin Li     onlyIf {
40*af87fb4bSXin Li         // while traversing classpath, this hits a class not found issue.
41*af87fb4bSXin Li         // Disabled until gradle kotlin version and our kotlin version matches
42*af87fb4bSXin Li         // java.lang.ClassNotFoundException: org/jetbrains/kotlin/compilerRunner/KotlinLogger
43*af87fb4bSXin Li         false
44*af87fb4bSXin Li     }
45*af87fb4bSXin Li }
46*af87fb4bSXin Li 
<lambda>null47*af87fb4bSXin Li gradlePlugin {
48*af87fb4bSXin Li     plugins {
49*af87fb4bSXin Li         create("symbol-processing-gradle-plugin") {
50*af87fb4bSXin Li             id = "com.google.devtools.ksp"
51*af87fb4bSXin Li             displayName = "com.google.devtools.ksp.gradle.plugin"
52*af87fb4bSXin Li             implementationClass = "com.google.devtools.ksp.gradle.KspGradleSubplugin"
53*af87fb4bSXin Li             description = "Kotlin symbol processing integration for Gradle"
54*af87fb4bSXin Li         }
55*af87fb4bSXin Li     }
56*af87fb4bSXin Li }
57*af87fb4bSXin Li 
<lambda>null58*af87fb4bSXin Li tasks {
59*af87fb4bSXin Li     val sourcesJar by creating(Jar::class) {
60*af87fb4bSXin Li         archiveClassifier.set("sources")
61*af87fb4bSXin Li         from(project.sourceSets.main.get().allSource)
62*af87fb4bSXin Li     }
63*af87fb4bSXin Li }
64*af87fb4bSXin Li 
<lambda>null65*af87fb4bSXin Li val dokkaJavadocJar by tasks.register<Jar>("dokkaJavadocJar") {
66*af87fb4bSXin Li     dependsOn(tasks.dokkaJavadoc)
67*af87fb4bSXin Li     from(tasks.dokkaJavadoc.flatMap { it.outputDirectory })
68*af87fb4bSXin Li     archiveClassifier.set("javadoc")
69*af87fb4bSXin Li }
70*af87fb4bSXin Li 
<lambda>null71*af87fb4bSXin Li publishing {
72*af87fb4bSXin Li     publications {
73*af87fb4bSXin Li         // the name of this publication should match the name java-gradle-plugin looks up
74*af87fb4bSXin Li         // https://github.com/gradle/gradle/blob/master/subprojects/plugin-development/src/main/java/org/gradle/plugin/devel/plugins/MavenPluginPublishPlugin.java#L73
75*af87fb4bSXin Li         this.create<MavenPublication>("pluginMaven") {
76*af87fb4bSXin Li             artifactId = "symbol-processing-gradle-plugin"
77*af87fb4bSXin Li             artifact(tasks["sourcesJar"])
78*af87fb4bSXin Li             artifact(tasks["dokkaJavadocJar"])
79*af87fb4bSXin Li             pom {
80*af87fb4bSXin Li                 name.set("symbol-processing-gradle-plugin")
81*af87fb4bSXin Li                 description.set("Kotlin symbol processing integration for Gradle")
82*af87fb4bSXin Li             }
83*af87fb4bSXin Li         }
84*af87fb4bSXin Li     }
85*af87fb4bSXin Li }
86*af87fb4bSXin Li 
<lambda>null87*af87fb4bSXin Li signing {
88*af87fb4bSXin Li     isRequired = hasProperty("signingKey")
89*af87fb4bSXin Li     useInMemoryPgpKeys(signingKey, signingPassword)
90*af87fb4bSXin Li     sign(extensions.getByType<PublishingExtension>().publications)
91*af87fb4bSXin Li }
92*af87fb4bSXin Li 
93*af87fb4bSXin Li /**
94*af87fb4bSXin Li  * Create a properties file with that can be read from the gradle-plugin tests to setup test
95*af87fb4bSXin Li  * projects.
96*af87fb4bSXin Li  */
97*af87fb4bSXin Li val testPropsOutDir = project.layout.buildDirectory.dir("test-config")
<lambda>null98*af87fb4bSXin Li val writeTestPropsTask = tasks.register<WriteProperties>("prepareTestConfiguration") {
99*af87fb4bSXin Li     description = "Generates a properties file with the current environment for gradle integration tests"
100*af87fb4bSXin Li     this.setOutputFile(
101*af87fb4bSXin Li         testPropsOutDir.map {
102*af87fb4bSXin Li             it.file("testprops.properties")
103*af87fb4bSXin Li         }
104*af87fb4bSXin Li     )
105*af87fb4bSXin Li     property("kspVersion", version)
106*af87fb4bSXin Li     property("mavenRepoDir", File(rootProject.buildDir, "repos/test").absolutePath)
107*af87fb4bSXin Li     property("kspProjectRootDir", rootProject.projectDir.absolutePath)
108*af87fb4bSXin Li     property("processorClasspath", project.tasks["compileTestKotlin"].outputs.files.asPath)
109*af87fb4bSXin Li }
110*af87fb4bSXin Li 
<lambda>null111*af87fb4bSXin Li java {
112*af87fb4bSXin Li     sourceSets {
113*af87fb4bSXin Li         test {
114*af87fb4bSXin Li             resources.srcDir(testPropsOutDir)
115*af87fb4bSXin Li         }
116*af87fb4bSXin Li     }
117*af87fb4bSXin Li }
118*af87fb4bSXin Li 
<lambda>null119*af87fb4bSXin Li tasks.named("compileTestKotlin").configure {
120*af87fb4bSXin Li     dependsOn(writeTestPropsTask)
121*af87fb4bSXin Li }
122*af87fb4bSXin Li 
<lambda>null123*af87fb4bSXin Li tasks.named<Test>("test").configure {
124*af87fb4bSXin Li     dependsOn(":api:publishAllPublicationsToTestRepository")
125*af87fb4bSXin Li     dependsOn(":gradle-plugin:publishAllPublicationsToTestRepository")
126*af87fb4bSXin Li     dependsOn(":symbol-processing:publishAllPublicationsToTestRepository")
127*af87fb4bSXin Li }
128*af87fb4bSXin Li 
129*af87fb4bSXin Li abstract class WriteVersionSrcTask @Inject constructor(
130*af87fb4bSXin Li     @get:Input val kspVersion: String,
131*af87fb4bSXin Li     @get:Input val kotlinVersion: String,
132*af87fb4bSXin Li     @get:org.gradle.api.tasks.OutputDirectory val outputSrcDir: File
133*af87fb4bSXin Li ) : DefaultTask() {
134*af87fb4bSXin Li     @TaskAction
generatenull135*af87fb4bSXin Li     fun generate() {
136*af87fb4bSXin Li         File(outputSrcDir, "KSPVersions.kt").writeText(
137*af87fb4bSXin Li             """
138*af87fb4bSXin Li             package com.google.devtools.ksp.gradle
139*af87fb4bSXin Li             val KSP_KOTLIN_BASE_VERSION = "$kotlinVersion"
140*af87fb4bSXin Li             val KSP_VERSION = "$kspVersion"
141*af87fb4bSXin Li             """.trimIndent()
142*af87fb4bSXin Li         )
143*af87fb4bSXin Li     }
144*af87fb4bSXin Li }
145*af87fb4bSXin Li 
146*af87fb4bSXin Li val kspVersionDir = File(project.buildDir, "generated/ksp-versions")
147*af87fb4bSXin Li val writeVersionSrcTask = tasks.register<WriteVersionSrcTask>(
148*af87fb4bSXin Li     "generateKSPVersions",
149*af87fb4bSXin Li     version.toString(),
150*af87fb4bSXin Li     kotlinBaseVersion,
151*af87fb4bSXin Li     kspVersionDir
152*af87fb4bSXin Li )
153*af87fb4bSXin Li 
<lambda>null154*af87fb4bSXin Li kotlin {
155*af87fb4bSXin Li     sourceSets {
156*af87fb4bSXin Li         main {
157*af87fb4bSXin Li             kotlin.srcDir(writeVersionSrcTask.map { it.outputSrcDir })
158*af87fb4bSXin Li         }
159*af87fb4bSXin Li     }
160*af87fb4bSXin Li }
161