Licence
MIT
Version
0.1.2
Deps
3
Size
100 kB
Vulns
0
Weekly
2.3K
@scalar/release-notes
Generate curated release notes from Changesets-style CHANGELOG.md files and write a stable RELEASE_NOTES.json file, with optional derived Markdown output.
Install
pnpm add -D @scalar/release-notesCLI
scalar-release-notes --all --provider anthropic --model claude-sonnet-4-5For a single package without a config file:
scalar-release-notes \
--package @example/client \
--changelog packages/client/CHANGELOG.md \
--output packages/client/RELEASE_NOTES.json \
--provider openai \
--model gpt-4.1-miniConfiguration
Create release-notes.config.mjs:
import { createAnthropicProvider, defineReleaseNotesConfig } from '@scalar/release-notes'
export default defineReleaseNotesConfig({
provider: createAnthropicProvider({
apiKey: process.env.ANTHROPIC_API_KEY,
model: 'claude-sonnet-4-5',
}),
github: {
repo: 'owner/repo',
token: process.env.GITHUB_TOKEN,
baseBranch: 'main',
},
products: [
{
slug: 'client',
packageName: '@example/client',
displayName: 'Example Client',
description: 'an API client for Example',
changelogPath: 'packages/client/CHANGELOG.md',
outputPath: 'packages/client/RELEASE_NOTES.json',
markdownPath: 'packages/client/RELEASE_NOTES.md',
},
],
})JavaScript, JSON, and TypeScript config files are discovered by name. TypeScript config loading depends on your runtime being able to import .ts files, for example through tsx.
The published JSON Schema for RELEASE_NOTES.json is available at @scalar/release-notes/schema.
Providers
Use Anthropic:
import { createAnthropicProvider } from '@scalar/release-notes'
createAnthropicProvider({
apiKey: process.env.ANTHROPIC_API_KEY,
model: 'claude-sonnet-4-5',
})Use OpenAI:
import { createOpenAIProvider } from '@scalar/release-notes'
createOpenAIProvider({
apiKey: process.env.OPENAI_API_KEY,
model: 'gpt-4.1-mini',
})Use a custom provider:
export default defineReleaseNotesConfig({
provider: {
name: 'internal-agent',
async generateJson({ systemPrompt, userPrompt }) {
return callInternalAgent({ systemPrompt, userPrompt })
},
},
})The provider can return either a JSON object or a JSON string. The package validates the result before writing RELEASE_NOTES.json.
GitHub Actions
Anthropic:
- name: Generate release notes
run: pnpm scalar-release-notes --all --provider anthropic --model claude-sonnet-4-5
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}OpenAI:
- name: Generate release notes
run: pnpm scalar-release-notes --all --provider openai --model gpt-4.1-mini
env:
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}Markdown Sync
Regenerate Markdown from JSON without using AI:
scalar-release-notes sync-release-notes-markdown \
--json packages/client/RELEASE_NOTES.json \
--markdown packages/client/RELEASE_NOTES.md