-
Notifications
You must be signed in to change notification settings - Fork 659
/
Copy pathbuild.gradle.kts
125 lines (109 loc) · 5.11 KB
/
build.gradle.kts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
/*
* Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License").
* You may not use this file except in compliance with the License.
* A copy of the License is located at
*
* http://aws.amazon.com/apache2.0
*
* or in the "license" file accompanying this file. This file is distributed
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
* express or implied. See the License for the specific language governing
* permissions and limitations under the License.
*/
import software.amazon.smithy.model.Model
import software.amazon.smithy.model.node.Node
import software.amazon.smithy.model.shapes.ServiceShape
import software.amazon.smithy.gradle.tasks.SmithyBuild
import software.amazon.smithy.aws.traits.ServiceTrait
val smithyVersion: String by project
buildscript {
val smithyVersion: String by project
repositories {
mavenLocal()
mavenCentral()
}
dependencies {
"classpath"("software.amazon.smithy:smithy-cli:$smithyVersion")
"classpath"("software.amazon.smithy:smithy-aws-traits:$smithyVersion")
}
}
plugins {
val smithyGradleVersion: String by project
id("software.amazon.smithy") version smithyGradleVersion
}
dependencies {
val smithyVersion: String by project
implementation(project(":smithy-aws-go-codegen"))
implementation("software.amazon.smithy:smithy-smoke-test-traits:$smithyVersion")
implementation("software.amazon.smithy:smithy-aws-smoke-test-model:$smithyVersion")
}
// This project doesn't produce a JAR.
tasks["jar"].enabled = false
// Run the SmithyBuild task manually since this project needs the built JAR
// from smithy-aws-typescript-codegen.
tasks["smithyBuildJar"].enabled = false
tasks.create<SmithyBuild>("buildSdk") {
addRuntimeClasspath = true
}
// Generates a smithy-build.json file by creating a new projection for every
// JSON file found in aws-models/. The generated smithy-build.json file is
// not committed to git since it's rebuilt each time codegen is performed.
tasks.register("generate-smithy-build") {
doLast {
val projectionsBuilder = Node.objectNodeBuilder()
val modelsDirProp: String by project
val models = project.file(modelsDirProp);
fileTree(models).filter { it.isFile }.files.forEach eachFile@{ file ->
val model = Model.assembler()
.addImport(file.absolutePath)
// Grab the result directly rather than worrying about checking for errors via unwrap.
// All we care about here is the service shape, any unchecked errors will be exposed
// as part of the actual build task done by the smithy gradle plugin.
.assemble().result.get();
val services = model.shapes(ServiceShape::class.javaObjectType).sorted().toList();
if (services.size != 1) {
throw Exception("There must be exactly one service in each aws model file, but found " +
"${services.size} in ${file.name}: ${services.map { it.id }}");
}
val service = services[0]
var filteredServices: String = System.getenv("SMITHY_GO_BUILD_API")?: ""
if (filteredServices.isNotEmpty()) {
for (filteredService in filteredServices.split(",")) {
if (!service.id.toString().startsWith(filteredService)) {
return@eachFile
}
}
}
val serviceTrait = service.getTrait(ServiceTrait::class.javaObjectType).get();
val sdkId = serviceTrait.sdkId
.replace("-", "")
.replace(" ", "")
.toLowerCase();
val projectionContents = Node.objectNodeBuilder()
.withMember("imports", Node.fromStrings("${models.absolutePath}${File.separator}${file.name}"))
.withMember("plugins", Node.objectNode()
.withMember("go-codegen", Node.objectNodeBuilder()
.withMember("service", service.id.toString())
.withMember("module", "github.com/aws/aws-sdk-go-v2/service/$sdkId")
.build()))
.build()
projectionsBuilder.withMember(sdkId + "." + service.version.toLowerCase(), projectionContents)
}
file("smithy-build.json").writeText(Node.prettyPrintJson(Node.objectNodeBuilder()
.withMember("version", "1.0")
.withMember("projections", projectionsBuilder.build())
.build()))
}
}
// Run the `buildSdk` automatically.
tasks["build"]
.dependsOn(tasks["generate-smithy-build"])
.finalizedBy(tasks["buildSdk"])
// ensure built artifacts are put into the SDK's folders
tasks.create<Exec>("copyGoCodegen") {
dependsOn ("buildSdk")
commandLine ("$rootDir/copy_go_codegen.sh", "$rootDir/..", (tasks["buildSdk"] as SmithyBuild).outputDirectory.absolutePath)
}
tasks["buildSdk"].finalizedBy(tasks["copyGoCodegen"])