Check if wasm was built by container exit code and state instead of local mountpoint (#570)

* Check if the serai wasm was built successfully by verifying the build container's status code and state, instead of checking the volume mountpoint locally

* Use a log statement for which wasm is used

* Minor typo fix

---------

Co-authored-by: Luke Parker <lukeparker5132@gmail.com>
This commit is contained in:
rlking 2024-05-26 02:33:23 +02:00 committed by GitHub
parent 1d2beb3ee4
commit cd69f3b9d6
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 13 additions and 14 deletions

1
Cargo.lock generated
View file

@ -8018,6 +8018,7 @@ dependencies = [
"hex", "hex",
"jsonrpsee", "jsonrpsee",
"libp2p", "libp2p",
"log",
"pallet-transaction-payment-rpc", "pallet-transaction-payment-rpc",
"rand_core", "rand_core",
"sc-authority-discovery", "sc-authority-discovery",

View file

@ -382,23 +382,17 @@ fn start(network: Network, services: HashSet<String>) {
let serai_runtime_volume = format!("serai-{}-runtime-volume", network.label()); let serai_runtime_volume = format!("serai-{}-runtime-volume", network.label());
if name == "serai" { if name == "serai" {
// Check if it's built by checking if the volume has the expected runtime file // Check if it's built by checking if the volume has the expected runtime file
let wasm_build_container_name = format!("serai-{}-runtime", network.label());
let built = || { let built = || {
if let Ok(path) = Command::new("docker") if let Ok(state_and_status) = Command::new("docker")
.arg("volume")
.arg("inspect") .arg("inspect")
.arg("-f") .arg("-f")
.arg("{{ .Mountpoint }}") .arg("{{.State.Status}}:{{.State.ExitCode}}")
.arg(&serai_runtime_volume) .arg(&wasm_build_container_name)
.output() .output()
{ {
if let Ok(path) = String::from_utf8(path.stdout) { if let Ok(state_and_status) = String::from_utf8(state_and_status.stdout) {
if let Ok(iter) = std::fs::read_dir(PathBuf::from(path.trim())) { return state_and_status.trim() == "exited:0";
for item in iter.flatten() {
if item.file_name() == "serai.wasm" {
return true;
}
}
}
} }
} }
false false

View file

@ -20,10 +20,11 @@ workspace = true
name = "serai-node" name = "serai-node"
[dependencies] [dependencies]
rand_core = "0.6"
zeroize = "1" zeroize = "1"
hex = "0.4" hex = "0.4"
log = "0.4"
rand_core = "0.6"
schnorrkel = "0.11" schnorrkel = "0.11"
libp2p = "0.52" libp2p = "0.52"

View file

@ -18,9 +18,12 @@ fn account_from_name(name: &'static str) -> PublicKey {
fn wasm_binary() -> Vec<u8> { fn wasm_binary() -> Vec<u8> {
// TODO: Accept a config of runtime path // TODO: Accept a config of runtime path
if let Ok(binary) = std::fs::read("/runtime/serai.wasm") { const WASM_PATH: &str = "/runtime/serai.wasm";
if let Ok(binary) = std::fs::read(WASM_PATH) {
log::info!("using {WASM_PATH}");
return binary; return binary;
} }
log::info!("using built-in wasm");
WASM_BINARY.ok_or("compiled in wasm not available").unwrap().to_vec() WASM_BINARY.ok_or("compiled in wasm not available").unwrap().to_vec()
} }