Skip to content

Commit 89cb7b6

Browse files
committed
chore(codegen): update scripts to use Configuration Cache
1 parent 4cbc8b4 commit 89cb7b6

File tree

2 files changed

+90
-38
lines changed

2 files changed

+90
-38
lines changed

codegen/sdk-codegen/build.gradle.kts

Lines changed: 50 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,12 @@ import software.amazon.smithy.gradle.tasks.SmithyBuildTask
2121
import software.amazon.smithy.aws.traits.ServiceTrait
2222
import java.util.stream.Stream
2323
import kotlin.streams.toList
24+
import org.gradle.api.DefaultTask
25+
import org.gradle.api.file.DirectoryProperty
26+
import org.gradle.api.file.RegularFileProperty
27+
import org.gradle.api.provider.Property
28+
import org.gradle.api.tasks.*
29+
import java.io.File
2430

2531
val smithyVersion: String by project
2632

@@ -59,7 +65,7 @@ tasks["jar"].enabled = false
5965
tasks["smithyBuild"].enabled = false
6066

6167
val buildSdk = tasks.register<SmithyBuildTask>("buildSdk") {
62-
val clientNameProp: String? by project
68+
val clientNameProp: String? = project.findProperty("clientName") as String?
6369
if (!(clientNameProp?.isEmpty() ?: true)) {
6470
smithyBuildConfigs.set(files("smithy-build-" + clientNameProp + ".json"))
6571
outputDir.set(file("build-single/" + clientNameProp))
@@ -71,15 +77,32 @@ val buildSdk = tasks.register<SmithyBuildTask>("buildSdk") {
7177
// Generates a smithy-build.json file by creating a new projection for every
7278
// JSON file found in aws-models/. The generated smithy-build.json file is
7379
// not committed to git since it's rebuilt each time codegen is performed.
74-
val generateSmithyBuild = tasks.register("generate-smithy-build") {
75-
val clientNameProp: String? by project
76-
val modelsDirProp: String by project
77-
val models = project.file(modelsDirProp);
78-
79-
doLast {
80+
abstract class GenerateSmithyBuildTask : DefaultTask() {
81+
@get:Input
82+
@get:Optional
83+
abstract val clientName: Property<String>
84+
85+
@get:Input
86+
abstract val modelsDir: Property<String>
87+
88+
@get:InputDirectory
89+
abstract val modelsDirPath: DirectoryProperty
90+
91+
@get:InputFile
92+
abstract val templateFile: RegularFileProperty
93+
94+
@get:OutputFile
95+
abstract val buildFile: RegularFileProperty
96+
97+
@TaskAction
98+
fun generate() {
8099
val projectionsBuilder = Node.objectNodeBuilder()
100+
val templatePath = templateFile.asFile.get().absolutePath
101+
val modelsDirFile = modelsDirPath.asFile.get()
102+
103+
modelsDirFile.listFiles()?.filter { it.isFile }?.forEach eachFile@{ file ->
104+
81105

82-
fileTree(models).filter { it.isFile }.files.forEach eachFile@{ file ->
83106
val model = Model.assembler()
84107
.addImport(file.absolutePath)
85108
.assemble().result.get();
@@ -104,8 +127,7 @@ val generateSmithyBuild = tasks.register("generate-smithy-build") {
104127
.map { it.replaceFirstChar { it.uppercase() } }
105128
.joinToString(separator = " ")
106129
var manifestOverwrites = Node.parse(
107-
File("smithy-aws-typescript-codegen/src/main/resources/software/amazon/smithy/aws/typescript/codegen/package.json.template")
108-
.readText()
130+
File(templatePath).readText()
109131
).expectObjectNode()
110132
val useLegacyAuthServices = setOf<String>(
111133
// e.g. "S3" - use this as exclusion list if needed.
@@ -114,7 +136,7 @@ val generateSmithyBuild = tasks.register("generate-smithy-build") {
114136
// "S3"
115137
)
116138
val projectionContents = Node.objectNodeBuilder()
117-
.withMember("imports", Node.fromStrings("${models.getAbsolutePath()}${File.separator}${file.name}"))
139+
.withMember("imports", Node.fromStrings("${modelsDirFile.absolutePath}${File.separator}${file.name}"))
118140
.withMember("plugins", Node.objectNode()
119141
.withMember("typescript-codegen", Node.objectNodeBuilder()
120142
.withMember("package", "@aws-sdk/client-" + sdkId.lowercase())
@@ -132,17 +154,29 @@ val generateSmithyBuild = tasks.register("generate-smithy-build") {
132154
projectionsBuilder.withMember(sdkId + "." + version.lowercase(), projectionContents)
133155
}
134156

135-
val buildFile = if (!(clientNameProp?.isEmpty() ?: true))
136-
"smithy-build-" + clientNameProp + ".json"
137-
else "smithy-build.json"
138-
139-
file(buildFile).writeText(Node.prettyPrintJson(Node.objectNodeBuilder()
157+
buildFile.asFile.get().writeText(Node.prettyPrintJson(Node.objectNodeBuilder()
140158
.withMember("version", "1.0")
141159
.withMember("projections", projectionsBuilder.build())
142160
.build()))
143161
}
144162
}
145163

164+
val generateSmithyBuild = tasks.register<GenerateSmithyBuildTask>("generate-smithy-build") {
165+
val clientNameProp = providers.gradleProperty("clientName")
166+
val modelsDirProp = providers.gradleProperty("modelsDir").orElse("aws-models")
167+
168+
clientName.set(clientNameProp)
169+
modelsDir.set(modelsDirProp)
170+
modelsDirPath.set(layout.projectDirectory.dir(modelsDirProp))
171+
templateFile.set(layout.projectDirectory.file("../smithy-aws-typescript-codegen/src/main/resources/software/amazon/smithy/aws/typescript/codegen/package.json.template"))
172+
173+
val buildFileName = clientNameProp.map { name ->
174+
if (!name.isNullOrEmpty()) "smithy-build-$name.json" else "smithy-build.json"
175+
}.orElse("smithy-build.json")
176+
177+
buildFile.set(layout.projectDirectory.file(buildFileName))
178+
}
179+
146180
tasks.register("generate-default-configs-provider", JavaExec::class) {
147181
classpath = sourceSets["main"].runtimeClasspath
148182
mainClass.set("software.amazon.smithy.aws.typescript.codegen.DefaultsModeConfigGenerator")

codegen/smithy-aws-typescript-codegen/build.gradle.kts

Lines changed: 40 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,13 @@
1414
*/
1515

1616
import software.amazon.smithy.model.node.Node
17+
import org.gradle.api.DefaultTask
18+
import org.gradle.api.file.DirectoryProperty
19+
import org.gradle.api.file.RegularFileProperty
20+
import org.gradle.api.tasks.*
21+
import org.gradle.language.jvm.tasks.ProcessResources
22+
import org.gradle.api.file.DuplicatesStrategy
23+
import java.io.File
1724

1825

1926
description = "Generates TypeScript code for AWS protocols from Smithy models"
@@ -51,43 +58,54 @@ dependencies {
5158
api("software.amazon.smithy:smithy-aws-traits:$smithyVersion")
5259
}
5360

54-
tasks.register("set-aws-sdk-versions") {
55-
val packagesDir = project.file("../../packages")
56-
val clientsDir = project.file("../../clients")
61+
abstract class SetAwsSdkVersionsTask : DefaultTask() {
62+
@get:InputDirectory
63+
abstract val packagesDir: DirectoryProperty
64+
65+
@get:InputDirectory
66+
abstract val clientsDir: DirectoryProperty
67+
68+
@get:OutputFile
69+
abstract val versionsFile: RegularFileProperty
70+
71+
@TaskAction
72+
fun setVersions() {
73+
val outputFile = versionsFile.asFile.get()
74+
outputFile.parentFile.mkdirs()
75+
outputFile.printWriter().close()
5776

58-
doLast {
59-
mkdir(layout.buildDirectory.dir("generated/resources/software/amazon/smithy/aws/typescript/codegen").get().asFile)
60-
var versionsFile = layout.buildDirectory
61-
.file("generated/resources/software/amazon/smithy/aws/typescript/codegen/sdkVersions.properties")
62-
.get()
63-
.asFile
64-
versionsFile.printWriter().close()
65-
66-
var roots = packagesDir.listFiles().toMutableList() + clientsDir.listFiles().toList()
77+
val roots = packagesDir.asFile.get().listFiles().orEmpty().toMutableList() + clientsDir.asFile.get().listFiles().orEmpty().toList()
6778
roots.forEach { packageDir ->
68-
var packageJsonFile = File(packageDir, "package.json")
79+
val packageJsonFile = File(packageDir, "package.json")
6980
if (packageJsonFile.isFile()) {
70-
var packageJson = Node.parse(packageJsonFile.readText()).expectObjectNode()
71-
var packageName = packageJson.expectStringMember("name").getValue()
72-
var packageVersion = packageJson.expectStringMember("version").getValue()
73-
var isPrivate = packageJson.getBooleanMemberOrDefault("private", false)
81+
val packageJson = Node.parse(packageJsonFile.readText()).expectObjectNode()
82+
val packageName = packageJson.expectStringMember("name").getValue()
83+
val packageVersion = packageJson.expectStringMember("version").getValue()
84+
val isPrivate = packageJson.getBooleanMemberOrDefault("private", false)
7485
if (!isPrivate) {
75-
versionsFile.appendText("$packageName=$packageVersion\n")
86+
outputFile.appendText("$packageName=$packageVersion\n")
7687
}
7788
}
7889
}
7990
}
8091
}
8192

93+
tasks.register<SetAwsSdkVersionsTask>("set-aws-sdk-versions") {
94+
packagesDir.set(layout.projectDirectory.dir("../../packages"))
95+
clientsDir.set(layout.projectDirectory.dir("../../clients"))
96+
versionsFile.set(layout.buildDirectory.file("generated/resources/software/amazon/smithy/aws/typescript/codegen/sdkVersions.properties"))
97+
}
98+
8299
sourceSets {
83100
main {
84101
resources {
85-
setSrcDirs(listOf(
86-
"src/main/resources",
87-
layout.buildDirectory.dir("generated/resources").get().asFile
88-
))
102+
srcDir("src/main/resources")
103+
srcDir(layout.buildDirectory.dir("generated/resources"))
89104
}
90105
}
91106
}
92107

93108
tasks["processResources"].dependsOn(tasks["set-aws-sdk-versions"])
109+
tasks.named<ProcessResources>("processResources") {
110+
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
111+
}

0 commit comments

Comments
 (0)