Skip to content

ci: automate versioning and releases with changesets#60

Open
WilliamBergamin wants to merge 7 commits into
mainfrom
release-process
Open

ci: automate versioning and releases with changesets#60
WilliamBergamin wants to merge 7 commits into
mainfrom
release-process

Conversation

@WilliamBergamin

@WilliamBergamin WilliamBergamin commented Jun 23, 2026

Copy link
Copy Markdown
Contributor

What

Automates versioning and releases with Changesets, so maintainers no longer hand-edit version fields or cut releases manually.

How it works

  • Contributors add a changeset for user-facing changes with a markdown file in .changeset/ describing the change and its semver bump.
  • package.json is the version source of truth.
    • Changesets bumps it
    • scripts/sync_versions.py then mirrors that version out to .claude-plugin/plugin.json and .cursor-plugin/plugin.json.
  • Merging changesets to main triggers .github/workflows/release.yml, which uses changesets/action to open/update a draft "chore: release" PR, bumps the version, and updates the changelog.
  • Merging that release PR publishes the release via npx @changesets/cli publish.

Config & conventions

  • .changeset/config.json: private package (privatePackages: { version, tag }), baseBranch: main, frontmatter key is always "slack".

@WilliamBergamin WilliamBergamin requested a review from mwbrooks June 23, 2026 20:25
@WilliamBergamin WilliamBergamin self-assigned this Jun 23, 2026
@WilliamBergamin WilliamBergamin requested a review from zimeg June 23, 2026 20:25
@WilliamBergamin WilliamBergamin added documentation Improvements or additions to documentation release changes are related to releases labels Jun 23, 2026
@WilliamBergamin WilliamBergamin marked this pull request as ready for review June 23, 2026 20:27
Comment thread Makefile
Comment on lines +76 to +78
changeset: ## Create a changeset describing a user-facing change (for the next release)
npx --yes @changesets/cli add

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should we just document this? 🤔

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔭 thought: Recent commits for contributors guide and this "help" command seem solid to me!

$ make help
 changeset            Create a changeset describing a user-facing change (for the next release)

@zimeg zimeg changed the title feat(release): automate versioning and releases with changesets ci: automate versioning and releases with changesets Jun 30, 2026

@zimeg zimeg left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@WilliamBergamin Amazing changes to see! 🚀 ✨

I'm leaving a few comments and thoughts but might call out locking dependencies as part of this project? I understand it adds more node to a python project but the added confidence in releases is what motivates me.

Please feel free to merge whenever though! All changes are great! I was quibbling in review 👻

[gh-cli]: https://cli.github.com
[conv-commits]: https://www.conventionalcommits.org
[semver]: https://semver.org
[changesets]: https://github.com/changesets/changesets

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
[changesets]: https://github.com/changesets/changesets

🪓 quibble(non-blocking): Is this link inlined instead?


1. **Run the tests locally**: Before merging the release PR please run all the tests especially the eval ones. If they no longer pass we may need fix it before releasing the changes.

2. **Check GitHub**: Please check if issues or pull requests are still open either decide to postpone the release or save those changes for a future update.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔮 question: Are milestones something we want to introduce here, either now or later?


3. **Review the release PR**: Verify that the version bump matches expectations, `CHANGELOG` entries are clear, and CI checks pass.

4. **Merge and approve**: Merge the release PR. It may take up to 24 hours before you see you release in [plugins/slack](https://claude.com/plugins/slack).

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
4. **Merge and approve**: Merge the release PR. It may take up to 24 hours before you see you release in [plugins/slack](https://claude.com/plugins/slack).
4. **Merge and approve**: Merge the release PR. It may take up to 24 hours before you see you release in the [Claude Plugins](https://claude.com/plugins/slack) directory.

🦠 suggestion: This wording might be odd but I based it from the backing project.

Claude Code Plugins Directory

🔗 https://github.com/anthropics/claude-plugins-official

Add the channel-digest command
```

The frontmatter key is always `"slack"`, the value is the [semver](https://semver.org/) bump level. The body becomes the changelog entry, so write it for a reader of the release notes.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
The frontmatter key is always `"slack"`, the value is the [semver](https://semver.org/) bump level. The body becomes the changelog entry, so write it for a reader of the release notes.
The frontmatter key is always `"slack"`, the value is the [semver](https://semver.org/) bump level - `patch`, `minor`, or `major`. The body becomes the changelog entry, so write it for a reader of the release notes.

📚 suggestion(non-blocking): For quick reads wanting example these versions might be nice?

steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with:
fetch-depth: 0

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
fetch-depth: 0
fetch-depth: 0
persist-credentials: false

🔏 suggestion: To avoid oddities with actions later-

Comment thread Makefile
Comment on lines +76 to +78
changeset: ## Create a changeset describing a user-facing change (for the next release)
npx --yes @changesets/cli add

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔭 thought: Recent commits for contributors guide and this "help" command seem solid to me!

$ make help
 changeset            Create a changeset describing a user-facing change (for the next release)

Comment thread package.json

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎁 suggestion: I think we should include the @changeset/cli package here alongside a lockfile to avoid surprise in updates. IIRC "v3" is in development at the moment!

🍰 ramble: I'm not wanting to add separate documentation for this either! I'm curious if the scripts/changeset_version.sh file and make file might just... re-install the packages? This might be upsetting.

Comment thread scripts/sync_versions.py
Comment on lines +22 to +24
"""Set the ``version`` field of a JSON plugin manifest."""
manifest = json.loads(plugin_path.read_text())
manifest["version"] = version

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👁️‍🗨️ thought: I'm curious if separate functions for different targets might improve maintenance but not a blocker whatsoever-

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🌟 praise: Great to see these scripts extended so well!

Comment thread .changeset/config.json
"baseBranch": "main",
"updateInternalDependencies": "patch",
"ignore": [],
"privatePackages": { "version": true, "tag": true }

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧮 quibble: A small preference to linebreaks for each argument to avoid missed details when scrolling. But not blocker of course.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation release changes are related to releases

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants