20steps/versioning-bundle

Symfony3 应用程序版本控制,简单的控制台命令来管理应用程序版本(使用如 git tag 的处理器)使用语义化版本 2.0.0 推荐方案

安装: 69

依赖项: 0

建议者: 0

安全: 0

星标: 0

观察者: 4

分叉: 30

开放问题: 0

类型:symfony-bundle

1.4.2 2017-02-06 11:51 UTC

This package is not auto-updated.

Last update: 2024-09-29 03:11:06 UTC


README

SensioLabsInsight Total Downloads

简单方式对您的 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。