angrybytes / project-versioner
一个基于Composer、文件修改时间等来维护项目/子项目版本的工具。
3.0.0
2023-12-01 07:38 UTC
Requires
- php: 8.1.* || 8.2.* || 8.3.*
- ext-json: *
- symfony/finder: ^6.0.0
Requires (Dev)
- phpstan/phpstan: 1.10.46
- phpunit/phpunit: 10.4.2
- squizlabs/php_codesniffer: 3.7.2
README
注意:这是一个原始项目的分支,因为它看起来已经被遗弃。
这是一个用于获取PHP项目中"版本"的简单工具。
安装
通过composer安装
composer require naneau/project-versioner=~0
示例
这个库围绕一个"Versioner"构建,它接受一个或多个"Readers"。
使用Git
如果你的项目使用Git进行维护,你可以查看它来获取版本。
提交
使用最后一个提交作为版本
use Naneau\ProjectVersioner\Versioner; use Naneau\ProjectVersioner\Reader\Git\Commit\Exec as GitCommitReader; // Create a versioner $versioner = new Versioner([new GitCommitReader]); // Short commit hash like "gd8587c8" $version = $versioner->get('/foo/bar');
标签
使用最新的标签(可以从这个提交访问)
use Naneau\ProjectVersioner\Versioner; use Naneau\ProjectVersioner\Reader\Git\Tag\Exec as GitTagReader; // Create a versioner $versioner = new Versioner([new GitTagReader]); // Last tag $version = $versioner->get('/foo/bar');
描述版本
使用git describe
的输出,它结合了最新(可访问)的标签和后续提交
use Naneau\ProjectVersioner\Versioner; use Naneau\ProjectVersioner\Reader\Git\Tag\Exec as GitTagReader; // Create a versioner $versioner = new Versioner([new GitTagReader]); // Last tag + commit info, like 4.3.2-9-gd504031 $version = $versioner->get('/foo/bar');
使用文件
从单个文件读取版本
想象一下,你维护一个名为VERSION
的文件,你(或你的CI堆栈)将其填充为版本。
use Naneau\ProjectVersioner\Versioner; use Naneau\ProjectVersioner\Reader\File as FileReader; // Create a versioner $versioner = new Versioner([ // Reader for "VERSION" file new FileReader('VERSION') ]); // Retrieve version from versioner $version = $versioner->get('/foo/bar');
使用MTime
在常见场景中,一组文件(独立地)被更新,你想使用最高/最近的修改时间(mtime
)作为版本。这个版本可以用作清除缓存等。
use Naneau\ProjectVersioner\Versioner; use Naneau\ProjectVersioner\Reader\Finder\MTime as MTimeReader; // Create a versioner $versioner = new Versioner([ new MTimeReader('*.txt') // Look at all *.txt files ]); // Highest mtime, like 1410806782 $version = $versioner->get('/foo/bar');
使用内容
使用不同的读者,可以可能使用找到的文件的内容
use Naneau\ProjectVersioner\Versioner; use Naneau\ProjectVersioner\Reader\Finder\Contents as ContentsReader; $versioner = new Versioner([ new ContentsReader('*.jpg') ]); // Short hash of file contents, like gd504031 $version = $versioner->get('/foo/bar');
Composer
如果你的项目依赖于一组Composer依赖项,你可以使用Composer读者根据已安装的包来获取版本。
所有包
查看所有包的组合
use Naneau\ProjectVersioner\Versioner; use Naneau\ProjectVersioner\Reader\Composer as ComposerReader; $versioner = new Versioner([new ComposerReader]); // Short hash like "ae9b8a" $version = $versioner->get('/foo/bar');
使用特定包
或者,寻找特定的包
use Naneau\ProjectVersioner\Versioner; use Naneau\ProjectVersioner\Reader\ComposerPackage as ComposerPackageReader; $versioner = new Versioner([ new ComposerPackageReader('symfony/filesystem') ]); // Composer Version (SemVer) like "v2.5.4" $version = $versioner->get('/foo/bar');
合并读者
对于某些项目,你可能想合并读者,例如,如果某个读者没有提供输出,作为后备机制,或者为了获取由多个读者输出组成的版本。
组合Composer和Git
use Naneau\ProjectVersioner\Versioner; use Naneau\ProjectVersioner\Reader\ComposerPackage as ComposerPackageReader; use Naneau\ProjectVersioner\Reader\Git\Tag\Exec as GitTagReader; $versioner = new Versioner([ new ComposerPackageReader('symfony/filesystem'), new GitTagReader ]); // First version found $version = $versioner->get('/foo/bar'); // Composite of all readers, like "v0.3.4-gd504031" $combinedVersion = $versioner->getCombined('/foo/bar'); // You can specify the separator $combinedVersionUnderscore = $versioner->getCombined('/foo/bar', '_');
注意事项
- 获取版本不可避免地会使用(可能昂贵的)I/O。你可能想缓存结果。
- 基于exec的Git读者目前只适用于UN*X