mrfleshka / symfony-versioning-bundle
使用语义化版本控制 2.0.0 建议,通过简单的控制台命令管理 Symfony 应用程序版本(例如使用 git tag 提供者)
Requires
- php: ^7.2 || ^8
- nikolaposa/version: ^4
- symfony/console: ^3.4 || ^4 || ^5 || ^6
- symfony/framework-bundle: ^3.4 || ^4 || ^5 || ^6
- symfony/process: ^3.4 || ^4 || ^5 || ^6
Requires (Dev)
- mikey179/vfsstream: ^2
- nyholm/symfony-bundle-test: 1.x-dev
- phpunit/phpunit: ^8.5.27
- symfony/phpunit-bridge: ^5 || ^6
- twig/twig: ^2 || ^3
This package is auto-updated.
Last update: 2024-09-29 06:09:13 UTC
README
versioning-bundle
简单方式为 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'
祝您版本控制项目顺利。
欢迎为不同的源代码管理工具等做出贡献,只需提交一个拉取请求即可。