https://github.com/phlak/semver
Semantic versioning helper library for PHP
https://github.com/phlak/semver
php semantic-versioning semver versioning
Last synced: 10 months ago
JSON representation
Semantic versioning helper library for PHP
- Host: GitHub
- URL: https://github.com/phlak/semver
- Owner: PHLAK
- License: mit
- Created: 2016-06-24T01:37:58.000Z (over 9 years ago)
- Default Branch: master
- Last Pushed: 2024-12-11T16:31:37.000Z (about 1 year ago)
- Last Synced: 2025-04-07T01:10:00.520Z (10 months ago)
- Topics: php, semantic-versioning, semver, versioning
- Language: PHP
- Homepage: https://packagist.org/packages/phlak/semver
- Size: 194 KB
- Stars: 178
- Watchers: 7
- Forks: 16
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- Funding: .github/FUNDING.yml
- License: LICENSE
Awesome Lists containing this project
README
SemVer
======
Semantic versioning helper library
• Created by Chris Kankiewicz (@phlak.dev)
---
Requirements
------------
- [PHP](https://php.net) >= 8.1
Installation
------------
```bash
composer require phlak/semver
```
Initializing
------------
```php
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`.
```php
$version = new SemVer\Version('v1.2.3-alpha.5+sha.8d31ff4');
```
Or parse an incomple version string with the static `Version::parse()` constructor.
```php
$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
```php
$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
```php
$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
```php
$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
```php
$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
```php
$version->isPreRelease();
$version->hasBuild();
```
#### Compare two SemVer objects
```php
$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
```php
$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
```php
$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
```php
$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](https://github.com/PHLAK/SemVer/discussions) or reach out on [Bluesky](https://bsky.app/profile/phlak.dev).
Please report bugs to the [GitHub Issue Tracker](https://github.com/PHLAK/SemVer/issues).
Copyright
---------
This project is liscensed under the [MIT License](https://github.com/PHLAK/SemVer/blob/master/LICENSE).