Repository navigation
Add a DCO signoff check to CI and the signoff rule to AGENTS.md #4919
Copy link
Copy link
Closed
Labels
choreMaintenance: deps, build tooling, CI, cleanup — no user-facing behavior changeMaintenance: deps, build tooling, CI, cleanup — no user-facing behavior changev2
Milestone
Description
Follow-up from #4867 (the pr-flow skill), which merged with its first acceptance criterion unmet: nothing fails a PR with an unsigned commit today. No DCO check ran on #4904, #4905 or #4906.
The original plan was to install the probot DCO app, but the org appears to have turned it off. The Inspector hit the same thing (modelcontextprotocol/inspector#2566), where the app was suspended and its check quietly disappeared. As there, we replace the third-party app with a check we own.
Scope
- A DCO job in CI. For every commit in the PR's range, require a
Signed-off-by: Name <email>trailer whose name and email match the commit's author or committer. Keep the app's two exemptions: merge commits and bot-authored commits. One unsigned commit fails the job, and its output names the commit and thegit rebase --signoffrepair.typescript.ymlandpython.ymlrun on bothpushandpull_request, and a push job doesn't know the PR's base. A small separate workflow onpull_request(usinggithub.event.pull_request.base.sha..head.sha, orgh api …/pulls/N/commits --paginate) is cleaner than inferring a merge-base.- Use
contents: readonly, so the job holds no credential and stays outside the SHA-pin rule (verify:action-pins). - Declare
timeout-minutes, asscripts/lib/workflow-gate.mjsrequires of every job. - If the logic is more than a few lines, put it in
scripts/verify-dco.mjswith a siblingverify-dco.test.mjs, like the other guards. - Per AGENTS.md, a check added to CI joins
local:gate:stagesin the same change. Locally it can checkorigin/v2/main..HEAD, which also catches an unsigned commit before it is pushed.
- Verify it: push an unsigned commit to a throwaway PR against
v2/mainand confirm the job fails. Then repair it withgit rebase --signoffand confirm it passes. - Make it required. Add the job's check as a required status check in a ruleset that covers
v2/main. No ruleset applies tov2/maintoday, andmain's rulesets require no status checks, so this is a repo-admin settings change, not something the PR can do. Considermaintoo. - Update the docs, in the same PR as the job:
- add the signoff rule to
AGENTS.md, which only states rules that are true of the repo today; - rewrite
.claude/skills/pr-flow/SKILL.mdstep 3 so it describes the new job instead of the probot app: delete the "⚠️ The probot DCO app is not installed on this repo yet" paragraph, and drop the.github/dco.yml/ remediation-commit / override-button discussion, which only applies to the app; - realign the
AGENTS.mdskills-index table: theissue-triageandsecurity-advisoryrows were added without padding to avoid stacking conflicts.
- add the signoff rule to
Acceptance criteria
- A CI job fails a PR that has an unsigned commit, names the commit and the repair, and passes once it is signed off.
- The check runs in
local:gate:stages, and its script (if any) has unit tests. - The check is a required status check on
v2/main. -
AGENTS.mdstates the signoff rule, andpr-flowdescribes the job, not the app. - The skills-index table is Prettier-clean.
Part of #4858.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
choreMaintenance: deps, build tooling, CI, cleanup — no user-facing behavior changeMaintenance: deps, build tooling, CI, cleanup — no user-facing behavior changev2
Activity
[-]Install the DCO app and add the signoff rule to AGENTS.md[/-][+]Add a DCO signoff check to CI and the signoff rule to AGENTS.md[/+]probe: deliberately unsigned (#4919 verification)
Add a DCO signoff check to CI and the gate (#4919)
probe: deliberately unsigned (#4919 verification)