phlak / semver
Semantic versioning helper library
Installs: 1 047 228
Dependents: 44
Suggesters: 0
Security: 0
Stars: 173
Watchers: 7
Forks: 16
Open Issues: 1
Requires
- php: ^8.1 || ^8.2 || ^8.3
Requires (Dev)
- phlak/coding-standards: ^2.0
- phpstan/phpstan: ^1.11
- phpunit/phpunit: ^9.0 || ^10.0
- yoast/phpunit-polyfills: ^2.0
This package is auto-updated.
Last update: 2024-10-31 08:27:59 UTC
README
Semantic versioning helper library • Created by Chris Kankiewicz (@PHLAK)
Requirements
- PHP >= 8.1
Installation
composer require phlak/semver
Initializing
use PHLAK\SemVer; $version = new SemVer\Version(); // Initilializes to '0.1.0'
Or initialize with a custom version by passing a version string on creation.
Accepts any valid semantic version string with or without a preceding v
.
$version = new SemVer\Version('v1.2.3-alpha.5+sha.8d31ff4');
Or parse an incomple version string with the static Version::parse()
constructor.
$version = SemVer\Version::parse('v1') // Initializes to '1.0.0' $version = SemVer\Version::parse('v1.2') // Initializes to '1.2.0'
Usage
Retrieve the version or individual values
$version = new SemVer\Version('v1.2.3-beta.4+007'); echo $version; // '1.2.3-beta.4+007' echo $version->major; // 1 echo $version->minor; // 2 echo $version->patch; // 3 echo $version->preRelease; // 'beta.4' echo $version->build; // '007'
Increment the version
$version = new SemVer\Version('v1.2.3'); $version->incrementMajor(); // v1.2.3 -> v2.0.0 $version->incrementMinor(); // v1.2.3 -> v1.3.0 $version->incrementPatch(); // v1.2.3 -> v1.2.4 $version->incrementPreRelease(); // v1.2.3-alpha.5 -> v1.2.3-alpha.6
Set (override) the version or individual values
$version = new SemVer\Version(); $version->setVersion('v1.2.3'); // v1.2.3 $version->setMajor(3); // v1.2.3 -> v3.0.0 $version->setMinor(5); // v1.2.3 -> v1.5.0 $version->setPatch(7); // v1.2.3 -> 1.2.7 $version->setPreRelease('rc.2'); // v1.2.3 -> v1.2.3-rc.2 $version->setBuild('007'); // v1.2.3 -> v1.2.3+007
Clear pre-release / build values
$version->setPreRelease(null); // v1.2.3-rc.2 -> v1.2.3 $version->setBuild(null); // v1.2.3+007 -> v1.2.3
Check for pre-release / build values
$version->isPreRelease(); $version->hasBuild();
Compare two SemVer objects
$version1 = new SemVer\Version('v1.2.3'); $version2 = new SemVer\Version('v3.2.1'); $version1->gt($version2); // false $version1->lt($version2); // true $version1->eq($version2); // false $version1->neq($version2); // true $version1->gte($version2); // false $version1->lte($version2); // true
Limit comparison to the major version only
Ignores the minor, patch and pre-release versions completely
$version1 = new SemVer\Version('v1.2.3-alpha.4'); $version2 = new SemVer\Version('v1.3.4-alpha.5'); $version1->gt($version2, Compare::MAJOR); // false $version1->lt($version2, Compare::MAJOR); // false $version1->eq($version2, Compare::MAJOR); // true $version1->neq($version2, Compare::MAJOR); // false $version1->gte($version2, Compare::MAJOR); // true $version1->lte($version2, Compare::MAJOR); // true
Limit comparison to the major and minor versions only
Ignores the patch and pre-release versions completely
$version1 = new SemVer\Version('v1.2.3-alpha.4'); $version2 = new SemVer\Version('v1.2.4-alpha.5'); $version1->gt($version2, Compare::MINOR); // false $version1->lt($version2, Compare::MINOR); // false $version1->eq($version2, Compare::MINOR); // true $version1->neq($version2, Compare::MINOR); // false $version1->gte($version2, Compare::MINOR); // true $version1->lte($version2, Compare::MINOR); // true
Limit comparison to the major, minor and patch versions only
Ignores the pre-release version completely
$version1 = new SemVer\Version('v1.2.3-alpha.4'); $version2 = new SemVer\Version('v1.2.3-alpha.5'); $version1->gt($version2, Compare::PATCH); // false $version1->lt($version2, Compare::PATCH); // false $version1->eq($version2, Compare::PATCH); // true $version1->neq($version2, Compare::PATCH); // false $version1->gte($version2, Compare::PATCH); // true $version1->lte($version2, Compare::PATCH); // true
Troubleshooting
For general help and support join our GitHub Discussions or reach out on Twitter.
Please report bugs to the GitHub Issue Tracker.
Copyright
This project is liscensed under the MIT License.