自 Homebrew 2.5.2 发布以来,除了之前的标准 Bintray 外,你还可以将瓶子(二进制包)上传到 GitHub Releases。2020 年 9 月 15 日,此 PR 为 Homebrew/brew
添加了支持,而 Homebrew/homebrew-test-bot
的 配套 PR 添加了将瓶子的基本下载 URL 设置为指向 GitHub 上特定版本的支持。
创建 tap
首先,转到 GitHub 并创建一个以 homebrew-
前缀命名的空仓库,例如:USER/homebrew-tap
。
然后在本地运行
brew tap-new USER/REPOSITORY
将 USER/REPOSITORY
更改为你刚在 GitHub 上创建的仓库的完整名称。你可以省略 homebrew-
前缀,如果你的默认分支的名称应与 main
不同,则指定 --branch
标志。
通过执行以下命令导航到磁盘上新创建的 tap
cd $(brew --repository USER/REPOSITORY)
现在,你可以列出此 tap 中的所有文件,以查看默认情况下创建了什么。
将你在 GitHub 上创建的仓库添加为 origin
远程并推送新创建的文件
git remote add origin https://github.com/USER/REPOSITORY
git push --set-upstream origin main
我不会详细介绍工作流的外观,因为它们随时可能更改。目前,默认情况下创建了 2 个工作流文件。
- 一个在每个
pull_request
事件上运行,因此每次推送到 PR 的分支都会触发工作流,该工作流会测试对公式所做的更改,为这些公式构建瓶子并将它们作为工件上传到 GitHub Actions。 - 第二个工作流在拉取请求被标记时运行,负责瓶子上传和发布。
在 tap 中创建第一个公式
是时候在我们的 tap 中添加一个新公式了,我们开始吧?
所有公式都应该放在 Formula
目录中。假设我们想为这个名为 gothanks
的小 Go 程序创建一个公式。在本地运行
brew create --tap=USER/REPOSITORY --go https://github.com/psampaz/gothanks/archive/v0.3.0.tar.gz
此命令将在你的 tap 中为 Go 项目创建一个新的标准公式,并在你选择的编辑器中打开该文件。关闭编辑器后,你仍然可以使用
brew edit USER/REPOSITORY/FORMULA
经过一些编辑后,我们的 gothanks
公式可能如下所示
class Gothanks < Formula
desc "Automatically star your go.mod Github dependencies"
homepage "https://github.com/psampaz/gothanks"
url "https://github.com/psampaz/gothanks/archive/v0.3.0.tar.gz"
sha256 "ce5440334b3eac2e058724faa4c6e4478ca1d81ea087e55ccca33f1996752aad"
license "MIT"
depends_on "go" => :build
def install
system "go", "build", *std_go_args
end
test do
ENV.delete "GITHUB_TOKEN"
assert_match "no Github token found", shell_output(bin/"gothanks", 255)
end
end
现在我们可以创建一个新分支,添加公式,提交并推送
git checkout -b gothanks
git add Formula/gothanks.rb
git commit --message "gothanks 0.3.0 (new formula)"
git push --set-upstream origin gothanks
但要触发工作流,我们需要从我们最近推送的分支创建一个拉取请求。我使用 hub
实用程序进行此操作,但你可以使用较新的 GitHub CLI 工具 gh
或直接在 GitHub 的 UI 中单击完成。
上传构建的瓶子
等到拉取请求的检查变为绿色。然后使用 pr-pull
标签标记你的拉取请求(这是将触发上传工作流的默认标签;你可以在工作流文件中轻松更改此标签)。一个新的 brew pr-pull
工作流将被启动,几分钟后你应该会看到 PR 已关闭,瓶子已上传,并且提交已推送到存储库的主分支。
总结
使用当前工具,现在比以往任何时候都更容易创建自己的带有瓶子的 Homebrew tap。你无需再创建 Bintray 帐户并摆弄自定义 CI 配置。现在你可以运行一堆命令,并在几分钟内启动并运行一个 tap,只需一个 GitHub 帐户!