(runtime: &str)
| 37 | } |
| 38 | |
| 39 | fn build_builder_image(runtime: &str) -> Result<(), Box<dyn std::error::Error>> { |
| 40 | println!("[+] Building {} image (first run only)...", BUILDER_IMAGE); |
| 41 | |
| 42 | let temp_dir = env::temp_dir().join("rustpacker-builder"); |
| 43 | fs::create_dir_all(&temp_dir)?; |
| 44 | let dockerfile = temp_dir.join("Dockerfile"); |
| 45 | fs::write(&dockerfile, BUILDER_DOCKERFILE)?; |
| 46 | |
| 47 | let output = Command::new(runtime) |
| 48 | .args(["build", "-t", BUILDER_IMAGE, "-f"]) |
| 49 | .arg(&dockerfile) |
| 50 | .arg(&temp_dir) |
| 51 | .output()?; |
| 52 | |
| 53 | fs::remove_dir_all(&temp_dir).ok(); |
| 54 | |
| 55 | if !output.status.success() { |
| 56 | let err = String::from_utf8_lossy(&output.stderr); |
| 57 | return Err(format!("Failed to build {}: {}", BUILDER_IMAGE, err).into()); |
| 58 | } |
| 59 | |
| 60 | Ok(()) |
| 61 | } |
| 62 | |
| 63 | fn ensure_builder_image(runtime: &str) -> Result<(), Box<dyn std::error::Error>> { |
| 64 | if !image_exists(runtime) { |
no outgoing calls
no test coverage detected