semver/semver

This package is abandoned and no longer maintained. No replacement package was suggested.

The semver parser for PHP

1.1.0 2016-05-28 13:26 UTC

This package is not auto-updated.

Last update: 2022-02-01 12:58:38 UTC


README

PHP implementation of the Semantic Versioning 2.0 documented on semver.org

Build Status Coverage Status Scrutinizer Code Quality

Installation

Install the latest version with

$ composer require semver/semver

Requirements

This library is standalone so you don't have to worry about dependencies.
The only requirement is to use PHP 7

Usage

Create a Version

from decomposed elements

use SemVer\SemVer\Version;

$version = new Version(1, 2, 3);
$version = new Version(1, 2, 3, '', 'exp.sha.5114f85');
$version = new Version(1, 2, 3, 'rc.1', 'exp.sha.5114f85');

from a string

use SemVer\SemVer\Version;

$version = Version::fromString('1.2.3');
$version = Version::fromString('1.2.3+exp.sha.5114f85');
$version = Version::fromString('1.2.3-rc.1+exp.sha.5114f85');

Update to next version

It will always create a new Version, leaving the current as it is.

update the major version

use SemVer\SemVer\Version;

$version = Version::fromString('1.2.3');
$nextVersion = $version->major();

var_dump($nextVersion->isEquals(new Version('2.0.0')); // true

Special case: when there is a pre-release and both minor and patch version are equals to 0, the next major version is the actual version without the pre-release

use SemVer\SemVer\Version;

$version = Version::fromString('1.0.0-rc.1');
$nextVersion = $version->major();

var_dump($nextVersion->isEquals(new Version('1.0.0')); // true

update the minor version

use SemVer\SemVer\Version;

$version = Version::fromString('1.2.3');
$nextVersion = $version->minor();

var_dump($nextVersion->isEquals(new Version('1.3.0')); // true

Special case: when there is a pre-release and the patch version is equal to 0, the next minor version is the actual version without the pre-release

use SemVer\SemVer\Version;

$version = Version::fromString('1.1.0-rc.1');
$nextVersion = $version->minor();

var_dump($nextVersion->isEquals(new Version('1.1.0')); // true

update the patch version

use SemVer\SemVer\Version;

$version = Version::fromString('1.2.3-rc.1');
$nextVersion = $version->patch();

var_dump($nextVersion->isEquals(new Version('1.2.3')); // true

Special case: when there is a pre-release, the next major version is the actual version without the pre-release

use SemVer\SemVer\Version;

$version = Version::fromString('1.0.0-rc.1');
$nextVersion = $version->patch();

var_dump($nextVersion->isEquals(new Version('1.0.0')); // true

Compare two versions

use SemVer\SemVer\Version;
use SemVer\SemVer\VersionComparator;

$version1 = Version::fromString('1.2.3');
$version2 = Version::fromString('1.2.3-rc.1+exp.sha.5114f85');
var_dump(VersionComparator::compare($version1, $version2)); // 1
var_dump($version1->equals($version2)); // false
var_dump($version1->greaterThan($version2)); // true
var_dump($version1->greaterThanOrEqual($version2)); // true
var_dump($version1->lessThan($version2)); // false
var_dump($version1->lessThanOrEqual($version2)); // false

Sort an array of Versions

use SemVer\SemVer\Version;

$versions = [
    Version::fromString('2.0.0'),
    Version::fromString('1.2.3'),
    Version::fromString('1.3.3'),
    Version::fromString('1.3.3-alpha.10'),
    Version::fromString('1.3.3-alpha.2'),
    Version::fromString('1.2.3-rc.1+exp.sha.5114f85'),
];
var_dump(VersionSorter::sort($versions));
// Result:
// [
//    Version::fromString('1.2.3-rc.1+exp.sha.5114f85'),
//    Version::fromString('1.2.3'),
//    Version::fromString('1.3.3-alpha.2'),
//    Version::fromString('1.3.3-alpha.10'),
//    Version::fromString('1.3.3'),
//    Version::fromString('2.0.0'),
// ];