Repository navigation
feat(rollout): plan and prepare the move to the PR workflow - #21
Merged
Merged
Conversation
scripts/rollout/pr-workflow.py plans the move of every repository in a workspace to the PR workflow (pr-changes.yml and the required-gate action) and prepares one repository at a time: it rewrites the triggers of the heavy workflows to workflow_call + workflow_dispatch, keeps the docs workflow on the push to the default branch, and writes pr.yml with the gate. Dry run by default, idempotent, and it refuses (exit 3) a repository whose workflows need a person: other triggers, dispatch inputs, path filters, their own concurrency group, or expressions that read the event or ref. It never commits, pushes, opens a pull request or touches a ruleset. scripts/selftest/rollout.sh runs it on two fixtures in testdata/rollout. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
boeboe
force-pushed
the
feat/pr-workflow-rollout
branch
from
November 14, 2026 01:07
d656dfa to
2b3fd3a
Compare
boeboe
marked this pull request as ready for review
November 14, 2026 01:13
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.
Builds on #20 (merged as 6c23fd3): the pull requests this tool prepares call
pr-changes.ymlandrequired-gate. Rebased ontomain; one commit.What it does
scripts/rollout/pr-workflow.pyis Stage I of Phase 1 (PR-only CI). It uses the standard library only.plan <workspace>reads every clone in a workspace, made with engineering'sscripts/audit-inventory.sh. It reports each repository's profile from.otfabric/policy.yamland a status:migrated,ready,manualwith reasons,no-ci, orexcepted. It also suggestscode-paths: Markdown that Go code reads or embeds. Output is Markdown or--format json, with--profileto filter.apply <repo>is a dry run unless given--write. It rewrites theon:blocks of the heavy workflows toworkflow_call+workflow_dispatch, and keeps the docs workflow onpushto the default branch. It writespr.ymlwithchanges, every peer, and theOT Fabric Required Checksgate.secrets: inheritis passed only to workflows that use secrets.migratedand changes nothing.paths:filters, its own concurrency group, or expressions readinggithub.ref/github.event*.scripts/rollout/README.mdhas the procedure: pilot per profile, one reviewed pull request per repository, the ruleset only after the gate has reported, and rollback.exceptions.txtlists repositories the plan leaves alone. Today that is only.githubitself: Selftest is path-filtered by design (AGENTS.md rule 6).The generator was checked against the two hand-made pilots, otfabric/go-mms#43 and otfabric/go-iec61850#90. It reproduces their
on:blocks exactly and an equivalentpr.yml, including theREADME.mdcode path that go-iec61850'sTestREADMESnippetsneeds.Files
scripts/rollout/pr-workflow.py,scripts/rollout/README.md,scripts/rollout/exceptions.txt: new.scripts/selftest/rollout.shand the fixturestestdata/rollout/{ready,manual}: new..github/workflows/selftest.yml: addsscripts/rollout/**to the pull request paths, and a newrollout-casesjob.AGENTS.md(Commands row),README.md(directory row).No shared workflow, input, default, job name or permission changes. Callers are unaffected.
Checks run
scripts/selftest/rollout.sh, which covers:on:blocks change;pr.ymlhas the gate, every job, the conditions and the permissions;manualrepository is refused and left untouched;pr-changes,required-gate,policy,release-notes,go-version,docs-check) pass locally on this branch.otfabric-policy check .reports compliant: 0 must-fail and 0 should-fail.Plan on the local workspace (82 clones, possibly stale)
The two
migratedrepositories are the pilot branches checked out locally. Nothing is merged.Limitations
manualis broad on purpose. Most*-interoprepositories have their own concurrency groups or tag-push releases mixed into CI; those need a person.code-pathssuggestions only find.mdstring literals andgo:embed. A reviewer still checks them.🤖 Generated with Claude Code