nameau / project-versioner

一个基于Composer、文件mtime等维护项目/子项目版本的工具。

1.0.4 2017-06-15 15:48 UTC

This package is not auto-updated.

Last update: 2024-09-14 16:44:58 UTC


README

Latest Stable Version Build Status Scrutinizer Code Quality

这是一个简单的工具,用于获取PHP项目的“版本”。

安装

通过composer安装

composer require naneau/project-versioner=~0

示例

这个库围绕一个“版本器”构建,该版本器接受一个或多个“读取器”。

使用Git

如果你的项目使用Git维护,你可以用它来查看版本。

提交

使用最后的提交作为版本

use Naneau\ProjectVersioner\Versioner;
use Naneau\ProjectVersioner\Reader\Git\Commit\Exec as GitCommitReader;

// Create a versioner
$versioner = new Versioner(array(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(array(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(array(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(array(
    // 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(array(
    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(array(
    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(array(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(array(
    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(array(
    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