namelesscoder / typo3-repository-gizzle
GitHub Webhook 监听器,在创建标签时将 TYPO3 扩展发布到 TER
Requires
Requires (Dev)
- phpunit/phpunit: @stable
- satooshi/php-coveralls: *
README
本项目允许任何托管在 GitHub 的包含 TYPO3 CMS 扩展的仓库通过添加一个非常简单的 GitHub web hook 发布到官方 TYPO3 扩展仓库(以下简称 TER)。
此服务的官方端点是 https://release.namelesscoder.net
,但您也可以将此包安装在自己的服务器上,并使用该安装位置作为端点。
该项目使用 Gizzle 监听 GitHub 事件,并使用 Gizzle TYPO3 插件进行实际上传。内部,Gizzle TYPO3 插件使用 TYPO3 仓库客户端。
- https://github.com/NamelessCoder/gizzle
- https://github.com/NamelessCoder/gizzle-typo3-plugins
- https://github.com/NamelessCoder/typo3-repository-client
要求
- 包含您的扩展源代码的 公开 GitHub 仓库。
- 仅限自定义端点:访问
git
和php
CLI 命令,以及一种通过 HTTP/HTTPS 服务器web/index.php
文件的方式。
安装
- 编辑您的仓库设置并定位到 "Webhooks & services"。
- 点击 "添加 webhook" 创建一个新的钩子。
- 在 "Payload URL" 中,填写您希望使用的端点 URL。默认 URL 是
https://release.namelesscoder.net
- 将您独特的凭据和信息添加到 URL 中。有两种可能的 URL 格式
- 如果您的 GitHub 仓库名称与您的 TER 扩展密钥不同,则必须使用类似
https://release.namelesscoder.net/my_extension/user:password
的 URL - 这会将仓库以密钥my_extension
发布。 - 如果您的 GitHub 仓库已命名为与扩展密钥相同的名称,则可以省略该部分 URL 并使用更短的 URL,例如
https://release.namelesscoder.net/user:password
。 - 或者,如果您觉得这种方式更舒服,并且端点支持,则可以使用
https://username:password@release.namelesscoder.net/my_extension
。此方法仅在服务器支持authnz_external_module
或相应的外部身份验证时才有效 - 请见下文。
- 如果您的 GitHub 仓库名称与您的 TER 扩展密钥不同,则必须使用类似
- 输入一个 "Secret"。我们现在使用一个固定的密钥 - 输入文本
typo3rocks
。 - 保留 "Which events..." 选择器不变。我们只需要
push
事件。
不幸的是,没有方法可以隔离仅在创建新标签时才会分发的事件 - 这也是为什么我们必须监听所有 push
事件的原因。我们只是忽略那些不引用标签的。
安全
因为您的凭据包含在 URL 中,所以在默认端点我们正在执行以下操作,如果您创建了一个端点,您也绝对应该这样做
- URL 受 SSL 保护。
- 请求的完整 URL 从不被记录。
请注意,此 URL 中凭据的方法被认为是 临时 的,并且仅实现,因为目前没有其他方法。最终目标是使用令牌解决方案,包括当前固定的 "Secret",以及必须传递给 TER 的凭据。前者将通过创建官方 GitHub 服务来解决,而后者将取决于在 TER 或甚至 TYPO3 SSO 本身上完成的工作。
如果您的 web 服务器支持它(Apache 通过 authnz_external_module
支持),则可以注册外部身份验证器(如果需要更改/移动路径)
<IfModule authnz_external_module>
DefineExternalAuth fake environment /var/www/release.namelesscoder.net/fake-auth.sh
</IfModule>
...这需要添加到您的虚拟主机或根服务器配置中。fake-auth.sh
脚本是一个模拟脚本,允许任何用户名和密码进行认证 - 如果按照这种方式操作,该项目将读取这些(模拟的)凭据。这意味着您可以在上传到TER时指定要使用的凭据,例如 https://username:password@release.namelesscoder.net/my_extension
。
使用方法
要从GitHub仓库创建新的TER版本,只需创建一个新的标签并推送即可。上传程序将使用您标记的提交消息作为TER上的上传注释。要创建并推送新的标签
git tag 1.2.3
git push origin 1.2.3
这将创建一个名为 1.2.3
的新标签并将其推送到名为 origin
的远程仓库。
查看结果
以这种方式触发的上传结果可以在两个不同的地方查看
- 创建版本时添加的 公开消息 会作为注释添加到标记时仓库的HEAD提交。
- 可以查看的 私有调试信息 通过在安装部分所述的“Webhooks & services”面板中查找,并点击添加的URL来查看。显示最近交易的一个简短列表,点击其中任何一个都可以查看任何技术错误。
行为
该插件的行为描述得非常简单
- 每当您向GitHub推送时,我们会收到一个事件。
- 我们分析Payload HEAD
- 如果不是新标签,则退出。
- 如果是新标签,则上传新的版本。
- 我们在您标记的提交上设置“成功”状态标志。
- 我们在您标记的提交上添加注释,说明它已发布到TER。
- 我们添加一些调试信息并将我们的响应发送到GitHub。
整个过程只需几秒钟,具体取决于您的扩展大小。如果在过程中出现任何错误,它会捕获并可以像上面描述的那样在web hook响应中检查。