Skip to content

Improve release automation and runbook - #8148

Open
Naragod wants to merge 1 commit into
masterfrom
improve_cherry_pick_automation
Open

Improve release automation and runbook#8148
Naragod wants to merge 1 commit into
masterfrom
improve_cherry_pick_automation

Conversation

@Naragod

@Naragod Naragod commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

Proposed Changes

This PR hardens the release tooling in release/ with lessons from v2.10.2. That release picked 89 PRs. Twelve hit conflicts. Two carried stale milestone labels. Each pain point below now has a fix.

recon.rb

  • Detects PRs that shipped in a past release. Release PRs get squash-merged, so their hashes change. The ancestry check misses them. The fix greps the release changelog for each PR number. Stale labels (v2.10.2: Refactored SubmissionFilePanel subcomponents into functional style #7969, fix: missing null and presence checks #7965) now show up as skips, with a reason.
  • Adds a conflict_forecast to the JSON plan. It lists merged master PRs outside the milestone whose files overlap the milestone PRs. Eleven of the twelve v2.10.2 conflicts came from such PRs. The picker now sees them coming.
  • Ignores Changelog.md in dependency order. Half the PRs touch it. That marked 88 of 92 PRs as dependent. PRs that overlap on lockfiles alone now order by merge date.
  • Widens the sysadmin diff to config/settings/production.yml, requirements-jupyter.txt, Dockerfile. The v2.10.2 playwright bump changed deploy steps and hid in the last one.

lockres.rb (new)

  • Resolves conflict blocks in Gemfile.lock, package.json, package-lock.json. Both sides must be version lines for the same keys. The higher version wins per key. Every choice prints. Anything else refuses, so a human resolves it. Plain Ruby, zero gems.

cherry-pick.sh

  • Routes lockfile conflicts through lockres.rb. The old path kept the incoming side of Gemfile.lock. That loses release-side bumps. It also skipped the npm lockfiles.

validate_changelog_master.sh

  • Check 4 now warns instead of failing on two safe cases: an entry reworded under the same PR number, or an entry that gained its PR suffix. Real losses still fail.

RELEASING.md

  • Documents the new flow: conflict forecast, lockfile handling, environment triage for suite failures, the satellite repo policy (the Wiki retired; the autotester releases on its own pace).

Testing

  • release/test/test_helpers.rb: 53 of 53 pass.
  • recon.rb v2.10.2 regression run: 91 of 92 PRs skip as "listed in the changelog". The one left (Updated Changelog: Moved "migration tasks" to Internal Changes section #8075, a changelog-sole PR) falls to the empty-pick path.
  • lockres.rb: resolve, refuse, npm-style paths each checked on synthetic conflicts.
  • Syntax checks pass on all scripts.
Screenshots of your changes (if applicable)

Type of Change

(Write an X or a brief description next to the type or types that best describe your changes.)

Type Applies?
🚨 Breaking change (fix or feature that would cause existing functionality to change)
New feature (non-breaking change that adds functionality)
🐛 Bug fix (non-breaking change that fixes an issue)
🎨 User interface change (change to user interface; provide screenshots)
♻️ Refactoring (internal change to codebase, without changing functionality)
🚦 Test update (change that only adds or modifies tests)
📦 Dependency update (change that updates a dependency)
📖 Documentation update (change that updates documentation)
🔧 Internal (change that only affects developers or continuous integration) X

Checklist

(Complete each of the following items for your pull request. Indicate that you have completed an item by changing the [ ] into a [x] in the raw text, or by clicking on the checkbox in the rendered description on GitHub.)

Before opening your pull request:

  • I have performed a self-review of my changes.
    • Check that all changed files included in this pull request are intentional changes.
    • Check that all changes are relevant to the purpose of this pull request, as described above.
  • I have added tests for my changes, if applicable.
    • This is required for all bug fixes and new features.
  • I have updated the project documentation, if applicable.
    • This is required for new features.
  • If this is my first contribution, I have added myself to the list of contributors.

After opening your pull request:

  • I have updated the project Changelog (this is required for all changes).
  • I have verified that the pre-commit.ci checks have passed.
  • I have verified that the CI tests have passed.
  • I have reviewed the test coverage changes reported by Coveralls.
  • I have requested a review from a project maintainer.

Questions and Comments

(Include any questions or comments you have regarding your changes.)

@coveralls

Copy link
Copy Markdown
Collaborator

Coverage Report for CI Build 33682656463

Warning

No base build found for commit 2c24124 on master.
Coverage changes can't be calculated without a base build.
If a base build is processing, this comment will update automatically when it completes.

Coverage: 90.693%

Details

  • Patch coverage: No coverable lines changed in this PR.

Uncovered Changes

No uncovered changes found.

Coverage Regressions

Requires a base build to compare against. How to fix this →


Coverage Stats

Coverage Status
Relevant Lines: 52371
Covered Lines: 48520
Line Coverage: 92.65%
Relevant Branches: 2499
Covered Branches: 1243
Branch Coverage: 49.74%
Branches in Coverage %: Yes
Coverage Strength: 128.82 hits per line

💛 - Coveralls

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants