claudiodekker/changelog-updater
claudiodekker/changelog-updater is a Laravel/PHP package that automates changelog maintenance. It helps keep your CHANGELOG.md current as part of your release workflow, reducing manual editing and keeping release notes consistent across versions. Simple to drop into existing projects.
composer require --dev claudiodekker/changelog-updater. It is a build/release-time tool, not a runtime dependency — never install it in require.vendor/bin/changelog-updater --help before wiring it into scripts. Flag names have been stable in practice but are not covered by a BC promise in a 1.x release.CHANGELOG.md and a Markdown file of release notes, and let it merge the notes under a new version heading following Keep a Changelog conventions (## [1.2.0] - 2025-08-12 plus ### Added / ### Fixed subsections).CHANGELOG.md structure (heading level, version prefix, date format) — the tool mirrors what is already there, so an inconsistent changelog is the usual source of surprises. Then read the release-notes input format, and finally the comparison-link footer if you use one.release-notes.md, run the updater locally, inspect git diff CHANGELOG.md, commit. Get this working by hand before automating anything.gh release view "$TAG" --json body -q .body > release-notes.md), run the updater against the checked-out changelog, commit the result on the default branch, and only then publish the tag. Keep the changelog commit separate from code commits so history stays readable."changelog": "@php vendor/bin/changelog-updater ..." under scripts so contributors run composer changelog instead of memorising flags. Pair it with a changelog:check script that fails when the file is out of sync.## [Unreleased] and roll them into a version at release time, or write version sections directly at release time. Mixing both produces duplicate headings — which is exactly the shape of the bug fixed in 1.2.0.Symfony\Component\Process\Process in a small ReleaseChangelogCommand rather than shelling out from PHPUnit or a service provider. Keep it out of request-path code entirely.[skip ci] in the message to avoid recursive workflow runs.### Added/### Fixed heading in the same version block — common after merge-heavy release cycles — entries could be silently dropped. Because the loss is silent, audit existing changelogs against git history once after upgrading rather than assuming past runs were clean.git diff stops being a reliable review artefact.v1.2.0 versus 1.2.0, or ## [1.2.0] versus ## 1.2.0, can produce a second heading instead of updating the existing one. Match the existing file exactly and assert on it in CI..gitattributes (CHANGELOG.md text eol=lf) to keep diffs honest.composer require --dev claudiodekker/changelog-updater:^1.2 and commit the lockfile. An unpinned release tool that rewrites a tracked file is a supply-chain and reproducibility hazard.[1.2.0]: https://.../compare/... reference links, verify after each run that the new entry's link was added and the previous one updated — this is the part most likely to need a manual touch-up.How can I help you explore Laravel packages today?