wnx / changelog-updater
PHP CLI 工具,用于按照 "Keep a Changelog" 格式更新 CHANGELOG 并添加最新版本说明。
Requires
- php: ^8.2
- ext-dom: *
- league/commonmark: ^2.3.5
- webmozart/assert: ^1.11
- wnx/commonmark-markdown-renderer: ^1.0.2
Requires (Dev)
- larastan/larastan: ^2.0
- laravel-zero/framework: ^11
- laravel/pint: ^1.10
- mockery/mockery: ^1.5.1
- pestphp/pest: ^2
- rector/rector: ^1.0
README
一个 PHP CLI 工具,用于更新 CHANGELOG 并添加最新版本说明。
想用 GitHub Actions 自动化更新 CHANGELOG 的过程?请查看 stefanzweifel/changelog-updater-action,它正好可以做到这一点。
如果你的 CHANGELOG 遵循 "Keep a Changelog" 格式,并且包含一个 "Unreleased" 标题,CLI 将在标题下更新链接并放置版本说明。
安装
您可以将 changelog-updater CLI 作为 composer 依赖项安装到您的项目中或全局安装。它需要 PHP 8.2 或更高版本。
composer global require wnx/changelog-updater
使用方法
您可以通过运行以下命令来使用 changelog-updater
:
php changelog-updater update \ --release-notes="### Added - New Feature A - New Feature B ### Changed - Update Feature C ### Removes - Remove Feature D" \ --latest-version="v1.0.0" \ --release-date="2021-08-07" \ --path-to-changelog="CHANGELOG.md" \ --compare-url-target-revision="1.x" \ --write
--release-date
、--path-to-changelog
、--compare-url-target-revision
和 --write
是可选的。运行 php changelog-updater update --help
了解更多选项。
如果给定的版本已在 CHANGELOG 中存在,CLI 将显示警告并不会更新 CHANGELOG。
CLI 选项
--release-notes
必需。您要添加到 CHANGELOG 的版本说明。应该是 markdown 格式。
--latest-version
必需。最新版本的版本号。如果未设置 --heading-text
,则该值将用作标题文本。如果 CHANGELOG 中有 "Unreleased" 标题,则该值将用于更新比较 URL。
示例:v1.0.0
--release-date
可选(默认为当前日期)。最新版本发布的日期。该值将用于版本标题。
--path-to-changelog
可选(默认为 CHANGELOG.md
)。CHANGELOG.md 文件的路径。
--compare-url-target-revision
可选(默认为 HEAD
)。如果 CHANGELOG 中有 "Unreleased" 标题,则该值将与 --latest-version
值一起用于更新比较 URL。
--write
可选。将更改写入 CHANGELOG.md
或 --path-to-changelog
指定的值。
--github-actions-output
可选。将输出 UNRELEASED_COMPARE_URL
和 RELEASE_COMPARE_URL
的值,这些值可以被 GitHub Actions 捕获并在其工作流程中进一步使用。
--heading-text
可选(默认为 --latest-version
的值)。用于创建新版本标题的文本值。
## heading-text - 2021-02-01 ## [heading-text](https://github.com/org/repo/compare/v0.1.0...v1.0.0) - 2021-02-01
--parse-release-notes
可选。明确告诉 CLI 使用 "Unreleased 标题" 和上一个版本标题之间的内容作为版本说明。将忽略 --release-notes
的值。
--hide-release-date
可选。不要将发布日期添加到发布标题中。
--parse-github-usernames
可选。在 --release-notes
中查找 GitHub 用户名并将它们链接化。目前不支持位于现有 CHANGELOG 中的版本说明。
- Added a new feature @stefanzweifel + Added a new feature [@stefanzweifel](https://github.com/stefanzweifel)
期望的 CHANGELOG 格式
CLI 尽可能将给定的版本说明放置在正确的地方。CLI 会查找当前 CHANGELOG.md
文件中的第一个二级标题。它假定这个标题代表上一个版本。以下是一个 CLI 可以理解的 CHANGELOG.md
的示例。
# Changelog
## v1.0.0 - 2021-11-01
### Added
- Initial Release
然后 CLI 将新版本及其发布说明放在现有版本之上。
# Changelog + ## v1.1.0 - 2021-11-10 + + ### Added + + * New Feature + ## v1.0.0 - 2021-11-01 ### Added * Initial Release
如果变更日志中没有二级标题,CLI 会认为变更日志为“空”。然后,它将在文档底部放置发布说明。
# Changelog All notable changes to this project will be documented in this file. +## v1.0.0 - 2021-11-01 + +### Added + +* Initial Release
如果你的变更日志遵循"Keep a Changelog"格式,并且包含一个指向仓库对比视图的“Unreleased”标题,CLI 将自动更新“Unreleased”标题中的链接。
以下是变更日志在更新前的示例。
# Changelog
## [Unreleased](https://github.com/org/repo/compare/v1.0.0...HEAD)
Please do not update the unreleased notes.
<!-- Content should be placed here -->
## v1.0.0 - 2021-01-01
### Added
- Initial Release
以下是 CLI 更新变更日志的 diff 视图。
# Changelog +## [Unreleased](https://github.com/org/repo/compare/v1.1.0...HEAD) -## [Unreleased](https://github.com/org/repo/compare/v1.0.0...HEAD) Please do not update the unreleased notes. <!-- Content should be placed here --> +## [v1.1.0](https://github.com/org/repo/compare/v1.0.0...v1.1.0) - 2021-02-01 + +### Added + +* New Feature A +* New Feature B + ## v1.0.0 - 2021-01-01 ### Added * Initial Release
CLI 不会更改“Unreleased”标题和最新版本之间的内容。
如果你的变更日志中没有“Unreleased”标题,但之前发布的标题中包含指向仓库对比视图的链接,CLI 将在添加的发布标题中添加到对比视图的链接。
# Changelog +## [v1.1.0](https://github.com/org/repo/compare/v1.0.0...v1.1.0) - 2021-02-01 + +### Added + +* New Feature A +* New Feature B + ## [v1.0.0](https://github.com/org/repo/compare/v0.1.0...v1.0.0) - 2021-01-01 ### Added * Initial Release
测试
composer test
变更日志
有关最近更改的更多信息,请参阅CHANGELOG。
贡献
有关详细信息,请参阅CONTRIBUTING。
安全漏洞
有关如何报告安全漏洞的详细信息,请参阅我们的安全策略。
致谢
许可协议
MIT 许可协议 (MIT)。有关更多信息,请参阅许可文件。