Unverified Commit 0cbeef35 authored by ysaito1001's avatar ysaito1001 Committed by GitHub
Browse files

Revert pinning tokio version in codegen integ tests (#3681)

## Motivation and Context
Reverts e4260f5ab6b7b3e0f64bd7f270cebd2bd1e5250e

## Description
We recently had a CI failure where some of the SDK codegen integration
tests encountered a cargo dependency graph resolution error
([example](https://github.com/smithy-lang/smithy-rs/actions/runs/9351952926/job/25740638098?pr=3677#step:3:639)).
The way the issue manifested is as follows:
1. A preceding test `SdkCodegenIntegrationTest.smokeTestSdkCodegen`
generated a `Cargo.lock` at the top-level directory of a shared test
workspace whose `tokio` dependency did NOT include the `macros` feature:
```
[[package]]
name = "tokio"
version = "1.38.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ba4f4a02a7a80d6f274636f0aa95c7e383b912d41fe721a31f29e29698585a4a"
dependencies = [
 "backtrace",
 "bytes",
 "libc",
 "mio",
 "pin-project-lite",
 "socket2",
 "windows-sys 0.48.0",
]
```
2. During its turn, `CredentialProviderConfigTest`, which is one of the
failed tests and depends on the `macros` feature of `tokio`, generated
its own test crate and made it as a member of the workspace, for
instance:
```
[workspace]
resolver = "2"
members = ["smithy-test1475522104838765591"]
```
3. Docker containers used by GitHub action have the `CARGO_HOME` set to
`/opt/cargo` where it stores crates io index, cached crates, and so on.
The registry cache did not contain the sought crate `tokio-macros-2.3.0`
at the end of previous step:
```
bash-5.2# ls /opt/cargo/registry/cache/index.crates.io-6f17d22bba15001f/tokio-
tokio-1.37.0.crate            tokio-macros-2.2.0.crate      tokio-rustls-0.24.1.crate     tokio-util-0.7.11.crate       
tokio-1.38.0.crate            tokio-native-tls-0.3.1.crate  tokio-util-0.7.10.crate
```
(`bash-5.2#` indicates that we shelled into a container)

4. Running `cargo test` from the workspace root (or from within the
crate generated at step 2) then triggered the error in question:
```
bash-5.2# cargo t --all-features
error: failed to select a version for the requirement `tokio-macros = "~2.3.0"`
candidate versions found which didn't match: 2.2.0, 2.1.0, 2.0.0, ...
location searched: crates.io index
required by package `tokio v1.38.0`
```

Whether the issue occurs or not for a given test depends upon the
contents of the lockfile of a workspace generated by prior tests. To
ensure we avoid this during codegen integration tests, this PR updates
crates io index before executing `cargo test`.

## Testing
- [x] Passed CI
- [x] Passed internal release pipeline E2E tests

----

_By submitting this pull request, I confirm that you can use, modify,
copy, and redistribute this contribution, under the terms of your
choice._
parent c7b3667a
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -300,7 +300,7 @@ data class CargoDependency(
        val Tokio: CargoDependency =
            CargoDependency(
                "tokio",
                CratesIo("=1.37.0"),
                CratesIo("1.23.1"),
                DependencyScope.Dev,
                features = setOf("macros", "test-util", "rt-multi-thread"),
            )
+4 −0
Original line number Diff line number Diff line
@@ -53,6 +53,10 @@ fun codegenIntegrationTest(
    invokePlugin(ctx)
    ctx.fileManifest.printGeneratedFiles()
    val logger = Logger.getLogger("CodegenIntegrationTest")
    // Updating the crates.io index before executing the test ensures that the test crate avoids encountering dependency
    // graph resolution errors caused by a lockfile generated by a previous test.
    // See https://github.com/smithy-lang/smithy-rs/pull/3677#discussion_r1624916160
    logger.fine(("cargo update").runCommand(testDir))
    val out = params.command?.invoke(testDir) ?: (params.cargoCommand ?: "cargo test --lib --tests").runCommand(testDir)
    logger.fine(out.toString())
    return testDir