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",
"jsonrpsee",
"libp2p",
"log",
"pallet-transaction-payment-rpc",
"rand_core",
"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());
if name == "serai" {
// 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 = || {
if let Ok(path) = Command::new("docker")
.arg("volume")
if let Ok(state_and_status) = Command::new("docker")
.arg("inspect")
.arg("-f")
.arg("{{ .Mountpoint }}")
.arg(&serai_runtime_volume)
.arg("{{.State.Status}}:{{.State.ExitCode}}")
.arg(&wasm_build_container_name)
.output()
{
if let Ok(path) = String::from_utf8(path.stdout) {
if let Ok(iter) = std::fs::read_dir(PathBuf::from(path.trim())) {
for item in iter.flatten() {
if item.file_name() == "serai.wasm" {
return true;
}
}
}
if let Ok(state_and_status) = String::from_utf8(state_and_status.stdout) {
return state_and_status.trim() == "exited:0";
}
}
false

View file

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

View file

@ -18,9 +18,12 @@ fn account_from_name(name: &'static str) -> PublicKey {
fn wasm_binary() -> Vec<u8> {
// 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;
}
log::info!("using built-in wasm");
WASM_BINARY.ok_or("compiled in wasm not available").unwrap().to_vec()
}