Replies: 3 comments
|
Update: the three items listed as unconfirmed in the post are now tested on throwaway repositories, and the results are in the plan on PR #796.
One item stays open: whether the attestation binds to a container image digest in GHCR. The test attested a file. The first release checks this. The test Apps are removed and the throwaway repositories are archived. |
|
I support option 3 for dmf-cms. Separating the auto-merge and tag identities gives each workflow only the authority it needs, and the exact-commit checks address the gap that prompted this RFC. The added key rotation and owner setup seem justified for unattended releases. I would keep the plan’s pre-enable probes and checks as rollout gates, especially App-armed/direct merges, the release environment and tag ruleset behavior, and the GHCR image attestation. I favor proving this in dmf-cms before extending the pattern to other repositories. |
|
Decision: we are going ahead with option 3, two scoped GitHub Apps for unattended dmf-cms releases, as recommended in the post. Thank you for the review and the support. Next steps:
|
Uh oh!
There was an error while loading. Please reload this page.
Decision requested
Should dmfdeploy introduce two narrowly scoped GitHub Apps so that dmf-cms releases run unattended from CI? This reverses the earlier choice not to add an App or personal credential for the release gate.
Context
dmfdeploy#568 found that the dmf-cms release commit
v0.38.0reachedmainwith no check runs at its exact commit. Two facts cause this:mainis not the commit the pull request tested.GITHUB_TOKEN. GitHub does not start workflows from events that this token causes, so the rebased commit never gets its checks.The issue records a decision that no new personal or App credential is used. The first plan for the fix (PR #796) followed that rule. It had the release job use
GITHUB_TOKENas the bypass actor for tag creation, started the release with a manualrepository_dispatch, and checked a ruleset timestamp to detect drift. Review found three problems in that design:Options
v*tags and is the only bypass actor on the tag ruleset. Each key lives in a GitHub environment limited to themainbranch.main, which removes the root cause of [dmf-cms] release tip v0.38.0 landed without required CI and guard checks #568 without an App. It does not give tag creation a scoped identity, so a tag bypass actor is still needed. We have not verified how the queue treats rebase merges on this repository.Recommendation
Choose option 3.
maingets its checks. This fixes [dmf-cms] release tip v0.38.0 landed without required CI and guard checks #568 at the root.main, with no inputs and no manual dispatch. It continues only when the commit is the head ofmain, is a release bump, and has a fresh success from every required check on that exact commit. It builds the image, checks its version and revision labels, publishes it, attaches a build-provenance attestation, and creates the tag last.refs/tags/v*allows creation only by the release App. Only a job that runs in thereleaseenvironment onmaincan use its key.mainwithout review, is inside the trust boundary. Review rules onmainand the environment branch policy limit that risk. They do not remove it.The full design, the required tests and the rollout steps are in the plan on PR #796.
What changes
What we have not confirmed
Questions
If the thread converges, an ADR follows with a one-sentence rule and an enforcement section.
All reactions