mirror of
https://github.com/serai-dex/serai.git
synced 2024-12-22 19:49:22 +00:00
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:
parent
1d2beb3ee4
commit
cd69f3b9d6
4 changed files with 13 additions and 14 deletions
1
Cargo.lock
generated
1
Cargo.lock
generated
|
@ -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",
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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"
|
||||||
|
|
|
@ -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()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue