Repository navigation
[Discovery] Add workflow to deprecate legacy io.github.pascalorg/editor registry entry - #1128
Conversation
…entry Co-authored-by: Aymeric Rabot <Aymericr@users.noreply.github.com>
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
Aymericr
left a comment
There was a problem hiding this comment.
Triage review. The workflow itself looks clean (manual-only trigger, minimal id-token: write + contents: read, flags before the server name), but as written it won't achieve the goal of freeing https://editor.pascal.app/api/mcp.
I checked upstream modelcontextprotocol/registry on main: validateNoDuplicateRemoteURLs (internal/service/registry_service.go) calls ListServers with a RemoteURL filter and rejects the publish if any returned server has a different name. ListServers (internal/database/postgres.go) only excludes rows where status = 'deleted'. So a deprecated io.github.pascalorg/editor will still block publishing app.pascal/editor. The caveat in the description is right, it's not just a probability.
Suggested changes before merge:
- Use
--status deleted(the publisher acceptsactive|deprecated|deleted, and a deleted entry can be restored via the status endpoint), or make status aworkflow_dispatchinput withdeletedas the default so it's a deliberate choice at run time. Deleting drops the deprecation message for anyone still resolving the old name, so this is a maintainer call. - Pin
mcp-publisherto a specific release (and ideally verify its checksum) instead ofreleases/latest, since this job mints an OIDC token that can change our registry entry.
Non-visual change, so no screenshots needed. Holding the merge until CI finishes and the status question is settled.
Co-authored-by: Aymeric Rabot <Aymericr@users.noreply.github.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: d10cdd1d2d
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| - name: Deprecate io.github.pascalorg/editor | ||
| run: | | ||
| "$RUNNER_TEMP/mcp-publisher" status \ | ||
| --status deprecated \ |
There was a problem hiding this comment.
Delete the legacy entry to release its remote URL
When this workflow is run to unblock publishing app.pascal/editor, deprecated will not release https://editor.pascal.app/api/mcp: the registry's remote-URL lookup excludes only entries whose status is deleted (buildFilterConditions adds status != 'deleted'), so the subsequent publish will still find the legacy entry and reject the duplicate URL. Use --status deleted for all versions rather than requiring the migration to fail first. Upstream registry implementation
Useful? React with 👍 / 👎.
| - name: Install MCP Registry publisher | ||
| run: | | ||
| curl --fail --location \ | ||
| "https://github.com/modelcontextprotocol/registry/releases/latest/download/mcp-publisher_linux_amd64.tar.gz" \ |
There was a problem hiding this comment.
Pin and verify the privileged publisher binary
When this manually dispatched workflow runs, the mutable latest archive is executed with id-token: write and then obtains registry edit authority, so an upstream compromise or incompatible release can alter Pascal's registry entries without any reviewed repository change. Pin a known publisher version and verify its SHA-256 before extraction, as .github/workflows/mcp-registry.yml already does.
Useful? React with 👍 / 👎.
Aymericr
left a comment
There was a problem hiding this comment.
Re-reviewed. Both asks are addressed. The status is now a choice that defaults to deleted, which is the status that frees the remote URL, and mcp-publisher is pinned to v1.8.1 with a SHA-256 check. Permissions are minimal (id-token: write, contents: read) and the workflow only runs on manual dispatch. LGTM. It needs a second maintainer's approval or an admin merge, since it was opened under this account.
What does this PR do?
Adds
.github/workflows/mcp-registry-deprecate-legacy.yml, which can only be run manually (workflow_dispatch). It installsmcp-publisherv1.8.1, checks its SHA-256 against the release's publishedregistry_1.8.1_checksums.txt(the same pinmcp-registry.ymluses), and logs in withgithub-oidc. It then runs:The goal is to free the remote URL
https://editor.pascal.app/api/mcpso thatapp.pascal/editorcan be published. Thestatusinput can bedeleted(the default) ordeprecated. Upstream's duplicate-remote-URL check (validateNoDuplicateRemoteURLswithstatus != 'deleted'ininternal/database/postgres.go) only skips deleted entries, so onlydeletedfrees the URL. The command uses--all-versionsinstead of pinning0.6.1, and--yesbecause bulk updates prompt for confirmation.How to test
status: deleted.app.pascal/editorwith the same remote URL succeeds.Screenshots / screen recording
N/A — non-visual change
Checklist
bun devbun checkto verify)mainbranchNote
Low Risk
Adds an opt-in Actions workflow with no runtime app changes; risk is limited to incorrect manual registry status updates.
Reviewed by Cursor Bugbot for commit e335e67. Bugbot is set up for automated code reviews on this repo. Configure here.