server: notify manager on admin-socket Rebuild outcomes
HostRequest::Rebuild was the only rebuild path that bypassed
notify_manager. dashboard / auto_update / actions::approve
already emit Rebuilt events on both success + failure, but a
'hive-c0re rebuild <name>' from the host CLI (and the recent
matrix-flake build failure that surfaced in journald) left the
manager in the dark.
mirror auto_update::rebuild_agent's pattern: on success →
Rebuilt{ok:true}, on failure → Rebuilt{ok:false, note=
format!('{e:#}')}. note carries the stderr tail lifecycle::run
collected (the actual nix error: missing prompt file, dep
build failure, etc.), so the manager has enough context to
adjust the agent's agent.nix without ssh-ing to the host.
This commit is contained in:
parent
06af23c8a4
commit
891223219e
1 changed files with 25 additions and 2 deletions
|
|
@ -129,7 +129,7 @@ async fn dispatch(req: &HostRequest, coord: Arc<Coordinator>) -> HostResponse {
|
||||||
let applied_dir = Coordinator::agent_applied_dir(name);
|
let applied_dir = Coordinator::agent_applied_dir(name);
|
||||||
let claude_dir = Coordinator::agent_claude_dir(name);
|
let claude_dir = Coordinator::agent_claude_dir(name);
|
||||||
let notes_dir = Coordinator::agent_notes_dir(name);
|
let notes_dir = Coordinator::agent_notes_dir(name);
|
||||||
lifecycle::rebuild(
|
let result = lifecycle::rebuild(
|
||||||
name,
|
name,
|
||||||
&coord.hyperhive_flake,
|
&coord.hyperhive_flake,
|
||||||
&agent_dir,
|
&agent_dir,
|
||||||
|
|
@ -139,7 +139,30 @@ async fn dispatch(req: &HostRequest, coord: Arc<Coordinator>) -> HostResponse {
|
||||||
coord.dashboard_port,
|
coord.dashboard_port,
|
||||||
&coord.operator_pronouns,
|
&coord.operator_pronouns,
|
||||||
)
|
)
|
||||||
.await?;
|
.await;
|
||||||
|
// Mirror auto_update::rebuild_agent — the manager wants
|
||||||
|
// to know about every rebuild attempt regardless of
|
||||||
|
// which surface triggered it, especially failures
|
||||||
|
// (build error → manager can adjust the agent's
|
||||||
|
// agent.nix). Without this the admin-socket CLI was
|
||||||
|
// a notify-gap.
|
||||||
|
match &result {
|
||||||
|
Ok(()) => coord.notify_manager(&hive_sh4re::HelperEvent::Rebuilt {
|
||||||
|
agent: name.clone(),
|
||||||
|
ok: true,
|
||||||
|
note: None,
|
||||||
|
sha: None,
|
||||||
|
tag: None,
|
||||||
|
}),
|
||||||
|
Err(e) => coord.notify_manager(&hive_sh4re::HelperEvent::Rebuilt {
|
||||||
|
agent: name.clone(),
|
||||||
|
ok: false,
|
||||||
|
note: Some(format!("{e:#}")),
|
||||||
|
sha: None,
|
||||||
|
tag: None,
|
||||||
|
}),
|
||||||
|
}
|
||||||
|
result?;
|
||||||
HostResponse::success()
|
HostResponse::success()
|
||||||
}
|
}
|
||||||
HostRequest::List => HostResponse::list(lifecycle::list().await?),
|
HostRequest::List => HostResponse::list(lifecycle::list().await?),
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue