basic_usage_demo/
basic_usage_demo.rs1use docker_image_pusher::{
21 error::Result,
22 image::image_manager::ImageManager,
23 registry::RegistryClientBuilder,
24 logging::Logger,
25};
26use std::env;
27
28#[tokio::main]
29async fn main() -> Result<()> {
30 println!("🚀 Docker Image Pusher - Basic Usage Demo");
31 println!("==========================================");
32 println!("This demo corresponds to README Quick Start examples");
33 println!();
34
35 let logger = Logger::new(true);
37
38 let registry_username = env::var("REGISTRY_USERNAME").unwrap_or_else(|_| {
40 println!("⚠️ REGISTRY_USERNAME not set, using demo credentials");
41 "demo_user".to_string()
42 });
43
44 let registry_password = env::var("REGISTRY_PASSWORD").unwrap_or_else(|_| {
45 println!("⚠️ REGISTRY_PASSWORD not set, using demo credentials");
46 "demo_pass".to_string()
47 });
48
49 let target_registry = env::var("TARGET_REGISTRY").unwrap_or_else(|_| {
50 "registry.example.com".to_string()
51 });
52
53 let cache_dir = ".cache_basic_demo";
54
55 let _ = std::fs::remove_dir_all(cache_dir);
57
58 logger.section("Demo 1: Basic Extract and Push Workflow");
59 println!("📝 Scenario: Extract tar file → Cache → Push to registry");
60 println!("📄 Command equivalent:");
61 println!(" docker-image-pusher extract --file image.tar --verbose");
62 println!(" docker-image-pusher push --source image:tag --target {}/app:v1.0", target_registry);
63 println!();
64
65 demo_extract_and_push(&logger, cache_dir, &target_registry, ®istry_username, ®istry_password).await?;
67
68 logger.section("Demo 2: Pull and Cache Workflow");
69 println!("📝 Scenario: Pull from registry → Cache locally");
70 println!("📄 Command equivalent:");
71 println!(" docker-image-pusher pull --image nginx:latest --verbose");
72 println!();
73
74 demo_pull_and_cache(&logger, cache_dir, ®istry_username, ®istry_password).await?;
75
76 logger.section("Demo 3: Complete Pull-to-Push Migration");
77 println!("📝 Scenario: Pull from source → Cache → Push to target");
78 println!("📄 Command equivalent:");
79 println!(" docker-image-pusher pull --image alpine:latest");
80 println!(" docker-image-pusher push --source alpine:latest --target {}/alpine:migrated", target_registry);
81 println!();
82
83 demo_complete_migration(&logger, cache_dir, &target_registry, ®istry_username, ®istry_password).await?;
84
85 println!("✅ Basic usage demo completed successfully!");
86 println!("📚 These examples correspond to the README Quick Start section");
87
88 Ok(())
89}
90
91async fn demo_extract_and_push(
92 logger: &Logger,
93 _cache_dir: &str,
94 target_registry: &str,
95 username: &str,
96 _password: &str,
97) -> Result<()> {
98 logger.info("Creating demo tar file (simulated)...");
99
100 println!("📦 Would extract tar file and cache locally");
103 println!("🚀 Would push cached image to: {}/project/app:v1.0", target_registry);
104
105 let registry_url = format!("https://{}", target_registry);
107 let _client = RegistryClientBuilder::new(registry_url)
108 .with_verbose(true)
109 .build()?;
110
111 logger.info(&format!("Registry client created for: {}", target_registry));
112 logger.info(&format!("Would authenticate with username: {}", username));
113
114 Ok(())
119}
120
121async fn demo_pull_and_cache(
122 logger: &Logger,
123 cache_dir: &str,
124 _username: &str,
125 _password: &str,
126) -> Result<()> {
127 logger.info("Demonstrating pull and cache workflow...");
128
129 let mut _image_manager = ImageManager::new(Some(cache_dir), true)?;
131
132 println!("🔽 Would pull nginx:latest from Docker Hub");
133 println!("💾 Would cache image locally in: {}", cache_dir);
134
135 logger.info("Pull and cache operation configured (demo mode)");
145
146 Ok(())
147}
148
149async fn demo_complete_migration(
150 logger: &Logger,
151 _cache_dir: &str,
152 target_registry: &str,
153 _username: &str,
154 _password: &str,
155) -> Result<()> {
156 logger.info("Demonstrating complete migration workflow...");
157
158 println!("🔄 Complete migration workflow:");
159 println!(" 1. Pull alpine:latest from Docker Hub");
160 println!(" 2. Cache locally");
161 println!(" 3. Push to target registry: {}/alpine:migrated", target_registry);
162
163 logger.info("Migration workflow completed (demo mode)");
168
169 Ok(())
170}