fix(release): complete package releases on merge, not on a 2-day tick#7054
Conversation
… on a 2-day tick mcp-release-please.yml only ran on a cron + manual dispatch, so merging a component's release-please PR didn't tag/publish it until the next tick -- confirmed live: mcp-v3.1.0's release PR merged 8 minutes after the day's cron run had already passed, leaving it stuck package.json-bumped-but- unpublished. Add a push-to-main trigger so a merge completes immediately; release-please recomputes idempotently so the extra runs are free when there's nothing to do. Also fix check-mcp-release-due.mjs: it could open/refresh the "MCP release due" tracking issue but never closes it once release-please catches up, so any release leaves a permanently stale zombie issue behind (#6145).
|
Superagent didn't find any vulnerabilities or security issues in this PR. |
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #7054 +/- ##
==========================================
- Coverage 93.74% 93.74% -0.01%
==========================================
Files 692 692
Lines 68709 68706 -3
Branches 18760 18760
==========================================
- Hits 64412 64409 -3
Misses 3302 3302
Partials 995 995
Flags with carried forward coverage won't be shown. Click here to find out more. |
|
Warning ⏸️ LoopOver review result - manual review recommendedReview updated: 2026-07-17 20:11:20 UTC
Review summary Nits — 5 non-blocking
Concerns raised — review before merging
📋 Copy for AI agents — paste into your coding agentDecision drivers
Context & advisory signals — never blocks the verdict
Review context
Contributor next steps
Signal definitions
🧪 Chat with LoopOverAsk LoopOver a question about this PR directly in a comment — grounded only in the same cached, public-safe facts shown above, never a new claim.
Full command reference: https://loopover.ai/docs/loopover-commands 🧪 Experimental — new and may change. 🟩 Safe / merged · 🟦 Advisory · 🟨 Held for review · 🟥 Blocked / closed 💰 Earn for open-source contributions like this. Gittensor lets GitHub contributors earn for the work they already do — register to start earning →. Checked by LoopOver, a quiet PR intelligence layer for OSS maintainers.
|
mcp-v3.1.0 and miner-v3.1.0 are tagged and merged but stuck: GitHub's tag-protection ruleset rejects moving them to include the release pipeline fixes (#7054, #7060, #7064), and workflow_dispatch resolves a run's YAML from the ref it's dispatched against, so re-running those exact tags would still use the pre-fix workflow definitions. Bumping to fresh, never-tagged versions is the documented human-override path (publish-mcp.yml's own on: comment) around this exact situation. mcp v3.1.1 picks up one real fix that landed after v3.1.0's cut (#6990/#7052). miner v3.1.1 picks up two (bdb11d9, 77ca20f).
Summary
mcp-release-please.yml(which despite its name drives release-please for all four published packages -- mcp/engine/miner/ui-kit) only ran on acron: "0 16 */2 * *"schedule + manual dispatch. Merging a component'schore(release): cut X vY.ZPR only tags + publishes on release-please's next run, so a merge landing between ticks sits fully unpublished for up to 2 days.mcp-v3.1.0's release PR (chore(release): cut mcp v3.1.0 #7004) merged at 19:32:58Z, 8 minutes after the day's last run (19:24:07Z) -- which is exactly what tagged/releasedengine-v3.2.0andui-kit-v1.1.0(their release PRs had merged before that run). mcp's package.json is bumped to3.1.0and the release PR is merged, but nomcp-v3.1.0tag/GitHub Release/npm publish exists yet.push: branches: [main]trigger. release-please recomputes idempotently from conventional-commit history each run, so the extra invocations are free when there's no new commit or merged Release PR to act on -- this is also release-please's own documented recommended trigger. The cron stays as a redundant safety net.scripts/check-mcp-release-due.mjs --upsert-issue(the "MCP release due" watcher behind issue MCP release due: 4.0.0 #6145) can open/refresh its tracking issue but has no logic to close it oncereport.dueflips back to false -- so any completed release leaves a permanently stale issue behind. AddedcloseResolvedIssueIfPresent, wired into thedue/!duebranch inmain(), with tests.Test plan
npm run actionlint-- cleannpm run typecheck-- clean (added the matching.d.mtsentries)npx vitest run test/unit/mcp-release.test.ts-- 12/12 passing, including 3 new tests forcloseResolvedIssueIfPresent(closes+comments when an issue exists, no-ops when none exists, ignores non-bot-authored issues)npm run test:changedagainstorigin/main-- only the one affected test file, green