diff --git a/build-plugins/build-support/src/main/kotlin/aws/sdk/kotlin/gradle/plugins/artifactsizemetrics/AnalyzeArtifactSizeMetrics.kt b/build-plugins/build-support/src/main/kotlin/aws/sdk/kotlin/gradle/plugins/artifactsizemetrics/AnalyzeArtifactSizeMetrics.kt index 08b1c2c..2f76476 100644 --- a/build-plugins/build-support/src/main/kotlin/aws/sdk/kotlin/gradle/plugins/artifactsizemetrics/AnalyzeArtifactSizeMetrics.kt +++ b/build-plugins/build-support/src/main/kotlin/aws/sdk/kotlin/gradle/plugins/artifactsizemetrics/AnalyzeArtifactSizeMetrics.kt @@ -174,8 +174,7 @@ internal abstract class AnalyzeArtifactSizeMetrics : DefaultTask() { if (artifactOrdinaryChange) appendLine(ordinary) } - private fun ArtifactSizeMetric.requiresAttention() = - this.percentage > pluginConfig.significantChangeThresholdPercentage || this.percentage.isNaN() + private fun ArtifactSizeMetric.requiresAttention() = this.percentage > pluginConfig.significantChangeThresholdPercentage || this.percentage.isNaN() private data class ArtifactSizeMetric( val currentSize: Long, diff --git a/build-plugins/build-support/src/main/kotlin/aws/sdk/kotlin/gradle/plugins/artifactsizemetrics/ArtifactSizeMetricsPlugin.kt b/build-plugins/build-support/src/main/kotlin/aws/sdk/kotlin/gradle/plugins/artifactsizemetrics/ArtifactSizeMetricsPlugin.kt index ef57212..b4ea5bf 100644 --- a/build-plugins/build-support/src/main/kotlin/aws/sdk/kotlin/gradle/plugins/artifactsizemetrics/ArtifactSizeMetricsPlugin.kt +++ b/build-plugins/build-support/src/main/kotlin/aws/sdk/kotlin/gradle/plugins/artifactsizemetrics/ArtifactSizeMetricsPlugin.kt @@ -38,12 +38,11 @@ class ArtifactSizeMetricsPlugin : Plugin { } } -private fun Project.subprojectArtifactSizeMetricsTask(): TaskProvider = - tasks.register("artifactSizeMetrics") { - group = TASK_GROUP - onlyIf { tasks.findByName("jvmJar") != null } - dependsOn(tasks.withType()) - } +private fun Project.subprojectArtifactSizeMetricsTask(): TaskProvider = tasks.register("artifactSizeMetrics") { + group = TASK_GROUP + onlyIf { tasks.findByName("jvmJar") != null } + dependsOn(tasks.withType()) +} private fun Project.registerRootProjectArtifactSizeMetricsTask( subProjects: List>, diff --git a/build-plugins/build-support/src/main/kotlin/aws/sdk/kotlin/gradle/plugins/artifactsizemetrics/CollectDelegatedArtifactSizeMetrics.kt b/build-plugins/build-support/src/main/kotlin/aws/sdk/kotlin/gradle/plugins/artifactsizemetrics/CollectDelegatedArtifactSizeMetrics.kt index aa25a11..b0522ed 100644 --- a/build-plugins/build-support/src/main/kotlin/aws/sdk/kotlin/gradle/plugins/artifactsizemetrics/CollectDelegatedArtifactSizeMetrics.kt +++ b/build-plugins/build-support/src/main/kotlin/aws/sdk/kotlin/gradle/plugins/artifactsizemetrics/CollectDelegatedArtifactSizeMetrics.kt @@ -67,13 +67,12 @@ internal abstract class CollectDelegatedArtifactSizeMetrics : DefaultTask() { } } - private suspend fun S3Client.getObjectAsText(objectKey: String) = - getObject( - GetObjectRequest { - bucket = S3_ARTIFACT_SIZE_METRICS_BUCKET - key = objectKey - }, - ) { it.body?.decodeToString() ?: throw AwsSdkGradleException("Metrics file $objectKey is missing a body") } + private suspend fun S3Client.getObjectAsText(objectKey: String) = getObject( + GetObjectRequest { + bucket = S3_ARTIFACT_SIZE_METRICS_BUCKET + key = objectKey + }, + ) { it.body?.decodeToString() ?: throw AwsSdkGradleException("Metrics file $objectKey is missing a body") } private fun combine(metricsFiles: List) = buildString { appendLine("Artifact, Size") diff --git a/build-plugins/build-support/src/main/kotlin/aws/sdk/kotlin/gradle/plugins/artifactsizemetrics/PutArtifactSizeMetricsInCloudWatch.kt b/build-plugins/build-support/src/main/kotlin/aws/sdk/kotlin/gradle/plugins/artifactsizemetrics/PutArtifactSizeMetricsInCloudWatch.kt index 0e2c5be..73ec062 100644 --- a/build-plugins/build-support/src/main/kotlin/aws/sdk/kotlin/gradle/plugins/artifactsizemetrics/PutArtifactSizeMetricsInCloudWatch.kt +++ b/build-plugins/build-support/src/main/kotlin/aws/sdk/kotlin/gradle/plugins/artifactsizemetrics/PutArtifactSizeMetricsInCloudWatch.kt @@ -4,7 +4,6 @@ */ package aws.sdk.kotlin.gradle.plugins.artifactsizemetrics -import aws.sdk.kotlin.gradle.util.stringPropertyNotNull import aws.sdk.kotlin.services.cloudwatch.CloudWatchClient import aws.sdk.kotlin.services.cloudwatch.model.Dimension import aws.sdk.kotlin.services.cloudwatch.model.MetricDatum @@ -36,7 +35,6 @@ internal abstract class PutArtifactSizeMetricsInCloudWatch : DefaultTask() { fun put() { val currentTime = Instant.now() val pluginConfig = project.rootProject.extensions.getByType(ArtifactSizeMetricsPluginConfig::class.java) - val releaseTag = project.stringPropertyNotNull("release") val metrics = metricsFile .get() diff --git a/build-plugins/build-support/src/main/kotlin/aws/sdk/kotlin/gradle/util/ProjectExt.kt b/build-plugins/build-support/src/main/kotlin/aws/sdk/kotlin/gradle/util/ProjectExt.kt index 9907c73..96fb9c9 100644 --- a/build-plugins/build-support/src/main/kotlin/aws/sdk/kotlin/gradle/util/ProjectExt.kt +++ b/build-plugins/build-support/src/main/kotlin/aws/sdk/kotlin/gradle/util/ProjectExt.kt @@ -45,8 +45,7 @@ public fun Project.localProperties(): Map { * * property from extras * @return property if it exists or null */ -public fun Project.prop(name: String): Any? = - properties[name] ?: localProperties()[name] ?: extra.getOrNull(name) +public fun Project.prop(name: String): Any? = properties[name] ?: localProperties()[name] ?: extra.getOrNull(name) inline fun Project.typedProp(name: String): T? { val any = prop(name) @@ -70,9 +69,8 @@ public inline fun Project.verifyRootProject(lazyMessage: () -> Any) { * @throws AwsSdkGradleException If the property is empty or null * @return The property as a String */ -fun Project.stringPropertyNotNull(property: String): String = - findProperty(property)?.toString()?.also { - check(it.isNotEmpty()) { "The $property property is set to empty \"-P$property=\" (no value set). Please specify a value." } - } ?: throw AwsSdkGradleException("The $property property is not set. Please set a value: \"-P$property=YOUR_VALUE\"") +fun Project.stringPropertyNotNull(property: String): String = findProperty(property)?.toString()?.also { + check(it.isNotEmpty()) { "The $property property is set to empty \"-P$property=\" (no value set). Please specify a value." } +} ?: throw AwsSdkGradleException("The $property property is not set. Please set a value: \"-P$property=YOUR_VALUE\"") class AwsSdkGradleException(message: String) : GradleException(message) diff --git a/build-plugins/kmp-conventions/build.gradle.kts b/build-plugins/kmp-conventions/build.gradle.kts index 0c5d290..b312e15 100644 --- a/build-plugins/kmp-conventions/build.gradle.kts +++ b/build-plugins/kmp-conventions/build.gradle.kts @@ -18,7 +18,7 @@ repositories { dependencies { implementation(project(":build-plugins:build-support")) - compileOnly(kotlin("gradle-plugin", "2.0.10")) + compileOnly(kotlin("gradle-plugin", "2.1.0")) testImplementation(libs.junit.jupiter) } diff --git a/build-plugins/smithy-build/src/main/kotlin/aws/sdk/kotlin/gradle/codegen/SmithyBuildExtension.kt b/build-plugins/smithy-build/src/main/kotlin/aws/sdk/kotlin/gradle/codegen/SmithyBuildExtension.kt index 722af36..07f0827 100644 --- a/build-plugins/smithy-build/src/main/kotlin/aws/sdk/kotlin/gradle/codegen/SmithyBuildExtension.kt +++ b/build-plugins/smithy-build/src/main/kotlin/aws/sdk/kotlin/gradle/codegen/SmithyBuildExtension.kt @@ -25,14 +25,13 @@ open class SmithyBuildExtension(private val project: Project) { * @param projectionName the name of the projection to get the output path for * @param pluginName the name of the plugin to get the output path for */ - public fun getProjectionPath(projectionName: String, pluginName: String): Provider = - SmithyUtils.getProjectionOutputDirProperty(project).map { - // FIXME - smithy gradle plugin expects the input file to pass "isDirectory" - // but that flag is only true IFF the path exists AND is a directory - // see https://github.com/smithy-lang/smithy-gradle-plugin/issues/113 - it.asFile.mkdirs() - SmithyUtils.getProjectionPluginPath(it.asFile, projectionName, pluginName) - } + public fun getProjectionPath(projectionName: String, pluginName: String): Provider = SmithyUtils.getProjectionOutputDirProperty(project).map { + // FIXME - smithy gradle plugin expects the input file to pass "isDirectory" + // but that flag is only true IFF the path exists AND is a directory + // see https://github.com/smithy-lang/smithy-gradle-plugin/issues/113 + it.asFile.mkdirs() + SmithyUtils.getProjectionPluginPath(it.asFile, projectionName, pluginName) + } } // smithy-kotlin specific extensions @@ -43,8 +42,7 @@ open class SmithyBuildExtension(private val project: Project) { * * @param projectionName the name of the projection to use */ -public fun SmithyBuildExtension.smithyKotlinProjectionPath(projectionName: String): Provider = - getProjectionPath(projectionName, "kotlin-codegen") +public fun SmithyBuildExtension.smithyKotlinProjectionPath(projectionName: String): Provider = getProjectionPath(projectionName, "kotlin-codegen") /** * Get the default generated kotlin source directory for the `smithy-kotlin` plugin. @@ -52,5 +50,4 @@ public fun SmithyBuildExtension.smithyKotlinProjectionPath(projectionName: Strin * * @param projectionName the name of the projection to use */ -public fun SmithyBuildExtension.smithyKotlinProjectionSrcDir(projectionName: String): Provider = - smithyKotlinProjectionPath(projectionName).map { it.resolve("src/main/kotlin") } +public fun SmithyBuildExtension.smithyKotlinProjectionSrcDir(projectionName: String): Provider = smithyKotlinProjectionPath(projectionName).map { it.resolve("src/main/kotlin") } diff --git a/build-plugins/smithy-build/src/main/kotlin/aws/sdk/kotlin/gradle/codegen/SmithyBuildPlugin.kt b/build-plugins/smithy-build/src/main/kotlin/aws/sdk/kotlin/gradle/codegen/SmithyBuildPlugin.kt index c4d6e3b..de0b876 100644 --- a/build-plugins/smithy-build/src/main/kotlin/aws/sdk/kotlin/gradle/codegen/SmithyBuildPlugin.kt +++ b/build-plugins/smithy-build/src/main/kotlin/aws/sdk/kotlin/gradle/codegen/SmithyBuildPlugin.kt @@ -74,8 +74,7 @@ class SmithyBuildPlugin : Plugin { registerCodegenTasks() } - private fun Project.installExtension() = - extensions.create(SMITHY_BUILD_EXTENSION_NAME, SmithyBuildExtension::class.java, project) + private fun Project.installExtension() = extensions.create(SMITHY_BUILD_EXTENSION_NAME, SmithyBuildExtension::class.java, project) private fun Project.registerCodegenTasks() { val generateSmithyBuild = tasks.register(TASK_GENERATE_SMITHY_BUILD) { @@ -102,8 +101,7 @@ class SmithyBuildPlugin : Plugin { tasks.register(TASK_GENERATE_SMITHY_PROJECTIONS) { group = "codegen" dependsOn(generateSmithyBuild) - resolvedCliClasspath.set(codegenConfig) - runtimeClasspath.set(codegenConfig) + cliClasspath.set(codegenConfig) buildClasspath.set(codegenConfig) smithyBuildConfigs.set(project.files(generateSmithyBuild)) } diff --git a/build-plugins/smithy-build/src/main/kotlin/aws/sdk/kotlin/gradle/codegen/dsl/SmithyKotlinPluginSettings.kt b/build-plugins/smithy-build/src/main/kotlin/aws/sdk/kotlin/gradle/codegen/dsl/SmithyKotlinPluginSettings.kt index fb6e168..0c88577 100644 --- a/build-plugins/smithy-build/src/main/kotlin/aws/sdk/kotlin/gradle/codegen/dsl/SmithyKotlinPluginSettings.kt +++ b/build-plugins/smithy-build/src/main/kotlin/aws/sdk/kotlin/gradle/codegen/dsl/SmithyKotlinPluginSettings.kt @@ -51,8 +51,7 @@ open class SmithyKotlinApiSettings : ToNode { return result } - override fun toString(): String = - "SmithyKotlinApiSettings(visibility=$visibility, nullabilityCheckMode=$nullabilityCheckMode, defaultValueSerializationMode=$defaultValueSerializationMode, enableEndpointAuthProvider=$enableEndpointAuthProvider)" + override fun toString(): String = "SmithyKotlinApiSettings(visibility=$visibility, nullabilityCheckMode=$nullabilityCheckMode, defaultValueSerializationMode=$defaultValueSerializationMode, enableEndpointAuthProvider=$enableEndpointAuthProvider)" } open class SmithyKotlinBuildSettings : ToNode { @@ -92,8 +91,7 @@ open class SmithyKotlinBuildSettings : ToNode { return result } - override fun toString(): String = - "SmithyKotlinBuildSettings(generateFullProject=$generateFullProject, generateDefaultBuildFiles=$generateDefaultBuildFiles, optInAnnotations=$optInAnnotations)" + override fun toString(): String = "SmithyKotlinBuildSettings(generateFullProject=$generateFullProject, generateDefaultBuildFiles=$generateDefaultBuildFiles, optInAnnotations=$optInAnnotations)" } open class SmithyKotlinPluginSettings : SmithyBuildPluginSettings { @@ -160,8 +158,7 @@ open class SmithyKotlinPluginSettings : SmithyBuildPluginSettings { return obj.build() } - override fun toString(): String = - "SmithyKotlinPluginSettings(pluginName='$pluginName', serviceShapeId=$serviceShapeId, packageName=$packageName, packageVersion=$packageVersion, packageDescription=$packageDescription, sdkId=$sdkId, buildSettings=$buildSettings, apiSettings=$apiSettings)" + override fun toString(): String = "SmithyKotlinPluginSettings(pluginName='$pluginName', serviceShapeId=$serviceShapeId, packageName=$packageName, packageVersion=$packageVersion, packageDescription=$packageDescription, sdkId=$sdkId, buildSettings=$buildSettings, apiSettings=$apiSettings)" } fun SmithyProjection.smithyKotlinPlugin(configure: SmithyKotlinPluginSettings.() -> Unit) { diff --git a/build-plugins/smithy-build/src/main/kotlin/aws/sdk/kotlin/gradle/codegen/dsl/Utils.kt b/build-plugins/smithy-build/src/main/kotlin/aws/sdk/kotlin/gradle/codegen/dsl/Utils.kt index 7b4400e..3e838ce 100644 --- a/build-plugins/smithy-build/src/main/kotlin/aws/sdk/kotlin/gradle/codegen/dsl/Utils.kt +++ b/build-plugins/smithy-build/src/main/kotlin/aws/sdk/kotlin/gradle/codegen/dsl/Utils.kt @@ -36,8 +36,7 @@ internal fun ObjectNode.Builder.withNullableMember(key: String, member: Boolean? return withMember(key, member) } -internal fun ObjectNode.Builder.withNullableMember(key: String, member: T?): ObjectNode.Builder = - withOptionalMember(key, Optional.ofNullable(member)) +internal fun ObjectNode.Builder.withNullableMember(key: String, member: T?): ObjectNode.Builder = withOptionalMember(key, Optional.ofNullable(member)) internal fun ObjectNode.Builder.withArrayMember(key: String, member: List): ObjectNode.Builder = apply { val arrNode = member.map { Node.from(it) }.let { ArrayNode.fromNodes(it) } diff --git a/gradle.properties b/gradle.properties index fde4e31..0a3d361 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ kotlin.code.style=official # kotlin -kotlinVersion=2.0.10 +kotlinVersion=2.1.0 diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index b26f7ac..3349f19 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,7 +1,7 @@ [versions] -ktlint = "1.3.0" -smithy-version = "1.42.0" -smithy-gradle-plugin-version = "0.9.0" +ktlint = "1.5.0" +smithy-version = "1.53.0" +smithy-gradle-plugin-version = "1.1.0" junit-version = "5.10.1" [libraries] @@ -11,7 +11,7 @@ ktlint-cli-ruleset-core = { module = "com.pinterest.ktlint:ktlint-cli-ruleset-co ktlint-test = {module = "com.pinterest.ktlint:ktlint-test", version.ref = "ktlint" } nexusPublishPlugin = { module = "io.github.gradle-nexus:publish-plugin", version = "1.3.0" } smithy-model = { module = "software.amazon.smithy:smithy-model", version.ref = "smithy-version" } -smithy-gradle-base-plugin = { module = "software.amazon.smithy:smithy-base-plugin", version.ref = "smithy-gradle-plugin-version" } +smithy-gradle-base-plugin = { module = "software.amazon.smithy.gradle:smithy-base", version.ref = "smithy-gradle-plugin-version" } junit-jupiter = { module = "org.junit.jupiter:junit-jupiter", version.ref = "junit-version" } diff --git a/ktlint-rules/src/main/kotlin/software/aws/ktlint/rules/MultilineIfElseBlockRule.kt b/ktlint-rules/src/main/kotlin/software/aws/ktlint/rules/MultilineIfElseBlockRule.kt index ee4a7b0..16fc2e8 100644 --- a/ktlint-rules/src/main/kotlin/software/aws/ktlint/rules/MultilineIfElseBlockRule.kt +++ b/ktlint-rules/src/main/kotlin/software/aws/ktlint/rules/MultilineIfElseBlockRule.kt @@ -30,9 +30,8 @@ class MultilineIfElseBlockRule : Rule(RuleId("multiline-if-else-block"), About() /** * Determines if this node is an `else if` block. */ - private fun ASTNode.isElseIfBlock() = - elementType == ElementType.ELSE && - firstChildNode?.elementType == ElementType.IF + private fun ASTNode.isElseIfBlock() = elementType == ElementType.ELSE && + firstChildNode?.elementType == ElementType.IF /** * Determines if this node is on the same source file line number as its parent.