作为MacOS用户,Homebrew 是必不可少的工具之一,正如它的描述所示
The missing package manager for macOS
—— 它提供了很多 App Store 没有的软件和工具。而什么是 Tap?Tap 全称
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
从模版文件中就能看出,如果我们需要发布下一版本,只需要修改 url
和 sha256
两个参数,其中 sha256
可以使用 sha256sum v0.1.2/snow-darwin.tar.gz
获得
安装软件
brew install honmaple/tap/snow
注意:不能直接使用 brew install snow
,因为如果在 homebrew/core
有相同名称的包,默认将会安装 homebrew/core
上的包,所以必须指明使用哪个 Tap
上传到Github
-
首先需要到 Github 创建一个公共仓库,取名
homebrew-{Tap名称}
, 比如我的是honmaple/homebrew-tap
,注意名称必须是homebrew-
开头,方便后续直接使用{用户名}/{Tap名称}
。创建好后先不要克隆到本地 -
复制之前创建好的
honmaple/tap
目录,方便后续维护cp -r /usr/local/Homebrew/Library/Taps/honmaple/homebrew-tap ~/Git/
-
修改仓库
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
-
重置本地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