Skip to content

Releases: horde/Version

Version 1.0.0-alpha3

04 Mar 12:58

Choose a tag to compare

Version 1.0.0-alpha3 Pre-release
Pre-release

This is a minor release.

feat: Version Comparators and Constraints
docs: update README and bump to v1.0.0-beta1
feat(constraints): implement version constraints and collection utilities
feat(test): comprehensive test coverage improvements

v1.0.0-beta1: Production-Ready Beta

04 Mar 05:37

Choose a tag to compare

Pre-release

Horde\Version 1.0.0-beta1

Production-ready beta release - The library is now feature-complete and ready for production use! 🎉

🚀 What's New

Version Constraints (Composer-Compatible)

Full constraint parsing and matching system for dependency management:

$parser = new ConstraintParser();
$constraint = $parser->parse('^1.2.3');
$constraint->isSatisfiedBy($version); // true if >=1.2.3 <2.0.0

Supported syntax:

  • Exact: 1.0.0
  • Comparison: >1.0.0, >=1.0.0, <2.0.0, <=2.0.0, !=1.5.0
  • Caret: ^1.2.3 (allows changes that don't modify left-most non-zero)
  • Tilde: ~1.2.3 (allows patch-level changes)
  • Wildcard: 1.0.*, 1.*
  • Range: 1.0.0 - 2.0.0
  • AND: >=1.0.0 <2.0.0 (space-separated)
  • OR: ^1.0 || ^2.0 (|| operator)

Collection Utilities

Powerful version management tools:

// Find latest stable version
$latest = VersionCollection::latest($versions, 'stable');

// Filter by constraint
$compatible = VersionCollection::filter($versions, '^2.0');

// Sort versions
$sorted = VersionCollection::sort($versions);

// Group by major version
$grouped = VersionCollection::group($versions, 'major');

Comparator Helpers

Convenience methods for version comparison:

$v1 = new SemVerV2Version('1.0.0');
$v2 = new SemVerV2Version('2.0.0');

$v1->isLessThan($v2);      // true
$v2->isGreaterThan($v1);   // true
$v1->equals($v1);          // true

🐛 Bug Fixes

  • NextVersion: Fixed string concatenation bug (missing dots in version string)
  • NextVersion: Fixed operator precedence bug (patch always incrementing)
  • NextVersion: Fixed version component reset logic (major/minor bumps now reset correctly)
  • SemVerV2Version: Fixed build metadata detection (isset returning true for empty strings)
  • RelaxedSemanticVersion: Fixed build metadata detection
  • SemVerV2Comparison: Fixed strcmp normalization (now returns -1/0/1)

📊 Test Coverage

  • Tests: 31 → 193 (+521%)
  • Assertions: 123 → 592 (+381%)
  • Pass Rate: 100% ✅

New test suites:

  • InvalidVersionException: 6 tests
  • ConstraintParser: 22 tests, 63 assertions
  • VersionCollection: 22 tests, 43 assertions
  • VersionComparable: 9 tests, 22 assertions
  • Expanded coverage for all existing classes

📝 Documentation

Complete README rewrite with:

  • Quick start guide
  • Comprehensive usage examples for all features
  • Real-world use cases (dependency management, update checker, release management)
  • Full API reference

✨ Features

Core features from previous releases:

  • ✅ Parse strict SemVer 2.0 and relaxed variants
  • ✅ Compare versions with full SemVer 2.0 precedence rules
  • ✅ Generate next versions (patch/minor/major bumps)
  • ✅ Detect and manage stability levels (dev/alpha/beta/rc/stable)

New in beta1:

  • ✅ Version constraints (dependency management)
  • ✅ Collection utilities (version management)
  • ✅ Comparator helpers (developer experience)

🎯 Use Cases

This library is ready for production use in:

  • Dependency Management - Check if installed versions satisfy requirements
  • Package Repositories - Query versions by constraints
  • Update Checkers - Find latest compatible versions
  • Release Automation - Filter and sort releases
  • Version Filtering - Find stable releases, specific ranges

📦 Installation

composer require horde/version

🔧 Requirements

  • PHP 8.2 or higher
  • No external dependencies

📖 Usage Examples

Parse and Compare

use Horde\Version\SemVerV2Version;

$v1 = new SemVerV2Version('1.0.0');
$v2 = new SemVerV2Version('2.0.0');

echo $v1->isLessThan($v2) ? 'v1 is older' : 'v1 is newer';

Check Dependency Compatibility

use Horde\Version\ConstraintParser;
use Horde\Version\SemVerV2Version;

$parser = new ConstraintParser();
$required = $parser->parse('^1.2.0');
$installed = new SemVerV2Version('1.5.0');

if ($required->isSatisfiedBy($installed)) {
    echo "Dependency satisfied!";
}

Find Latest Version

use Horde\Version\VersionCollection;

$versions = ['1.0.0', '1.5.0', '2.0.0-alpha', '2.0.0'];
$latest = VersionCollection::latest($versions, 'stable');
// '2.0.0'

🚦 API Status

API Version: 1.0.0
API State: Stable ✅

The public API is now considered stable and will follow semantic versioning for any future changes.

📈 What's Next

For v1.0.0-rc1

  • Community feedback
  • Real-world testing
  • Performance optimization (if needed)

For v1.0.0

  • Final API review
  • Release announcement

🙏 Contributors

📄 License

LGPL-2.1-only


Full Changelog: v1.0.0alpha2...v1.0.0beta1