Commands

Changelogd consists of multiple independent subcommands to make the changelog management as easy as possible.

init

This command initialized changelogd configuration including default templates. By default, it will create a new changelog.d directory in the current work directory. You can select different directory with --path argument. If you want to use RST format, use --rst argument to the changelogd init.

$ changelogd init
Created main configuration file: /workdir/changelog.d/config.yaml
Copied templates to /workdir/changelog.d/templates

entry

Creates a new changelog entry. By default, it asks for the entry type, issue id, and the changelog message. This can be changed by modifying the message_types in config.yaml. Also, the entry subcommand will try to extract git username and e-mail and the system username. The entry file name will contain a md5 checksum of the file content, to avoid conflicts. The filename can be changed, as long as it follows the following pattern: <message-type>.<any-string>.entry.yaml.

$ changelogd entry
         [1]: Features [feature]
         [2]: Bug fixes [bug]
         [3]: Documentation changes [doc]
         [4]: Deprecations [deprecation]
         [5]: Other changes [other]
> Select message type [1]: 1
> Issue ID (separate multiple values with comma): 100
> Changelog message (required): A new feature implementation.
Created changelog entry at /workdir/changelog.d/feature.f155ee47.entry.yaml

As a result, a following YAML file will be created:

git_email: user@example.com
git_user: Some User
issue_id:
- '100'
message: A new feature implementation.
os_user: user
type: feature

draft

Load all input files and resolve templates to generate a changelog. The changelog will be printed to the stdout stream.

$ changelogd draft
> Release description (hit ENTER to omit): Just draft
# Changelog


## draft (2020-01-13)

Just draft

### Features
* [#100](http://repo/issues/100): A new feature implementation. ([@user](user@example.com))

release

Generate a new release file, remove all entries and generate a changelog file. You need to specify the new release name.

Warning

This command will fail if there are no entry files.

$ changelogd release 0.1.0
> Release description (hit ENTER to omit): Demo release
Saved new release data into /workdir/changelog.d/releases/0.0.1.0.yaml
Generated changelog file to /workdir/changelog.md

The generated YAML file will have all entries combined. The release file name will always start with a number, which will indicate the order of releases within the generated changelog file. The default content of the 0.0.1.0.yaml file:

entries:
  feature:
  - git_email: user@example.com
    git_user: Some User
    issue_id:
    - '100'
    message: A new feature implementation.
    os_user: user
previous_release: null
release_date: '2020-01-13'
release_description: Demo release
release_version: 0.1.0

partial

Generate changelog without clearing entries, release name is taken from config file. This will overwrite the changelog file. Use --check argument to return exit code = 1 if the output file is different than the previously generated one (can be useful in CI/CD).

$ changelogd partial
Generated changelog file to /workdir/changelog.md