packager/bootpkg/src/main.rs

82 lines
2.4 KiB
Rust
Raw Normal View History

2023-10-14 22:39:39 +02:00
use crate::args::{Args, Command};
use pkgfile::PKGFile;
2023-10-14 22:39:39 +02:00
use std::env;
2023-10-14 22:39:39 +02:00
use std::env::temp_dir;
use std::fs::{create_dir, create_dir_all, File};
use std::io::Write;
use std::path::PathBuf;
2023-10-14 22:39:39 +02:00
use std::process::exit;
2023-10-14 22:39:39 +02:00
use uuid::Uuid;
2023-10-14 22:39:39 +02:00
mod args;
2023-10-14 22:39:39 +02:00
mod prelude;
2023-10-14 22:39:39 +02:00
fn main() {
let args = Args::from(env::args().collect::<Vec<String>>()[1..].to_owned());
match args.command {
Command::Strap => {
if args.args.len() == 0 {
println!("no path/uri");
exit(0);
}
let uri = &args.args[0];
println!("!! Got package: \"{}\"", uri);
let re = r"[A-z]+://.+";
let data = if regex::Regex::new(re).unwrap().is_match(uri) {
println!("** detected uri.");
reqwest::blocking::get(uri)
.expect("Could not request file.")
.bytes()
.expect("Could not turn file into bytes.")
.to_vec()
} else {
if let Ok(d) = std::fs::read(uri) {
d
} else {
println!("Could not read file!");
exit(1);
}
};
2023-10-14 22:39:39 +02:00
let pkg = match PKGFile::try_from(data) {
2023-10-14 22:39:39 +02:00
Ok(p) => p,
Err(_) => {
println!("!! Could not interpret PKGFile...");
exit(1);
}
};
2023-10-14 22:39:39 +02:00
let mani = prelude::mani_from_str(&pkg.manifest);
println!("!! Package: {}", &mani.package.name);
if !mani.valid() {
println!("!!! Manifest is not valid.");
exit(1);
}
let mut tmp_dir = temp_dir();
tmp_dir.push(format!("{}", Uuid::new_v4()));
create_dir_all(&tmp_dir)
.expect("Could not create tmp dir.");
{
let mut file = File::create(format!("{}/pkgtar", tmp_dir.to_str().unwrap()))
.expect("Could not create tmp pkgtar file");
file.write(&pkg.data)
.expect("Could not write pkgtar to tmp file");
}
// TODO: untar
// TODO: cd into pkg
// TODO: run bootstrap commands
}
Command::Unpack => {}
2023-10-14 22:39:39 +02:00
_ => {
println!("Unsupported command, allowed commands: strap/unpack.");
exit(1);
}
}
}