use anyhow::{Context, Result};
use std::fs;
use std::path::PathBuf;
pub fn extract_dockerfile_to_temp(dockerfile_name: &str) -> Result<PathBuf> {
let temp_dir = tempfile::TempDir::new().context("Failed to create temporary directory")?;
let temp_path = temp_dir.path().to_owned();
let dockerfile_content = super::embedded::get_dockerfile(dockerfile_name)?;
let dockerfile_path = temp_path.join("Dockerfile");
fs::write(&dockerfile_path, dockerfile_content).context("Failed to write Dockerfile")?;
let additional_files = ["squid.conf", "entrypoint.sh", "requirements.txt"];
for file_name in &additional_files {
match super::embedded::get_dockerfile_file(dockerfile_name, file_name) {
Ok(content) => {
let file_path = temp_path.join(file_name);
fs::write(&file_path, content)
.with_context(|| format!("Failed to write {file_name}"))?;
}
Err(_) => {
continue;
}
}
}
std::mem::forget(temp_dir);
Ok(temp_path)
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_asset_extraction() {
let result = extract_dockerfile_to_temp("base/default");
assert!(result.is_ok());
let temp_dir = result.unwrap();
assert!(temp_dir.exists());
assert!(temp_dir.join("Dockerfile").exists());
let _ = std::fs::remove_dir_all(&temp_dir);
}
#[test]
fn test_asset_extraction_with_additional_files() {
let result = extract_dockerfile_to_temp("tsk-proxy");
assert!(result.is_ok());
let temp_dir = result.unwrap();
assert!(temp_dir.exists());
assert!(temp_dir.join("Dockerfile").exists());
assert!(temp_dir.join("squid.conf").exists());
let _ = std::fs::remove_dir_all(&temp_dir);
}
}