use monocore::{utils, vm::MicroVm};
#[tokio::main]
async fn main() -> anyhow::Result<()> {
tracing_subscriber::fmt::init();
let build_dir = format!("{}/build", env!("CARGO_MANIFEST_DIR"));
let oci_dir = format!("{}/oci", build_dir);
let image_ref = "library/alpine:latest";
let (_, _, rootfs_name) = utils::parse_image_ref(image_ref).unwrap();
let rootfs_dir = format!("{}/rootfs/reference/{}", build_dir, rootfs_name);
utils::pull_docker_image(&oci_dir, image_ref).await?;
utils::merge_image_layers(&oci_dir, &rootfs_dir, image_ref).await?;
let vm = MicroVm::builder()
.root_path(format!("{}/merged", rootfs_dir))
.exec_path("/bin/true")
.ram_mib(1024)
.build()?;
tracing::info!("Starting MicroVm...");
vm.start()?;
Ok(())
}