omni/commands/
rollback.rs1use crate::ui::PremiumUI;
2use anyhow::Result;
3use console::style;
4use dialoguer::{Confirm, Select};
5use std::{thread, time::Duration};
6
7impl PremiumUI {
8 pub async fn rollback_interactive(&self) -> Result<()> {
9 let versions = vec![
10 "v1.2.3 (Current)",
11 "v1.2.2 (2 days ago)",
12 "v1.2.1 (5 days ago)",
13 "v1.2.0 (1 week ago)",
14 ];
15
16 let version = Select::with_theme(&self.theme)
17 .with_prompt("Select version to rollback to")
18 .items(&versions)
19 .default(0)
20 .interact()?;
21
22 if version == 0 {
23 println!("{}", style("Cannot rollback to current version.").yellow());
24 return Ok(());
25 }
26
27 let confirm = Confirm::with_theme(&self.theme)
28 .with_prompt(&format!(
29 "⚠️ Are you sure you want to rollback to {}?",
30 versions[version]
31 ))
32 .default(false)
33 .interact()?;
34
35 if !confirm {
36 println!("{}", style("Rollback cancelled.").yellow());
37 return Ok(());
38 }
39
40 println!("\n{}", style("🔄 Initiating rollback...").cyan().bold());
41
42 let pb = self.create_progress_bar(100, "Preparing rollback");
43 for i in 0..100 {
44 pb.inc(1);
45 thread::sleep(Duration::from_millis(50));
46
47 match i {
48 20 => pb.set_message("Stopping current version..."),
49 40 => pb.set_message("Loading previous version..."),
50 60 => pb.set_message("Updating configuration..."),
51 80 => pb.set_message("Starting services..."),
52 _ => {}
53 }
54 }
55 pb.finish_with_message("✓ Rollback completed successfully!");
56
57 println!("\n{}", style("Current System Version").cyan().bold());
58 println!("Version: {}", style(versions[version]).green());
59 println!("Deployed: {}", style("Just now").green());
60 println!("Status: {}", style("Healthy").green());
61
62 Ok(())
63 }
64}