Skip to content

Commit

Permalink
Update release tooling to handle both stable and unstable crates (#3082)
Browse files Browse the repository at this point in the history
## Motivation and Context
This PR updates our smithy-rs release tooling to prepare for handling
both stable and unstable crates. Merging this PR to `main` does not make
any of the runtime crates stable, instead we will just have a supporting
mechanism in place, ready to be turned on by implementing `TODO(GA)`.
 
## Description
At a high level, this PR will
- update the `Release smithy-rs` workflow UI to have an additional input
`Stable semantic version`:
![Screenshot 2023-10-24 at 10 19 07
PM](https://github.com/awslabs/smithy-rs/assets/15333866/097502e6-3193-43f6-b39b-dd231c2d14d7)
- split an existing gradle property `smithy.rs.runtime.crate.version`
into `smithy.rs.runtime.crate.stable.version` and
`smithy.rs.runtime.crate.unstable.version`.
- make `publisher upgrade-runtime-crates-version` take a new, optional
(for backwards compatibility) command line argument `--stable-version`
to use the said gradle property
`smithy.rs.runtime.crate.stable.version`. This will allow the
`publisher` to set a value passed via a workflow input `Stable semantic
version` to `smithy.rs.runtime.crate.stable.version` in
`gradle.properties` (and the same goes for unstable crates).
- update `fixRuntimeCrateVersions` so that it fixes up runtime crate
versions based on properties `smithy.rs.runtime.crate.stable.version`
and `smithy.rs.runtime.crate.unstable.version`.

**NOTE**
There is a guard in place. When this PR gets merged and then we enter a
stable crate version in the `Stable semantic version` text box, it will
be overwritten by a version in `Unstable semantic version`, so that
1.x.y version will NOT be published to `crates.io` before GA and that
also replicates today's release workflow's behavior (only publishing
unstable crates). Just make sure we specify a 0.x.y in the `Untable
semantic version` text box because that does get shipped.

### What happens once `TODO(GA)` has been implemented?
Roughly, it will look like this. When we run the `Release smithy-rs`
workflow (not a dry-run), providing a stable version (say 1.0.0) and a
unstable version (say 0.57.0) in the workflow text boxes,
1. the workflow will create a new release branch
`smithy-rs-release-1.x.y`.
2. the workflow will set 1.0.0 to
`smithy.rs.runtime.crate.stable.version` and 0.57.0 to
`smithy.rs.runtime.crate.unstable.version` in `gradle.properties`.
3. for whatever smithy runtime crates whose package metadata says
```
[package.metadata.smithy-rs-release-tooling]
stable = true
```
their `Cargo.toml` will include `version = 1.0.0` (and `version =
0.57.0` if `smithy-rs-release-tooling` is not specified or if its value
is `stable = false`).

4. the workflow will publish smithy runtime crates accordingly to
`crates.io`.
5. releasing `aws-sdk-rust` subsequently will render `version = 1.0.0`
in `Cargo.toml` for stable AWS runtime crates (again as specified by
`smithy-rs-release-tooling`), will render `version = 1.1.0` for SDK
crates (we will not go into details here as to why it's not `1.0.0`),
and will publish those crates to `crates.io`.
 
## Testing
In a [separate
branch](https://github.com/awslabs/smithy-rs/tree/ysaito/stable-and-unstable-crates)
that implemented `TODO(GA)`, I verified that
- our internal release pipeline was executed without errors
- a generated AWS SDK had following manifests (showing excerpts from
arbitrary crates)
```
[package]
name = "aws-sdk-s3"
version = "1.1.0"
```
```
[package]
name = "aws-smithy-types"
version = "1.0.0"
```
```
[package]
name = "aws-smithy-http"
version = "0.57.0"
```
```
[package]
name = "aws-types"
version = "1.0.0"
```
```
[package]
name = "aws-config"
version = "1.0.0"
```
----
 
_By submitting this pull request, I confirm that you can use, modify,
copy, and redistribute this contribution, under the terms of your
choice._

---------

Co-authored-by: John DiSanti <[email protected]>
  • Loading branch information
ysaito1001 and jdisanti authored Nov 8, 2023
1 parent a42c818 commit 64857d9
Show file tree
Hide file tree
Showing 25 changed files with 445 additions and 147 deletions.
25 changes: 17 additions & 8 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,22 +13,29 @@ env:
rust_version: 1.70.0

name: Release smithy-rs
run-name: ${{ github.workflow }} ${{ inputs.semantic_version }} (${{ inputs.commit_sha }}) - ${{ inputs.dry_run && 'Dry run' || 'Production run' }}
run-name: ${{ inputs.dry_run && 'Dry run' || 'Prod run' }} - ${{ github.workflow }} ${{ inputs.stable_semantic_version }}/${{ inputs.unstable_semantic_version }} (${{ inputs.commit_sha }})
on:
workflow_dispatch:
inputs:
commit_sha:
description: |
The SHA of the git commit that you want to release.
Commit SHA: The SHA of the git commit that you want to release.
You must use the non-abbreviated SHA (e.g. b2318b0 won't work!).
required: true
type: string
semantic_version:
description: The semver tag that you want to release (e.g. 0.52.1)
stable_semantic_version:
description: |
Stable semantic version: The semver tag that you want to release for stable crates (e.g. 1.0.2)
required: true
type: string
unstable_semantic_version:
description: |
Unstable semantic version: The semver tag that you want to release for unstable crates (e.g. 0.52.1)
required: true
type: string
dry_run:
description: Dry runs will only produce release artifacts, but they will not cut a release tag in GitHub nor publish to crates.io
description: |
Dry run: When selected, it only produces release artifacts, but will not cut a release tag in GitHub or publish to crates.io
required: true
type: boolean
default: true
Expand Down Expand Up @@ -92,7 +99,8 @@ jobs:
id: branch-push
shell: bash
env:
SEMANTIC_VERSION: ${{ inputs.semantic_version }}
# TODO(GA): specify ${{ inputs.stable_semantic_version }}
SEMANTIC_VERSION: ${{ inputs.unstable_semantic_version }}
DRY_RUN: ${{ inputs.dry_run }}
run: |
set -e
Expand Down Expand Up @@ -125,15 +133,16 @@ jobs:
uses: ./smithy-rs/.github/actions/docker-build
with:
action: upgrade-gradle-properties
action-arguments: ${{ inputs.semantic_version }}
action-arguments: ${{ inputs.stable_semantic_version }} ${{ inputs.unstable_semantic_version }}
- name: Download all artifacts
uses: ./smithy-rs/.github/actions/download-all-artifacts
- name: Push gradle.properties changes
id: gradle-push
working-directory: upgrade-gradle-properties/smithy-rs
shell: bash
env:
SEMANTIC_VERSION: ${{ inputs.semantic_version }}
# TODO(GA): specify ${{ inputs.stable_semantic_version }}
SEMANTIC_VERSION: ${{ inputs.unstable_semantic_version }}
RELEASE_COMMIT_SHA: ${{ inputs.commit_sha }}
RELEASE_BRANCH_NAME: ${{ needs.get-or-create-release-branch.outputs.release_branch }}
DRY_RUN: ${{ inputs.dry_run }}
Expand Down
6 changes: 6 additions & 0 deletions aws/rust-runtime/aws-config/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -76,3 +76,9 @@ all-features = true
targets = ["x86_64-unknown-linux-gnu"]
rustdoc-args = ["--cfg", "docsrs"]
# End of docs.rs metadata

# make sure to keep crate stability in sync with the second element of the following tuple in
# buildSrc/src/main/kotlin/CrateSet.kt:
# Crate("aws-config", STABLE_VERSION_PROP_NAME),
[package.metadata.smithy-rs-release-tooling]
stable = true
6 changes: 6 additions & 0 deletions aws/rust-runtime/aws-runtime-api/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -14,3 +14,9 @@ all-features = true
targets = ["x86_64-unknown-linux-gnu"]
rustdoc-args = ["--cfg", "docsrs"]
# End of docs.rs metadata

# make sure to keep crate stability in sync with the second element of the following tuple in
# buildSrc/src/main/kotlin/CrateSet.kt:
# Crate("aws-runtime-api", STABLE_VERSION_PROP_NAME),
[package.metadata.smithy-rs-release-tooling]
stable = true
6 changes: 6 additions & 0 deletions aws/rust-runtime/aws-types/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -38,3 +38,9 @@ all-features = true
targets = ["x86_64-unknown-linux-gnu"]
rustdoc-args = ["--cfg", "docsrs"]
# End of docs.rs metadata

# make sure to keep crate stability in sync with the second element of the following tuple in
# buildSrc/src/main/kotlin/CrateSet.kt:
# Crate("aws-types", STABLE_VERSION_PROP_NAME),
[package.metadata.smithy-rs-release-tooling]
stable = true
4 changes: 3 additions & 1 deletion aws/rust-runtime/aws-types/src/build_metadata.rs
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,9 @@ mod test {
let meta = &BUILD_METADATA;
// obviously a slightly brittle test. Will be a small update for Rust 2.0 and GA :-)
assert!(meta.rust_version.starts_with("1."));
assert!(meta.core_pkg_version.starts_with("0."));
// In our release process towards GA, the package version could either be 0. or 1.
// so we need to make this `assert!` more flexible.
assert!(meta.core_pkg_version.starts_with("0.") || meta.core_pkg_version.starts_with("1."));
// quick sanity check that we're parsing common platforms correctly
if cfg!(target_os = "linux") {
assert_eq!(meta.os_family, OsFamily::Linux);
Expand Down
15 changes: 0 additions & 15 deletions aws/sdk-codegen/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -30,23 +30,8 @@ dependencies {
implementation("software.amazon.smithy:smithy-aws-endpoints:$smithyVersion")
}

val generateAwsRuntimeCrateVersion by tasks.registering {
// generate the version of the runtime to use as a resource.
// this keeps us from having to manually change version numbers in multiple places
val resourcesDir = "$buildDir/resources/main/software/amazon/smithy/rustsdk"
val versionFile = file("$resourcesDir/sdk-crate-version.txt")
outputs.file(versionFile)
val crateVersion = project.properties["smithy.rs.runtime.crate.version"]?.toString()!!
inputs.property("crateVersion", crateVersion)
sourceSets.main.get().output.dir(resourcesDir)
doLast {
versionFile.writeText(crateVersion)
}
}

tasks.compileKotlin {
kotlinOptions.jvmTarget = "1.8"
dependsOn(generateAwsRuntimeCrateVersion)
}

// Reusable license copySpec
Expand Down
20 changes: 10 additions & 10 deletions aws/sdk/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -76,8 +76,8 @@ fun eventStreamAllowList(): Set<String> {
}

fun generateSmithyBuild(services: AwsServices): String {
val awsConfigVersion = properties.get("smithy.rs.runtime.crate.version")
?: throw IllegalStateException("missing smithy.rs.runtime.crate.version for aws-config version")
val awsConfigVersion = properties.get(CrateSet.STABLE_VERSION_PROP_NAME)
?: throw IllegalStateException("missing ${CrateSet.STABLE_VERSION_PROP_NAME} for aws-config version")
val debugMode = properties.get("debugMode").toBoolean()
val serviceProjections = services.services.map { service ->
val files = service.modelFiles().map { extraFile ->
Expand Down Expand Up @@ -270,10 +270,10 @@ fun rewritePathDependency(line: String): String {
tasks.register<Copy>("copyAllRuntimes") {
dependsOn("smithyBuildJar")
from("$rootDir/aws/rust-runtime") {
CrateSet.AWS_SDK_RUNTIME.forEach { include("$it/**") }
CrateSet.AWS_SDK_RUNTIME.forEach { include("${it.name}/**") }
}
from("$rootDir/rust-runtime") {
CrateSet.AWS_SDK_SMITHY_RUNTIME.forEach { include("$it/**") }
CrateSet.AWS_SDK_SMITHY_RUNTIME.forEach { include("${it.name}/**") }
}
exclude("**/target")
exclude("**/Cargo.lock")
Expand All @@ -285,9 +285,9 @@ tasks.register("relocateAwsRuntime") {
dependsOn("copyAllRuntimes")
doLast {
// Patch the Cargo.toml files
CrateSet.AWS_SDK_RUNTIME.forEach { moduleName ->
patchFile(sdkOutputDir.resolve("$moduleName/Cargo.toml")) { line ->
rewriteRuntimeCrateVersion(properties, line.let(::rewritePathDependency))
CrateSet.AWS_SDK_RUNTIME.forEach { module ->
patchFile(sdkOutputDir.resolve("${module.name}/Cargo.toml")) { line ->
rewriteRuntimeCrateVersion(properties.get(module.versionPropertyName)!!, line.let(::rewritePathDependency))
}
}
}
Expand All @@ -296,9 +296,9 @@ tasks.register("relocateRuntime") {
dependsOn("copyAllRuntimes")
doLast {
// Patch the Cargo.toml files
CrateSet.AWS_SDK_SMITHY_RUNTIME.forEach { moduleName ->
patchFile(sdkOutputDir.resolve("$moduleName/Cargo.toml")) { line ->
rewriteRuntimeCrateVersion(properties, line)
CrateSet.AWS_SDK_SMITHY_RUNTIME.forEach { module ->
patchFile(sdkOutputDir.resolve("${module.name}/Cargo.toml")) { line ->
rewriteRuntimeCrateVersion(properties.get(module.versionPropertyName)!!, line)
}
}
}
Expand Down
72 changes: 42 additions & 30 deletions buildSrc/src/main/kotlin/CrateSet.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,45 +3,57 @@
* SPDX-License-Identifier: Apache-2.0
*/

data class Crate(val name: String, val versionPropertyName: String)

object CrateSet {
const val STABLE_VERSION_PROP_NAME = "smithy.rs.runtime.crate.stable.version"
const val UNSTABLE_VERSION_PROP_NAME = "smithy.rs.runtime.crate.unstable.version"

/*
* Crates marked as `STABLE_VERSION_PROP_NAME` should have the following package metadata in their `Cargo.toml`
*
* [package.metadata.smithy-rs-release-tooling]
* stable = true
*/

val AWS_SDK_RUNTIME = listOf(
"aws-config",
"aws-credential-types",
"aws-endpoint",
"aws-http",
"aws-hyper",
"aws-runtime",
"aws-runtime-api",
"aws-sig-auth",
"aws-sigv4",
"aws-types",
Crate("aws-config", STABLE_VERSION_PROP_NAME),
Crate("aws-credential-types", UNSTABLE_VERSION_PROP_NAME),
Crate("aws-endpoint", UNSTABLE_VERSION_PROP_NAME),
Crate("aws-http", UNSTABLE_VERSION_PROP_NAME),
Crate("aws-hyper", UNSTABLE_VERSION_PROP_NAME),
Crate("aws-runtime", UNSTABLE_VERSION_PROP_NAME),
Crate("aws-runtime-api", STABLE_VERSION_PROP_NAME),
Crate("aws-sig-auth", UNSTABLE_VERSION_PROP_NAME),
Crate("aws-sigv4", UNSTABLE_VERSION_PROP_NAME),
Crate("aws-types", STABLE_VERSION_PROP_NAME),
)

private val SMITHY_RUNTIME_COMMON = listOf(
"aws-smithy-async",
"aws-smithy-checksums",
"aws-smithy-client",
"aws-smithy-eventstream",
"aws-smithy-http",
"aws-smithy-http-auth",
"aws-smithy-http-tower",
"aws-smithy-json",
"aws-smithy-protocol-test",
"aws-smithy-query",
"aws-smithy-runtime",
"aws-smithy-runtime-api",
"aws-smithy-types",
"aws-smithy-types-convert",
"aws-smithy-xml",
val SMITHY_RUNTIME_COMMON = listOf(
Crate("aws-smithy-async", STABLE_VERSION_PROP_NAME),
Crate("aws-smithy-checksums", UNSTABLE_VERSION_PROP_NAME),
Crate("aws-smithy-client", UNSTABLE_VERSION_PROP_NAME),
Crate("aws-smithy-eventstream", UNSTABLE_VERSION_PROP_NAME),
Crate("aws-smithy-http", UNSTABLE_VERSION_PROP_NAME),
Crate("aws-smithy-http-auth", UNSTABLE_VERSION_PROP_NAME),
Crate("aws-smithy-http-tower", UNSTABLE_VERSION_PROP_NAME),
Crate("aws-smithy-json", UNSTABLE_VERSION_PROP_NAME),
Crate("aws-smithy-protocol-test", UNSTABLE_VERSION_PROP_NAME),
Crate("aws-smithy-query", UNSTABLE_VERSION_PROP_NAME),
Crate("aws-smithy-runtime", UNSTABLE_VERSION_PROP_NAME),
Crate("aws-smithy-runtime-api", STABLE_VERSION_PROP_NAME),
Crate("aws-smithy-types", STABLE_VERSION_PROP_NAME),
Crate("aws-smithy-types-convert", UNSTABLE_VERSION_PROP_NAME),
Crate("aws-smithy-xml", UNSTABLE_VERSION_PROP_NAME),
)

val AWS_SDK_SMITHY_RUNTIME = SMITHY_RUNTIME_COMMON

val SERVER_SMITHY_RUNTIME = SMITHY_RUNTIME_COMMON + listOf(
"aws-smithy-http-server",
"aws-smithy-http-server-python",
"aws-smithy-http-server-typescript",
Crate("aws-smithy-http-server", UNSTABLE_VERSION_PROP_NAME),
Crate("aws-smithy-http-server-python", UNSTABLE_VERSION_PROP_NAME),
Crate("aws-smithy-http-server-typescript", UNSTABLE_VERSION_PROP_NAME),
)

val ENTIRE_SMITHY_RUNTIME = (AWS_SDK_SMITHY_RUNTIME + SERVER_SMITHY_RUNTIME).toSortedSet()
val ENTIRE_SMITHY_RUNTIME = (AWS_SDK_SMITHY_RUNTIME + SERVER_SMITHY_RUNTIME).toSortedSet(compareBy { it.name })
}
4 changes: 2 additions & 2 deletions buildSrc/src/main/kotlin/ManifestPatcher.kt
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@ fun rewriteCrateVersion(line: String, version: String): String = line.replace(
* Smithy runtime crate versions in smithy-rs are all `0.0.0-smithy-rs-head`. When copying over to the AWS SDK,
* these should be changed to the smithy-rs version.
*/
fun rewriteRuntimeCrateVersion(properties: PropertyRetriever, line: String): String =
rewriteCrateVersion(line, properties.get("smithy.rs.runtime.crate.version")!!)
fun rewriteRuntimeCrateVersion(version: String, line: String): String =
rewriteCrateVersion(line, version)

/** Patches a file with the result of the given `operation` being run on each line */
fun patchFile(path: File, operation: (String) -> String) {
Expand Down
2 changes: 1 addition & 1 deletion buildSrc/src/main/kotlin/aws/sdk/CrateVersioner.kt
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ interface VersionCrate {

class SynchronizedCrateVersioner(
properties: PropertyRetriever,
private val sdkVersion: String = properties.get("smithy.rs.runtime.crate.version")
private val sdkVersion: String = properties.get(CrateSet.STABLE_VERSION_PROP_NAME)
?: throw Exception("SDK runtime crate version missing"),
) : VersionCrate {
init {
Expand Down
4 changes: 2 additions & 2 deletions buildSrc/src/main/kotlin/aws/sdk/ServiceLoader.kt
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,8 @@ class AwsServices(
val allModules: Set<String> by lazy {
(
services.map(AwsService::module).map { "sdk/$it" } +
CrateSet.AWS_SDK_SMITHY_RUNTIME.map { "sdk/$it" } +
CrateSet.AWS_SDK_RUNTIME.map { "sdk/$it" }
CrateSet.AWS_SDK_SMITHY_RUNTIME.map { "sdk/${it.name}" } +
CrateSet.AWS_SDK_RUNTIME.map { "sdk/${it.name}" }
// Root tests should not be included since they can't be part of the root Cargo workspace
// in order to test differences in Cargo features. Examples should not be included either
// because each example itself is a workspace.
Expand Down
72 changes: 72 additions & 0 deletions buildSrc/src/test/kotlin/CrateSetTest.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
/*
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
* SPDX-License-Identifier: Apache-2.0
*/

import CrateSet.AWS_SDK_RUNTIME
import CrateSet.SERVER_SMITHY_RUNTIME
import CrateSet.SMITHY_RUNTIME_COMMON
import CrateSet.STABLE_VERSION_PROP_NAME
import CrateSet.UNSTABLE_VERSION_PROP_NAME
import com.moandjiezana.toml.Toml
import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.Test
import java.io.File
import java.util.logging.Logger

class CrateSetTest {
private val logger: Logger = Logger.getLogger("CrateSetTest")

/*
* Checks whether `versionPropertyName` for a system under test, i.e. `Crate` in `CrateSet.kt`,
* matches what `package.metadata.smithy-rs-release-tooling` says in the `Cargo.toml`
* for the corresponding crate.
*/
private fun sutStabilityMatchesManifestStability(versionPropertyName: String, stabilityInManifest: Boolean) {
when (stabilityInManifest) {
true -> assertEquals(STABLE_VERSION_PROP_NAME, versionPropertyName)
false -> assertEquals(UNSTABLE_VERSION_PROP_NAME, versionPropertyName)
}
}

/*
* Checks whether each element in `crateSet` specifies the correct `versionPropertyName` according to
* what `package.metadata.smithy-rs-release-tooling` says in the `Cargo.toml` for the corresponding crate,
* located at `relativePathToRustRuntime`.
*
* If `package.metadata.smithy-rs-release-tooling` does not exist in a `Cargo.toml`, the implementation
* will treat that crate as unstable.
*/
private fun crateSetStabilitiesMatchManifestStabilities(crateSet: List<Crate>, relativePathToRustRuntime: String) {
crateSet.forEach {
val path = "$relativePathToRustRuntime/${it.name}/Cargo.toml"
val contents = File(path).readText()
val manifest = try {
Toml().read(contents)
} catch (e: java.lang.IllegalStateException) {
// Currently, `aws-sigv4` cannot be read as a `TOML` because of the following error:
// Invalid table definition on line 54: [target.'cfg(not(any(target_arch = "powerpc", target_arch = "powerpc64")))'.dev-dependencies]]
logger.info("failed to read ${it.name} as TOML: $e")
Toml()
}
manifest.getTable("package.metadata.smithy-rs-release-tooling")?.entrySet()?.map { entry ->
sutStabilityMatchesManifestStability(it.versionPropertyName, entry.value as Boolean)
} ?: sutStabilityMatchesManifestStability(it.versionPropertyName, false)
}
}

@Test
fun `aws runtime stabilities should match those in manifest files`() {
crateSetStabilitiesMatchManifestStabilities(AWS_SDK_RUNTIME, "../aws/rust-runtime")
}

@Test
fun `common smithy runtime stabilities should match those in manifest files`() {
crateSetStabilitiesMatchManifestStabilities(SMITHY_RUNTIME_COMMON, "../rust-runtime")
}

@Test
fun `server smithy runtime stabilities should match those in manifest files`() {
crateSetStabilitiesMatchManifestStabilities(SERVER_SMITHY_RUNTIME, "../rust-runtime")
}
}
10 changes: 8 additions & 2 deletions gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,14 @@ rust.msrv=1.70.0
# org.gradle.jvmargs=-Xmx1024M -agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=localhost:5006
org.gradle.jvmargs=-Xmx1024M

# Version number to use for the generated runtime crates
smithy.rs.runtime.crate.version=0.57.1
# Version number to use for the generated stable runtime crates
#
# TODO(GA): This is currently a placeholder for crates we are going to stabilize at the time of GA.
# Until then, a value of this key can contain 0 for the major version.
smithy.rs.runtime.crate.stable.version=0.57.1

# Version number to use for the generated unstable runtime crates
smithy.rs.runtime.crate.unstable.version=0.57.1

kotlin.code.style=official

Expand Down
6 changes: 6 additions & 0 deletions rust-runtime/aws-smithy-async/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -31,3 +31,9 @@ all-features = true
targets = ["x86_64-unknown-linux-gnu"]
rustdoc-args = ["--cfg", "docsrs"]
# End of docs.rs metadata

# make sure to keep crate stability in sync with the second element of the following tuple in
# buildSrc/src/main/kotlin/CrateSet.kt:
# Crate("aws-smithy-async", STABLE_VERSION_PROP_NAME),
[package.metadata.smithy-rs-release-tooling]
stable = true
Loading

0 comments on commit 64857d9

Please sign in to comment.