clmerge

Travis status Crates.io License

Opinionated, simple changelog merger

Never rebase your CHANGELOG.md again.

How it works

When submitting Pull Requests, only one file needs to be created in order to create a changelog entry.

The new changelog gets created using the clmerge command and will be stored as CHANGELOG.md.

File structure

(You can also look at the changelog directory to see how it works.)

changelog directory

clmerge expects a changelog directory in the current directory. Inside it, the following files shall be placed:

Every other file will be ignored.

Version directories

Every directory inside changelog is expected to be a valid semver version (e.g. 0.5.1 or 1.0.0-alpha. Such a folder is called a "version directory".

Category directories

Inside every version directory, an arbitrary number of category directories can be placed (e.g. added, removed, changed, fixed).

In the final CHANGELOG.md, all categories will start with a capital letter.

Entry files

Inside the category directories, an arbitrary number of entries is expected.

The content of the files will be trimmed and concatenated, with \n after every entry.

Example

File tree:

├── changelog │   ├── 0.1.0 │   │   └── added │   │   └── general.md │   ├── 0.2.0 │   │   ├── added │   │   │   ├── feature-bar.md │   │   │   └── feature-baz.md │   │   └── changed │   │   └── foo.md │   ├── header.md │   └── old.md └── CHANGELOG.md

header.md:

```markdown

Changelog

```

old.md (your old CHANGELOG):

```markdown

0.0.0

This is the old Changelog

config.ron:

text ( // This will be used to insert links for `[#123]` entries // `[#123]` becomes `[#123](https://github.com/user/repo/issues/123)` pull_request_prefix: "https://github.com/user/repo/issues/", )

feature-baz.md:

markdown * Added feature baz ([#123])

Output (CHANGELOG.md):

```markdown

Changelog

0.1.0

Added

0.2.0

Changed

Added

0.0.0

This is the old Changelog

Installation

sh cargo install clmerge

License

This project is dual-licensed under MIT / Apache-2.0.