Skip to content
phly/keep-a-changelog 2.0.0

Added
-----

- Configuration is now a first-class citizen within the tooling, and is merged
  (in order of ascending priority) from each of package defaults,
  `$XDG_CONFIG_HOME/keep-a-changelog.ini` (usually `$HOME/.config/keep-a-changelog.ini`),
  `$PWD/.keep-a-changelog.ini` (the directory in which you run the command), and
  command options. Configuration has the following format:

  ```dosini
  [defaults]
  changelog_file = CHANGELOG.md
  provider = github
  remote = origin
  package = some/package ; local ($PWD) config only

  [providers]
  github[class] = Phly\KeepAChangelog\Provider\GitHub
  github[token] = authorization-token ; global config only
  github[url] = https://some-custom-install.github.com
  gitlab[class] = Phly\KeepAChangelog\Provider\GitLab
  gitlab[token] = authorization-token ; global config only
  gitlab[url] = https://some-custom-install.gitlab.com
  ```

  Full details can be found in the [README.md](https://github.com/phly/keep-a-changelog/)
  file.

- Adds the command `config:edit`, which allows editing a global or local
  configuration file within your specified editor (either `$EDITOR` or the value
  of the `--editor` option).

- Adds the command `config:remove`, which allows removing either a global or local
  configuration file.

- Adds the command `config:show`, which allows showing the contents of either a
  global or local configuration file, or the merged values of the two.

- The `version:edit` command now allows you to specify the specific changelog
  version you wish to edit. If you do not specify a version, it assumes the most
  recent listed.

- The various `entry:*` commands now allow you to specify the specific changelog
  version (via `--version`) to which to add the new entry, instead of only
  allowing adding to the most recent.

Changed
-------

- The tooling now requires PHP 7.2, as it consumes and implements
  [PSR-14 (Event Dispatcher](https://www.php-fig.org/psr/psr-14/) internally.

- Configuration has changed, including where it is stored. If you were using
  configuration previously, generate new configuration using `keep-a-changelog
  config:create --global`, and then copy relevant details from your
  `$HOME/.keep-a-changelog/config.ini` to the new configuration file (you can use
  `keep-a-changelog config:edit --global` to edit the new file).

- When calling `version:release` or the various `entry:*` commands, package
  names can now be autodiscovered via one of:

  - The local configuration file.
  - A [Composer](https://getcomposer.org) `composer.json` file (via the `name` key).
  - An [NPM](https://docs.npmjs.com/files/package.json) `package.json` file (via the `name` key).

  This means you likely no longer need to specify the package name when pushing
  a release via the tooling.

- When calling `version:tag`, git remote names can now be specified via one of:

  - The global configuration file.
  - The local configuration file.
  - Command-line option.
  - Autodiscovery via `.git/config`, using the configured provider and package name.

- The `--file|-f` global option for specifying a changelog file is now
  `--changelog|-c`.

- The `version:release` command now makes the `<package>` argument a `--package` option.

- The `version:release` command now allows releasing any version; this can be useful
  when creating historical releases.

- The internals were completely rewritten. If you were extending or consuming
  any classes previously, they are likely either removed, renamed, or rewritten
  at this time. In particular, all commands are now under sub-namespaces, and
  dispatch events instead of performing logic internally. This approach should
  make understanding the workflow of individual commands simpler.

Deprecated
----------

- Nothing.

Removed
-------

- Removes the `config` command; use `config:create` instead.

- Removes the `edit` command; use `version:edit` instead.

- Removes the `new` command; use `changelog:new` instead.

- Removes the `ready` command; use `version:ready` instead.

- Removes the `release` command; use `version:release` instead.

- Removes the `tag` command; use `version:tag` instead.

Fixed
-----

- Nothing.