drevops / git-artifact
从您的代码库在CI中构建工件并将其推送到单独的Git仓库。
Requires
- php: >=8.2
- czproject/git-php: ^4.3
- monolog/monolog: ^3.5
- symfony/console: ^7
- symfony/filesystem: ^7
- symfony/finder: ^7
- symfony/monolog-bridge: ^7
- symfony/process: ^7
Requires (Dev)
- bamarni/composer-bin-plugin: ^1.8
- dealerdirect/phpcodesniffer-composer-installer: ^1.0
- drupal/coder: ^8.3
- phpmd/phpmd: ^2.15
- phpstan/phpstan: ^1.10
- phpunit/phpunit: ^10.5
- rector/rector: ^1.0.0
README
将包和文件推送到远程仓库
这是什么?
一个从您的代码库组装代码工件、删除不必要的文件并将其推送到单独Git仓库的工具。
为什么?
在Acquia等托管环境中,对构建应用程序可用的语言或框架有限制,例如,由于只读文件系统无法运行composer install。因此,网站必须在单独的(源)仓库中开发,将其编译成工件(本地或通过CI),然后传输到托管提供商的版本控制系统(目标仓库)。
此工具可无缝实现这些流程:它使用.gitignore.deployment
文件来确定应传输到目标仓库的文件,确保只包括必要的文件,并排除由忽略文件指定的文件。
此外,由于目标仓库需要提交以合并工件(如CSS、JS等)中的更改,因此此工具提供两种提交选项:force-push
或branch
,以满足不同的工作流程偏好。
请参阅工件分支中的部署工件示例。
模式
force-push
模式(默认)
将打包的工件推送到目标仓库的同一分支,同时保留源仓库的历史记录,并覆盖目标仓库中现有的历史记录。
用例
将源仓库中所有更改按原样转发到目标仓库的每个分支:例如,源仓库分支feature/123
上的提交会在目标仓库分支feature/123
上创建提交。源仓库分支feature/123
的下一个提交会将更改更新到目标仓库分支feature/123
,但会覆盖最后的“部署”提交。
branch
模式
在每个部署时将打包的工件推送到新的分支,保留源仓库的历史记录,但需要在每次部署后触发新创建分支的部署。
用例
在源仓库创建的每个标签都在目标仓库中创建一个新的分支:例如,源仓库中的标签1.2.3
会在目标仓库中创建分支deployment/1.2.3
。新标签的添加会在目标仓库中创建新的唯一分支。
安装
composer require drevops/git-artifact
或从GitHub发布页面下载最新版本。
使用方法
./git-artifact git@github.com:yourorg/your-repo-destination.git
这将从一个当前目录创建一个工件,并将其发送到指定的远程仓库,与当前分支相同。
在CI中运行
查看示例
从CI配置或部署脚本调用
export DEPLOY_BRANCH=<YOUR_CI_PROVIDER_BRANCH_VARIABLE> ./git-artifact git@github.com:yourorg/your-repo-destination.git \ --branch="${DEPLOY_BRANCH}" \ --push
选项
修改工件内容
--gitignore
选项允许指定要替换现有 .gitignore
(如果有的话)的工件 .gitignore
文件的路径。任何不再由替换工件的 .gitignore
忽略的文件都会添加到部署提交中。如果没有不再被排除的文件,部署提交仍然会创建,以确保捕获部署时间戳。
令牌支持
令牌是由 [
和 ]
包围的预定义字符串,可以包含可选的格式化器(以提高灵活性)。例如,[timestamp:Y-m-d]
被替换为当前时间戳,格式为 Y-m-d
(令牌格式化器),这是 PHP date()
预期格式。
--branch
和 --message
选项值都支持令牌替换。
可用令牌
[timestamp:FORMAT]
- 兼容 PHPdate()
的当前时间,格式为FORMAT
。[branch]
- 源仓库中的当前分支。[tags:DELIMITER]
- 由源仓库中最新提交的标签组成,以DELIMITER
分隔。
维护
代码审查
composer lint composer lint-fix
运行测试
composer test
使用 https://getscaffold.dev/ 项目脚手架模板创建的存储库