
Security News
Socket Integrates With Bun 1.3’s Security Scanner API
Socket now integrates with Bun 1.3’s Security Scanner API to block risky packages at install time and enforce your organization’s policies in local dev and CI.
@stellarwp/changelogger
Advanced tools
A TypeScript-based changelog management tool that works both as a GitHub Action and CLI tool. This is inspired by the Jetpack Changelogger but implemented in TypeScript and designed to work seamlessly with GitHub Actions.
npm install @stellarwp/changelogger
# Add a new changelog entry
npm run changelog add
# Validate all change files
npm run changelog validate
# Write changes to CHANGELOG.md
npm run changelog write
add
CommandAdds a new changelog entry to the project. Can be used in interactive or non-interactive mode.
# Interactive mode - prompts for all required information
npm run changelog add
# Non-interactive mode - provide all options directly
npm run changelog add -- --significance minor --type feature --entry "Added new feature X"
# Non-interactive mode with auto-generated filename
npm run changelog add -- --significance minor --type feature --entry "Added new feature X" --auto-filename
Options:
--significance
: The significance of the change (patch, minor, major)--type
: The type of change (e.g., feature, fix, enhancement)--entry
: The changelog entry text--filename
: The desired filename for the changelog entry (optional)--auto-filename
: Automatically generate the filename based on branch name or timestamp (optional)The command will:
When using --auto-filename
:
validate
CommandValidates all changelog entries in the changes directory.
npm run changelog validate
This command performs the following checks:
write
CommandWrites changelog entries to the configured files.
# Automatic versioning
npm run changelog write
# Manual versioning
npm run changelog write -- --overwrite-version 1.2.3
# Dry run - show what would be written without making changes
npm run changelog write -- --dry-run
# Specify a custom date (supports PHP strtotime format)
npm run changelog write -- --date "2024-03-20"
npm run changelog write -- --date "yesterday"
npm run changelog write -- --date "last monday"
Options:
--overwrite-version
: Optional version number to use instead of auto-determining--dry-run
: If true, only show what would be written without making changes--date
: Custom date to use for the changelog entry (supports PHP strtotime format)The command will:
When using --dry-run
:
When using --overwrite-version
:
When using --date
:
--date "2024-03-20"
- Specific date--date "yesterday"
- Relative date--date "last monday"
- Relative date--date "next friday"
- Relative dateThe command supports multiple output files with different writing strategies:
Each file is processed according to its configured strategy and the changes are written in the appropriate format.
import {
addCommand,
validateCommand,
writeCommand,
writingStrategies,
versioningStrategies,
loadConfig,
loadWritingStrategy,
loadVersioningStrategy,
WritingStrategy,
VersioningStrategy,
} from "@stellarwp/changelogger";
// Use built-in writing strategies
const keepachangelog = writingStrategies.keepachangelog;
const stellarwpChangelog = writingStrategies.stellarwpChangelog;
const stellarwpReadme = writingStrategies.stellarwpReadme;
// Use built-in versioning strategies
const semver = versioningStrategies.semverStrategy;
const stellarwp = versioningStrategies.stellarStrategy;
// Load custom strategies
const customWritingStrategy = await loadWritingStrategy(
"./path/to/custom-writing.ts",
);
const customVersioningStrategy = await loadVersioningStrategy(
"./path/to/custom-versioning.ts",
);
name: Update Changelog
on:
pull_request:
types: [opened, synchronize]
jobs:
validate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: stellarwp/changelogger@v1
with:
command: validate
github-token: ${{ secrets.GITHUB_TOKEN }}
write:
runs-on: ubuntu-latest
if: github.event_name == 'pull_request' && github.event.action == 'closed' && github.event.pull_request.merged == true
steps:
- uses: actions/checkout@v4
- uses: stellarwp/changelogger@v1
with:
command: write
github-token: ${{ secrets.GITHUB_TOKEN }}
Configure the changelogger through your package.json:
{
"changelogger": {
"changelogFile": "CHANGELOG.md",
"changesDir": "changelog",
"linkTemplate": "https://github.com/owner/repo/compare/${old}...${new}",
"ordering": ["type", "content"],
"types": {
"added": "Added",
"changed": "Changed",
"deprecated": "Deprecated",
"removed": "Removed",
"fixed": "Fixed",
"security": "Security"
},
"versioning": "semver",
"files": [
{
"path": "CHANGELOG.md",
"strategy": "keepachangelog"
},
{
"path": "readme.txt",
"strategy": "stellarwp-readme"
}
]
}
}
The changelogger supports multiple versioning strategies:
semver (default): Standard semantic versioning (major.minor.patch)
{
"changelogger": {
"versioning": "semver"
}
}
stellarwp: StellarWP versioning with hotfix support (major.minor.patch[.hotfix])
1.2.3
1.2.3.4
major
: Increments major, resets others (1.2.3.4 → 2.0.0)minor
: Increments minor, resets patch/hotfix (1.2.3.4 → 1.3.0)patch
:
{
"changelogger": {
"versioning": "stellarwp"
}
}
Custom Versioning: You can provide a path to a JavaScript file that implements the versioning strategy:
{
"changelogger": {
"versioning": "./path/to/custom-versioning.js"
}
}
The custom versioning file must export these functions:
export function getNextVersion(
currentVersion: string,
significance: "major" | "minor" | "patch",
): string;
export function isValidVersion(version: string): boolean;
export function compareVersions(v1: string, v2: string): number;
The changelogger supports multiple writing strategies that can be configured per file in your package.json:
{
"changelogger": {
"files": [
{
"path": "CHANGELOG.md",
"strategy": "keepachangelog"
},
{
"path": "readme.txt",
"strategy": "stellarwp-readme"
}
]
}
}
Available built-in strategies:
keepachangelog: Follows the Keep a Changelog format
Example output:
## [1.2.3] - 2024-03-22
### Added
- New feature description
### Fixed
- Bug fix description
[1.2.3]: https://github.com/owner/repo/compare/1.2.2...1.2.3
stellarwp-changelog: A WordPress-style changelog format
Example output:
### [1.2.3] 2024-03-22
- Feature - Added new feature
- Fix - Fixed a bug
stellarwp-readme: Updates readme.txt in WordPress plugin format
Example output:
== Changelog ==
= [1.2.3] 2024-03-22 =
* Feature - Added new feature
* Fix - Fixed a bug
Custom Writing: You can provide a path to a JavaScript file that implements the writing strategy:
{
"changelogger": {
"files": [
{
"path": "CHANGELOG.md",
"strategy": "./path/to/custom-writing.js"
}
]
}
}
The custom writing file must implement the WritingStrategy interface:
interface WritingStrategy {
/**
* Format the changes into a changelog entry
*/
formatChanges(
version: string,
changes: Array<{ type: string; entry: string }>,
previousVersion?: string,
): string;
/**
* Format the header for a new version
*/
formatVersionHeader(
version: string,
date: string,
previousVersion?: string,
): string;
/**
* Optional: Format version comparison links
*/
formatVersionLink?(
version: string,
previousVersion: string,
template?: string,
): string;
}
Example custom writing strategy:
// custom-writing.ts
import * as fs from "fs/promises";
import * as path from "path";
import { WritingStrategy } from "@stellarwp/changelogger";
const customStrategy: WritingStrategy = {
formatChanges(version, changes) {
return changes
.map((change) => `- [${change.type.toUpperCase()}] ${change.entry}`)
.join("\n");
},
formatVersionHeader(version, date) {
return `# Version ${version} (${date})`;
},
formatVersionLink(version, previousVersion, template) {
if (!template) return "";
return `Compare: ${template
.replace("${old}", previousVersion)
.replace("${new}", version)}`;
},
};
export default customStrategy;
Example output:
# Version 1.2.3 (2024-03-22)
- [ADDED] New feature description
- [FIXED] Bug fix description
Compare: https://github.com/owner/repo/compare/1.2.2...1.2.3
When adding new changelog entries:
Default Filename: By default, uses the current git branch name (cleaned up) or a timestamp if no branch name is available.
File Naming Rules:
Feature/Add-NEW_thing!!!
→ feature-add-new-thing.yaml
Duplicate Handling: If a file with the same name exists:
feature.yaml
exists, creates feature-1234567890.yaml
Interactive Prompts:
Directory Structure:
changelog/
)Change files are YAML files containing:
significance: patch|minor|major
type: added|changed|deprecated|removed|fixed|security
entry: Description of the change
MIT
FAQs
A TypeScript-based changelog management tool
The npm package @stellarwp/changelogger receives a total of 275 weekly downloads. As such, @stellarwp/changelogger popularity was classified as not popular.
We found that @stellarwp/changelogger demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 3 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Socket now integrates with Bun 1.3’s Security Scanner API to block risky packages at install time and enforce your organization’s policies in local dev and CI.
Security News
Python 3.14 adds template strings, deferred annotations, and subinterpreters, plus free-threaded mode, an experimental JIT, and Sigstore verification.
Security News
Former RubyGems maintainers have launched The Gem Cooperative, a new community-run project aimed at rebuilding open governance in the Ruby ecosystem.