angrybytes/project-versioner

一个基于Composer、文件修改时间等来维护项目/子项目版本的工具。

3.0.0 2023-12-01 07:38 UTC

This package is auto-updated.

Last update: 2024-08-30 01:09:17 UTC


README

PHP checks

注意:这是一个原始项目的分支,因为它看起来已经被遗弃。

这是一个用于获取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