1c/W4: serialize abra reconcilers (proxy->drone->bridge->dashboard->backupbot)
All checks were successful
continuous-integration/drone/push Build is passing

On a FRESH host the reconcile oneshots ran abra concurrently against an uninitialised ~/.abra and
raced on catalogue/recipe init, leaving deploy-proxy/deploy-drone failed after a blank-VM rebuild
(observed on the W4 throwaway). Ordering-only `after` chain serializes them so a single
nixos-rebuild switch converges. Logically correct too (all need the proxy/abra state first).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-27 17:57:23 +01:00
parent b73307908d
commit 7563d47228
3 changed files with 10 additions and 3 deletions

View File

@ -39,7 +39,9 @@ in
{
systemd.services.deploy-backupbot = {
description = "Reconcile backup-bot-two (volume backups via restic) via abra";
after = [ "swarm-init.service" "docker.service" "network-online.target" ];
# Serialized last (chain proxy→drone→bridge→dashboard→backupbot) to avoid the concurrent abra-init
# race on a fresh host (see bridge.nix). Ordering-only; transitively after deploy-proxy.
after = [ "deploy-dashboard.service" "deploy-proxy.service" "swarm-init.service" "docker.service" "network-online.target" ];
requires = [ "swarm-init.service" "docker.service" ];
wants = [ "network-online.target" ];
wantedBy = [ "multi-user.target" ];

View File

@ -104,7 +104,10 @@ in
{
systemd.services.deploy-bridge = {
description = "Reconcile the cc-ci comment-bridge (!testme webhook) swarm service";
after = [ "deploy-proxy.service" "swarm-init.service" "docker.service" "network-online.target" ];
# Serialized after deploy-drone (chain proxy→drone→bridge→dashboard→backupbot): on a FRESH host the
# abra-driven reconcilers otherwise run concurrently against an uninitialised ~/.abra and race on
# catalogue/recipe init, leaving units failed after a blank-VM rebuild. Ordering-only `after` fixes it.
after = [ "deploy-drone.service" "deploy-proxy.service" "swarm-init.service" "docker.service" "network-online.target" ];
requires = [ "swarm-init.service" "docker.service" ];
wants = [ "network-online.target" ];
wantedBy = [ "multi-user.target" ];

View File

@ -79,7 +79,9 @@ in
{
systemd.services.deploy-dashboard = {
description = "Reconcile the cc-ci results dashboard (overview + badges) swarm service";
after = [ "deploy-proxy.service" "swarm-init.service" "docker.service" "network-online.target" ];
# Serialized after deploy-bridge (chain proxy→drone→bridge→dashboard→backupbot) to avoid the
# concurrent abra-init race on a fresh host (see bridge.nix). Ordering-only.
after = [ "deploy-bridge.service" "deploy-proxy.service" "swarm-init.service" "docker.service" "network-online.target" ];
requires = [ "swarm-init.service" "docker.service" ];
wants = [ "network-online.target" ];
wantedBy = [ "multi-user.target" ];