20steps / versioning-bundle
Symfony3 应用程序版本控制,简单的控制台命令来管理应用程序版本(使用如 git tag 的处理器)使用语义化版本 2.0.0 推荐方案
Requires
- php: >=5.3.3
- herrera-io/version: ~1.0
- symfony/process: ~2.2|~3.0
- symfony/symfony: ~2.8|~3.0
Requires (Dev)
- composer/composer: ^1.0@dev
This package is not auto-updated.
Last update: 2024-09-29 03:11:06 UTC
README
简单方式对您的 Symfony2 应用程序进行版本管理。
这是什么
- 为您的 parameters.yml 文件添加额外的参数,并使其与当前应用程序版本保持一致。
- 实现了基本版本处理器,用于手动和 git tag 版本管理
- 易于扩展以用于不同的 SCM 或需求的新处理器
- 使用 https://github.com/herrera-io/php-version 库遵循语义化版本 2.0.0 推荐方案
- 使用 Symfony 控制台组件创建命令,可以轻松集成到 Capifony 以在每次部署时更新版本
目的
在您的 Symfony2 应用程序中有一个参数表示当前版本,以满足各种需求
- 在前端显示
- 在后台显示
- 您可以想到的任何事情
实现处理器
- ParameterHandler(使用 app:version:bump 命令手动管理版本)
- GitRepositoryHandler(git tag describe 处理器,自动更新版本,查看 git 标签)
- InitialVersionHandler(仅返回默认初始版本 0.1.0)
安装
运行 composer.phar update
php composer.phar require shivas/versioning-bundle
将包添加到您的 AppKernel
new Shivas\VersioningBundle\ShivasVersioningBundle()
在控制台中运行
# This will display of available handlers for version bumping
./app/console app:version:bump -l
# to see dry-run
./app/console app:version:bump -d
默认配置
包的默认配置如下所示
./app/console config:dump ShivasVersioningBundle
Default configuration for "ShivasVersioningBundle"
shivas_versioning:
version_parameter: application_version
version_file: parameters.yml
这意味着在参数文件中,将创建并更新 application_version
变量,您可以在 config.yml 文件中将其名称更改为任何您想要的名称。如果您想使用除 parameters.yml
之外的其他文件,也可以指定该文件。如果是这样,请确保在 config.yml 文件中导入它 - 您可能想使用 ignore_errors
在导入时避免问题,如果文件尚不存在。
# app/config/config.yml imports: - { resource: sem_var.yml, ignore_errors: true } shivas_versioning: version_file: sem_var.yml
Git 处理器
Git 处理器仅在您的仓库中至少有一个标签时才有效,并且用于版本管理的所有标签都应该遵循 SemVer 2.0.0 语法,除了 git 处理器允许在标签中使用字母 "v" 或 "V",例如 v1.0.0
从 git 标签提取应用程序版本的方式如下
- 移除 v 或 V
- 如果提交 SHA 与最后一个标签 SHA 匹配,则将标签转换为版本
- 如果提交 SHA 与最后一个标签 SHA 不匹配,则发生以下情况
- 将标签解析为版本
- 添加 SemVer 的预发布部分,数据如下:"-dev.abcdefa"
- 其中预发布部分 "dev" 表示版本尚未标记且为 "dev" 稳定,最后一部分是提交 SHA
这是默认行为,但您可以随时更改它(稍后介绍)
显示版本
要在页面上显示版本,例如在标题中,您可以在 config.yml 中添加以下内容
twig: globals: app_version: v%application_version%
然后,在您的 Twig 布局中显示它作为全局变量
<title>{{ app_version }}</title>
或者,如果您想自动显示版本(而无需先提升版本),请将 config.yml
设置为
twig: globals: shivas_manager: '@shivas_versioning.manager'
然后,在您的 Twig 布局中
<title>{{ shivas_manager.version }}</title>
缺点是应用程序版本将在加载 Twig 布局时每次都计算,即使该变量在模板中未被使用。然而,如果版本更新频繁或您担心忘记提升版本,这可能很有用。
添加自定义处理器
这很简单,编写一个实现HandlerInterface接口的类
namespace Acme\AcmeBundle\Handler; use Shivas\VersioningBundle\Handler\HandlerInterface; class MyCustomHandler implements HandlerInterface { }
例如,让我们修改git处理器添加预发布数据到版本的方式,如果标签过时,就不再添加,而是只添加带有git提交SHA的"build"部分。我们将重用大部分git处理器,并仅覆盖用于处理元数据的方法
<?php namespace Acme\AcmeBundle\Handler; use Herrera\Version\Builder; use Shivas\VersioningBundle\Handler\GitRepositoryHandler; class MyCustomHandler extends GitRepositoryHandler { protected function handleMetaData(Builder $builder, $matches) { if (intval($matches[7]) != 0) { // just add commit sha to build part $build = array_merge($builder->getBuild(), array($matches[8])); $builder->setBuild($build); } } }
使用您的服务文件(我的情况是xml)将处理器添加到容器中
<service id="mycustom_git_handler" class="Acme\AcmeBundle\Handler\MyCustomHandler"> <argument>%kernel.root_dir%</argument> <tag name="shivas_versioning.handler" alias="my_own_git" priority="20" /> </service>
注意priority属性,如果您想覆盖默认的git处理器,它的默认值为0,那么它的值应该大于0。
在控制台中运行
./app/console app:version:bump -l
并且注意您的新处理器位于旧处理器之上
Registered Version handlers
============ ========== ===================================== ===========
Alias Priority Name Supported
============ ========== ===================================== ===========
my_own_git 20 Git tag describe handler Yes
git 0 Git tag describe handler Yes
parameter -50 parameters.yml file version handler Yes
init -100 Initial version (0.1.0) handler Yes
============ ========== ===================================== ===========
因此,下次您执行版本提升时,您的自定义git处理器将负责您的版本构建。
使Composer在安装时提升您的版本
向您的composer.json文件添加脚本处理器
Shivas\\VersioningBundle\\Composer\\ScriptHandler::bumpVersion
以在post-install-cmd上调用它。确保它位于clearCache之上,它可能看起来像这样
"scripts": { "post-install-cmd": [ "Incenteev\\ParameterHandler\\ScriptHandler::buildParameters", "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap", "Shivas\\VersioningBundle\\Composer\\ScriptHandler::bumpVersion", "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::clearCache", "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installAssets", "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installRequirementsFile", "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::prepareDeploymentTarget" ], "post-update-cmd": [ "Incenteev\\ParameterHandler\\ScriptHandler::buildParameters", "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap", "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::clearCache", "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installAssets", "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installRequirementsFile", "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::prepareDeploymentTarget" ] },
Capifony版本提升任务
将以下内容添加到您的食谱中
namespace :version do desc "Updates version using app:version:bump symfony command" task :bump, :roles => :app, :except => { :no_release => true } do capifony_pretty_print "--> Bumping version" run "#{try_sudo} sh -c 'cd #{latest_release} && #{php_bin} #{symfony_console} app:version:bump #{console_options}'" capifony_puts_ok end end # bump version before cache is created before "symfony:assets:install", "version:bump" after "version:bump", "symfony:cache:clear"
Capistrano v3版本提升任务
将以下内容添加到您的食谱中
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' namespace :version do desc "Updates version using app:version:bump symfony command" task :bump do invoke 'symfony:console', 'app:version:bump' end end # After deploy bump version after 'deploy:finishing', 'version:bump'
祝您项目版本管理成功。
欢迎为不同的SCM等做出贡献,请使用pull request。