Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
2de56c8
Handle SPR-based dependencies
jbelkins Jun 25, 2024
cfeb008
Require smithy-swift from SPR
jbelkins Jun 26, 2024
83e0169
Fix dependencies
jbelkins Jun 26, 2024
29d0da4
Clean up SwiftDependency
jbelkins Jun 26, 2024
54aa1a1
Merge remote-tracking branch 'origin/main' into jbe/spr
jbelkins Jun 26, 2024
1bd2494
Simplify package dependency writer
jbelkins Jun 27, 2024
b798caa
Code cleanup
jbelkins Jun 28, 2024
0df6f1a
Move registry config JSON gen to AWS
jbelkins Jun 28, 2024
c2a402f
Accommodate resources in service client
jbelkins Jun 28, 2024
b808822
Merge remote-tracking branch 'origin/main' into jbe/spr
jbelkins Jun 28, 2024
50bbef6
Configurable Package.swift name
jbelkins Jun 28, 2024
7bc666a
Fix codegen tests
jbelkins Jun 29, 2024
9ccb675
Fix ktlint
jbelkins Jun 29, 2024
9b57567
Revert "Configurable Package.swift name"
jbelkins Jun 29, 2024
ac77566
Merge remote-tracking branch 'origin/main' into jbe/spr2
jbelkins Jul 2, 2024
003caee
Set version static var in client
jbelkins Jul 2, 2024
d964f35
Merge remote-tracking branch 'origin/main' into jbe/spr2
jbelkins Jul 3, 2024
624cfab
Merge remote-tracking branch 'origin/main' into jbe/spr
jbelkins Jul 3, 2024
9c7bdef
Merge branch 'jbe/spr' into jbe/spr2
jbelkins Jul 3, 2024
af54db3
Fix package manifest generator
jbelkins Jul 3, 2024
fb1734e
Eliminate CRT from generated code, use smithy-swift from Git
jbelkins Jul 3, 2024
071dcad
Merge branch 'main' into jbe/spr
jbelkins Jul 5, 2024
cc6a74a
Merge branch 'jbe/spr' into jbe/spr2
jbelkins Jul 5, 2024
5779dc2
Merge branch 'main' into jbe/spr
jbelkins Jul 5, 2024
19c1607
Merge branch 'jbe/spr' into jbe/spr2
jbelkins Jul 5, 2024
135fa12
Lock to exact version on jbelkins fork
jbelkins Jul 5, 2024
9132d17
Restore compatibility with current smithy-swift
jbelkins Jul 6, 2024
eed4a9c
Point smithy-swift to fork
jbelkins Jul 6, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion Package.swift
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,11 @@ let package = Package(
),
.target(
name: "SmithyTestUtil",
dependencies: ["ClientRuntime", "SmithyHTTPAPI"]
dependencies: [
"ClientRuntime",
"SmithyHTTPAPI",
.product(name: "AwsCommonRuntimeKit", package: "aws-crt-swift"),
]
),
.target(
name: "SmithyIdentity",
Expand Down
15 changes: 15 additions & 0 deletions Sources/SmithyTestUtil/TestInitializer.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
//
// Copyright Amazon.com Inc. or its affiliates.
// All Rights Reserved.
//
// SPDX-License-Identifier: Apache-2.0
//

import struct AwsCommonRuntimeKit.CommonRuntimeKit

public enum TestInitializer {

public static func initialize() {
CommonRuntimeKit.initialize()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,15 @@ package software.amazon.smithy.swift.codegen

import software.amazon.smithy.codegen.core.SymbolDependency
import software.amazon.smithy.swift.codegen.integration.ProtocolGenerator
import kotlin.jvm.optionals.getOrNull

val PACKAGE_MANIFEST_NAME = "Package.swift"

class PackageManifestGenerator(val ctx: ProtocolGenerator.GenerationContext) {

fun writePackageManifest(dependencies: List<SymbolDependency>) {
ctx.delegator.useFileWriter("Package.swift") { writer ->
writer.write("// swift-tools-version:\$L", ctx.settings.swiftVersion)
ctx.delegator.useFileWriter(PACKAGE_MANIFEST_NAME) { writer ->
writer.write("// swift-tools-version: \$L", ctx.settings.swiftVersion)
writer.write("")
writer.write("import PackageDescription")
writer.write("")
Expand All @@ -27,49 +30,65 @@ class PackageManifestGenerator(val ctx: ProtocolGenerator.GenerationContext) {
writer.write(".library(name: \$S, targets: [\$S])", ctx.settings.moduleName, ctx.settings.moduleName)
}

val externalDependencies = dependencies.filter { it.getProperty("url", String::class.java).get().isNotEmpty() }
val dependenciesByURL = externalDependencies.distinctBy { it.expectProperty("url", String::class.java) }
val externalDependencies = dependencies.filter {
it.getProperty("url", String::class.java).getOrNull() != null ||
it.getProperty("scope", String::class.java).getOrNull() != null
}
val dependenciesByURL = externalDependencies.distinctBy {
it.getProperty("url", String::class.java).getOrNull()
?: "${it.getProperty("scope", String::class.java).get()}.${it.packageName}"
}

writer.openBlock("dependencies: [", "],") {
dependenciesByURL.forEach { dependency ->
writer.openBlock(".package(", "),") {

val localPath = dependency.expectProperty("localPath", String::class.java)
if (localPath.isNotEmpty()) {
writer.write("path: \$S", localPath)
} else {
val dependencyURL = dependency.expectProperty("url", String::class.java)
writer.write("url: \$S,", dependencyURL)
writer.write("from: \$S", dependency.version)
}
}
}
dependenciesByURL.forEach { writePackageDependency(writer, it) }
}

val dependenciesByTarget = externalDependencies.distinctBy { it.expectProperty("target", String::class.java) + it.packageName }

writer.openBlock("targets: [", "]") {
writer.openBlock(".target(", "),") {
writer.write("name: \$S,", ctx.settings.moduleName)
writer.openBlock("dependencies: [", "]") {
for (dependency in dependenciesByTarget) {
writer.openBlock(".product(", "),") {
val target = dependency.expectProperty("target", String::class.java)
writer.write("name: \$S,", target)
writer.write("package: \$S", dependency.packageName)
}
}
writer.openBlock("dependencies: [", "],") {
dependenciesByTarget.forEach { writeTargetDependency(writer, it) }
}
writer.openBlock("resources: [", "]") {
writer.write(".process(\"Resources\")")
}
}
writer.openBlock(".testTarget(", ")") {
writer.write("name: \$S,", ctx.settings.testModuleName)
writer.openBlock("dependencies: [", "]") {
writer.write("\$S,", ctx.settings.moduleName)
writer.write(".product(name: \"SmithyTestUtil\", package: \"smithy-swift\"),")
SwiftDependency.SMITHY_TEST_UTIL.dependencies.forEach { writeTargetDependency(writer, it) }
SwiftDependency.CRT.dependencies.forEach { writeTargetDependency(writer, it) }
}
}
}
}
}
}

private fun writePackageDependency(writer: SwiftWriter, dependency: SymbolDependency) {
writer.openBlock(".package(", "),") {
val scope = dependency.getProperty("scope", String::class.java).getOrNull()
scope?.let {
writer.write("id: \$S,", "$it.${dependency.packageName}")
}
val url = dependency.getProperty("url", String::class.java).getOrNull()
url?.let {
writer.write("url: \$S,", it)
}
writer.write("exact: \$S", dependency.version)
}
}

private fun writeTargetDependency(writer: SwiftWriter, dependency: SymbolDependency) {
writer.openBlock(".product(", "),") {
val target = dependency.expectProperty("target", String::class.java)
writer.write("name: \$S,", target)
val scope = dependency.getProperty("scope", String::class.java).getOrNull()
val packageName = scope?.let { "$it.${dependency.packageName}" } ?: dependency.packageName
writer.write("package: \$S", packageName)
}
}
}
Loading