diff --git a/build-plugins/build-support/build.gradle.kts b/build-plugins/build-support/build.gradle.kts index e76fcbf..6b981b8 100644 --- a/build-plugins/build-support/build.gradle.kts +++ b/build-plugins/build-support/build.gradle.kts @@ -19,7 +19,11 @@ repositories { dependencies { // make our custom lint rules available to the buildscript classpath - runtimeOnly(project(":ktlint-rules")) + runtimeOnly(project(":ktlint-rules")) { + // Ensure that kotlin-compiler-embeddable isn't included in the buildscript classpath + exclude(group = "org.jetbrains.kotlin", module = "kotlin-compiler-embeddable") + } + implementation(libs.nexusPublishPlugin) compileOnly(gradleApi()) implementation("aws.sdk.kotlin:s3:1.1.+") @@ -36,7 +40,26 @@ gradlePlugin { } } +val generateKtlintVersion by tasks.registering { + // generate the version of the runtime to use as a resource. + // this keeps us from having to manually change version numbers in multiple places + val resourcesDir = layout.buildDirectory.dir("resources/main/aws/sdk/kotlin/gradle/dsl").get() + + val versionCatalog = rootProject.file("gradle/libs.versions.toml") + inputs.file(versionCatalog) + + val versionFile = file("$resourcesDir/ktlint-version.txt") + outputs.file(versionFile) + + val version = libs.ktlint.cli.ruleset.core.get().version + sourceSets.main.get().output.dir(resourcesDir) + doLast { + versionFile.writeText("$version") + } +} + tasks.withType { + dependsOn(generateKtlintVersion) compilerOptions { jvmTarget.set(JvmTarget.JVM_1_8) freeCompilerArgs.add("-opt-in=kotlin.RequiresOptIn") diff --git a/build-plugins/build-support/src/main/kotlin/aws/sdk/kotlin/gradle/dsl/CodeStyle.kt b/build-plugins/build-support/src/main/kotlin/aws/sdk/kotlin/gradle/dsl/CodeStyle.kt index 6cd17a5..9d295c9 100644 --- a/build-plugins/build-support/src/main/kotlin/aws/sdk/kotlin/gradle/dsl/CodeStyle.kt +++ b/build-plugins/build-support/src/main/kotlin/aws/sdk/kotlin/gradle/dsl/CodeStyle.kt @@ -18,18 +18,23 @@ import org.gradle.language.base.plugins.LifecycleBasePlugin fun Project.configureLinting(lintPaths: List) { verifyRootProject { "Kotlin SDK lint configuration is expected to be configured on the root project" } + val ktlintVersion = object {} // Can't use Project.javaClass because that's using the Gradle classloader + .javaClass + .getResource("ktlint-version.txt") + ?.readText() + ?: error("Missing ktlint-version.txt") + val ktlint by configurations.creating dependencies { - val ktlintVersion = "1.3.0" ktlint("com.pinterest.ktlint:ktlint-cli:$ktlintVersion") { attributes { - attribute(Bundling.BUNDLING_ATTRIBUTE, objects.named(Bundling.EXTERNAL)) + attribute(Bundling.BUNDLING_ATTRIBUTE, objects.named(Bundling.SHADOWED)) } } } - // add the buildscript classpath which should pickup our custom ktlint-rules (via runtimeOnly dep on this plugin) + // add the buildscript classpath which should pick up our custom ktlint-rules (via runtimeOnly dep on this plugin) // plus any custom rules added by consumer val execKtlintClasspath = ktlint + buildscript.configurations.getByName("classpath") diff --git a/build.gradle.kts b/build.gradle.kts index 1361364..9cac03e 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -49,9 +49,10 @@ val ktlint by configurations.creating dependencies { ktlint(libs.ktlint.cli) { attributes { - attribute(Bundling.BUNDLING_ATTRIBUTE, objects.named(Bundling.EXTERNAL)) + attribute(Bundling.BUNDLING_ATTRIBUTE, objects.named(Bundling.SHADOWED)) } } + ktlint(project(":ktlint-rules")) } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 3349f19..1395dce 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,5 +1,5 @@ [versions] -ktlint = "1.5.0" +ktlint = "1.3.0" smithy-version = "1.53.0" smithy-gradle-plugin-version = "1.1.0" junit-version = "5.10.1" @@ -16,4 +16,4 @@ smithy-gradle-base-plugin = { module = "software.amazon.smithy.gradle:smithy-bas junit-jupiter = { module = "org.junit.jupiter:junit-jupiter", version.ref = "junit-version" } [plugins] -plugin-publish = { id = "com.gradle.plugin-publish", version = "1.2.1"} \ No newline at end of file +plugin-publish = { id = "com.gradle.plugin-publish", version = "1.2.1"}