Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/sanmai/version-info
Package version info parser and provider
https://github.com/sanmai/version-info
Last synced: about 1 month ago
JSON representation
Package version info parser and provider
- Host: GitHub
- URL: https://github.com/sanmai/version-info
- Owner: sanmai
- License: mit
- Created: 2020-10-01T08:22:06.000Z (over 4 years ago)
- Default Branch: main
- Last Pushed: 2024-02-17T10:55:16.000Z (11 months ago)
- Last Synced: 2024-10-16T14:09:09.637Z (3 months ago)
- Language: PHP
- Homepage:
- Size: 40 KB
- Stars: 1
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- Funding: .github/FUNDING.yml
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
Awesome Lists containing this project
README
# Version info parser
[![Latest Stable Version](https://poser.pugx.org/sanmai/version-info/v/stable)](https://packagist.org/packages/sanmai/version-info)
[![Coverage Status](https://coveralls.io/repos/github/sanmai/version-info/badge.svg?branch=master)](https://coveralls.io/github/sanmai/version-info?branch=master)This small library solves a problem where a package wants to know or report own version.
This is not a new problem, e.g. there's [ocramius/package-versions](https://github.com/Ocramius/PackageVersions),
but it depends heavely on Composer, and not without an associated IO penalty.On the contrary, this package solves the same problem but without any extra IO whatsoever. What you need
is to instruct Git to [expand placeholders](https://git-scm.com/docs/gitattributes#_export_subst) (detailed
instructions below) when adding a file with a constant to an archive of a tagged release. Then you feed
this constant to the library, and there is your version.Sure, you can't be certain people always install a package from archives. In this case you can use
either abovementioned [ocramius/package-versions](https://github.com/Ocramius/PackageVersions), or
use [two auxillary classes](#fallback-readers) this library provides to fetch version strings right from Git or from a [branch
alias](https://getcomposer.org/doc/articles/aliases.md#branch-alias) from `composer.json`.## Installation
```bash
composer require sanmai/version-info
```This library needs PHP 7.4 or greater. It was tested to work under PHP 7.x and 8.0.
## Usage
Create a PHP class (or use existing class) with the following constant:
```php
const VERSION_INFO = '$Format:%h%d by %an +%ae$'; // or '$Format:%h%d$'
```Amend `.gitattributes` with a path to the file with the class with `export-subst` attribute:
```
/src/MyVersion.php export-subst
```Where you want to know your version, call a version reader:
```php
$reader = \VersionInfo\PlaceholderVersionReader(MyVersion::VERSION_INFO);
$version = $versionReader->getVersionString();if ($version !== null) {
return $version;
}// Fallback on other methods, or return a dummy version.
// See src/Example.php for a complete example.
```That's all!
## Testing
To verify that your version constant is being correctly replaced you can use `git archive` command, pointing it at a tag, or a branch:
```bash
git archive --format=tar v1.1 | grep --text VERSION_INFO
```The constant should contain something like:
```
c3ff8f6 (tag: v1.1) by John Doe [email protected]
```## Fallback readers
Apart from `PlaceholderVersionReader` there are `GitVersionReader` and `ComposerBranchAliasVersionReader`. [See this example for details.](src/Example.php)
## Memoization
Any of these classes do not do their own memoization. If you need memoization and lazy loading, try [Later, a deferred object manager](https://github.com/sanmai/later).
```php
use function Later\later;$deferredVersion = later(function () {
$reader = \VersionInfo\PlaceholderVersionReader(MyVersion::VERSION_INFO);
yield $version = $versionReader->getVersionString();
});// And at some later point...
$deferredVersion->get(); // returns memoized version string, computing it on the spot, as needed
```## License
This project is licensed [under the terms of the MIT license](LICENSE).