使用Homebrew Tap发布个人工具


作为MacOS用户,Homebrew 是必不可少的工具之一,正如它的描述所示 The missing package manager for macOS —— 它提供了很多 App Store 没有的软件和工具。

而什么是 TapTap 全称 Third-Party Repositories,顾名思义为第三方仓库,它可以创建属于自己的软件集合,不用将软件发布到官方仓库,避免了和官方仓库的其它软件同名,也不用发PR,等审核等诸多优势。此次,我将创建一个 Homebrew Tap,用于为我自己开发的部分软件和工具提供更加方便的安装方式。

创建Tap

使用 brew 命令创建

└──╼ brew tap-new honmaple/tap
Initialized empty Git repository in /usr/local/Homebrew/Library/Taps/honmaple/homebrew-tap/.git/
[main (root-commit) 7d893ca] Create honmaple/tap tap
 3 files changed, 90 insertions(+)
 create mode 100644 .github/workflows/publish.yml
 create mode 100644 .github/workflows/tests.yml
 create mode 100644 README.md
==> Created honmaple/tap
/usr/local/Homebrew/Library/Taps/honmaple/homebrew-tap

When a pull request making changes to a formula (or formulae) becomes green
(all checks passed), then you can publish the built bottles.
To do so, label your PR as `pr-pull` and the workflow will be triggered.

创建后会提示在 /usr/local/Homebrew/Library/Taps/honmaple/homebrew-tap/ 目录生成一个 Git 仓库

生成模版

比如我想要为已经打包好的工具 Snow 0.1.2 生成模版,注意指定 --tap 参数

└──╼ brew create https://github.com/honmaple/snow/releases/download/v0.1.2/snow-darwin.tar.gz --tap honmaple/tap
Formula name [snow]:
...

在输入提示的工具名称后(也可以保持默认),这时会生成并使用默认编辑器打开 /usr/local/Homebrew/Library/Taps/honmaple/homebrew-tap/Formula/snow.rb,内容如下:

# Documentation: https://docs.brew.sh/Formula-Cookbook
#                https://rubydoc.brew.sh/Formula
# PLEASE REMOVE ALL GENERATED COMMENTS BEFORE SUBMITTING YOUR PULL REQUEST!
class Snow < Formula
  desc "static site generator"
  homepage ""
  url "https://github.com/honmaple/snow/releases/download/v0.1.2/snow-darwin.tar.gz"
  sha256 "78a65c740eff24193132e063654bd1d7023f6687c94ce852e50a03a43eaba558"
  license "BSD-3-Clause"

  # depends_on "cmake" => :build

  def install
    # Remove unrecognized options if they cause configure to fail
    # https://rubydoc.brew.sh/Formula.html#std_configure_args-instance_method
    system "./configure", "--disable-silent-rules", *std_configure_args
    # system "cmake", "-S", ".", "-B", "build", *std_cmake_args
  end

  test do
    # `test do` will create, run in and delete a temporary directory.
    # ...
    system "false"
  end
end

修改模版

因为我此次发布的只是一个 Go 编译的二进制文件,只用将文件添加到可执行目录即可。如需其它操作,请查阅Homebrew Tap官方文档

修改模版后内容如下:

class Snow < Formula
  homepage "https://github.com/honmaple/snow"
  desc "static site generator"
  url "https://github.com/honmaple/snow/releases/download/v0.1.2/snow-darwin.tar.gz"
  sha256 "78a65c740eff24193132e063654bd1d7023f6687c94ce852e50a03a43eaba558"
  license "BSD-3-Clause"

  def install
    bin.install "snow"
  end

  test do
    assert_match "snow version #{version}", shell_output("#{bin}/snow --version")
  end
end

从模版文件中就能看出,如果我们需要发布下一版本,只需要修改 urlsha256 两个参数,其中 sha256 可以使用 sh256sum v0.1.2/snow-darwin.tar.gz 获得

安装软件

brew install honmaple/tap/snow

注意:不能直接使用 brew install snow,因为如果在 homebrew/core 有相同名称的包,默认将会安装 homebrew/core 上的包,所以必须指明使用哪个 Tap

上传到Github

  1. 首先需要到 Github 创建一个公共仓库,取名 homebrew-{Tap名称}, 比如我的是 honmaple/homebrew-tap,注意名称必须是 homebrew- 开头,方便后续直接使用 {用户名}/{Tap名称}。创建好后先不要克隆到本地

  2. 复制之前创建好的 honmaple/tap 目录,方便后续维护

    cp -r /usr/local/Homebrew/Library/Taps/honmaple/homebrew-tap ~/Git/
  3. 修改仓库

    cd ~/Git/homebrew-tap
    # 删除默认的Github Action
    rm -rf .github
    # 添加远程
    git remote add origin [email protected]:honmaple/homebrew-tap.git
    # 添加软件
    git add Formula/snow.rb
    git commit -m "add snow.rb"
    git push origin master
  4. 重置本地tap,首先需要卸载之前创建好的 honmaple/tap

    brew untap honmaple/tap

    如果已经安装了 homebrew/tap/snow, 需要先卸载

    brew uninstall honmaple/tap/snow

    在执行完 修改仓库 这一步后,就可以重新添加 tap

    brew tap honmaple/tap

    并重新安装想要的软件

    brew install honample/tap/snow

结语

至此,创建一个私人使用的 MacOS 软件包集合就此结束,我可以往里面添加一些自己写的软件和工具,可以是 Bash 脚本,也可以是 Go 编译好的二进制等,后面就不用再指定具体目录或者手动复制文件到 $PATH/bin 目录下了。OK

作者: honmaple
链接: https://honmaple.me/articles/2024/03/shi-yong-homebrew-tapfa-bu-ge-ren-gong-ju.html
版权: CC BY-NC-SA 4.0 知识共享署名-非商业性使用-相同方式共享4.0国际许可协议
wechat
alipay

加载评论