-
Notifications
You must be signed in to change notification settings - Fork 197
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Fix subtle break of endpoint prefixes due to semver #3318
Conversation
A new generated diff is ready to view.
A new doc preview is ready to view. |
I think cargo-semver-checks is wrong about this being breaking. |
…fix-endpoint-prefix
A new generated diff is ready to view.
A new doc preview is ready to view. |
A new generated diff is ready to view.
A new doc preview is ready to view. |
A new generated diff is ready to view.
A new doc preview is ready to view. |
A new generated diff is ready to view.
A new doc preview is ready to view. |
## Motivation and Context As we discovered in #3318, it's possible to cause unexpected breakage by releasing runtime crates. This tool automates setting up `aws-sdk-rust` (and manually, you can copy the patches into `~/.cargo/config.toml` for your entire system), to simulate the release of new runtime crates. <img width="1518" alt="Screenshot 2023-12-15 at 12 58 41 PM" src="https://github.com/smithy-lang/smithy-rs/assets/492903/59d6cb5c-d39c-4e42-98e2-6858d0884449"> ### Testing With this tool (and a small hack—I had to simulate releasing 1.1.100 so that the versions became the latest), I correctly caught the breaking changes from the previous release. ---- _By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice._
…fix-endpoint-prefix
A new generated diff is ready to view.
A new doc preview is ready to view. |
…fix-endpoint-prefix
A new generated diff is ready to view.
A new doc preview is ready to view. |
A new generated diff is ready to view.
A new doc preview is ready to view. |
This issue addresses a semver compatibility problem similar to the one described in #3318, except for the `aws_smithy_http::operation::Metadata` type. ---- _By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice._
…fix-endpoint-prefix
A new generated diff is ready to view.
A new doc preview is ready to view. |
This issue addresses a semver compatibility problem similar to the one described in #3318, except for the `aws_smithy_http::operation::Metadata` type. ---- _By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice._
When we released smithy-rs release-2023-12-08, we introduced a silent failure for endpoint prefixes, and not in the newly released version, but in the previous releases. There is a subtle issue with semver that causes this. This PR addresses the endpoint prefix part of this problem. Other PRs will fix other parts that are broken by this semver issue. The issue is that unstable (0.x) runtime crates are declaring types that get placed into the `ConfigBag`, and these types are referenced in the `ConfigBag` across crate boundaries. This by itself isn't a problem, but because our stable 1.x crates depend on the unstable crates, it becomes a problem. By releasing 1.1.0 that depends on 0.61, consumers of 1.x pull in both 0.60 and 0.61. The generated code pulls in 0.60, and the 1.1.x crates pull in 0.61. This is fine since two semver-incompatible crate versions can be in the dependency closure. Thus, the generated code which is using 0.60 is placing a 0.60 type in the `ConfigBag`, and the runtime crates that pull the type out of the `ConfigBag` are expecting a 0.61 version of it. This leads to the type not existing upon lookup, which then causes the silent break. This PR fixes this by moving the `EndpointPrefix` type and its associated methods into `aws-smithy-runtime-api`, a stable crate. The `aws-smithy-http` unstable crate is updated to point to the new stable version so that a patch release of that crate will solve the issue for old versions going forward as well. ---- _By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice._
This issue addresses a semver compatibility problem similar to the one described in #3318, except for the storable types in the aws-http crate. I opted to move all of aws-http into aws-runtime since there was so little in there. ---- _By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice._
When we released smithy-rs release-2023-12-08, we introduced a silent failure for endpoint prefixes, and not in the newly released version, but in the previous releases. There is a subtle issue with semver that causes this. This PR addresses the endpoint prefix part of this problem. Other PRs will fix other parts that are broken by this semver issue.
The issue is that unstable (0.x) runtime crates are declaring types that get placed into the
ConfigBag
, and these types are referenced in theConfigBag
across crate boundaries. This by itself isn't a problem, but because our stable 1.x crates depend on the unstable crates, it becomes a problem. By releasing 1.1.0 that depends on 0.61, consumers of 1.x pull in both 0.60 and 0.61. The generated code pulls in 0.60, and the 1.1.x crates pull in 0.61. This is fine since two semver-incompatible crate versions can be in the dependency closure. Thus, the generated code which is using 0.60 is placing a 0.60 type in theConfigBag
, and the runtime crates that pull the type out of theConfigBag
are expecting a 0.61 version of it. This leads to the type not existing upon lookup, which then causes the silent break.This PR fixes this by moving the
EndpointPrefix
type and its associated methods intoaws-smithy-runtime-api
, a stable crate. Theaws-smithy-http
unstable crate is updated to point to the new stable version so that a patch release of that crate will solve the issue for old versions going forward as well.By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.