@@ -9,6 +9,19 @@ use crate::{
99use anyhow:: Result ;
1010use tracing:: { debug, info, instrument} ;
1111
12+ /// Simple confirmation prompt that respects the --yes flag
13+ fn confirm_action ( message : & str , yes_flag : bool ) -> Result < bool > {
14+ if yes_flag {
15+ tracing:: debug!( "Auto-confirming: {}" , message) ;
16+ return Ok ( true ) ;
17+ }
18+
19+ // For now, just log and return true. In a full implementation,
20+ // this would use the `demand` crate to show interactive prompts.
21+ tracing:: info!( "Would prompt: {} (assuming yes for now)" , message) ;
22+ Ok ( true )
23+ }
24+
1225#[ repr( i32 ) ]
1326#[ derive( Debug , Clone , Copy , PartialEq , Eq ) ]
1427pub enum ExitCode {
@@ -117,17 +130,35 @@ pub fn run_release(opts: ReleaseOptions) -> Result<ReleaseOutcome> {
117130 let changed = if opts. dry_run {
118131 false
119132 } else {
120- let _span = tracing:: span!( tracing:: Level :: DEBUG , "write_changelog" ) . entered ( ) ;
121- changelog:: write_or_update_changelog ( & opts. cwd , & block) ?
133+ // Confirm changelog update unless --yes was specified
134+ let should_write = confirm_action (
135+ "Update CHANGELOG.md?" ,
136+ opts. yes
137+ ) ?;
138+
139+ if should_write {
140+ let _span = tracing:: span!( tracing:: Level :: DEBUG , "write_changelog" ) . entered ( ) ;
141+ changelog:: write_or_update_changelog ( & opts. cwd , & block) ?
142+ } else {
143+ false
144+ }
122145 } ;
123146 if changed && !opts. dry_run {
124- // create tag (annotated optionally sign placeholder)
125- let tag_name = format ! ( "v{}" , next_version) ;
126- let tag_msg = format ! ( "v{}" , next_version) ;
127- let _ = {
128- let _span = tracing:: span!( tracing:: Level :: DEBUG , "tag" ) . entered ( ) ;
129- git:: create_tag ( & repo, & tag_name, & tag_msg, true )
130- } ;
147+ // Confirm tag creation unless --yes was specified
148+ let should_tag = confirm_action (
149+ & format ! ( "Create git tag v{}?" , next_version) ,
150+ opts. yes
151+ ) ?;
152+
153+ if should_tag {
154+ // create tag (annotated optionally sign placeholder)
155+ let tag_name = format ! ( "v{}" , next_version) ;
156+ let tag_msg = format ! ( "v{}" , next_version) ;
157+ let _ = {
158+ let _span = tracing:: span!( tracing:: Level :: DEBUG , "tag" ) . entered ( ) ;
159+ git:: create_tag ( & repo, & tag_name, & tag_msg, true )
160+ } ;
161+ }
131162 }
132163
133164 let exit = if changed {
0 commit comments