@@ -7,6 +7,7 @@ use std::{
77use anyhow:: { Context , Error } ;
88use cargo_semver_checks:: { Check , GlobalConfig , ReleaseType , Rustdoc } ;
99use esp_metadata:: { Chip , Config } ;
10+ use toml_edit:: { Item , Value } ;
1011
1112use crate :: { Package , cargo:: CargoArgsBuilder , commands:: checker:: download_baselines} ;
1213
@@ -46,7 +47,6 @@ pub fn minimum_update(
4647 let mut cfg = GlobalConfig :: new ( ) ;
4748 cfg. set_log_level ( Some ( log:: Level :: Info ) ) ;
4849 let result = semver_check. check_release ( & mut cfg) ?;
49- log:: info!( "Result {:?}" , result) ;
5050
5151 let mut min_required_update = ReleaseType :: Patch ;
5252 for ( _, report) in result. crate_reports ( ) {
@@ -59,6 +59,28 @@ pub fn minimum_update(
5959 }
6060 }
6161
62+ let forever_unstable = package
63+ . toml ( )
64+ . espressif_metadata ( )
65+ . and_then ( |metadata| metadata. get ( "forever-unstable" ) )
66+ . map ( |item| match item {
67+ Item :: Value ( Value :: Boolean ( b) ) => * b. value ( ) ,
68+ Item :: Value ( _) => {
69+ log:: warn!( "Invalid value for 'forever-unstable' in metadata - must be a boolean" ) ;
70+ true
71+ }
72+ _ => false ,
73+ } )
74+ . unwrap_or ( false ) ;
75+
76+ if forever_unstable && min_required_update == ReleaseType :: Major {
77+ log:: warn!(
78+ "Downgrading required bump from Minor to Patch for unstable package: {}" ,
79+ package
80+ ) ;
81+ min_required_update = ReleaseType :: Minor ;
82+ }
83+
6284 Ok ( min_required_update)
6385}
6486
0 commit comments