Skip to content

Repository files navigation

Rayne\SemanticVersioning

A tiny independent library for parsing and comparing semantic versions which is compatible with Semantic Versioning 2.0.

Latest Stable VersionLatest Unstable VersionBuild StatusCode CoverageScrutinizer Code QualityLicense

Dependencies

Production

  • PHP 5.6 or better

Development

  • Composer
  • Git
  • PHPUnit

Setup

Download Composer and install rayne/semantic-versioning.

composer require rayne/semantic-versioning

Tests

  1. Clone the repository

    git clone https://github.com/rayne/semantic-versioning.php.git
    
  2. Install the development dependencies

    composer install --dev
    
  3. Run the tests

    ./vendor/bin/phpunit
    

Examples

The library contains the following classes:

  • InvalidVersionException: Thrown by SemanticVersion on invalid input

  • SemanticComparator: The semantic versioning comparator for comparing SemanticVersion objects

  • SemanticVersion: The semantic versioning parser which throws a RuntimeException on invalid versions

The examples are part of the test suite. Have a look at the tests directory for more information.

Interpret semantic versions

useRayne\SemanticVersioning\SemanticVersion;
$version = newSemanticVersion('1.0.0-beta+exp.sha.5114f85');
assert('1.0.0-beta+exp.sha.5114f85' === (string) $version);
assert( 1 === $version->getMajor());
assert( 0 === $version->getMinor());
assert( 0 === $version->getPatch());
assert( 'beta' === $version->getPre());
assert( 'exp.sha.5114f85' === $version->getMeta());
assert('1.0.0-beta+exp.sha.5114f85' === $version->getVersion());
assert(true === $version->isMajorRelease());
assert(false === $version->isMinorRelease());
assert(false === $version->isPatchRelease());
assert(true === $version->isPreRelease());

Compare semantic versions

useRayne\SemanticVersioning\SemanticComparator;
useRayne\SemanticVersioning\SemanticVersion;
$comparator = newSemanticComparator;
$alpha = newSemanticVersion('1.0.0-alpha');
$candidate = newSemanticVersion('1.0.0-rc.1');
$candidate_meta = newSemanticVersion('1.0.0-rc.1+ci');
$release = newSemanticVersion('1.0.0');
// $alpha < $candidateassert($comparator($alpha, $candidate) < 0);
assert($comparator->compare($alpha, $candidate) < 0);
// $candidate == $candidate_metaassert($comparator($candidate, $candidate_meta) == 0);
assert($comparator->compare($candidate, $candidate_meta) == 0);
// $release > $candidateassert($comparator($release, $candidate) > 0);
assert($comparator->compare($release, $candidate) > 0);

Sort semantic versions

useRayne\SemanticVersioning\SemanticComparator;
useRayne\SemanticVersioning\SemanticVersion;
$versions = [
$candidate = newSemanticVersion('1.0.0-rc.1'),
$release = newSemanticVersion('1.0.0'),
$alpha = newSemanticVersion('1.0.0-alpha'),
];
// Sort by semantic precedence.usort($versions, newSemanticComparator);
assert($versions[0] === $alpha);
assert($versions[1] === $candidate);
assert($versions[2] === $release);

About

A tiny independent library for parsing and comparing semantic versions.

Topics

Resources

Stars

4 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages