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
This commit is contained in:
Josh McKinney 2025-07-15 15:05:18 -07:00 committed by GitHub
parent 9bc573931c
commit 0148b62f0c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 53 additions and 203 deletions

View File

@ -214,6 +214,9 @@ jobs:
- uses: dtolnay/install@74f735cdf643820234e37ae1c4089a08fd266d8a # master - uses: dtolnay/install@74f735cdf643820234e37ae1c4089a08fd266d8a # master
with: with:
crate: cargo-docs-rs crate: cargo-docs-rs
- uses: taiki-e/install-action@c07504cae06f832dc8de08911c9a9c5cddb0d2d3 # v2
with:
tool: cargo-hack
- uses: Swatinem/rust-cache@98c8021b550208e191a6a3145459bfc9fb29c4c0 # v2 - uses: Swatinem/rust-cache@98c8021b550208e191a6a3145459bfc9fb29c4c0 # v2
- run: cargo xtask docs - run: cargo xtask docs

183
Cargo.lock generated
View File

@ -274,15 +274,6 @@ dependencies = [
"time", "time",
] ]
[[package]]
name = "camino"
version = "1.1.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0da45bc31171d8d6960122e222a67740df867c1dd53b4d51caa297084c185cab"
dependencies = [
"serde",
]
[[package]] [[package]]
name = "canvas" name = "canvas"
version = "0.0.0" version = "0.0.0"
@ -293,46 +284,6 @@ dependencies = [
"ratatui", "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]] [[package]]
name = "cast" name = "cast"
version = "0.3.0" version = "0.3.0"
@ -341,18 +292,18 @@ checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5"
[[package]] [[package]]
name = "castaway" name = "castaway"
version = "0.2.3" version = "0.2.4"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0abae9be0aaf9ea96a3b1b8b1b55c602ca751eba1b1500220cea4ecbafe7c0d5" checksum = "dec551ab6e7578819132c713a93c022a05d60159dc86e7a7050223577484c55a"
dependencies = [ dependencies = [
"rustversion", "rustversion",
] ]
[[package]] [[package]]
name = "cc" name = "cc"
version = "1.2.27" version = "1.2.29"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d487aa071b5f64da6f19a3e848e3578944b726ee5a4854b82172f02aa876bfdc" checksum = "5c1599538de2394445747c8cf7935946e3cc27e9625f889d979bfb2aaf569362"
dependencies = [ dependencies = [
"shlex", "shlex",
] ]
@ -902,16 +853,6 @@ version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" 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]] [[package]]
name = "errno" name = "errno"
version = "0.3.13" version = "0.3.13"
@ -1320,9 +1261,9 @@ dependencies = [
[[package]] [[package]]
name = "hyper-util" name = "hyper-util"
version = "0.1.14" version = "0.1.15"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dc2fdfdbff08affe55bb779f33b053aa1fe5dd5b54c257343c17edfa55711bdb" checksum = "7f66d5bd4c6f02bf0542fad85d626775bab9258cf795a4256dcaf3161114d1df"
dependencies = [ dependencies = [
"bytes", "bytes",
"futures-channel", "futures-channel",
@ -1494,9 +1435,9 @@ checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683"
[[package]] [[package]]
name = "indexmap" name = "indexmap"
version = "2.9.0" version = "2.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cea70ddb795996207ad57735b50c5982d8844f38ba9ee5f1aedcfb708a2aa11e" checksum = "fe4cd85333e22411419a0bcae1297d25e58c9443848b11dc6a86fefe8c78a661"
dependencies = [ dependencies = [
"equivalent", "equivalent",
"hashbrown", "hashbrown",
@ -2016,15 +1957,6 @@ version = "0.1.6"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" 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]] [[package]]
name = "ordered-float" name = "ordered-float"
version = "4.6.0" version = "4.6.0"
@ -2834,9 +2766,9 @@ dependencies = [
[[package]] [[package]]
name = "rustls" name = "rustls"
version = "0.23.28" version = "0.23.29"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7160e3e10bf4535308537f3c4e1641468cd0e485175d6163087c0393c7d46643" checksum = "2491382039b29b9b11ff08b76ff6c97cf287671dbb74f0be44bda389fffe9bd1"
dependencies = [ dependencies = [
"log", "log",
"once_cell", "once_cell",
@ -2870,9 +2802,9 @@ dependencies = [
[[package]] [[package]]
name = "rustls-webpki" name = "rustls-webpki"
version = "0.103.3" version = "0.103.4"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e4a72fe2bcf7a6ac6fd7d0b9e5cb68aeb7d4c0a0271730218b3e92d43b4eb435" checksum = "0a17884ae0c1b773f1ccd2bd4a8c72f16da897310a98b0e84bf349ad5ead92fc"
dependencies = [ dependencies = [
"ring", "ring",
"rustls-pki-types", "rustls-pki-types",
@ -2961,9 +2893,6 @@ name = "semver"
version = "1.0.26" version = "1.0.26"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0" checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0"
dependencies = [
"serde",
]
[[package]] [[package]]
name = "serde" name = "serde"
@ -2974,27 +2903,6 @@ dependencies = [
"serde_derive", "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]] [[package]]
name = "serde_derive" name = "serde_derive"
version = "1.0.219" version = "1.0.219"
@ -3028,15 +2936,6 @@ dependencies = [
"serde", "serde",
] ]
[[package]]
name = "serde_spanned"
version = "0.6.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3"
dependencies = [
"serde",
]
[[package]] [[package]]
name = "serde_spanned" name = "serde_spanned"
version = "1.0.0" version = "1.0.0"
@ -3080,9 +2979,9 @@ dependencies = [
[[package]] [[package]]
name = "shared_child" name = "shared_child"
version = "1.1.0" version = "1.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c2778001df1384cf20b6dc5a5a90f48da35539885edaaefd887f8d744e939c0b" checksum = "1e362d9935bc50f019969e2f9ecd66786612daae13e8f277be7bfb66e8bed3f7"
dependencies = [ dependencies = [
"libc", "libc",
"sigchld", "sigchld",
@ -3103,9 +3002,9 @@ checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
[[package]] [[package]]
name = "sigchld" name = "sigchld"
version = "0.2.3" version = "0.2.4"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1219ef50fc0fdb04fcc243e6aa27f855553434ffafe4fa26554efb78b5b4bf89" checksum = "47106eded3c154e70176fc83df9737335c94ce22f821c32d17ed1db1f83badb1"
dependencies = [ dependencies = [
"libc", "libc",
"os_pipe", "os_pipe",
@ -3379,7 +3278,7 @@ dependencies = [
"nix", "nix",
"num-derive", "num-derive",
"num-traits", "num-traits",
"ordered-float 4.6.0", "ordered-float",
"pest", "pest",
"pest_derive", "pest_derive",
"phf", "phf",
@ -3574,18 +3473,6 @@ dependencies = [
"tokio", "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]] [[package]]
name = "toml" name = "toml"
version = "0.9.2" version = "0.9.2"
@ -3594,7 +3481,7 @@ checksum = "ed0aee96c12fa71097902e0bb061a5e1ebd766a6636bb605ba401c45c1650eac"
dependencies = [ dependencies = [
"indexmap", "indexmap",
"serde", "serde",
"serde_spanned 1.0.0", "serde_spanned",
"toml_datetime 0.7.0", "toml_datetime 0.7.0",
"toml_parser", "toml_parser",
"toml_writer", "toml_writer",
@ -3606,9 +3493,6 @@ name = "toml_datetime"
version = "0.6.11" version = "0.6.11"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c" checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c"
dependencies = [
"serde",
]
[[package]] [[package]]
name = "toml_datetime" name = "toml_datetime"
@ -3626,10 +3510,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a"
dependencies = [ dependencies = [
"indexmap", "indexmap",
"serde",
"serde_spanned 0.6.9",
"toml_datetime 0.6.11", "toml_datetime 0.6.11",
"toml_write",
"winnow", "winnow",
] ]
@ -3642,12 +3523,6 @@ dependencies = [
"winnow", "winnow",
] ]
[[package]]
name = "toml_write"
version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801"
[[package]] [[package]]
name = "toml_writer" name = "toml_writer"
version = "1.0.2" version = "1.0.2"
@ -3817,15 +3692,9 @@ dependencies = [
"serde_json", "serde_json",
"target-triple", "target-triple",
"termcolor", "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]] [[package]]
name = "typenum" name = "typenum"
version = "1.18.0" version = "1.18.0"
@ -3867,12 +3736,6 @@ version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1fc81956842c57dac11422a97c3b8195a1ff727f06e85c84ed2e8aa277c9a0fd" checksum = "1fc81956842c57dac11422a97c3b8195a1ff727f06e85c84ed2e8aa277c9a0fd"
[[package]]
name = "unicode-xid"
version = "0.2.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853"
[[package]] [[package]]
name = "untrusted" name = "untrusted"
version = "0.9.0" version = "0.9.0"
@ -4122,7 +3985,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5f2ab60e120fd6eaa68d9567f3226e876684639d22a4219b313ff69ec0ccd5ac" checksum = "5f2ab60e120fd6eaa68d9567f3226e876684639d22a4219b313ff69ec0ccd5ac"
dependencies = [ dependencies = [
"log", "log",
"ordered-float 4.6.0", "ordered-float",
"strsim", "strsim",
"thiserror 1.0.69", "thiserror 1.0.69",
"wezterm-dynamic-derive", "wezterm-dynamic-derive",
@ -4408,9 +4271,9 @@ checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486"
[[package]] [[package]]
name = "winnow" name = "winnow"
version = "0.7.11" version = "0.7.12"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "74c7b26e3480b707944fc872477815d29a8e429d2f93a1ce000f5fa84a15cbcd" checksum = "f3edebf492c8125044983378ecb5766203ad3b4c2f7a922bd7dd207f6d443e95"
dependencies = [ dependencies = [
"memchr", "memchr",
] ]
@ -4434,12 +4297,10 @@ checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb"
name = "xtask" name = "xtask"
version = "0.0.0" version = "0.0.0"
dependencies = [ dependencies = [
"cargo_metadata",
"clap", "clap",
"clap-verbosity-flag", "clap-verbosity-flag",
"color-eyre", "color-eyre",
"duct", "duct",
"itertools 0.14.0",
"tracing 0.1.41", "tracing 0.1.41",
"tracing-subscriber", "tracing-subscriber",
] ]

View File

@ -5,11 +5,9 @@ publish = false
license.workspace = true license.workspace = true
[dependencies] [dependencies]
cargo_metadata = "0.21"
clap = { version = "4.5.41", features = ["derive"] } clap = { version = "4.5.41", features = ["derive"] }
clap-verbosity-flag = { version = "3.0.3", default-features = false, features = ["tracing"] } clap-verbosity-flag = { version = "3.0.3", default-features = false, features = ["tracing"] }
color-eyre = "0.6.5" color-eyre = "0.6.5"
duct = "1.0.0" duct = "1.0.0"
itertools.workspace = true
tracing = "0.1.40" tracing = "0.1.40"
tracing-subscriber = { version = "0.3.18" } tracing-subscriber = { version = "0.3.18" }

View File

@ -1,7 +1,6 @@
use color_eyre::Result; 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 /// Check documentation for errors and warnings
#[derive(Clone, Debug, clap::Args)] #[derive(Clone, Debug, clap::Args)]
@ -13,14 +12,11 @@ pub struct Docs {
impl Run for Docs { impl Run for Docs {
fn run(self) -> Result<()> { fn run(self) -> Result<()> {
let packages = workspace_libs()?; // cargo +nightly hack --all --ignore-private docs-rs
for (position, package) in packages.iter().with_position() { let mut args = vec!["hack", "--all", "--ignore-private", "docs-rs"];
let mut args = vec!["docs-rs", "--package", &package]; if self.open {
if self.open && matches!(position, Position::Last | Position::Only) {
args.push("--open"); args.push("--open");
} }
run_cargo_nightly(args)?; run_cargo_nightly(args)
}
Ok(())
} }
} }

View File

@ -1,6 +1,6 @@
use color_eyre::Result; 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) /// Check if README.md is up-to-date (using cargo-rdme)
#[derive(Clone, Debug, clap::Args)] #[derive(Clone, Debug, clap::Args)]
@ -10,22 +10,30 @@ pub struct Readme {
check: bool, 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 { impl Run for Readme {
fn run(self) -> Result<()> { fn run(self) -> Result<()> {
let args = if self.check { // This would be simpler perhaps with cargo-hack, however cargo-rdme does not support the
vec!["rdme", "--check"] // `--manifest-path` option that is required for this to work, so it's easiest to hard code
} else { // the package names here. See https://github.com/orium/cargo-rdme/issues/261
vec!["rdme"] for package in PROJECTS {
}; let mut args = vec!["rdme", "--workspace-project", package];
for package in workspace_libs()? { if self.check {
if package == "ratatui" { args.push("--check");
// Skip the main crate as we removed rdme
continue;
} }
let mut package_args = args.clone(); run_cargo(args)?;
package_args.push("--workspace-project");
package_args.push(&package);
run_cargo(package_args)?;
} }
Ok(()) Ok(())
} }

View File

@ -7,12 +7,10 @@
use std::io; use std::io;
use std::process::Output; use std::process::Output;
use cargo_metadata::{MetadataCommand, TargetKind};
use clap::Parser; use clap::Parser;
use clap::builder::styling::{AnsiColor, Styles}; use clap::builder::styling::{AnsiColor, Styles};
use clap_verbosity_flag::{InfoLevel, Verbosity}; use clap_verbosity_flag::{InfoLevel, Verbosity};
use color_eyre::Result; use color_eyre::Result;
use color_eyre::eyre::Context;
use commands::Command; use commands::Command;
use duct::cmd; use duct::cmd;
@ -60,20 +58,6 @@ struct Args {
verbosity: Verbosity<InfoLevel>, verbosity: Verbosity<InfoLevel>,
} }
/// Return the available libs in the workspace
fn workspace_libs() -> Result<Vec<String>> {
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 /// Run a cargo subcommand with the default toolchain
fn run_cargo(args: Vec<&str>) -> Result<()> { fn run_cargo(args: Vec<&str>) -> Result<()> {
cmd("cargo", args).run_with_trace()?; cmd("cargo", args).run_with_trace()?;