Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
82 changes: 82 additions & 0 deletions .github/workflows/release-notes.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
name: Release Notes

on:
release:
types:
- published

permissions:
contents: write

jobs:
release-notes:
name: release-notes
runs-on: ubuntu-latest
steps:
- name: Validate release inputs
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
RELEASE_TAG: ${{ github.event.release.tag_name }}
run: |
set -euo pipefail

: "${ANTHROPIC_API_KEY:?ANTHROPIC_API_KEY secret is required}"
: "${GITHUB_TOKEN:?GITHUB_TOKEN is required}"
: "${RELEASE_TAG:?release tag is required}"

case "$RELEASE_TAG" in
v*) ;;
*)
echo "release tag must start with 'v': $RELEASE_TAG" >&2
exit 1
;;
esac

- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
fetch-depth: 0
fetch-tags: true
persist-credentials: false

# install_args installs only communique (pinned in mise.toml), not the
# full dev toolchain. cache: false avoids zizmor's cache-poisoning finding
# on this publish workflow (caching saves little on a release-only job).
- name: Set up mise
uses: jdx/mise-action@1648a7812b9aeae629881980618f079932869151 # v4.0.1
with:
install_args: communique
cache: false

- name: Resolve previous release ref
env:
RELEASE_TAG: ${{ github.event.release.tag_name }}
run: |
set -euo pipefail

release_commit="$(git rev-parse --verify "${RELEASE_TAG}^{commit}")"
: "${release_commit:?release commit is required}"

if previous_ref="$(git describe --tags --abbrev=0 --match 'v[0-9]*.[0-9]*.[0-9]*' --exclude '*-*' "${release_commit}^" 2>/dev/null)"; then
echo "Previous release tag: $previous_ref"
else
previous_ref="$(git rev-list --max-parents=0 "$release_commit" | head -n 1)"
: "${previous_ref:?previous release ref is required}"
echo "No previous release tag found; using root commit: $previous_ref"
fi

echo "PREVIOUS_RELEASE_REF=$previous_ref" >> "$GITHUB_ENV"

- name: Generate GitHub release notes
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
RELEASE_TAG: ${{ github.event.release.tag_name }}
run: |
set -euo pipefail

: "${PREVIOUS_RELEASE_REF:?previous release ref is required}"

communique generate "$RELEASE_TAG" "$PREVIOUS_RELEASE_REF" \
--github-release --repo "${{ github.repository }}"
19 changes: 19 additions & 0 deletions communique.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
context = """
claudecode.nvim is a Neovim plugin written in pure Lua with zero dependencies. It implements the same WebSocket-based MCP protocol as Anthropic's official IDE extensions, letting the Claude CLI drive Neovim: opening files, reading selections and diagnostics, showing native diffs, and managing terminal sessions.

Releases matter to Neovim users who install the plugin via their package manager and to integrators relying on MCP tool behavior. Call out changes to the public setup() configuration (such as terminal or diff_opts), MCP tool behavior and compatibility with the VS Code extension, supported Neovim versions, file explorer and terminal integrations (snacks.nvim, native, external, nvim-tree, oil.nvim, neo-tree, mini.files), and any breaking changes to keybindings or commands.

Primary readers are Neovim users and plugin integrators, not the plugin's own maintainers, so frame notes around user-visible impact rather than internal refactors.
"""

system_extra = """
Write direct, practical release notes for Neovim users and integrators.
Lead with what changed and why it matters.
Group changes into clear sections (for example Features, Fixes, Breaking Changes) and keep them concise.
Avoid marketing language.
Provide concrete migration guidance when configuration options, commands, or MCP tool behavior changed.
Do not invent changes that are not supported by the commits, pull requests, or diffs.
"""

[defaults]
model = "claude-opus-4-8"
16 changes: 16 additions & 0 deletions mise.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions mise.toml
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ zizmor = "1.25.2"
websocat = "1.14.1"
jq = "1.8.1"
fzf = "0.73.1"
communique = "1.1.3"

[env]
# Lua test rocks (busted/luacheck/luacov) live in a project-local tree that
Expand Down
Loading