demroos/versioning-bundle

Symfony3|4应用程序版本管理,简单的控制台命令,用于管理应用程序的版本(使用例如git tag的提供者),遵循Semantic Versioning 2.0.0建议

安装: 121

依赖: 0

建议者: 0

安全: 0

星标: 0

关注者: 1

分支: 30

类型:symfony-bundle

4.0.0 2021-02-12 12:23 UTC

README

SensioLabsInsight Total Downloads Build Status

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

这是什么

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

目的

在您的Symfony应用程序中有一个环境变量,用于显示应用程序的当前版本,满足各种需求

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

已实现的提供者

  • VersionProvider(从VERSION文件中读取版本)
  • GitRepositoryProvider(使用git标签描述提供者,自动通过查看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(VersionManager $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

如果您想禁用默认格式化器,请在您的配置中重新配置VersionManager。

# app/config/services.yaml
Shivas\VersioningBundle\Service\VersionManager:
    arguments:
        $formatter: ~

创建自己的版本格式化器

要自定义版本格式,请编写一个实现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'

祝您项目版本管理顺利。

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