mirror of
https://github.com/Corfirean/coa-server-manager.git
synced 2026-11-12 12:01:02 +00:00
55 lines
1.7 KiB
Rust
55 lines
1.7 KiB
Rust
//! Build and sign a small update package. usage: mkpkg <out dir> <version> <path=content>...
|
|
use base64::{engine::general_purpose::STANDARD, Engine};
|
|
use coa_core::manifest::Kind;
|
|
use coa_core::package::{build, BuildOptions};
|
|
use ed25519_dalek::{Signer, SigningKey};
|
|
|
|
fn main() {
|
|
let a: Vec<String> = std::env::args().skip(1).collect();
|
|
let out = std::path::PathBuf::from(&a[0]);
|
|
let src = out.with_file_name(format!(
|
|
"{}-src",
|
|
out.file_name().unwrap().to_string_lossy()
|
|
));
|
|
let _ = std::fs::remove_dir_all(&src);
|
|
let _ = std::fs::remove_dir_all(&out);
|
|
for spec in &a[2..] {
|
|
let (p, c) = spec.split_once('=').expect("path=content");
|
|
let f = src.join(p);
|
|
std::fs::create_dir_all(f.parent().unwrap()).unwrap();
|
|
std::fs::write(f, c.replace("\\n", "\n")).unwrap();
|
|
}
|
|
build(
|
|
&src,
|
|
&out,
|
|
&BuildOptions {
|
|
kind: Kind::Update,
|
|
version: a[1].clone(),
|
|
core_commit: None,
|
|
built_at: chrono::Utc::now().to_rfc3339(),
|
|
part_size: 1 << 20,
|
|
bots_commit: None,
|
|
migrations: vec![],
|
|
},
|
|
&|_| {},
|
|
)
|
|
.unwrap();
|
|
let key = format!(
|
|
"{}/.coa-manager/signing/manifest-signing.key",
|
|
std::env::var("USERPROFILE").unwrap()
|
|
);
|
|
let seed: [u8; 32] = STANDARD
|
|
.decode(std::fs::read_to_string(key).unwrap().trim())
|
|
.unwrap()
|
|
.try_into()
|
|
.unwrap();
|
|
let sig =
|
|
SigningKey::from_bytes(&seed).sign(&std::fs::read(out.join("manifest.json")).unwrap());
|
|
std::fs::write(
|
|
out.join("manifest.json.sig"),
|
|
STANDARD.encode(sig.to_bytes()),
|
|
)
|
|
.unwrap();
|
|
println!("package {} at {}", a[1], out.display());
|
|
}
|