swarm-controller: own the swarm-wide forge objects; hive-c0re stops creating them
The orgs agent-configs/internal/agents (plus mirror owners), the operators team in agents and agent-configs, the pull-mirrors, internal/docs, internal/knowledge (public, README-seeded) and the agent-configs org avatar are one set per forge. hive-c0re ensured them in its boot sweep, as the core admin, and only on the hive co-located with the forge container. swarm-controller now reconciles them at start and every 5 minutes (forge/objects.rs: observe -> pure plan -> apply). A failed object logs a warn line plus a pass summary and is retried next tick. create_repo ensures the agent-configs org and its operators team first, so a config repo's merge gate never depends on the periodic pass having run. hive-c0re drops ensure_org, SEEDED_ORGS, ensure_mirrors/ensure_mirror_repo, ensure_operators_team, ensure_shared_docs_repo, ensure_knowledge_repo/ set_repo_public, seed_readme, ensure_config_org_avatar and the one-shot knowledge::remove_webhook cleanup, with their now-unused helpers. nix: the mirror list moves from the hive-c0re unit (HYPERHIVE_FORGE_MIRRORS) to the swarm-controller unit (SWARM_CONTROLLER_FORGE_MIRRORS), with an eval warning when mirrors are declared on a host that runs no controller. c0re.orgAvatarPng is renamed to deploy.swarm-controller.configOrgAvatarPng. Refs #3782
This commit is contained in:
parent
85ba45b2de
commit
20419ccd41
18 changed files with 1456 additions and 822 deletions
|
|
@ -633,9 +633,9 @@ in
|
|||
'';
|
||||
}
|
||||
{
|
||||
# Keep mirror orgs out of the hive-c0re-managed namespaces
|
||||
# Keep mirror orgs out of the hyperhive-managed namespaces
|
||||
# (config/shared/agents/core) so the seed never races / collides
|
||||
# with hive-c0re's own startup provisioning of those orgs.
|
||||
# with the provisioning of those orgs.
|
||||
assertion = lib.all (
|
||||
m:
|
||||
!(lib.elem (builtins.elemAt (lib.splitString "/" m.dest) 0) [
|
||||
|
|
@ -647,8 +647,8 @@ in
|
|||
) effectiveMirrors;
|
||||
message = ''
|
||||
services.hyperhive.deploy.forgejo.mirrors[].dest must not place a mirror
|
||||
in a hive-c0re-managed org (config / shared / agents / core) —
|
||||
those are provisioned by hive-c0re and a mirror there would
|
||||
in a hyperhive-managed org (config / shared / agents / core) —
|
||||
those are provisioned by hyperhive itself and a mirror there would
|
||||
collide. Use a dedicated org (e.g. "actions/checkout").
|
||||
'';
|
||||
}
|
||||
|
|
@ -1358,12 +1358,22 @@ in
|
|||
];
|
||||
};
|
||||
|
||||
# Forward the declared pull-mirrors to hive-c0re, which seeds them in
|
||||
# its forge provisioning sweep (`forge.rs::ensure_mirrors`, alongside
|
||||
# the SEEDED_ORGS ensure). c0re already holds the core admin token and
|
||||
# ensures the orgs there, so the seeding lives in one place rather than
|
||||
# a parallel host-side unit. JSON-encoded list of { upstream, dest };
|
||||
# `[]` when nothing to seed (c0re no-ops).
|
||||
systemd.services.hive-c0re.environment.HYPERHIVE_FORGE_MIRRORS = builtins.toJSON effectiveMirrors;
|
||||
# Forward the declared pull-mirrors to the swarm-controller, which seeds
|
||||
# them in its swarm-wide forge-objects pass
|
||||
# (`swarm-controller/src/forge/objects.rs`), beside the orgs they live in.
|
||||
# JSON-encoded list of { upstream, dest }; `[]` when nothing to seed.
|
||||
#
|
||||
# ⚠️ This host's `mirrors` reach a controller on THIS host only. A
|
||||
# controller elsewhere reads its own host's list, so mirrors declared
|
||||
# here would never be seeded; the warning below says so at eval rather
|
||||
# than leaving it to be noticed as a missing repo.
|
||||
systemd.services.swarm-controller.environment.SWARM_CONTROLLER_FORGE_MIRRORS =
|
||||
lib.mkIf deployCfg.swarm-controller.enable (builtins.toJSON effectiveMirrors);
|
||||
warnings = lib.optional (effectiveMirrors != [ ] && !deployCfg.swarm-controller.enable) ''
|
||||
services.hyperhive.deploy.forgejo.mirrors (or the actions/checkout mirror
|
||||
deploy.forgejo.ci.enable adds) is set on a host that does not run the
|
||||
swarm-controller. The controller seeds mirrors from its own host's list,
|
||||
so these are not seeded: declare them on the swarm-controller's host.
|
||||
'';
|
||||
};
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue