Skip to content

Release on v*.*.* tag, notes from CHANGELOG - #36

Merged
rahlk merged 1 commit into
mainfrom
feat/release-workflow
Aug 4, 2026
Merged

Release on v*.*.* tag, notes from CHANGELOG#36
rahlk merged 1 commit into
mainfrom
feat/release-workflow

Conversation

@rahlk

@rahlk rahlk commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

Releases the plugin on a v*.*.* tag push, with notes taken from CHANGELOG.md.

Motivation and Context

cldk-devtools has no release automation and no tags past v0.2.0, while main already carries 0.4.0 in plugin.json. The marketplace resolves the plugin straight from this repo, so a release is the only signal users get that the conventions changed — 0.3.0 shipped a behavioural breaking change with no tag, no release, and (until recently) no changelog.

Modelled on python-sdk/.github/workflows/release.yml, stripped to what a markdown plugin needs.

Kept: tag trigger, CHANGELOG notes extraction, refusal to publish a blank body.

Dropped: GraalVM, jq install (preinstalled on runners), uv, build, dist/* upload, PyPI publish, repo Discussion, org announcement + ORG_DISCUSSIONS_TOKEN, docs dispatch, and the sed/tac blank-edge trim. Nothing is built here, so there is no artifact to attach.

Added one guard the template lacks: plugin.json's version must equal the tag. The manifest version is what installs, so a tag disagreeing with it ships a plugin lying about its own version and silently mismatches the installed_plugins.json pin. Same class as python-sdk's jarless-wheel check.

Emoji live in CHANGELOG.md headings (✨ Added, ⚠️ Changed, 🐛 Fixed, 🗑️ Removed, 🔒 Security) rather than in a transform step — the workflow copies the section verbatim, so no generator code is needed.

How Has This Been Tested?

Both guards dry-run locally against the real files:

  • notes extraction for 0.4.0 → returns the section, emoji intact
  • extraction for a nonexistent 9.9.9 → empty, which is the fail path
  • jq -r .version .claude-plugin/plugin.json0.4.0, matches a v0.4.0 tag
  • YAML parses

The workflow itself has not run — that requires pushing a tag, which is the next step rather than part of this PR. tac was removed partly because it is absent on macOS and blocked local verification.

Breaking Changes

No. Additive workflow plus CHANGELOG formatting. Also dates the 0.4.0 heading, which read unreleased and would have shipped that word in the release body.

Types of changes

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to change)
  • Documentation update

Checklist

  • I have read the Codellm-Devkit Documentation
  • My code follows the repository's style guidelines
  • New and existing tests pass locally — check-readme-dispatcher-sync.sh green
  • I have added appropriate error handling — both guards exit 1 with ::error::
  • I have added or updated documentation as needed

Additional context

This commit was originally pushed to feat/planning-mode after #35 had already merged, so it never landed. Recovered onto a fresh branch off main; the diff is 2 files.

Once merged, tagging v0.4.0 cuts the first real release and exercises both guards.

No tracking issue — same gap noted in #35, and filing one retroactively is the pattern the plugin's own red flags call out.

Modelled on python-sdk's release.yml, stripped to what a markdown plugin needs:
tag trigger, checkout, notes extraction, publish. Dropped GraalVM, jq install
(preinstalled on runners), uv, build, dist upload, PyPI publish, repo and org
Discussions, docs dispatch. Nothing is built here, so there is no artifact to
attach.

Adds one guard the template does not have: plugin.json's version must equal the
tag. The marketplace resolves this plugin straight from the repo, so the manifest
version IS what users install -- a tag disagreeing with it ships a plugin lying
about its own version and silently mismatches the installed_plugins.json pin.
Same class of failure as python-sdk's jarless-wheel check.

Blank release bodies still refuse to publish, inherited from the template.

Also drops the sed/tac blank-edge trim (cosmetic, and tac is not portable) and
dates the 0.4.0 CHANGELOG heading, which said "unreleased" and would have shipped
that word in the release notes.

Both guards dry-run against the real files: notes extract for 0.4.0, empty for a
missing version, manifest matches.
@rahlk
rahlk merged commit 943bfbd into main Aug 4, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant