Generate Beautiful Changelogs using Conventional Commits
Generate a changelog in Markdown format and display in the console:
npx changelogen@latest
Generate a changelog, bump the version in package.json
and update CHANGELOG.md
(without commit):
npx changelogen@latest --bump
Bump the version, update CHANGELOG.md
and make a git commit and tag:
npx changelogen@latest --release
npx changelogen@latest [...args] [--dir <dir>]
Arguments:
--from
: Start commit reference. When not provided, latest git tag will be used as default.--to
: End commit reference. When not provided, latest commit in HEAD will be used as default.--dir
: Path to git repository. When not provided, current working directory will be used as as default.--clean
: Determine if the working directory is clean and if it is not clean, exit.--output
: Changelog file name to create or update. Defaults toCHANGELOG.md
and resolved relative to dir. Use--no-output
to write to console only.--noAuthors
: Skip contributors section in changelog.--bump
: Determine semver change and update version inpackage.json
.--release
. Bumps version inpackage.json
and creates commit and git tags using localgit
. You can disable commit using--no-commit
and tag using--no-tag
. You can enable the automatic push of the new tag and release commit to your git repository by adding--push
.--publish
. Publishes package as a new version onnpm
. You will need to set authorisation tokens separately via.npmrc
or environment variables.--publishTag
Use custom npm tag for publishing (Default islatest
)--nameSuffix
: Adds suffix to package name (Example:--nameSuffix canary
renamesfoo
tofoo-canary
)--versionSuffix
: Adds suffix to package version. When set without value or totrue
, uses date + commit hash as commit--canary
. Shortcut to--bump --versionSuffix
(--nameSuffix
will be also added if arg has a string value).-r
: Release as specific version.--major
: Bump as a semver-major version--minor
: Bump as a semver-minor version--patch
: Bump as a semver-patch version--premajor
: Bump as a semver-premajor version, can set id with string.--preminor
: Bump as a semver-preminor version, can set id with string.--prepatch
: Bump as a semver-prepatch version, can set id with string.--prerelease
: Bump as a semver-prerelease version, can set id with string.--hideAuthorEmail
: Do not include author email in changelog if github username cannot be found.
Note
Version numbers starting with 0.
or 0.0.
follow different rules.
In these cases, the second or third digit is treated as the major version. They use the formats 0.major.minor
and 0.0.major
instead of the standard major.minor.patch
.
To ensure consistent semantic versioning, start version numbering at 1.0.0
.
Changelogen has built-in functionality to sync with Github releases.
In order to manually sync a release, you can use changelogen gh release
. It will parse current CHANGELOG.md
from current repository (local, then remote) and create or update releases.
Usage:
npx changelogen@latest gh release [all|versions...] [--dir] [--token]
To enable this integration, make sure there is a valid repository
field in package.json
or repo
is set in .changelogenrc
.
By default in unauthenticated mode, changelogen will open a browser link to make manual release. By providing github token, it can be automated.
- Using environment variables or
.env
, useCHANGELOGEN_TOKENS_GITHUB
orGITHUB_TOKEN
orGH_TOKEN
- Using CLI args, use
--token <token>
- Using global configuration, put
tokens.github=<token>
inside~/.changlogenrc
- Using GitHub CLI token when authenticated with
gh auth login
Configuration is loaded by unjs/c12 from cwd. You can use either changelog.config.json
, changelog.config.{ts,js,mjs,cjs}
, .changelogrc
or use the changelog
field in package.json
.
See ./src/config.ts for available options and defaults.
- Clone this repository
- Enable Corepack using
corepack enable
(usenpm i -g corepack
for Node.js < 16.10) - Install dependencies using
pnpm install
- Run interactive tests using
pnpm dev
Made with π
Published under MIT License.