Repository navigation
ci: validate the Claude plugin and its pinned version - #108
Merged
Merged
Conversation
kpal81xd
force-pushed
the
ci/validate-plugin
branch
from
October 12, 2026 14:24
f14e5a6 to
747142f
Compare
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.
Summary
Adds a
Pluginjob to CI that checks the Claude plugin manifests and the server version the plugin pins. Stacked on #107.claude plugin validate plugin --strictwith the Claude Code CLI pinned at2.1.296. It needs no login, and strict mode fails on warnings as well as errors.node scripts/check-plugin-pin.mjsreads the three places the plugin pins the server version:versioninplugin/.claude-plugin/plugin.json, the@x.y.zinplugin/.mcp.json, and the@x.y.zin the "What it runs" block ofplugin/README.md.Version policy (shared with #105): stable releases move the plugin pin, and beta releases leave
plugin/on the last stable version.package.jsonhas a stable version, all three pins must equal it. A failure names each file that's off, e.g.plugin/.mcp.json pins 0.7.0, expected 0.7.1 from package.json.package.jsonhas a prerelease version (e.g.0.8.0-beta.0), all three pins must match each other and be a stable version. That waymainstays green after a beta release.The job needs no
npm ciand runs in parallel with Build, Lint and Test.Strict validate checks the plugin manifest only. It doesn't confirm that the pinned npm version exists or that the server starts.
Overlap with #105: #105 adds
scripts/sync-plugin-version.mjs, which has a--checkmode with similar logic. This check stays separate so the two PRs don't depend on each other. Once both merge, a follow-up can replace this script withsync-plugin-version.mjs --checkand remove it.CI on this PR:
ci.ymlruns only for pull requests intomain, so this stacked PR gets no checks until it's retargeted tomainafter #107 merges. I ran the validate command and the pin check locally, covering a passing pin, a mismatched.mcp.json, a betapackage.jsonwith stable pins, and a stable bump with stale pins.Closes #106
Manual smoke test
mainwith this change and no other edits. Expected: thePluginjob passes, and the "Check plugin version pin" log showsplugin pinned to 0.7.1 (package.json 0.7.1).plugin/.mcp.jsonto@playcanvas/editor-mcp-server@0.7.0. Expected: "Check plugin version pin" fails withplugin/.mcp.json pins 0.7.0, expected 0.7.1 from package.json.Pluginjob passes again.package.jsonversionto0.8.0-beta.0and leaves the plugin files alone. Expected: thePluginjob passes, because a prerelease keeps the plugin on0.7.1.descriptionfromplugin/.claude-plugin/plugin.json. Expected: "Validate Claude plugin" fails with adescription: No description providedwarning, which--stricttreats as an error.Pluginjob passes.