release(v1.7.20-alpha): stop auto-apply scheduler killing the service
All checks were successful
Build Archipelago ISO (dev) / build-iso (push) Successful in 41m2s
All checks were successful
Build Archipelago ISO (dev) / build-iso (push) Successful in 41m2s
The 3AM auto-update path called std::process::exit(0) immediately after apply_update returned. apply_update had already spawned a 2s- delayed systemctl restart, but exit(0) killed the runtime before that spawned task could run — and the unit's Restart=on-failure does not trigger on a clean exit 0, so the service stayed dead until someone SSH'd in and started it manually (.253 hit this today). Scheduler now returns from the task without killing the process; apply_update's existing restart path (same one the UI's Install Update button uses) brings the new version up cleanly. Also hardens the ISO CI: the AIUI inclusion step now falls back to extracting from the newest release tarball if the runner's cached /opt/archipelago/web-ui/aiui path is missing, so a reprovisioned runner can't silently ship a frontend tarball without AIUI. The ISO build step also sanity-checks the binary exists before invoking the builder. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2
core/Cargo.lock
generated
2
core/Cargo.lock
generated
@@ -80,7 +80,7 @@ checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61"
|
||||
|
||||
[[package]]
|
||||
name = "archipelago"
|
||||
version = "1.7.19-alpha"
|
||||
version = "1.7.20-alpha"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"archipelago-container",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "archipelago"
|
||||
version = "1.7.19-alpha"
|
||||
version = "1.7.20-alpha"
|
||||
edition = "2021"
|
||||
description = "Archipelago Bitcoin Node OS - Native backend"
|
||||
authors = ["Archipelago Team"]
|
||||
|
||||
@@ -882,9 +882,15 @@ pub async fn run_update_scheduler(data_dir: std::path::PathBuf) {
|
||||
debug!("Update scheduler: apply failed: {}", e);
|
||||
continue;
|
||||
}
|
||||
info!("Update scheduler: update applied, restart needed");
|
||||
// Signal for service restart (systemd will handle via exit code)
|
||||
std::process::exit(0);
|
||||
info!("Update scheduler: update applied, restart scheduled by apply_update");
|
||||
// apply_update has already spawned a 2s-delayed
|
||||
// `systemctl restart archipelago`. Don't call
|
||||
// std::process::exit here — that kills the runtime
|
||||
// before the spawned restart task runs, and since
|
||||
// the unit is Restart=on-failure a clean exit(0)
|
||||
// leaves the service dead. Fall through; the
|
||||
// scheduled restart will bring us back cleanly.
|
||||
return;
|
||||
}
|
||||
Ok(_) => {
|
||||
debug!("Update scheduler: no update available");
|
||||
|
||||
Reference in New Issue
Block a user