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()?;