213 lines
5.3 KiB
Markdown
213 lines
5.3 KiB
Markdown
---
|
|
name: version-bump
|
|
description: Manage semantic version updates for claude-mem project. Handles patch, minor, and major version increments following semantic versioning. Updates package.json, marketplace.json, plugin.json, and CLAUDE.md version number (NOT version history). Creates git tags.
|
|
---
|
|
|
|
# Version Bump Skill
|
|
|
|
IMPORTANT: This skill manages semantic versioning across the claude-mem project. YOU MUST update all FOUR version-tracked files consistently and create a git tag.
|
|
|
|
## Quick Reference
|
|
|
|
**Files requiring updates:**
|
|
1. `package.json` (line 3)
|
|
2. `.claude-plugin/marketplace.json` (line 13)
|
|
3. `plugin/.claude-plugin/plugin.json` (line 3)
|
|
4. `CLAUDE.md` (line 9 ONLY - version number, NOT version history)
|
|
|
|
**Semantic versioning:**
|
|
- PATCH (x.y.Z): Bugfixes only
|
|
- MINOR (x.Y.0): New features, backward compatible
|
|
- MAJOR (X.0.0): Breaking changes
|
|
|
|
## Workflow
|
|
|
|
When invoked, follow this process:
|
|
|
|
### 1. Analyze Changes
|
|
First, understand what changed:
|
|
```bash
|
|
git log --oneline -5
|
|
git diff HEAD~1
|
|
```
|
|
|
|
### 2. Determine Version Type
|
|
Ask yourself:
|
|
- Breaking changes? → MAJOR
|
|
- New features? → MINOR
|
|
- Bugfixes only? → PATCH
|
|
|
|
If unclear, ASK THE USER explicitly.
|
|
|
|
### 3. Calculate New Version
|
|
From current version in `package.json`:
|
|
```bash
|
|
grep '"version"' package.json
|
|
```
|
|
|
|
Apply semantic versioning rules:
|
|
- Patch: increment Z (4.2.8 → 4.2.9)
|
|
- Minor: increment Y, reset Z (4.2.8 → 4.3.0)
|
|
- Major: increment X, reset Y and Z (4.2.8 → 5.0.0)
|
|
|
|
### 4. Preview Changes
|
|
BEFORE making changes, show the user:
|
|
```
|
|
Current version: 4.2.8
|
|
New version: 4.2.9 (PATCH)
|
|
Reason: Fixed database query bug
|
|
|
|
Files to update:
|
|
- package.json: "version": "4.2.9"
|
|
- marketplace.json: "version": "4.2.9"
|
|
- plugin.json: "version": "4.2.9"
|
|
- CLAUDE.md line 9: "**Current Version**: 4.2.9" (version number ONLY)
|
|
- Git tag: v4.2.9
|
|
|
|
Proceed? (yes/no)
|
|
```
|
|
|
|
### 5. Update Files
|
|
|
|
**Update package.json:**
|
|
```json
|
|
{
|
|
"name": "claude-mem",
|
|
"version": "4.2.9",
|
|
...
|
|
}
|
|
```
|
|
|
|
**Update .claude-plugin/marketplace.json:**
|
|
```json
|
|
{
|
|
"name": "claude-mem",
|
|
"version": "4.2.9",
|
|
...
|
|
}
|
|
```
|
|
|
|
**Update plugin/.claude-plugin/plugin.json:**
|
|
```json
|
|
{
|
|
"name": "claude-mem",
|
|
"version": "4.2.9",
|
|
...
|
|
}
|
|
```
|
|
|
|
**Update CLAUDE.md:**
|
|
ONLY update line 9 with the version number:
|
|
```markdown
|
|
**Current Version**: 4.2.9
|
|
```
|
|
|
|
**CRITICAL**: DO NOT add version history entries to CLAUDE.md. Version history is managed separately outside this skill.
|
|
|
|
### 6. Verify Consistency
|
|
```bash
|
|
# Check all versions match
|
|
grep -n '"version"' package.json .claude-plugin/marketplace.json plugin/.claude-plugin/plugin.json
|
|
# Should show same version in all three files
|
|
```
|
|
|
|
### 7. Test
|
|
```bash
|
|
# Verify the plugin loads correctly
|
|
npm run build
|
|
```
|
|
|
|
### 8. Commit and Tag
|
|
```bash
|
|
# Stage all version files
|
|
git add package.json .claude-plugin/marketplace.json plugin/.claude-plugin/plugin.json CLAUDE.md plugin/scripts/
|
|
|
|
# Commit with descriptive message
|
|
git commit -m "Release vX.Y.Z: [Brief description]"
|
|
|
|
# Create annotated git tag
|
|
git tag vX.Y.Z -m "Release vX.Y.Z: [Brief description]"
|
|
|
|
# Push commit and tags
|
|
git push && git push --tags
|
|
```
|
|
|
|
### 9. Create GitHub Release
|
|
```bash
|
|
# Create GitHub release from the tag
|
|
gh release create vX.Y.Z --title "vX.Y.Z" --notes "[Brief release notes]"
|
|
|
|
# Or generate notes automatically from commits
|
|
gh release create vX.Y.Z --title "vX.Y.Z" --generate-notes
|
|
```
|
|
|
|
**IMPORTANT**: Always create the GitHub release immediately after pushing the tag. This makes the release discoverable to users and triggers any automated workflows.
|
|
|
|
## Common Scenarios
|
|
|
|
**Scenario 1: Bug fix after testing**
|
|
```
|
|
User: "Fixed the memory leak in the search function"
|
|
You: Determine → PATCH
|
|
Calculate → 4.2.8 → 4.2.9
|
|
Update all four files (version numbers only)
|
|
Build and commit
|
|
Create git tag v4.2.9
|
|
Push commit and tags
|
|
Create GitHub release v4.2.9
|
|
```
|
|
|
|
**Scenario 2: New MCP tool added**
|
|
```
|
|
User: "Added web search MCP integration"
|
|
You: Determine → MINOR (new feature)
|
|
Calculate → 4.2.8 → 4.3.0
|
|
Update all four files (version numbers only)
|
|
Build and commit
|
|
Create git tag v4.3.0
|
|
Push commit and tags
|
|
Create GitHub release v4.3.0
|
|
```
|
|
|
|
**Scenario 3: Database schema redesign**
|
|
```
|
|
User: "Rewrote storage layer, old data needs migration"
|
|
You: Determine → MAJOR (breaking change)
|
|
Calculate → 4.2.8 → 5.0.0
|
|
Update all four files (version numbers only)
|
|
Build and commit
|
|
Create git tag v5.0.0
|
|
Push commit and tags
|
|
Create GitHub release v5.0.0
|
|
```
|
|
|
|
## Error Prevention
|
|
|
|
**ALWAYS verify:**
|
|
- [ ] All FOUR files have matching version numbers (package.json, marketplace.json, plugin.json, CLAUDE.md)
|
|
- [ ] Git tag created with format vX.Y.Z
|
|
- [ ] GitHub release created from the tag
|
|
- [ ] CLAUDE.md: ONLY updated line 9 (version number), did NOT touch version history
|
|
- [ ] Commit and tags pushed to remote
|
|
|
|
**NEVER:**
|
|
- Update only one, two, or three files - ALL FOUR must be updated
|
|
- Skip the verification step
|
|
- Forget to create git tag
|
|
- Forget to create GitHub release
|
|
- Forget to ask user if version type is unclear
|
|
- Add version history entries to CLAUDE.md (that's managed separately)
|
|
|
|
## Reference Commands
|
|
|
|
```bash
|
|
# View current version
|
|
cat package.json | grep version
|
|
|
|
# Verify consistency across all version files
|
|
grep '"version"' package.json .claude-plugin/marketplace.json plugin/.claude-plugin/plugin.json
|
|
|
|
# View git tags
|
|
git tag -l -n1
|
|
```
|