Skip to content

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

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)

  • Secrets present in .github (GH_PAT_WORKFLOWS, release-manager App creds, etc.).
  • Triggers still valid once hosted in .github (schedule/dispatch).
  • Cross-repo promotion paths intact — note #1059/#1061 are already fixing cross-repo deployment-record 422s; let those land first so we move the fixed version.
  • release-manager App (id 4193127) installed on .github with needed perms (Issues:write gap flagged in #1081/#1085 area).

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions