From 9f12852c389d65a8b2e252e027f69dfef2383736 Mon Sep 17 00:00:00 2001 From: Dario Nieuwenhuis Date: Fri, 15 Aug 2025 15:30:14 +0200 Subject: Read crate configs from metadata. --- release/Cargo.toml | 7 ++++-- release/config.toml | 46 ------------------------------------- release/src/main.rs | 55 ++++++++++++++++++--------------------------- release/src/semver_check.rs | 14 ++++-------- release/src/types.rs | 27 +++++++++++++++++----- 5 files changed, 53 insertions(+), 96 deletions(-) delete mode 100644 release/config.toml (limited to 'release') diff --git a/release/Cargo.toml b/release/Cargo.toml index 461021e0a..3e4094eed 100644 --- a/release/Cargo.toml +++ b/release/Cargo.toml @@ -19,5 +19,8 @@ simple_logger = "5.0.0" temp-file = "0.1.9" flate2 = "1.1.1" -[patch.crates-io] -cargo-semver-checks = { path = "../../cargo-semver-checks" } +#[patch.crates-io] +#cargo-semver-checks = { path = "../../cargo-semver-checks" } + +[package.metadata.embassy] +skip = true diff --git a/release/config.toml b/release/config.toml deleted file mode 100644 index 014c73a91..000000000 --- a/release/config.toml +++ /dev/null @@ -1,46 +0,0 @@ - -embassy-stm32 = { features = ["defmt", "unstable-pac", "exti", "time-driver-any", "time", "stm32h755zi-cm7", "dual-bank"], target = "thumbv7em-none-eabi" } -embassy-nrf = { features = ["nrf52840", "time", "defmt", "unstable-pac", "gpiote", "time-driver-rtc1"], target = "thumbv7em-none-eabihf" } - -embassy-rp = { features = ["defmt", "unstable-pac", "time-driver", "rp2040"], target = "thumbv6m-none-eabi" } -cyw43 = { features = ["defmt", "firmware-logs"], target = "thumbv6m-none-eabi" } -cyw43-pio = { features = ["defmt", "embassy-rp/rp2040"], target = "thumbv6m-none-eabi" } - -embassy-boot = { features = ["defmt"] } -embassy-boot-nrf = { features = ["defmt", "embassy-nrf/nrf52840"], target = "thumbv7em-none-eabihf" } -embassy-boot-rp = { features = ["defmt", "embassy-rp/rp2040"], target = "thumbv6m-none-eabi" } -embassy-boot-stm32 = { features = ["defmt", "embassy-stm32/stm32f429zi"], target = "thumbv7em-none-eabi" } - -embassy-time = { features = ["defmt", "std"] } -embassy-time-driver = { } -embassy-time-queue-utils = { features = ["defmt"] } - -embassy-futures = { } -embassy-embedded-hal = { features = ["time"] } -embassy-hal-internal = { } -embassy-executor = { features = ["defmt", "arch-cortex-m", "executor-thread", "executor-interrupt"], target = "thumbv7em-none-eabi" } -embassy-executor-macros = { } -embassy-sync = { } - -embassy-net = { features = ["defmt", "tcp", "udp", "raw", "dns", "icmp", "dhcpv4", "proto-ipv6", "medium-ethernet", "medium-ip", "medium-ieee802154", "multicast", "dhcpv4-hostname"] } -embassy-net-ppp = { } -embassy-net-esp-hosted = {} -embassy-net-driver-channel = {} -embassy-net-wiznet = {} -embassy-net-nrf91 = { features = ["defmt", "nrf-pac/nrf9160"] } -embassy-net-driver = {} -embassy-net-tuntap = {} -embassy-net-adin1110 = {} -embassy-net-enc28j60 = {} - -embassy-usb-driver = { } -embassy-usb-dfu = { features = ["dfu"] } -embassy-usb-synopsys-otg = { } -embassy-usb = { features = ["defmt", "usbd-hid"] } -embassy-usb-logger = { } - -# Unreleased -# embassy-stm32-wpan = {} -# embassy-imxrt = {} -# embassy-nxp = {} -# embassy-mspm0 = {} diff --git a/release/src/main.rs b/release/src/main.rs index 0dbcc5d45..a49d8f36c 100644 --- a/release/src/main.rs +++ b/release/src/main.rs @@ -1,4 +1,3 @@ -use simple_logger::SimpleLogger; use std::collections::{BTreeMap, HashMap}; use std::fs; use std::path::{Path, PathBuf}; @@ -6,9 +5,11 @@ use std::process::Command as ProcessCommand; use anyhow::{anyhow, Result}; use clap::{Parser, Subcommand}; +use log::info; use petgraph::graph::{Graph, NodeIndex}; use petgraph::visit::Bfs; use petgraph::{Directed, Direction}; +use simple_logger::SimpleLogger; use toml_edit::{DocumentMut, Item, Value}; use types::*; @@ -63,15 +64,6 @@ enum Command { }, } -fn load_release_config(repo: &Path) -> ReleaseConfig { - let config_path = repo.join("release/config.toml"); - if !config_path.exists() { - return HashMap::new(); - } - let content = fs::read_to_string(&config_path).expect("Failed to read release/config.toml"); - toml::from_str(&content).expect("Invalid TOML format in release/config.toml") -} - fn update_version(c: &mut Crate, new_version: &str) -> Result<()> { let path = c.path.join("Cargo.toml"); c.version = new_version.to_string(); @@ -122,12 +114,10 @@ fn update_versions(to_update: &Crate, dep: &CrateId, new_version: &str) -> Resul fn list_crates(root: &PathBuf) -> Result> { let d = std::fs::read_dir(root)?; - let release_config = load_release_config(root); let mut crates = BTreeMap::new(); for c in d { let entry = c?; - let name = entry.file_name().to_str().unwrap().to_string(); - if entry.file_type()?.is_dir() && name.starts_with("embassy-") { + if entry.file_type()?.is_dir() { let path = root.join(entry.path()); let entry = path.join("Cargo.toml"); if entry.exists() { @@ -135,6 +125,8 @@ fn list_crates(root: &PathBuf) -> Result> { let parsed: ParsedCrate = toml::from_str(&content)?; let id = parsed.package.name; + let metadata = &parsed.package.metadata.embassy; + let mut dependencies = Vec::new(); for (k, _) in parsed.dependencies { if k.starts_with("embassy-") { @@ -142,18 +134,19 @@ fn list_crates(root: &PathBuf) -> Result> { } } - if let Some(config) = release_config.get(&id) { - crates.insert( - id.clone(), - Crate { - name: id, - version: parsed.package.version, - path, - dependencies, - config: config.clone(), - }, - ); - } + crates.insert( + id.clone(), + Crate { + name: id, + version: parsed.package.version, + path, + dependencies, + config: metadata.build.first().cloned().unwrap_or_else(|| BuildConfig { + features: vec![], + target: None, + }), + }, + ); } } } @@ -313,10 +306,8 @@ fn main() -> Result<()> { c.path.join("Cargo.toml").display().to_string(), ]; - if let Some(features) = &c.config.features { - args.push("--features".into()); - args.push(features.join(",")); - } + args.push("--features".into()); + args.push(c.config.features.join(",")); if let Some(target) = &c.config.target { args.push("--target".into()); @@ -376,10 +367,8 @@ fn publish_release(_repo: &Path, c: &Crate, push: bool) -> Result<()> { c.path.join("Cargo.toml").display().to_string(), ]; - if let Some(features) = &c.config.features { - args.push("--features".into()); - args.push(features.join(",")); - } + args.push("--features".into()); + args.push(c.config.features.join(",")); if let Some(target) = &c.config.target { args.push("--target".into()); diff --git a/release/src/semver_check.rs b/release/src/semver_check.rs index 7b2e50672..96f8ebe2e 100644 --- a/release/src/semver_check.rs +++ b/release/src/semver_check.rs @@ -23,11 +23,9 @@ pub fn minimum_update(krate: &Crate) -> Result { semver_check.with_default_features(); semver_check.set_baseline(baseline); semver_check.set_packages(vec![package_name]); - if let Some(features) = &krate.config.features { - let extra_current_features = features.clone(); - let extra_baseline_features = features.clone(); - semver_check.set_extra_features(extra_current_features, extra_baseline_features); - } + let extra_current_features = krate.config.features.clone(); + let extra_baseline_features = krate.config.features.clone(); + semver_check.set_extra_features(extra_current_features, extra_baseline_features); if let Some(target) = &krate.config.target { semver_check.set_build_target(target.clone()); } @@ -70,11 +68,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 = if let Some(features) = &krate.config.features { - features.clone() - } else { - vec![] - }; + let features = krate.config.features.clone(); log::info!("Building doc json for {} with features: {:?}", krate.name, features); diff --git a/release/src/types.rs b/release/src/types.rs index 56a886e6f..39e8e9f48 100644 --- a/release/src/types.rs +++ b/release/src/types.rs @@ -1,7 +1,8 @@ -use serde::Deserialize; use std::collections::{BTreeMap, HashMap}; use std::path::PathBuf; +use serde::Deserialize; + #[derive(Debug, Deserialize)] pub struct ParsedCrate { pub package: ParsedPackage, @@ -12,15 +13,31 @@ pub struct ParsedCrate { pub struct ParsedPackage { pub name: String, pub version: String, + #[serde(default)] + pub metadata: Metadata, +} + +#[derive(Debug, Deserialize, Default)] +pub struct Metadata { + #[serde(default)] + pub embassy: MetadataEmbassy, +} + +#[derive(Debug, Deserialize, Default)] +pub struct MetadataEmbassy { + #[serde(default)] + pub skip: bool, + #[serde(default)] + pub build: Vec, } #[derive(Debug, Clone, Deserialize)] -pub struct CrateConfig { - pub features: Option>, +pub struct BuildConfig { + #[serde(default)] + pub features: Vec, pub target: Option, } -pub type ReleaseConfig = HashMap; pub type CrateId = String; #[derive(Debug, Clone)] @@ -28,6 +45,6 @@ pub struct Crate { pub name: String, pub version: String, pub path: PathBuf, - pub config: CrateConfig, pub dependencies: Vec, + pub config: BuildConfig, // TODO make this a vec. } -- cgit