-
Notifications
You must be signed in to change notification settings - Fork 675
Expand file tree
/
Copy pathbuild.gradle.kts
More file actions
114 lines (95 loc) · 3.93 KB
/
build.gradle.kts
File metadata and controls
114 lines (95 loc) · 3.93 KB
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
/*
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
* SPDX-License-Identifier: Apache-2.0
*/
import org.gradle.api.DefaultTask
import org.gradle.api.file.DirectoryProperty
import org.gradle.api.file.DuplicatesStrategy
import org.gradle.api.file.RegularFileProperty
import org.gradle.language.jvm.tasks.ProcessResources
import software.amazon.smithy.model.node.Node
import java.io.File
description = "Generates TypeScript code for AWS protocols from Smithy models"
extra["displayName"] = "Smithy :: AWS :: Typescript :: Codegen"
extra["moduleName"] = "software.amazon.smithy.aws.typescript.codegen"
val smithyVersion: String by project
buildscript {
val smithyVersion: String by project
repositories {
mavenLocal()
mavenCentral()
}
dependencies {
classpath("software.amazon.smithy:smithy-model:$smithyVersion")
}
}
dependencies {
// Smithy TypeScript
api("software.amazon.smithy.typescript:smithy-typescript-codegen:0.46.0")
// Smithy generic dependencies
api("software.amazon.smithy:smithy-model:$smithyVersion")
api("software.amazon.smithy:smithy-protocol-test-traits:$smithyVersion")
api("software.amazon.smithy:smithy-rules-engine:$smithyVersion")
api("software.amazon.smithy:smithy-waiters:$smithyVersion")
// Smithy AWS dependencies
api("software.amazon.smithy:smithy-aws-cloudformation-traits:$smithyVersion")
api("software.amazon.smithy:smithy-aws-endpoints:$smithyVersion")
api("software.amazon.smithy:smithy-aws-iam-traits:$smithyVersion")
api("software.amazon.smithy:smithy-aws-traits:$smithyVersion")
}
abstract class SetAwsSdkVersionsTask : DefaultTask() {
@get:InputDirectory
abstract val libDir: DirectoryProperty
@get:InputDirectory
abstract val packagesDir: DirectoryProperty
@get:InputDirectory
abstract val packagesInternalDir: DirectoryProperty
@get:InputDirectory
abstract val clientsDir: DirectoryProperty
@get:OutputFile
abstract val versionsFile: RegularFileProperty
@TaskAction
fun setVersions() {
val outputFile = versionsFile.asFile.get()
outputFile.parentFile.mkdirs()
outputFile.printWriter().close()
val roots = dirToList(libDir) + dirToList(packagesDir) + dirToList(packagesInternalDir) + dirToList(clientsDir)
roots.forEach { packageDir ->
val packageJsonFile = File(packageDir, "package.json")
if (packageJsonFile.isFile()) {
val packageJson = Node.parse(packageJsonFile.readText()).expectObjectNode()
val packageName = packageJson.expectStringMember("name").getValue()
val packageVersion = packageJson.expectStringMember("version").getValue()
val isPrivate = packageJson.getBooleanMemberOrDefault("private", false)
if (!isPrivate) {
outputFile.appendText("$packageName=$packageVersion\n")
}
}
}
}
private fun dirToList(dir: DirectoryProperty): List<File> =
dir.asFile
.get()
.listFiles()
.orEmpty()
.toMutableList()
}
tasks.register<SetAwsSdkVersionsTask>("set-aws-sdk-versions") {
libDir.set(layout.projectDirectory.dir("../../lib"))
packagesDir.set(layout.projectDirectory.dir("../../packages"))
packagesInternalDir.set(layout.projectDirectory.dir("../../packages-internal"))
clientsDir.set(layout.projectDirectory.dir("../../clients"))
versionsFile.set(layout.buildDirectory.file("generated/resources/software/amazon/smithy/aws/typescript/codegen/sdkVersions.properties"))
}
sourceSets {
main {
resources {
srcDir("src/main/resources")
srcDir(layout.buildDirectory.dir("generated/resources"))
}
}
}
tasks["processResources"].dependsOn(tasks["set-aws-sdk-versions"])
tasks.named<ProcessResources>("processResources") {
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
}