Make allod site usable from a fork #51
Labels
No labels
blocked
bug
decision
duplicate
enhancement
help wanted
invalid
landed?
question
ready-to-merge
stale
wontfix
bug
duplicate
enhancement
help wanted
invalid
question
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
allod/strategy#51
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Give a fork the whole
allod sitelifecycle, not just the binary: today the command is compiled into the public host toolchain, but the credential it reads has no public placement mechanism, previewing a site is a command nobody discovers, and rotating the credential is a hand recipe. A fork that buildsallod site deployhas no supported way to feed it a credential.Primary goals:
rotate-tokenlearns the rclone stanza, so the recipe in a deployment's docs retires.Task list
nexusIdentitycarriesuserForgejoTokenFileandsiteHostingConfigFile, null in the template, with the shape documented.mkHypervisordeclares the two agenix secrets from those fields, null meaning absent, with a check that exercises both branches.allod site deployreads and where agenix places it.allod site preview, compiled untagged so dev machines carry it.rotate-tokenlearns the rclone remote stanza format.Landing order: secrets, then archetypes (which reads the new fields with
or null, so it also evaluates against an older secrets pin), then the nexus doc. tools#180 and nexus#42 are independent of that chain and of each other. A deployment that carries its own placement module today deletes it after its pin advance picks up the framework's; that step lives in the deployment, not here.Current state and specifics
allod/tools#162–#165 (closed) gave the command its--config <path>contract, acheckthat authenticates without publishing, and aconfiglifecycle whose mutable actions refuse a symlink by design. That last property is what makes agenix placement work: the file at rclone's default path is a symlink agenix owns, the read-only actions follow it, and a rotation is a secrets change plus a rebuild.The framework already has the shape for dev machines:
mkDevVmtakestokenFileandhttpsTokenFilefrom the identity (allod/archetypesflake.nix:260-261), null meaning opted out, and a check (dev-forge-opt-out,flake.nix:1191-1290) pins the exact generatedage.secretsprojection in both states.mkHypervisor(flake.nix:413-470) has no equivalent, and the publicnexusIdentity(allod/secretsflake.nix:84-89) carries onlyforgeTokenFile = null.Read from agenix at the pinned revision, and load-bearing for the module's own documentation:
installSecretdoesmkdir -pon the custom path's parent as root andln -sfTonto the path, so a hand-written regular file there is replaced in place; cleanup removes only the previous generation directory, so removing the declaration later leaves the symlink dangling.Scope
In: the five children above and their order.
Out: a second generator for preview (trigger: a second generator in a site repository); a second hosting layout (allod/tools#165's trigger, a real second consumer); anything about the rented-host path in
dev-plans/managed-service-machines.md.