mrfleshka/symfony-versioning-bundle

使用语义化版本控制 2.0.0 建议,通过简单的控制台命令管理 Symfony 应用程序版本(例如使用 git tag 提供者)

4.0.2 2022-10-31 09:04 UTC

This package is auto-updated.

Last update: 2024-09-29 06:09:13 UTC


README

versioning-bundle

SensioLabsInsight Total Downloads

简单方式为 Symfony Flex 应用程序进行版本管理。

这是什么

  • 使用 Git 标签或 Capistrano REVISION 文件自动跟踪您的应用程序版本
  • 添加全局 Twig 变量以方便访问
  • 易于扩展以支持新的版本提供者和不同 SCM 或需求的格式化器
  • 使用 https://github.com/nikolaposa/version 库遵循语义化版本控制 2.0.0 建议
  • 支持手动版本管理

目的

在您的 Symfony 应用程序中有一个环境变量,其中包含应用程序的当前版本,以适应各种需求

  • 在前端显示
  • 在后台显示
  • 您能想到的任何事情

已实现的提供者

  • VersionProvider(从 VERSION 文件中读取版本)
  • GitRepositoryProvider(git tag describe 提供者,通过查看 git 标签自动更新版本)
  • RevisionProvider(从 REVISION 文件中读取版本)
  • InitialVersionProvider(仅返回默认初始版本 0.1.0)

安装

Symfony Flex 自动化安装过程,只需在您的应用程序中要求此捆绑包!

composer require shivas/versioning-bundle

版本将在您的应用程序中自动可用。

# Twig template
{{ shivas_app_version }}

# Or get the version from the service
public function indexAction(VersionManagerInterface $manager)
{
    $version = $manager->getVersion();
}

控制台命令

有三种可用的控制台命令。您只需在手动管理版本号时运行 app:version:bump 命令。

# Display the application version status
bin/console app:version:status

# Display all available version providers
bin/console app:version:list-providers

# Manually bump the application version
bin/console app:version:bump

版本提供者

提供者用于获取应用程序的版本字符串。所有版本都应遵循 SemVer 2.0.0 标注,除了字母 "v" 或 "V" 可以作为前缀,例如 v1.0.0。建议的版本提供者是 GitRepositoryProvider,它仅在您的存储库中至少有一个标签时才工作。确保您的所有标签都是有效的版本号。

添加自己的提供者

很简单,编写一个实现 ProviderInterface 的类

namespace App\Provider;

use Shivas\VersioningBundle\Provider\ProviderInterface;

class MyCustomProvider implements ProviderInterface
{

}

使用您的服务文件将提供者添加到容器中

App\Provider\MyCustomProvider:
    tags:
        - { name: shivas_versioning.provider, alias: my_provider, priority: 0 }
<service id="App\Provider\MyCustomProvider">
    <tag name="shivas_versioning.provider" alias="my_provider" priority="0" />
</service>

请查看优先级属性,它应在 0 到 99 之间,以保持提供者的正确顺序。

确保您的提供者正确加载并受支持

bin/console app:version:list-providers

Registered version providers
 ============= ========================================================= ========== ===========
  Alias         Class                                                     Priority   Supported
 ============= ========================================================= ========== ===========
  version       Shivas\VersioningBundle\Provider\VersionProvider          100        No
  my_provider   App\Provider\MyCustomProvider                             0          Yes
  git           Shivas\VersioningBundle\Provider\GitRepositoryProvider    -25        Yes
  revision      Shivas\VersioningBundle\Provider\RevisionProvider         -50        No
  init          Shivas\VersioningBundle\Provider\InitialVersionProvider   -75        Yes
 ============= ========================================================= ========== ===========

版本格式化器

版本格式化器用于修改版本字符串,使其更易于阅读。默认的 GitDescribeFormatter 以以下方式工作

  • 如果提交 sha 与最后一个标签 sha 匹配,则将标签转换为版本
  • 如果提交 sha 与最后一个标签 sha 不匹配,则发生以下情况
    • 将标签解析为版本
    • 添加预发布部分,如下所示:"dev.abcdefa"
    • 其中预发布部分 "dev" 表示版本未标记,并且是 "dev" 稳定版本,最后一部分是提交 sha

如果您想禁用默认格式化器,请使用 NullFormatter

# app/config/services.yaml
Shivas\VersioningBundle\Formatter\NullFormatter: ~
Shivas\VersioningBundle\Formatter\FormatterInterface: '@Shivas\VersioningBundle\Formatter\NullFormatter'

创建自己的版本格式化器

要自定义版本格式,请编写一个实现 FormatterInterface 的类

namespace App\Formatter;

use Shivas\VersioningBundle\Formatter\FormatterInterface;

class MyCustomFormatter implements FormatterInterface
{

}

然后使用别名将 FormatterInterface 与您的自定义实现相关联

# app/config/services.yaml
Shivas\VersioningBundle\Formatter\FormatterInterface: '@App\Formatter\MyCustomFormatter'

Capistrano v3 任务用于创建 REVISION 文件

请将以下内容添加到您的配方中

namespace :deploy do
    task :add_revision_file do
        on roles(:app) do
            within repo_path do
                execute(:git, :'describe', :"--tags --long",
                :"#{fetch(:branch)}", ">#{release_path}/REVISION")
            end
        end
    end
end

# We get git describe --tags just after deploy:updating
after 'deploy:updating', 'deploy:add_revision_file'

祝您版本控制项目顺利。

欢迎为不同的源代码管理工具等做出贡献,只需提交一个拉取请求即可。