From 0148b62f0c7e3929804ba16160bd28411e1cad87 Mon Sep 17 00:00:00 2001 From: Josh McKinney Date: Tue, 15 Jul 2025 15:05:18 -0700 Subject: [PATCH] chore: remove cargo_metadata dep from xtask (#1993) Removed due to hard N-2 MSRV requirement, whereas we use a soft N-2 (only update when necessary). This makes it painful to be able to test our actual msrv (as the xtask has to be built with the version that its deps support, while still wanting to check the msrv version, so we'd end up with 2 versions in the one CI task and this would get annoying to check). See https://github.com/rust-lang/cargo/issues/15746 for more details. Partially implements #1820 - mainly as a problem solution rather than a specific goal to use cargo-hack --- .github/workflows/ci.yml | 3 + Cargo.lock | 183 +++++-------------------------------- xtask/Cargo.toml | 2 - xtask/src/commands/docs.rs | 16 ++-- xtask/src/commands/rdme.rs | 36 +++++--- xtask/src/main.rs | 16 ---- 6 files changed, 53 insertions(+), 203 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2e0aed98..8f84736c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -214,6 +214,9 @@ jobs: - uses: dtolnay/install@74f735cdf643820234e37ae1c4089a08fd266d8a # master with: crate: cargo-docs-rs + - uses: taiki-e/install-action@c07504cae06f832dc8de08911c9a9c5cddb0d2d3 # v2 + with: + tool: cargo-hack - uses: Swatinem/rust-cache@98c8021b550208e191a6a3145459bfc9fb29c4c0 # v2 - run: cargo xtask docs diff --git a/Cargo.lock b/Cargo.lock index 205c4919..c2ff1d07 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -274,15 +274,6 @@ dependencies = [ "time", ] -[[package]] -name = "camino" -version = "1.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0da45bc31171d8d6960122e222a67740df867c1dd53b4d51caa297084c185cab" -dependencies = [ - "serde", -] - [[package]] name = "canvas" version = "0.0.0" @@ -293,46 +284,6 @@ dependencies = [ "ratatui", ] -[[package]] -name = "cargo-platform" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84982c6c0ae343635a3a4ee6dedef965513735c8b183caa7289fa6e27399ebd4" -dependencies = [ - "serde", -] - -[[package]] -name = "cargo-util-schemas" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7dc1a6f7b5651af85774ae5a34b4e8be397d9cf4bc063b7e6dbd99a841837830" -dependencies = [ - "semver", - "serde", - "serde-untagged", - "serde-value", - "thiserror 2.0.12", - "toml 0.8.23", - "unicode-xid", - "url", -] - -[[package]] -name = "cargo_metadata" -version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cfca2aaa699835ba88faf58a06342a314a950d2b9686165e038286c30316868" -dependencies = [ - "camino", - "cargo-platform", - "cargo-util-schemas", - "semver", - "serde", - "serde_json", - "thiserror 2.0.12", -] - [[package]] name = "cast" version = "0.3.0" @@ -341,18 +292,18 @@ checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" [[package]] name = "castaway" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0abae9be0aaf9ea96a3b1b8b1b55c602ca751eba1b1500220cea4ecbafe7c0d5" +checksum = "dec551ab6e7578819132c713a93c022a05d60159dc86e7a7050223577484c55a" dependencies = [ "rustversion", ] [[package]] name = "cc" -version = "1.2.27" +version = "1.2.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d487aa071b5f64da6f19a3e848e3578944b726ee5a4854b82172f02aa876bfdc" +checksum = "5c1599538de2394445747c8cf7935946e3cc27e9625f889d979bfb2aaf569362" dependencies = [ "shlex", ] @@ -902,16 +853,6 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" -[[package]] -name = "erased-serde" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e004d887f51fcb9fef17317a2f3525c887d8aa3f4f50fed920816a688284a5b7" -dependencies = [ - "serde", - "typeid", -] - [[package]] name = "errno" version = "0.3.13" @@ -1320,9 +1261,9 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.14" +version = "0.1.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc2fdfdbff08affe55bb779f33b053aa1fe5dd5b54c257343c17edfa55711bdb" +checksum = "7f66d5bd4c6f02bf0542fad85d626775bab9258cf795a4256dcaf3161114d1df" dependencies = [ "bytes", "futures-channel", @@ -1494,9 +1435,9 @@ checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683" [[package]] name = "indexmap" -version = "2.9.0" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cea70ddb795996207ad57735b50c5982d8844f38ba9ee5f1aedcfb708a2aa11e" +checksum = "fe4cd85333e22411419a0bcae1297d25e58c9443848b11dc6a86fefe8c78a661" dependencies = [ "equivalent", "hashbrown", @@ -2016,15 +1957,6 @@ version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" -[[package]] -name = "ordered-float" -version = "2.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68f19d67e5a2795c94e73e0bb1cc1a7edeb2e28efd39e2e1c9b7a40c1108b11c" -dependencies = [ - "num-traits", -] - [[package]] name = "ordered-float" version = "4.6.0" @@ -2834,9 +2766,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.28" +version = "0.23.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7160e3e10bf4535308537f3c4e1641468cd0e485175d6163087c0393c7d46643" +checksum = "2491382039b29b9b11ff08b76ff6c97cf287671dbb74f0be44bda389fffe9bd1" dependencies = [ "log", "once_cell", @@ -2870,9 +2802,9 @@ dependencies = [ [[package]] name = "rustls-webpki" -version = "0.103.3" +version = "0.103.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4a72fe2bcf7a6ac6fd7d0b9e5cb68aeb7d4c0a0271730218b3e92d43b4eb435" +checksum = "0a17884ae0c1b773f1ccd2bd4a8c72f16da897310a98b0e84bf349ad5ead92fc" dependencies = [ "ring", "rustls-pki-types", @@ -2961,9 +2893,6 @@ name = "semver" version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0" -dependencies = [ - "serde", -] [[package]] name = "serde" @@ -2974,27 +2903,6 @@ dependencies = [ "serde_derive", ] -[[package]] -name = "serde-untagged" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "299d9c19d7d466db4ab10addd5703e4c615dec2a5a16dbbafe191045e87ee66e" -dependencies = [ - "erased-serde", - "serde", - "typeid", -] - -[[package]] -name = "serde-value" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3a1a3341211875ef120e117ea7fd5228530ae7e7036a779fdc9117be6b3282c" -dependencies = [ - "ordered-float 2.10.1", - "serde", -] - [[package]] name = "serde_derive" version = "1.0.219" @@ -3028,15 +2936,6 @@ dependencies = [ "serde", ] -[[package]] -name = "serde_spanned" -version = "0.6.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3" -dependencies = [ - "serde", -] - [[package]] name = "serde_spanned" version = "1.0.0" @@ -3080,9 +2979,9 @@ dependencies = [ [[package]] name = "shared_child" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2778001df1384cf20b6dc5a5a90f48da35539885edaaefd887f8d744e939c0b" +checksum = "1e362d9935bc50f019969e2f9ecd66786612daae13e8f277be7bfb66e8bed3f7" dependencies = [ "libc", "sigchld", @@ -3103,9 +3002,9 @@ checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] name = "sigchld" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1219ef50fc0fdb04fcc243e6aa27f855553434ffafe4fa26554efb78b5b4bf89" +checksum = "47106eded3c154e70176fc83df9737335c94ce22f821c32d17ed1db1f83badb1" dependencies = [ "libc", "os_pipe", @@ -3379,7 +3278,7 @@ dependencies = [ "nix", "num-derive", "num-traits", - "ordered-float 4.6.0", + "ordered-float", "pest", "pest_derive", "phf", @@ -3574,18 +3473,6 @@ dependencies = [ "tokio", ] -[[package]] -name = "toml" -version = "0.8.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362" -dependencies = [ - "serde", - "serde_spanned 0.6.9", - "toml_datetime 0.6.11", - "toml_edit", -] - [[package]] name = "toml" version = "0.9.2" @@ -3594,7 +3481,7 @@ checksum = "ed0aee96c12fa71097902e0bb061a5e1ebd766a6636bb605ba401c45c1650eac" dependencies = [ "indexmap", "serde", - "serde_spanned 1.0.0", + "serde_spanned", "toml_datetime 0.7.0", "toml_parser", "toml_writer", @@ -3606,9 +3493,6 @@ name = "toml_datetime" version = "0.6.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c" -dependencies = [ - "serde", -] [[package]] name = "toml_datetime" @@ -3626,10 +3510,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" dependencies = [ "indexmap", - "serde", - "serde_spanned 0.6.9", "toml_datetime 0.6.11", - "toml_write", "winnow", ] @@ -3642,12 +3523,6 @@ dependencies = [ "winnow", ] -[[package]] -name = "toml_write" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801" - [[package]] name = "toml_writer" version = "1.0.2" @@ -3817,15 +3692,9 @@ dependencies = [ "serde_json", "target-triple", "termcolor", - "toml 0.9.2", + "toml", ] -[[package]] -name = "typeid" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc7d623258602320d5c55d1bc22793b57daff0ec7efc270ea7d55ce1d5f5471c" - [[package]] name = "typenum" version = "1.18.0" @@ -3867,12 +3736,6 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1fc81956842c57dac11422a97c3b8195a1ff727f06e85c84ed2e8aa277c9a0fd" -[[package]] -name = "unicode-xid" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" - [[package]] name = "untrusted" version = "0.9.0" @@ -4122,7 +3985,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5f2ab60e120fd6eaa68d9567f3226e876684639d22a4219b313ff69ec0ccd5ac" dependencies = [ "log", - "ordered-float 4.6.0", + "ordered-float", "strsim", "thiserror 1.0.69", "wezterm-dynamic-derive", @@ -4408,9 +4271,9 @@ checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" [[package]] name = "winnow" -version = "0.7.11" +version = "0.7.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74c7b26e3480b707944fc872477815d29a8e429d2f93a1ce000f5fa84a15cbcd" +checksum = "f3edebf492c8125044983378ecb5766203ad3b4c2f7a922bd7dd207f6d443e95" dependencies = [ "memchr", ] @@ -4434,12 +4297,10 @@ checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" name = "xtask" version = "0.0.0" dependencies = [ - "cargo_metadata", "clap", "clap-verbosity-flag", "color-eyre", "duct", - "itertools 0.14.0", "tracing 0.1.41", "tracing-subscriber", ] diff --git a/xtask/Cargo.toml b/xtask/Cargo.toml index f8aa6af4..29d33100 100644 --- a/xtask/Cargo.toml +++ b/xtask/Cargo.toml @@ -5,11 +5,9 @@ publish = false license.workspace = true [dependencies] -cargo_metadata = "0.21" clap = { version = "4.5.41", features = ["derive"] } clap-verbosity-flag = { version = "3.0.3", default-features = false, features = ["tracing"] } color-eyre = "0.6.5" duct = "1.0.0" -itertools.workspace = true tracing = "0.1.40" tracing-subscriber = { version = "0.3.18" } diff --git a/xtask/src/commands/docs.rs b/xtask/src/commands/docs.rs index 793b6fa5..e84fe809 100644 --- a/xtask/src/commands/docs.rs +++ b/xtask/src/commands/docs.rs @@ -1,7 +1,6 @@ use color_eyre::Result; -use itertools::{Itertools, Position}; -use crate::{Run, run_cargo_nightly, workspace_libs}; +use crate::{Run, run_cargo_nightly}; /// Check documentation for errors and warnings #[derive(Clone, Debug, clap::Args)] @@ -13,14 +12,11 @@ pub struct Docs { impl Run for Docs { fn run(self) -> Result<()> { - let packages = workspace_libs()?; - for (position, package) in packages.iter().with_position() { - let mut args = vec!["docs-rs", "--package", &package]; - if self.open && matches!(position, Position::Last | Position::Only) { - args.push("--open"); - } - run_cargo_nightly(args)?; + // cargo +nightly hack --all --ignore-private docs-rs + let mut args = vec!["hack", "--all", "--ignore-private", "docs-rs"]; + if self.open { + args.push("--open"); } - Ok(()) + run_cargo_nightly(args) } } diff --git a/xtask/src/commands/rdme.rs b/xtask/src/commands/rdme.rs index 1581f8dd..db62e110 100644 --- a/xtask/src/commands/rdme.rs +++ b/xtask/src/commands/rdme.rs @@ -1,6 +1,6 @@ use color_eyre::Result; -use crate::{Run, run_cargo, workspace_libs}; +use crate::{Run, run_cargo}; /// Check if README.md is up-to-date (using cargo-rdme) #[derive(Clone, Debug, clap::Args)] @@ -10,22 +10,30 @@ pub struct Readme { check: bool, } +/// The projects that should have their README.md generated from the source code. +/// +/// Notably, we removed `ratatui` from this list as we have a more specifically crafted README for +/// the main crate. +const PROJECTS: &[&str] = &[ + "ratatui-core", + "ratatui-crossterm", + "ratatui-macros", + "ratatui-termion", + "ratatui-termwiz", + "ratatui-widgets", +]; + impl Run for Readme { fn run(self) -> Result<()> { - let args = if self.check { - vec!["rdme", "--check"] - } else { - vec!["rdme"] - }; - for package in workspace_libs()? { - if package == "ratatui" { - // Skip the main crate as we removed rdme - continue; + // This would be simpler perhaps with cargo-hack, however cargo-rdme does not support the + // `--manifest-path` option that is required for this to work, so it's easiest to hard code + // the package names here. See https://github.com/orium/cargo-rdme/issues/261 + for package in PROJECTS { + let mut args = vec!["rdme", "--workspace-project", package]; + if self.check { + args.push("--check"); } - let mut package_args = args.clone(); - package_args.push("--workspace-project"); - package_args.push(&package); - run_cargo(package_args)?; + run_cargo(args)?; } Ok(()) } diff --git a/xtask/src/main.rs b/xtask/src/main.rs index 57fb7905..1f4447ff 100644 --- a/xtask/src/main.rs +++ b/xtask/src/main.rs @@ -7,12 +7,10 @@ use std::io; use std::process::Output; -use cargo_metadata::{MetadataCommand, TargetKind}; use clap::Parser; use clap::builder::styling::{AnsiColor, Styles}; use clap_verbosity_flag::{InfoLevel, Verbosity}; use color_eyre::Result; -use color_eyre::eyre::Context; use commands::Command; use duct::cmd; @@ -60,20 +58,6 @@ struct Args { verbosity: Verbosity, } -/// Return the available libs in the workspace -fn workspace_libs() -> Result> { - let meta = MetadataCommand::new() - .exec() - .wrap_err("failed to get cargo metadata")?; - let packages = meta - .workspace_packages() - .iter() - .filter(|v| v.targets.iter().any(|t| t.kind.contains(&TargetKind::Lib))) - .map(|v| v.name.to_string()) - .collect(); - Ok(packages) -} - /// Run a cargo subcommand with the default toolchain fn run_cargo(args: Vec<&str>) -> Result<()> { cmd("cargo", args).run_with_trace()?;