Skip to content

feat(ci): reusable-promote-squash.yml — clean squash promotion for bluefin/bluefin-lts (C1/C5) - #161

Merged
castrojo merged 1 commit into
mainfrom
feat/reusable-promote-squash
Jun 11, 2026
Merged

feat(ci): reusable-promote-squash.yml — clean squash promotion for bluefin/bluefin-lts (C1/C5)#161
castrojo merged 1 commit into
mainfrom
feat/reusable-promote-squash

Conversation

@castrojo

Copy link
Copy Markdown
Contributor

Summary

Implements consistency-audit C1 (shared promote logic) and C5 (release-state schema) from projectbluefin/common#583.

C1 — reusable-promote-squash.yml

Shared workflow for the squash-promote pattern used by bluefin and bluefin-lts. Companion to the existing reusable-promote.yml (digest-based, used by dakota).

Key improvements over the per-repo 340–354 LoC workflows:

Before After
Staleness check on squash branch parent → periodic failures Always rebuild from origin/main — always clean
12-step mergeability poll (3 min max) + GraphQL enqueue gh pr merge --auto — fires when checks pass, no polling
343–354 LoC duplicated in each image repo 30 LoC thin caller per repo

Inputs:

  • variants — JSON array of variant objects for reusable-release-gate.yml
  • cosign_identity_regexp — cert identity regex
  • run_e2e / e2e_suites / e2e_image — gate config
  • registry — GHCR prefix (default: ghcr.io/projectbluefin)

Jobs preserved: promote → gate (release-gate) → close-failure-issue / report-failure

C5 — docs/schemas/release-state.schema.json

Canonical JSON Schema (draft/2020-12) for .github/release-state.yaml. Used by dakota today; bluefin/bluefin-lts will adopt when they wire reusable-promote.yml callers.

Test plan

  • CI passes (actionlint, SHA-pin pre-commit)
  • After merge: v1 tag updated by update-v1-tag.yml
  • Dependent PRs (bluefin-lts + bluefin) update SHA reference to post-merge v1 SHA

Merge order

This PR must merge first. The thin-caller PRs reference this commit SHA — they will run against this workflow at 72ee991c06c58b865c2419db0af8748eef70199b until Renovate bumps to the new v1 tag after merge.

Parent issues: common#584 · common#588 · common#583

Implements consistency-audit items C1 and C5:

C1 — shared squash-promote logic for bluefin and bluefin-lts
  - Always rebuilds squash branch from current origin/main — eliminates
    staleness/conflict drift that causes merge friction
  - Replaces per-repo 340–354 LoC workflows with ~25-line thin callers
  - Removes GraphQL merge-queue enqueue polling loop; uses --auto instead
  - Preserves: release-gate checks, failure-issue tracking, triggers

C5 — canonical JSON schema for .github/release-state.yaml
  - Used by dakota today; bluefin/bluefin-lts adopt when C1 lands
  - Validates via check-jsonschema pre-commit hook in each consumer

Parent: projectbluefin/common#583
Tracks: projectbluefin/common#584, projectbluefin/common#588

Assisted-by: Claude Sonnet 4.5 via pi
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@castrojo
castrojo requested a review from p5 as a code owner June 11, 2026 00:51
@github-actions

Copy link
Copy Markdown

Dependency Review

The following issues were found:
  • ✅ 0 vulnerable package(s)
  • ✅ 0 package(s) with incompatible licenses
  • ✅ 0 package(s) with invalid SPDX license definitions
  • ⚠️ 1 package(s) with unknown licenses.
See the Details below.

License Issues

.github/workflows/reusable-promote-squash.yml

PackageVersionLicenseIssue Type
projectbluefin/actions/.github/workflows/reusable-release-gate.ymlcd1f55cNullUnknown License

OpenSSF Scorecard

PackageVersionScoreDetails
actions/actions/checkout df4cb1c069e1874edd31b4311f1884172cec0e10 🟢 5.9
Details
CheckScoreReason
Binary-Artifacts🟢 10no binaries found in the repo
Dangerous-Workflow🟢 10no dangerous workflow patterns detected
Code-Review🟢 10all changesets reviewed
Maintained⚠️ 23 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 2
CII-Best-Practices⚠️ 0no effort to earn an OpenSSF best practices badge detected
Token-Permissions⚠️ 0detected GitHub workflow tokens with excessive permissions
Packaging⚠️ -1packaging workflow not detected
Fuzzing⚠️ 0project is not fuzzed
License🟢 10license file detected
Pinned-Dependencies🟢 3dependency not pinned by hash detected -- score normalized to 3
Signed-Releases⚠️ -1no releases found
Security-Policy🟢 9security policy file detected
SAST🟢 8SAST tool detected but not run on all commits
Branch-Protection🟢 5branch protection is not maximal on development and all release branches
actions/actions/github-script 3a2844b7e9c422d3c10d287c895573f7108da1b3 🟢 7.8
Details
CheckScoreReason
Code-Review🟢 10all changesets reviewed
Maintained🟢 1021 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
Packaging⚠️ -1packaging workflow not detected
Dangerous-Workflow🟢 10no dangerous workflow patterns detected
Binary-Artifacts🟢 10no binaries found in the repo
CII-Best-Practices⚠️ 0no effort to earn an OpenSSF best practices badge detected
Pinned-Dependencies⚠️ 1dependency not pinned by hash detected -- score normalized to 1
Token-Permissions🟢 9detected GitHub workflow tokens with excessive permissions
Fuzzing⚠️ 0project is not fuzzed
License🟢 10license file detected
Signed-Releases⚠️ -1no releases found
Security-Policy🟢 9security policy file detected
SAST🟢 10SAST tool is run on all commits
Branch-Protection🟢 6branch protection is not maximal on development and all release branches
actions/projectbluefin/actions/.github/workflows/reusable-release-gate.yml cd1f55c UnknownUnknown

Scanned Files

  • .github/workflows/reusable-promote-squash.yml

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

4-review A pull request is awaiting review.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant