Release a new DevoxxGenie plugin version
This skill cuts a complete plugin release: version bump → curated changelog → plugin change-notes → build → commit → tag → GitHub release. The goal is a release whose CHANGELOG.md, plugin.xml change-notes, and GitHub release body all tell the same story, written from the actual work done — not a raw dump of PR titles.
The release commit lands on the current default branch (master), matching how prior
releases were cut here. Do not create a feature branch for a release.
Step 1 — Ask for the target version
Never assume the next version. Show the current version and ask the user what to release.
bashgrep -E '^version\s*=' build.gradle.kts | head -n1 # e.g. version = "1.7.4"
Offer patch / minor / major as a guide (e.g. current 1.7.4 → patch 1.7.5, minor
1.8.0, major 2.0.0) but let the user state the exact number. Use it verbatim as
X.Y.Z (tags are vX.Y.Z).
Step 2 — Gather the history since the last release
Find the previous tag, then read what actually changed. You need the substance of each change, so look at PR titles and bodies/commits, not just subject lines.
bashgit describe --tags --abbrev=0 # previous tag, e.g. v1.7.4 git log <prev-tag>..HEAD --oneline # commits to summarise gh pr list --state merged --base master --limit 30 \ --json number,title,author,mergedAt,body # PR detail + authors
Group changes into the sections the CHANGELOG already uses, by conventional-commit prefix:
| Prefix | CHANGELOG section |
|---|---|
feat / add | Added |
fix | Fixed |
refactor / build / perf / style / chore (non-dep) | Changed |
docs | Documentation |
test | Tests |
chore(deps) / bump / upgrade | Dependencies |
Collect the unique PR authors for a Contributors section (@login).
Write descriptive entries: explain what changed and why it matters for a user or
maintainer, drawing on the PR body/diff — not just the raw commit subject. Keep the
feat(scope): / fix(scope): lead so entries scan consistently, and append issue/PR/task
references like (#1097) or (task-229, #1093). Omit empty sections.
Step 3 — Bump the version
build.gradle.kts: update the top-levelversion = "X.Y.Z"line (around line 18).src/main/resources/application.propertiesis auto-regenerated by the build from the Gradle project version — do not hand-edit it; Step 6's build updates it.plugin.xmlhas no<version>tag (it's injected by the Gradle IntelliJ plugin), so only its change-notes need editing — see Step 5.
Step 4 — Write the CHANGELOG.md entry
Insert a new section at the top of CHANGELOG.md, directly under the # Changelog
header and above the previous version. Match the existing house style exactly:
markdown## vX.Y.Z - YYYY-MM-DD ### Added - feat(tips): rotating tip line under the prompt placeholder, fetched from a 24h-cached tips.json with a built-in fallback list (#1099) ### Fixed - fix(scope): concise but complete description of the fix and its user-visible effect (#NNNN) ### Changed - refactor(scope): what was restructured and why it's cleaner (#NNNN) ### Dependencies - chore: upgrade <lib> A.B.C → X.Y.Z ### Contributors - @stephanj
Use today's date (the current date is available in your context). Keep entries information- dense; a single fix can warrant a long sentence if the behaviour change is subtle (see the v1.7.4 credentials entry for the level of detail that's welcome).
Step 5 — Update plugin.xml change-notes
The Marketplace change-notes are a condensed view — the user-relevant highlights, one
concise <LI> each. Insert a new block immediately after <change-notes><

