pbump is a CLI tool for semver releases in PHP projects with automatic release commit creation and git tagging.
- bump the version manually (
patch,minor,major,as-is) or by conventional commits (next); - read the current version from
composer.jsonor the latest git tag; - update
composer.jsonwhen the version source is set tocomposer; - run in
dry-runmode without making changes; - optionally release with unrelated uncommitted files while committing only
composer.json; - work interactively through a menu or non-interactively in CI.
- PHP
^8.2 - Git
composer require --dev rhapsodic/pbumpAfter installation, the binary will be available as vendor/bin/pbump.
Preview what will happen:
php vendor/bin/pbump --dry-run --type=nextCreate a patch release without interactive confirmation:
php vendor/bin/pbump --type=patch --yesShow the current version:
php vendor/bin/pbump --versionShow help:
php vendor/bin/pbump --helpDuring a normal pbump run:
- it determines the current version;
- it calculates the target version;
- it updates
composer.jsonwhen needed; - it creates a
chore: release vX.Y.Zcommit; - it creates a git tag;
- it pushes the current branch and tag.
By default, the tag is named vX.Y.Z, but you can disable tagging or provide a custom tag name.
By default, pbump requires a clean working tree. If you need to release while unrelated files are modified, use
--allow-dirty or set "allowDirty": true; in that mode pbump updates composer.json, commits only
composer.json, and leaves the other files untouched.
patch-X.Y.Z -> X.Y.(Z+1)minor-X.Y.Z -> X.(Y+1).0major-X.Y.Z -> (X+1).0.0as-is- keep the current versionnext- calculate the bump from conventional commitsconventional- alias fornext
The --version-source flag supports three modes:
auto- usecomposer.json.versionfirst, and fall back to the latest git tag if it is missing;composer- always read the version fromcomposer.json.versionand update it during release;tag- always read the version from the latest git tag;composer.jsonis not modified.
If there are no tags yet and the source is tag, the current version is treated as 0.0.0.
The latest tag must contain a semver version at the end of the name, for example v1.2.3 or release-1.2.3.
You can create a .pbump.config.json file in the project root with default values:
{
"type": "next",
"versionSource": "auto",
"tag": true,
"push": true,
"yes": false,
"quiet": false,
"allowDirty": false
}Supported keys:
typedryRuntagpushyesquietversionSourceallowDirty
CLI arguments take precedence over .pbump.config.json.
tag can be:
true- create the standardvX.Y.Ztag;false- do not create a tag;- a string - create a tag with the provided name.
-h,--help- show help-v,--version- print the current version--dry-run- show the plan without making changes--type=<type>- explicitly set the release type--version-source=<source>- choose the version source:auto,composer,tag-t,--tag[=<name>]- create a tag, optionally with a custom name--no-tag- do not create a tag-p,--push- push using the current git upstream--no-push- do not push-y,--yes- skip confirmation-q,--quiet- hide the summary--allow-dirty- allow unrelated uncommitted files and commit onlycomposer.json
If --type is not provided and input is interactive, pbump will show a release type selection menu.
For non-interactive runs, it is best to always pass:
php vendor/bin/pbump --type=next --yesOtherwise, the tool will not be able to ask for confirmation before creating a release.
Run linter:
composer lintRun static analysis:
composer analyseRun tests:
composer testFormat code:
composer formatRun the entrypoint locally without a Composer bin proxy:
php scripts/release.php --help