From 9e94492d359e2c4d698757dc4e3c532a56777e3a Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 21 Aug 2026 10:52:19 +0000 Subject: [PATCH] ci: exact-pin the internal path dependencies so publish verification resolves locally cargo publish --workspace --dry-run has been red since 2026-08-20 on every branch. The packaged ruff_graph builds against two versions of ruff_cache at once: our locally packaged 0.0.9, and 0.0.10 pulled from crates.io. The second one arrives through ruff_linter. Its requirement is a caret range, version = 0.16.3, which admits the 0.16.4 that upstream published on 2026-08-20 18:00 UTC, and that release depends on ruff_cache 0.0.10. The last green run on main was 2026-08-18, so the job went red with no commit in between and will keep going red on every upstream release. Pin all 36 internal path dependencies exactly. During a workspace publish cargo packages the members into a temporary local registry and prefers it for co-published crates, which the failing log itself shows: the imported ruff_python_parser 0.0.9 comes from that local registry even though upstream also has a 0.0.9 on crates.io. An exact requirement leaves the local copy as the only candidate, so no upstream release can be substituted into the verification build. A version bump was tried first and measured worse: relabelling the 0.0.x set to 0.0.10 makes upstream ruff_linter 0.16.4 win the resolution and ruff_linter fails to compile with 3881 errors instead of ruff_graph with 5. Version labels chase a moving target; the requirement shape is the actual defect. --- Cargo.toml | 72 +++++++++++++++++++++++++++--------------------------- 1 file changed, 36 insertions(+), 36 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index de53365407cb51..8580cbe0275879 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -20,53 +20,53 @@ license = "MIT" [workspace.dependencies] char_str = { version = "0.0.2" } -ruff = { version = "0.16.3", path = "crates/ruff" } -ruff_annotate_snippets = { version = "0.0.9", path = "crates/ruff_annotate_snippets" } -ruff_cache = { version = "0.0.9", path = "crates/ruff_cache" } -ruff_db = { version = "0.0.9", path = "crates/ruff_db", default-features = false } -ruff_diagnostics = { version = "0.0.9", path = "crates/ruff_diagnostics" } -ruff_formatter = { version = "0.0.9", path = "crates/ruff_formatter" } -ruff_graph = { version = "0.0.9", path = "crates/ruff_graph" } -ruff_index = { version = "0.0.9", path = "crates/ruff_index" } -ruff_linter = { version = "0.16.3", path = "crates/ruff_linter" } -ruff_macros = { version = "0.0.9", path = "crates/ruff_macros" } -ruff_markdown = { version = "0.0.9", path = "crates/ruff_markdown" } -ruff_memory_usage = { version = "0.0.9", path = "crates/ruff_memory_usage" } -ruff_notebook = { version = "0.0.9", path = "crates/ruff_notebook" } -ruff_options_metadata = { version = "0.0.9", path = "crates/ruff_options_metadata" } -ruff_python_ast = { version = "0.0.9", path = "crates/ruff_python_ast" } -ruff_python_codegen = { version = "0.0.9", path = "crates/ruff_python_codegen" } -ruff_python_formatter = { version = "0.0.9", path = "crates/ruff_python_formatter" } -ruff_python_importer = { version = "0.0.9", path = "crates/ruff_python_importer" } -ruff_python_index = { version = "0.0.9", path = "crates/ruff_python_index" } -ruff_python_literal = { version = "0.0.9", path = "crates/ruff_python_literal" } +ruff = { version = "=0.16.3", path = "crates/ruff" } +ruff_annotate_snippets = { version = "=0.0.9", path = "crates/ruff_annotate_snippets" } +ruff_cache = { version = "=0.0.9", path = "crates/ruff_cache" } +ruff_db = { version = "=0.0.9", path = "crates/ruff_db", default-features = false } +ruff_diagnostics = { version = "=0.0.9", path = "crates/ruff_diagnostics" } +ruff_formatter = { version = "=0.0.9", path = "crates/ruff_formatter" } +ruff_graph = { version = "=0.0.9", path = "crates/ruff_graph" } +ruff_index = { version = "=0.0.9", path = "crates/ruff_index" } +ruff_linter = { version = "=0.16.3", path = "crates/ruff_linter" } +ruff_macros = { version = "=0.0.9", path = "crates/ruff_macros" } +ruff_markdown = { version = "=0.0.9", path = "crates/ruff_markdown" } +ruff_memory_usage = { version = "=0.0.9", path = "crates/ruff_memory_usage" } +ruff_notebook = { version = "=0.0.9", path = "crates/ruff_notebook" } +ruff_options_metadata = { version = "=0.0.9", path = "crates/ruff_options_metadata" } +ruff_python_ast = { version = "=0.0.9", path = "crates/ruff_python_ast" } +ruff_python_codegen = { version = "=0.0.9", path = "crates/ruff_python_codegen" } +ruff_python_formatter = { version = "=0.0.9", path = "crates/ruff_python_formatter" } +ruff_python_importer = { version = "=0.0.9", path = "crates/ruff_python_importer" } +ruff_python_index = { version = "=0.0.9", path = "crates/ruff_python_index" } +ruff_python_literal = { version = "=0.0.9", path = "crates/ruff_python_literal" } ruff_cpp_codegen = { path = "crates/ruff_cpp_codegen" } -ruff_python_parser = { version = "0.0.9", path = "crates/ruff_python_parser" } -ruff_python_semantic = { version = "0.0.9", path = "crates/ruff_python_semantic" } -ruff_python_stdlib = { version = "0.0.9", path = "crates/ruff_python_stdlib" } -ruff_python_trivia = { version = "0.0.9", path = "crates/ruff_python_trivia" } -ruff_server = { version = "0.0.9", path = "crates/ruff_server" } -ruff_source_file = { version = "0.0.9", path = "crates/ruff_source_file" } +ruff_python_parser = { version = "=0.0.9", path = "crates/ruff_python_parser" } +ruff_python_semantic = { version = "=0.0.9", path = "crates/ruff_python_semantic" } +ruff_python_stdlib = { version = "=0.0.9", path = "crates/ruff_python_stdlib" } +ruff_python_trivia = { version = "=0.0.9", path = "crates/ruff_python_trivia" } +ruff_server = { version = "=0.0.9", path = "crates/ruff_server" } +ruff_source_file = { version = "=0.0.9", path = "crates/ruff_source_file" } ruff_spo_triplet = { path = "crates/ruff_spo_triplet" } ruff_mdtest = { path = "crates/ruff_mdtest" } -ruff_ranged_value = { version = "0.0.9", path = "crates/ruff_ranged_value" } -ruff_text_size = { version = "0.0.9", path = "crates/ruff_text_size" } -ruff_workspace = { version = "0.0.9", path = "crates/ruff_workspace" } +ruff_ranged_value = { version = "=0.0.9", path = "crates/ruff_ranged_value" } +ruff_text_size = { version = "=0.0.9", path = "crates/ruff_text_size" } +ruff_workspace = { version = "=0.0.9", path = "crates/ruff_workspace" } ty = { path = "crates/ty" } -ty_combine = { version = "0.0.9", path = "crates/ty_combine" } +ty_combine = { version = "=0.0.9", path = "crates/ty_combine" } ty_completion_bench = { path = "crates/ty_completion_bench" } ty_completion_eval = { path = "crates/ty_completion_eval" } ty_ide = { path = "crates/ty_ide" } -ty_module_resolver = { version = "0.0.9", path = "crates/ty_module_resolver" } +ty_module_resolver = { version = "=0.0.9", path = "crates/ty_module_resolver" } ty_project = { path = "crates/ty_project", default-features = false } -ty_python_semantic = { version = "0.0.9", path = "crates/ty_python_semantic" } -ty_python_core = { version = "0.0.9", path = "crates/ty_python_core" } +ty_python_semantic = { version = "=0.0.9", path = "crates/ty_python_semantic" } +ty_python_core = { version = "=0.0.9", path = "crates/ty_python_core" } ty_server = { path = "crates/ty_server" } -ty_site_packages = { version = "0.0.9", path = "crates/ty_site_packages" } -ty_static = { version = "0.0.9", path = "crates/ty_static" } +ty_site_packages = { version = "=0.0.9", path = "crates/ty_site_packages" } +ty_static = { version = "=0.0.9", path = "crates/ty_static" } ty_test = { path = "crates/ty_test" } -ty_vendored = { version = "0.0.9", path = "crates/ty_vendored" } +ty_vendored = { version = "=0.0.9", path = "crates/ty_vendored" } mdtest = { path = "crates/mdtest" }