Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
1 change: 1 addition & 0 deletions .github/workflows/pdm-compatibility.yml
Original file line number Diff line number Diff line change
Expand Up @@ -165,6 +165,7 @@ jobs:
native-pdm/cases/**/cli-output.json
native-pdm/cases/**/pdm.lock
native-pdm/cases/**/*.log
native-pdm/attempts/**
retention-days: 14

# The hermetic Rust capstone (wiremock Socket API that also serves the
Expand Down
19 changes: 15 additions & 4 deletions crates/socket-patch-cli/src/commands/vex_consumed.rs
Original file line number Diff line number Diff line change
Expand Up @@ -715,8 +715,11 @@ mod tests {
None,
)
.await;
assert_eq!(installed_again, installed);
let (paths, calls) = tracked_npm_hosted(&common, &installed_again).await;
// Since #605 the name-keyed resolver probes bundled trees itself, so
// it already returns the aliases and the nested store's peers. Feed
// the earlier, alias-free set to keep exercising alias expansion;
// the resolver's own set is checked against the same result below.
let (paths, calls) = tracked_npm_hosted(&common, &installed).await;
assert_eq!(calls.len(), 1);
let mut inputs = calls[0].clone();
inputs.sort();
Expand All @@ -738,6 +741,9 @@ mod tests {
.len(),
paths.len()
);
let (mut resolved, _) = tracked_npm_hosted(&common, &installed_again).await;
resolved.sort();
assert_eq!(resolved, expected, "the resolver's own copy set");
}

#[cfg(unix)]
Expand Down Expand Up @@ -768,14 +774,19 @@ mod tests {
None,
)
.await;
assert!(installed.is_empty(), "{installed:?}");
let (mut paths, calls) = tracked_npm_hosted(&common, &installed).await;
// Since #605 the name-keyed resolver reaches the alias and its
// sibling peers on its own. An alias-only set (what an alias-blind
// resolver returns) must still expand to the same copies.
let (mut paths, calls) = tracked_npm_hosted(&common, &HashMap::new()).await;
assert_eq!(calls, vec![vec![alias.clone()]]);
let mut expected = peers;
expected.push(alias);
paths.sort();
expected.sort();
assert_eq!(paths, expected);
let (mut resolved, _) = tracked_npm_hosted(&common, &installed).await;
resolved.sort();
assert_eq!(resolved, expected, "the resolver's own copy set");
}

#[cfg(unix)]
Expand Down
11 changes: 11 additions & 0 deletions docs/testing/pdm-compatibility.md
Original file line number Diff line number Diff line change
Expand Up @@ -140,5 +140,16 @@ every Windows cell used to skip, and a run whose cells all skip or whose PDM
bootstrap fails is now an error. The matrix needs no Socket API token (the
`urllib3@1.26.18` patch is a free tier).

The matrix runs against production PyPI and the public patch API, so a case
is re-run from a fresh directory, at most three attempts in total, when every
failed check is explained by a terminal transport failure in the operation it
judged: PDM, pip or uv giving up on PyPI, or the CLI's request error, patch
API 5xx or exhausted 429 retry, including one the CLI reports in its JSON
with exit code zero. Recovered retry warnings do not count, and a functional
failure is never retried, even when a later step raises a transport error.
Failed attempt logs stay under `attempts/<version>-<shape>-<mode>/<n>/`, and
the final row lists them in `transportRetries`. A failing case prints each
failed check's recorded detail to the job log.

Full run results belong with the source revision and toolchain versions in CI
artifacts or a local output directory. See the [testing guide](README.md#ci-and-results).
Loading
Loading