symplify / changelog-linker
Generates beautiful CHANGELOG.md with links to PRs, versions and users grouped in Added/Changed/Fixed/Removed categories.
Fund package maintenance!
tomasvotruba
www.paypal.me/rectorphp
Requires
- php: >=7.3
- guzzlehttp/guzzle: ^7.2
- nette/utils: ^3.2
- symfony/console: ^4.4|^5.2
- symfony/http-kernel: ^4.4|^5.2
- symfony/process: ^4.4|^5.2
- symplify/package-builder: ^9.2.6
- symplify/set-config-resolver: ^9.2.6
- symplify/smart-file-system: ^9.2.6
- symplify/symplify-kernel: ^9.2.6
Requires (Dev)
- phpunit/phpunit: ^9.5
- dev-main
- v9.2.6
- v9.2.5
- v9.2.4
- v9.2.3
- v9.2.2
- 9.2.1
- 9.2.0
- 9.1.9
- 9.1.8
- 9.1.7
- 9.1.6
- 9.1.5
- 9.1.4
- 9.1.3
- 9.1.1
- 9.1.0
- 9.0.50
- 9.0.49
- 9.0.48
- 9.0.47
- 9.0.46
- 9.0.45
- 9.0.44
- 9.0.43
- 9.0.42
- 9.0.41
- 9.0.40
- 9.0.39
- 9.0.38
- 9.0.37
- 9.0.36
- 9.0.35
- 9.0.34
- 9.0.33
- 9.0.32
- 9.0.31
- 9.0.30
- 9.0.29
- 9.0.28
- 9.0.27
- 9.0.26
- 9.0.25
- 9.0.24
- 9.0.23
- 9.0.22
- 9.0.21
- 9.0.20
- 9.0.19
- 9.0.18
- 9.0.17
- 9.0.16
- 9.0.15
- 9.0.14
- 9.0.13
- 9.0.12
- 9.0.11
- 9.0.10
- 9.0.9
- 9.0.8
- 9.0.7
- 9.0.6
- 9.0.5
- 9.0.4
- 9.0.3
- 9.0.2
- 9.0.1
- 9.0.0
- 9.0.0-rc1
- 9.0.0-BETA9
- 9.0.0-BETA8
- 9.0.0-BETA7
- 9.0.0-BETA6
- 9.0.0-BETA5
- 9.0.0-BETA4
- 9.0.0-BETA3
- 9.0.0-BETA2
- 9.0.0-BETA1
- 8.3.48
- 8.3.47
- 8.3.46
- 8.3.45
- 8.3.44
- 8.3.43
- 8.3.42
- 8.3.41
- 8.3.40
- 8.3.39
- 8.3.38
- 8.3.37
- 8.3.36
- 8.3.35
- 8.3.34
- 8.3.33
- 8.3.32
- 8.3.31
- 8.3.30
- 8.3.29
- 8.3.28
- 8.3.27
- 8.3.26
- 8.3.25
- 8.3.24
- 8.3.23
- 8.3.22
- 8.3.21
- 8.3.20
- 8.3.19
- 8.3.18
- 8.3.17
- 8.3.16
- 8.3.15
- 8.3.14
- 8.3.13
- 8.3.12
- 8.3.11
- 8.3.10
- 8.3.7
- 8.3.6
- 8.3.5
- 8.3.4
- 8.3.3
- 8.3.2
- 8.3.1
- 8.3.0
- 8.2.27
- 8.2.26
- 8.2.25
- 8.2.24
- 8.2.22
- 8.2.21
- 8.2.20
- 8.2.19
- 8.2.18
- 8.2.17
- v8.2.16
- v8.2.15
- v8.2.14
- v8.2.13
- v8.2.12
- v8.2.11
- v8.2.10
- v8.2.9
- v8.2.8
- v8.2.7
- v8.2.6
- v8.2.5
- v8.2.4
- v8.2.3
- v8.2.2
- v8.2.1
- v8.2.0
- v8.1.20
- v8.1.19
- v8.1.18
- v8.1.17
- v8.1.16
- v8.1.15
- v8.1.14
- v8.1.13
- v8.1.12
- v8.1.11
- v8.1.10
- v8.1.9
- v8.1.8
- v8.1.7
- v8.1.6
- v8.1.4
- v8.1.3
- v8.1.2
- v8.1.1
- v8.1.0
- v8.0.1
- v8.0.0
- v8.0.0-beta4
- v8.0.0-beta3
- v8.0.0-beta2
- v8.0.0-beta1
- v7.3.18
- v7.3.17
- v7.3.16
- v7.3.15
- v7.3.14
- v7.3.13
- v7.3.11
- v7.3.10
- v7.3.9
- v7.3.8
- v7.3.7
- v7.3.6
- v7.3.5
- v7.3.4
- v7.3.3
- v7.3.2
- v7.3.1
- v7.3.0
- v7.2.20
- v7.2.19
- v7.2.18
- v7.2.17
- v7.2.16
- v7.2.15
- v7.2.14
- v7.2.13
- v7.2.12
- v7.2.11
- v7.2.10
- v7.2.8
- v7.2.7
- v7.2.6
- v7.2.5
- v7.2.4
- v7.2.3
- v7.2.2
- v7.2.1
- v7.2.0
- v7.1.3
- v7.1.2
- v7.1.1
- v7.1.0
- v7.0.2
- v7.0.1
- v7.0.0
- v6.1.0
- v6.0.5
- v6.0.4
- v6.0.3
- v6.0.2
- v6.0.1
- v6.0.0
- v5.4.16
- v5.4.15
- v5.4.14
- v5.4.13
- v5.4.12
- v5.4.11
- v5.4.10
- v5.4.9
- v5.4.8
- v5.4.7
- v5.4.6
- v5.4.5
- v5.4.4
- v5.4.3
- v5.4.2
- v5.4.1
- v5.4.0
- v5.3.12
- v5.3.11
- v5.3.10
- v5.3.9
- v5.3.8
- v5.3.7
- v5.3.6
- v5.3.5
- v5.3.4
- v5.3.2
- v5.3.1
- v5.3.0
- v5.2.22
- v5.2.20
- v5.2.19
- v5.2.18
- v5.2.17
- v5.2.16
- v5.2.15
- v5.2.14
- v5.2.13
- v5.2.12
- v5.2.11
- v5.2.10
- v5.2.9
- v5.2.8
- v5.2.7
- v5.2.6
- v5.2.5
- v5.2.4
- v5.2.3
- v5.2.2
- v5.2.1
- v5.2.0
- v5.1.4
- v5.1.3
- v5.1.2
- v5.1.1
- v5.1.0
- v5.0.2
- v5.0.1
- v5.0.0
- v4.8.0
- v4.7.0
- v4.6.1
- v4.6.0
- v4.5.1
- v4.5.0
- v4.4.2
- v4.4.1
- v4.4.0
- v4.3.0
- v4.2.3
- v4.2.2
- v4.2.1
- v4.2.0
- v4.1.2
- v4.1.1
- v4.1.0
- v4.0.4
- v4.0.3
- v4.0.2
- v4.0.1
- v4.0.0
- v4.0.0beta1
- v4.0.0alpha6
- v4.0.0alpha5
- v4.0.0alpha4
- v4.0.0alpha3
- v4.0.0alpha2
- v4.0.0alpha1
- v3.2.30
- v3.2.29
- v3.2.28
- v3.2.27
- v3.2.26
- v3.2.25
- v3.2.24
- v3.2.23
- v3.2.22
- v3.2.21
- v3.2.20
- v3.2.18
- v3.2.17
- v3.2.15
- v3.2.14
- v3.2.13
- v3.2.12
- v3.2.11
- v3.2.10
- v3.2.9
- v3.2.7
- v3.2.6
- v3.2.5
- v3.2.4
- v3.2.3
- v3.2.2
- v3.2.1
- v3.2.0
- v3.1.2
- v3.1.1
- v3.1.0
- v3.0.8
- v3.0.7
- v3.0.6
- v3.0.5
- v3.0.4
- v3.0.3
This package is auto-updated.
Last update: 2021-03-23 12:57:20 UTC
README
This package is deprecated. Do you want to take it over or look for replacement? See the issue
Turn your CHANGELOG.md
from a machine readable text to a rich text that makes every programmer happy.
Install
composer require symplify/changelog-linker --dev
Usage
Create changelog-linker.php
with configuration:
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator; use Symplify\ChangelogLinker\ValueObject\Option; return static function (ContainerConfigurator $containerConfigurator): void { $parameters = $containerConfigurator->parameters(); // this parameter is detected from "git origin", but you can change it $parameters->set(Option::REPOSITORY_URL, 'https://github.com/symplify/symplify'); };
The config is autodiscovered in the root directory or by --config
option.
A. Dump Merges
vendor/bin/changelog-linker dump-merges
Write or Dry-run?
The --dry-run
option prints the result to the output. Without that, I looks for <!-- changelog-linker -->
in the CHANGELOG.md
to replace with the content.
It finds the last #ID in the CHANGELOG.md
, than looks on Github via API and dumps all the merged PRs since the last #ID in nice format. In case you want to specify minimal PR id yourself, use this:
vendor/bin/changelog-linker dump-merges --since-id 125
But that is a mash-up of everything. Not very nice:
## Unreleased - [#868] [ChangelogLinker] Add ChangeTree to manage merge messages - [#867] [ChangelogLinker] Change Worker registration from implicit to explicit - [#865] Improve Code Complexity - [#864] [MonorepoBuilder] improve coverage
What if we'd have Added, Changed... all the standard categories?
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator; use Symplify\ChangelogLinker\ValueObject\ChangelogFormat; use Symplify\ChangelogLinker\ValueObject\Option; return static function (ContainerConfigurator $containerConfigurator): void { $parameters = $containerConfigurator->parameters(); $parameters->set(Option::CHANGELOG_FORMAT, ChangelogFormat::CATEGORIES_ONLY); };
vendor/bin/changelog-linker dump-merges
↓
## Unreleased ### Added - [#828] [ChangelogLinker] Add Unreleased to last tagged version feature - [#840] [ChangelogLinker] Add LinkifyWorker
Nice, now everything is nicely grouped.
(Do you want to know how we detect the category? Follow me)
You have 4 packages/cateogires options you can use:
Symplify\ChangelogLinker\ValueObject\ChangelogFormat::PACKAGES_THEN_CATEGORIES; Symplify\ChangelogLinker\ValueObject\ChangelogFormat::CATEGORIES_THEN_PACKAGES; Symplify\ChangelogLinker\ValueObject\ChangelogFormat::CATEGORIES_ONLY; Symplify\ChangelogLinker\ValueObject\ChangelogFormat::PACKAGES_ONLY;
Base Branch
Do you want to dump only such pull requests that were merged into a particular branch? Just use base-branch
option:
vendor/bin/changelog-linker dump-merges --base-branch=7.3
This is very handy when you support multiple versions of your project.
Github API Overload?
In case you cross the API rate limit and get denied, create new Github Token and run it via GITHUB_TOKEN
ENV variable.
GITHUB_TOKEN super-secret-token vendor/bin/changelog-linker dump-merges
B. Decorate CHANGELOG.md
vendor/bin/changelog-linker link
1. Link PR and Issues
### Added -- #123 Cool new without detailed description wanting me to see PR, [closes #234] +- [#123] Cool new without detailed description wanting me to see PR, [closes [#234]] + +[#123]: https://github.com/symplify/symplify/pull/123 +[#234]: https://github.com/symplify/symplify/pull/234
2. Link Versions to Diffs
-## v2.0.0 - 2017-12-31 +## [v2.0.0] - 2017-12-31 - ... ## v1.5.0 - 2017-06-30 + +[v2.0.0]: https://github.com/symplify/symplify/compare/v1.5.0...v2.0.0
3. Can I Thank My Contributors?
Of course! Give your contributors credit they deserve:
### [v2.0.0] - 2017-12-31 -- ... thanks @SpacePossum for help +- ... thanks [@SpacePossum] for help + +[@SpacePossum]: https://github.com/SpacePossum
You can exclude core maintainers, to give external contributors more credit:
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator; use Symplify\ChangelogLinker\ValueObject\Option; return static function (ContainerConfigurator $containerConfigurator): void { $parameters = $containerConfigurator->parameters(); // this parameter is detected from "git origin", but you can change it $parameters->set(Option::AUTHORS_TO_IGNORE, ['TomasVotruba']); };
4. How to Link Specific Words?
In Symplify, I need that every EasyCodingStandard
word leads to https://github.com/symplify/easy-coding-standard/
.
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator; use Symplify\ChangelogLinker\ValueObject\Option; return static function (ContainerConfigurator $containerConfigurator): void { $parameters = $containerConfigurator->parameters(); // this parameter is detected from "git origin", but you can change it $parameters->set(Option::NAMES_TO_URLS, [ 'EasyCodingStandard' => 'https://github.com/symplify/easy-coding-standard/', ]); };
## Unreleased ### Added -#### EasyCodingStandard +#### [EasyCodingStandard] + +[EasyCodingStandard]: https://github.com/symplify/easy-coding-standard/
5. Can I Write Shorter PR Titles?
Just add alias to config:
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator; use Symplify\ChangelogLinker\ValueObject\Option; return static function (ContainerConfigurator $containerConfigurator): void { $parameters = $containerConfigurator->parameters(); // this parameter is detected from "git origin", but you can change it $parameters->set(Option::PACKAGE_ALIASES, [ 'CS' => 'CodingStandard', ]); };
...and it will be resolved to CodingStandard
package.
Report Issues
In case you are experiencing a bug or want to request a new feature head over to the Symplify monorepo issue tracker
Contribute
The sources of this package are contained in the Symplify monorepo. We welcome contributions for this package on symplify/symplify.