From d201b8e5ddd98a1887252179dec8f09e1f342b0c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Orhun=20Parmaks=C4=B1z?= Date: Sun, 1 Dec 2024 02:41:27 +0300 Subject: [PATCH] chore(xtask): check lints for only library targets (#1531) Makes it possible to filter workspace packages by their targets. (e.g. when we want to retrieve all the binary targets / examples, etc.) --- xtask/src/main.rs | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/xtask/src/main.rs b/xtask/src/main.rs index e5c00b24..1d8e735f 100644 --- a/xtask/src/main.rs +++ b/xtask/src/main.rs @@ -6,7 +6,7 @@ use std::{fmt::Debug, io, process::Output, vec}; -use cargo_metadata::MetadataCommand; +use cargo_metadata::{MetadataCommand, TargetKind}; use clap::{Parser, Subcommand, ValueEnum}; use clap_verbosity_flag::{InfoLevel, Verbosity}; use color_eyre::{eyre::Context, Result}; @@ -183,14 +183,14 @@ fn check() -> Result<()> { /// Run cargo-rdme to check if README.md is up-to-date with the library documentation fn check_readme() -> Result<()> { - for package in get_workspace_packages()? { + for package in workspace_packages(TargetKind::Lib)? { run_cargo(vec!["rdme", "--workspace-project", &package, "--check"])?; } Ok(()) } fn fix_readme() -> Result<()> { - for package in get_workspace_packages()? { + for package in workspace_packages(TargetKind::Lib)? { run_cargo(vec!["rdme", "--workspace-project", &package])?; } Ok(()) @@ -250,21 +250,24 @@ fn fix_clippy() -> Result<()> { /// Check that docs build without errors using flags for docs.rs fn lint_docs() -> Result<()> { - for package in get_workspace_packages()? { + for package in workspace_packages(TargetKind::Lib)? { run_cargo_nightly(vec!["docs-rs", "--package", &package])?; } Ok(()) } -fn get_workspace_packages() -> Result> { +/// Return the available packages in the workspace +fn workspace_packages(kind: TargetKind) -> Result> { let meta = MetadataCommand::new() .exec() .wrap_err("failed to get cargo metadata")?; - Ok(meta - .workspace_default_packages() + let packages = meta + .workspace_packages() .iter() + .filter(|v| v.targets.iter().any(|t| t.kind.contains(&kind))) .map(|v| v.name.clone()) - .collect()) + .collect(); + Ok(packages) } /// Lint formatting issues in the project