use std::process::ExitCode;
use wavekat_platform_client::{generate_master, issue_release_credential};
fn main() -> ExitCode {
let args: Vec<String> = std::env::args().collect();
match args.get(1).map(String::as_str) {
Some("master") => {
let (private_hex, public_hex) = generate_master();
eprintln!("# Release master keypair — generated once.");
eprintln!("# Store the private line as the CI secret WK_RELEASE_MASTER_PRIVATE.");
eprintln!("# Set the public line as the platform var RELEASE_MASTER_PUBKEY.");
println!("WK_RELEASE_MASTER_PRIVATE={private_hex}");
println!("RELEASE_MASTER_PUBKEY={public_hex}");
ExitCode::SUCCESS
}
Some("issue") => {
let Some(version) = args.get(2) else {
eprintln!("usage: release-keys issue <version>");
return ExitCode::FAILURE;
};
let master = match std::env::var("WK_RELEASE_MASTER_PRIVATE") {
Ok(v) if !v.trim().is_empty() => v,
_ => {
eprintln!("error: WK_RELEASE_MASTER_PRIVATE must be set in the environment");
return ExitCode::FAILURE;
}
};
match issue_release_credential(master.trim(), version) {
Ok(cred) => {
eprintln!("# Per-version release credential for {version}.");
eprintln!("# Export these into the build env so they bake in via option_env!.");
println!("WK_RELEASE_PRIV_V={}", cred.private_key_hex);
println!("WK_RELEASE_PUB_V={}", cred.public_key_hex);
println!("WK_RELEASE_CERT={}", cred.cert_hex);
ExitCode::SUCCESS
}
Err(e) => {
eprintln!("error: {e}");
ExitCode::FAILURE
}
}
}
_ => {
eprintln!("usage: release-keys <master|issue <version>>");
ExitCode::FAILURE
}
}
}