Skip to content

Epic: relocate the canary-rollout engine + bootstrap into .github (org tooling consolidation) #613

Closed

Description

@don-petry

Goal

Consolidate the release-promotion / repo-bootstrap tooling into petry-projects/.github so all org tooling + standards live in one canonical home (the #596 principle, extended). Agreed end-state; execution gated on the canary-rollout PR queue draining (see Sequencing).

Why

.github already owns the standards (rulesets in standards/rulesets/, lib/ring-pins.sh, the canonical 346L apply-repo-settings.sh). The orchestrators that apply them still live in .github-private, duplicated/divergent. .github-private is a public repo, so there's no secrecy reason to keep operator tooling there.

Scope — move .github-private → .github

  • scripts/bootstrap-new-repo.sh (+ tests/test_bootstrap_new_repo.bats)
  • scripts/canary-rollout.sh, scripts/lib/canary-rollout.sh (+ tests/canary_rollout.bats)
  • .github/workflows/canary-rollout.yml
  • standards/canary-rings.json (ring-membership registry — co-locate with lib/ring-pins.sh already in .github)
  • Docs: docs/bootstrap/new-repo-validation.md, docs/release/versioning.md, docs/initiatives/canary-rollout-adr.md

Reconcile / de-dupe (canonical = .github)

  • Delete .github-private/scripts/apply-rulesets.sh (the Consolidate the two file-driven apply-rulesets appliers into one (cross-repo bootstrap story) #596 duplicate) — callers use the canonical .github applier.
  • Delete .github-private/scripts/apply-repo-settings.sh (129L subset) — canonical is .github's 346L superset. Bootstrap then applies the fuller set (merge-settings + GHAS default-setup) — a latent-gap closure, confirmed acceptable.
  • De-dupe scripts/lib/push-protection.sh (divergent shas across repos) — keep .github's.

Workflow-move checklist (canary-rollout.yml)

Sequencing (hard gate)

The subsystem currently has 8 open PRs in .github-private (#1010, #1037, #1046, #1061, #1066, #1078, #1084, #1085) + dependabot #1071, all touching these files, last-committed today. Do NOT start the move until that queue drains — otherwise every in-flight PR conflicts. This epic tracks the move; a companion effort is landing the queue.

Related

Activity

  1. don-petry commented on Jul 4, 2026

    @don-petry
    ContributorAuthor

    Queue-drain status (2026-07-04 ~17:50Z)

    The .github-private canary-rollout PR queue that gated this migration has drained:

    All 8 were tagged dev-lead:hands-off during the drain.

    ⚠ One gap to resolve before/with the migration

    Issue #1008 (onboard idea→initiative reusables into the registry) is still OPEN and its work is NOT in main — its only PR (#1010) was closed in the supersession sweep without landing (unlike the others, #1008's registry entries initiative-planner/idea-triage/unmanaged were genuinely unlanded). No replacement PR exists. This needs a fresh PR (rebase #1010's canary-rings.json additions onto current main) either before the move or carried into it.

    Gate is otherwise open — the subsystem is quiescent enough to execute the relocation.

  2. added 8 commits that reference this issue on Jul 8, 2026
  3. don-petry commented on Jul 13, 2026

    @don-petry
    ContributorAuthor

    Closing — the relocation is complete and verified:

    • `scripts/canary-rollout.sh` + `scripts/lib/canary-rollout.sh` + `standards/canary-rings.json` + both bats live in `.github`; `.github-private` no longer hosts them (404 confirmed).
    • `.github` is the sole live host of `canary-rollout.yml` (scheduled runs green).
    • Both follow-ups landed: versioning.md dedup (docs(#631): de-duplicate versioning.md (.github-private is authoritative) #632) and push-protection.sh drift-guard (.github-private#1134).

    Remaining org-tooling-consolidation ideas continue under their own issues (#611 native org rulesets, #612 org-settings.json). The engine's bats suite is now CI-enforced via #685.

  4. added a commit that references this issue on Jul 17, 2026
  5. added 9 commits that reference this issue on Aug 3, 2026
  6. added 3 commits that reference this issue on Aug 31, 2026
  7. added 3 commits that reference this issue on Sep 7, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions