From 648938b6623954a71ecee2990d57ce9df2e197b7 Mon Sep 17 00:00:00 2001 From: Dario Nieuwenhuis Date: Fri, 15 Aug 2025 16:14:34 +0200 Subject: Make crate configs a vec. --- release/src/main.rs | 24 ++++++++++++++++-------- release/src/semver_check.rs | 25 ++++++++++++------------- release/src/types.rs | 2 +- 3 files changed, 29 insertions(+), 22 deletions(-) (limited to 'release') diff --git a/release/src/main.rs b/release/src/main.rs index 25f31486a..7850bbb8d 100644 --- a/release/src/main.rs +++ b/release/src/main.rs @@ -141,6 +141,14 @@ fn list_crates(root: &PathBuf) -> Result> { } } + let mut configs = metadata.build.clone(); + if configs.is_empty() { + configs.push(BuildConfig { + features: vec![], + target: None, + }) + } + crates.insert( id.clone(), Crate { @@ -148,10 +156,7 @@ fn list_crates(root: &PathBuf) -> Result> { version: parsed.package.version, path, dependencies, - config: metadata.build.first().cloned().unwrap_or_else(|| BuildConfig { - features: vec![], - target: None, - }), + configs, }, ); } @@ -332,10 +337,11 @@ fn main() -> Result<()> { c.path.join("Cargo.toml").display().to_string(), ]; + let config = c.configs.first().unwrap(); // TODO args.push("--features".into()); - args.push(c.config.features.join(",")); + args.push(config.features.join(",")); - if let Some(target) = &c.config.target { + if let Some(target) = &config.target { args.push("--target".into()); args.push(target.clone()); } @@ -387,6 +393,8 @@ fn update_changelog(repo: &Path, c: &Crate) -> Result<()> { } fn publish_release(_repo: &Path, c: &Crate, push: bool) -> Result<()> { + let config = c.configs.first().unwrap(); // TODO + let mut args: Vec = vec![ "publish".to_string(), "--manifest-path".to_string(), @@ -394,9 +402,9 @@ fn publish_release(_repo: &Path, c: &Crate, push: bool) -> Result<()> { ]; args.push("--features".into()); - args.push(c.config.features.join(",")); + args.push(config.features.join(",")); - if let Some(target) = &c.config.target { + if let Some(target) = &config.target { args.push("--target".into()); args.push(target.clone()); } diff --git a/release/src/semver_check.rs b/release/src/semver_check.rs index e20bc8574..a70c56376 100644 --- a/release/src/semver_check.rs +++ b/release/src/semver_check.rs @@ -1,21 +1,20 @@ -use std::fs; -use std::io::Write; -use std::path::{Path, PathBuf}; +use std::path::PathBuf; use cargo_semver_checks::{Check, GlobalConfig, ReleaseType, Rustdoc}; use crate::cargo::CargoArgsBuilder; -use crate::types::Crate; -use crate::windows_safe_path; +use crate::types::{BuildConfig, Crate}; /// Return the minimum required bump for the next release. /// Even if nothing changed this will be [ReleaseType::Patch] pub fn minimum_update(krate: &Crate) -> Result { println!("Crate = {:?}", krate); + let config = krate.configs.first().unwrap(); // TODO + let package_name = krate.name.clone(); let package_path = krate.path.clone(); - let current_path = build_doc_json(krate)?; + let current_path = build_doc_json(krate, config)?; let baseline = Rustdoc::from_registry_latest_crate_version(); let doc = Rustdoc::from_path(¤t_path); @@ -23,10 +22,10 @@ pub fn minimum_update(krate: &Crate) -> Result { semver_check.with_default_features(); semver_check.set_baseline(baseline); semver_check.set_packages(vec![package_name]); - let extra_current_features = krate.config.features.clone(); - let extra_baseline_features = krate.config.features.clone(); + let extra_current_features = config.features.clone(); + let extra_baseline_features = config.features.clone(); semver_check.set_extra_features(extra_current_features, extra_baseline_features); - if let Some(target) = &krate.config.target { + if let Some(target) = &config.target { semver_check.set_build_target(target.clone()); } let mut cfg = GlobalConfig::new(); @@ -48,7 +47,7 @@ pub fn minimum_update(krate: &Crate) -> Result { Ok(min_required_update) } -pub(crate) fn build_doc_json(krate: &Crate) -> Result { +pub(crate) fn build_doc_json(krate: &Crate, config: &BuildConfig) -> Result { let target_dir = std::env::var("CARGO_TARGET_DIR"); let target_path = if let Ok(target) = target_dir { @@ -58,7 +57,7 @@ pub(crate) fn build_doc_json(krate: &Crate) -> Result { }; let current_path = target_path; - let current_path = if let Some(target) = &krate.config.target { + let current_path = if let Some(target) = &config.target { current_path.join(target.clone()) } else { current_path @@ -68,7 +67,7 @@ pub(crate) fn build_doc_json(krate: &Crate) -> Result { .join(format!("{}.json", krate.name.to_string().replace("-", "_"))); std::fs::remove_file(¤t_path).ok(); - let features = krate.config.features.clone(); + let features = config.features.clone(); log::info!("Building doc json for {} with features: {:?}", krate.name, features); @@ -83,7 +82,7 @@ pub(crate) fn build_doc_json(krate: &Crate) -> Result { .toolchain("nightly-2025-06-29") .subcommand("rustdoc") .features(&features); - let cargo_builder = if let Some(target) = &krate.config.target { + let cargo_builder = if let Some(target) = &config.target { cargo_builder.target(target.clone()) } else { cargo_builder diff --git a/release/src/types.rs b/release/src/types.rs index 39e8e9f48..c5b774977 100644 --- a/release/src/types.rs +++ b/release/src/types.rs @@ -46,5 +46,5 @@ pub struct Crate { pub version: String, pub path: PathBuf, pub dependencies: Vec, - pub config: BuildConfig, // TODO make this a vec. + pub configs: Vec, } -- cgit