Repository navigation
feat: deliver the database credential an edge derives, as itself or to the environment - #462
Merged
Merged
Conversation
…, delivered self or env (production implementation)
…and refuse one delivered to a file
ExtraToast
enabled auto-merge (squash)
October 16, 2026 11:23
Shape
CoverageBaseline:
Lines this pull request changed: 49/49 covered (100.00%). |
… edge's need for the store
This was referenced Oct 16, 2026
ExtraToast
added a commit
to JorisJonkers-dev/grimoire
that referenced
this pull request
Oct 16, 2026
## Summary grimoire publishes an Intent Fragment on each release, as the Project `grimoire`, so the estate path can deliver it into `grimoire-system` (#74). - **`deploy/grimoire.project.yml`:** - One Process on `grimoire.jorisjonkers.dev`, `audience: authenticated` (forward-auth, as today), `migration: self`. - `cutover: interrupted`, since one replica owns every live Session through a Postgres advisory lock, as the old Deployment's `Recreate` did. - Its edge to `platform-postgres` delivers the owner role's rotating login to the environment (JorisJonkers-dev/deploy-kit#462), from the role the estate path's catalog writes. The catalog adopts the existing `grimoire_db` from `grimoire_user`, so the old path keeps working until its route moves. - It reads the S3 pair, the VAPID pair and the OIDC client secret where the old path keeps them, `secret/data/platform/grimoire`. Garage's bootstrap and auth-api read the same document, so it does not move. - **`deploy/env/grimoire/base.env`:** the live Deployment's environment, with hosts, the login and the secrets as placeholders. `GRIMOIRE_DATABASE_URL` names only the database; pgx takes host, port and login from `PGHOST`, `PGPORT`, `PGUSER` and `PGPASSWORD`. Garage's endpoint stays a literal until a Project declares Garage. - **`publish.yml`:** writes the fragment's images lock share and calls Publish Fragment v0.27.0 (deploy-kit 0.18.0). - **Image user:** the image runs as `65532:65532` instead of `nonroot:nonroot`: the same user, as numbers, which the images lock records. The old path is unchanged until the estate admits grimoire and fleet-infra moves the route. ## Verification - deploy-kit 0.18.0 accepts the project file and its env alone, and beside the estate's data project and auth's project file (`accepted (8 read)`), so the `platform-postgres` and `auth` edges resolve. - `actionlint` passes. Part of #74
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
The slice of #378 that #448 needs. An edge to a database now derives its Process's login, and the project file can hand it to the environment:
migration: self). It is read fromdatabase/creds/<role>, which the catalog's Vault roles issue (feat: apply the database catalog in the cluster by its engine's method #459). Deliveredself(the default), the Process reads it from the Secret Store and its token is mounted.credentials.delivery. The edge'scredentialsgainsdelivery: self | env. Deliveredenv, the render emits aVaultDynamicSecret(databasemount,creds/<role>, untracked by Flagger, restart targets as for a static secret). The two new coordinates,usernameandpassword, read it assecretKeyRefs.env, or one used as part of a value, isE_UNRESOLVED_PLACEHOLDER.envcredential that tolerates a reload isE_ENV_CANNOT_RELOAD.delivery: fileon an edge is a schema refusal.estate-vso-secrets.secretStore(E_NO_SECRET_STORE).hindsight-apitakes its login asenv.selfcredential.CONTEXT.mdand REQ-062 say so.Left on #378:
delivery: filefor an edge credential, the 10-minute static refresh, dropping injector annotations, chapter 17's no-token rule, and the ADR 0030 rewrite.Verification
npm run verifypasses. New tests cover:self;./mvnw clean verifyunderemf/passes: both implementations render the knowledge-platform and auth trees byte for byte.Part of #378. Unblocks #448.