Commit Graph

9 Commits

Author SHA1 Message Date
self 7dec823794 chore: sync supertest dev channel to master
Source: guix-tribes master 2ea4cae872
Base: previous supertest-dev 4fee530b68
Mode: tree sync, preserving dev channel authorization
2026-06-08 08:02:39 +02:00
self ce1e21195d chore: sync supertest dev channel to master
Source: guix-tribes master fff523d732
Base: previous supertest-dev 7025abef29
Mode: tree sync, preserving dev channel authorization
2026-05-21 11:39:46 +02:00
self 076cc7ea70 chore: sync supertest dev channel to master
Source: guix-tribes master e00e40e61e
Base: previous supertest-dev 8b433f9d90
Mode: tree sync, preserving dev channel authorization
2026-05-11 22:58:53 +02:00
self e635b7af84 chore: sync supertest dev channel to master
Source: guix-tribes master 419bea8fe5
Base: previous supertest-dev b378db1e22
Mode: tree sync, preserving dev channel authorization
2026-05-09 21:02:52 +02:00
self f974fe84a0 docs: document profile generation rollback 2026-04-29 22:45:32 +02:00
self 876de24fdd fix: run service upgrade in current guix 2026-04-29 14:01:12 +02:00
self a9e661cc50 fix: schedule tribes restart after system switch 2026-04-28 18:48:34 +02:00
self 62b6f7ec67 fix: split selected and running deployment systems 2026-04-28 16:57:07 +02:00
self 05b4fa9af8 refactor(deploy): typed-error broker via guix-helper subprocess
Replace the synchronous local-control daemon and the shepherd-spawned
tribes-deploy-apply one-shot with a single in-process broker reused by
the HTTP and CLI transports.  All Guix calls (pull, system build,
switch-generation) now go through tribes-guix-helper, which emits
NDJSON phase/done/error frames so the broker surfaces typed error
codes (channel_commit_unreachable, signature_invalid, build_failed,
switch_failed, helper_crashed, ...) instead of regex-parsing guix
stderr.

Long operations run on a single POSIX worker thread fed by an
ice-9-q queue; the HTTP request thread stays free, returning 202
Accepted with a job_id while the build runs.  Status is held in an
atomic-box snapshot polled at GET /v1/deployment/status.  Same
plan_hash → idempotent re-queue; different plan_hash while busy →
409.  Generations log writes go through a mutex-guarded state-store
with tempfile + rename + fsync atomics.

Module layout under tribes/deploy:
  json, config, state, worker, guix-helper,
  operations (was runtime), handlers, http (was local-control),
  cli, entry.

Drops request.json / tribes-deploy-apply / tribes-deploy-shepherd-
service entirely.  Packaging stays on trivial-build-system but ships
four wrapper binaries (tribes, tribes-deploy-exec,
tribes-local-control, tribes-guix-helper) wrapped with the guix /
guile-gcrypt / guile-gnutls module paths the helper needs.

Tests: tribes-deploy-runtime renamed to tribes-deploy-operations and
rewritten against a fake helper-backend; the pure-resolver test in
tribes-deploy-executor is unchanged.  Schema for the BEAM follow-up
is documented in docs/LOCAL_CONTROL_API.md.
2026-04-26 07:33:34 +02:00