Releases: horde/Version
Version 1.0.0-alpha3
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
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.0Supported 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
- Ralf Lang (@rlang)
📄 License
LGPL-2.1-only
Full Changelog: v1.0.0alpha2...v1.0.0beta1