Split MCP Registry publish into its own job - #4
Merged
Merged
Conversation
The v1.6.1 release failed on the registry step with an i/o timeout during the OIDC token exchange, after npm and Docker had already published successfully. Two problems followed from npm and the registry sharing one job: - The failure was unrecoverable by re-run. Re-running the job repeats `npm publish`, which npm rejects for an already-published version, so the run dies before reaching the registry again. Recovery meant publishing by hand. - The run showed red although the release itself was fine. A red release run that usually means "nothing shipped" but sometimes means "only the directory entry is missing" trains people to stop reading release status. publish-registry now runs after publish-npm as a separate job, so a registry outage can be retried on its own without touching npm. The version patch moves with it: server.json is not in package.json `files`, so it never ships to npm and only the registry publish ever needed it. Also retries the OIDC login three times with linear backoff. That only covers brief blips — the registry was still unreachable half an hour after the v1.6.1 failure, and no retry count would have helped there. The job split is what makes a real outage recoverable. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WUg1nG8m7NYmqdToqHsHvK
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
The
release-v1.6.1run failed on the MCP Registry step:npm and Docker had already published successfully. Two problems came out of npm and the registry sharing one job.
The failure could not be retried. Re-running the job repeats
npm publish, which npm rejects for a version that already exists — so the run dies before it ever reaches the registry again. Recovery meant runningmcp-publisherby hand.The run showed red although the release was fine.
@seatable/mcp-seatable@1.6.1was on npm with dist-taglatest, the Docker image was pushed withlatest, and mcp.seatable.com deployed from it. A red release status that usually means "nothing shipped" but occasionally means "only the directory entry is missing" is how people learn to stop reading release status.What changed
publishbecomespublish-npmandpublish-registry, the latter depending on the former. A registry outage is now retryable on its own, and npm is untouched by that retry.The
Patch server.json versionstep moves into the registry job.package.jsonfilesis["dist","bin","README.md","LICENSE",".env.example"], soserver.jsonnever ships to npm — only the registry publish ever needed the patched version.The OIDC login retries three times with linear backoff (20s, 40s). Worth being clear about what that does and does not buy: it covers brief blips only. The registry was still unreachable from two independent networks half an hour after the v1.6.1 failure, so no retry count would have rescued that run. The job split is what makes a real outage recoverable — the retry is a cheap addition, not the fix.
Verification
This one cannot be proven before merge: the jobs are gated on
refs/tags/release-v, so they do not run on a PR. What was checked:lint-and-test → init-vars → {build-and-push, publish-npm → publish-registry}.First real exercise will be
release-v1.6.2.Still open
The v1.6.1 registry entry is still missing. It needs a manual
mcp-publisher publishonce the registry is reachable — this PR does not backfill it.