meta nix/git calls under META_LOCK time out instead of wedging every deploy
A hung forge fetch inside `nix flake update hyperhive` (or any other meta git/nix child) now fails after its deadline with an error naming the command, the child is killed, and META_LOCK, BuildSlot and MetaWindow are released. The boot sweep already treats that failure as a warning and fans out the rebuilds. A wait on META_LOCK past 60s logs a warning naming the waiter and the holder.
This commit is contained in:
parent
8d70afd93e
commit
7cde4e7b15
6 changed files with 270 additions and 58 deletions
|
|
@ -111,12 +111,14 @@ pub async fn push_meta(dir: &Path) -> Result<()> {
|
|||
// raise a dashboard warning and leave the remote intact rather than
|
||||
// silently erasing its history.
|
||||
let url = forge_git_url("core/meta");
|
||||
let out = crate::lifecycle::git_command_authed(&core_auth_header(&token))
|
||||
.current_dir(dir)
|
||||
.args(["push", &url, "HEAD:main"])
|
||||
.output()
|
||||
.await
|
||||
.context("invoke git push core/meta")?;
|
||||
let out = crate::lifecycle::run_with_deadline(
|
||||
crate::lifecycle::git_command_authed(&core_auth_header(&token))
|
||||
.current_dir(dir)
|
||||
.args(["push", &url, "HEAD:main"]),
|
||||
crate::lifecycle::FETCH_DEADLINE,
|
||||
"git push core/meta",
|
||||
)
|
||||
.await?;
|
||||
if !out.status.success() {
|
||||
let stderr = String::from_utf8_lossy(&out.stderr);
|
||||
if stderr.contains("non-fast-forward") || stderr.contains("fetch first") {
|
||||
|
|
|
|||
Loading…
Reference in a new issue