a3e0acd19a
The skill previously listed 3 manifest paths and omitted `npm publish` entirely, which meant `npx claude-mem@X.Y.Z` only resolved when someone ran publish out-of-band. Now the skill: - Enumerates all 6 version-bearing files (package.json, plugin/package.json, .claude-plugin/marketplace.json, .claude-plugin/plugin.json, plugin/.claude-plugin/plugin.json, .codex-plugin/plugin.json). - Adds an explicit `npm publish` step with `npm view claude-mem@X.Y.Z version` verification so the npx-distributed version is the one users actually pin. - Documents `npm run release:patch|minor|major` (np helper) as an alternative. - Adds `git grep` pre-flight so new manifests are discovered automatically. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
3.4 KiB
3.4 KiB
name, description
| name | description |
|---|---|
| claude-code-plugin-release | Automated semantic versioning and release workflow for Claude Code plugins. Handles version increments across package.json, marketplace.json, plugin.json manifests, npm publishing (so `npx claude-mem@X.Y.Z` resolves), build verification, git tagging, GitHub releases, and changelog generation. |
Version Bump & Release Workflow
IMPORTANT: Plan and write detailed release notes before starting.
CRITICAL: Commit EVERYTHING (including build artifacts). At the end of this workflow, NOTHING should be left uncommitted or unpushed. Run git status at the end to verify.
Preparation
-
Analyze: Determine if the change is PATCH (bug fixes), MINOR (features), or MAJOR (breaking).
-
Environment: Identify repository owner/name from
git remote -v. -
Paths — every file that carries the version string:
package.json— the npm/npx-published version (npx claude-mem@X.Y.Zresolves from this)plugin/package.json— bundled plugin runtime deps.claude-plugin/marketplace.json— version insideplugins[0].version.claude-plugin/plugin.json— top-level Claude-plugin manifestplugin/.claude-plugin/plugin.json— bundled Claude-plugin manifest.codex-plugin/plugin.json— Codex-plugin manifest
Verify coverage before editing:
git grep -l "\"version\": \"<OLD>\""should list all six. If a new manifest has been added since this doc was last updated, update this list.
Workflow
- Update: Increment the version string in every path above. Do NOT touch
CHANGELOG.md— it's regenerated. - Verify:
git grep -n "\"version\": \"<NEW>\""— confirm all six files match.git grep -n "\"version\": \"<OLD>\""— should return zero hits. - Build:
npm run buildto regenerate artifacts. - Commit:
git add -A && git commit -m "chore: bump version to X.Y.Z". - Tag:
git tag -a vX.Y.Z -m "Version X.Y.Z". - Push:
git push origin main && git push origin vX.Y.Z. - Publish to npm (this is what makes
npx claude-mem@X.Y.Zwork):Thenpm publishprepublishOnlyscript re-runsnpm run buildautomatically. Confirm publish succeeded:Alternative:npm view claude-mem@X.Y.Z version # should print X.Y.Znpm run release:patch/release:minor/release:majorinvokesnpand handles tag+push+publish in one shot — use ONLY if you skipped steps 4–6, otherwisenpwill error on the existing tag. - GitHub release:
gh release create vX.Y.Z --title "vX.Y.Z" --notes "RELEASE_NOTES". - Changelog: Regenerate via the GitHub API + script:
gh api repos/{owner}/{repo}/releases --paginate | ./scripts/generate_changelog.js > CHANGELOG.md - Sync changelog: Commit and push the updated
CHANGELOG.md. - Notify:
npm run discord:notify vX.Y.Zif applicable. - Finalize:
git status— working tree must be clean.
Checklist
- All six config files have matching versions
git grepfor old version returns zero hitsnpm run buildsucceeded- Git tag created and pushed
npm publishsucceeded andnpm view claude-mem@X.Y.Z versionconfirms it (sonpx claude-mem@X.Y.Zresolves)- GitHub release created with notes
CHANGELOG.mdupdated and pushedgit statusshows clean tree