Manage CLI using Homebrew Formula

当团队工程中的脚本过多了以后,就应该考虑把它们组织起来,做成 CLI 了。比起一个个独立的脚本,CLI 更容易升级和维护,也更方便共享代码。
我的初衷就是把所有的脚本放到一个 gitlab 的 repo 中,所有想使用这个工具的人通过很简单的方式就能安装、更新并使用它。
那么问题来了,如何把这些脚本,变成在团队内部,人人都可以安装/升级的 CLI 呢?
我的选择是 Homebrew Formula。
 

Homebrew Formula

因为团队内部编写了很多 ruby 脚本,所以选择 Homebrew 是一件很 nature 的事情。
本来我想把它做成一个 gem 发布出去,但是由于 private 的 gem 需要有自己的源,折腾起来太麻烦,所以就放弃了。
后来搜索到,Homebrew Formula 是支持 private repo 的,所以就打算走这条路试试看。
Formula Cookbook 是官方提供的一些信息,但文档几乎没有人看,我就简单介绍一下这些东西到底是怎么回事。
比如我要写一个叫 foo 的命令行工具,用户可以在终端执行 foo hello 来输出 hello world!。那我大概需要做哪些事情呢?

1. 创建两个仓库(或者只创建一个仓库)

一个仓库用来放置 formula(类似于 CocoaPods/Specs),一个仓库用来放代码源文件。当然,如果你为了省事,可以像我一样,只创建一个仓库。
我创建了一个,叫 homebrew-foo

2. 编写 CLI 的代码

这是我编写好的 foo,注意,需要给它加上执行权限。而且这里我依赖了一个叫 gli 的 gem。

3. 创建 Formula 文件

formula 可以看作一个描述文件,用来描述这个软件的具体信息,类似于 https://github.com/CocoaPods/Specs 中的一个 Sepc
我在 repo 根目录创建了一个 Formula 文件夹,在它里面添加了 foo.rb 这个 formula
我这里写得比较复杂,因为我依赖了 gli 这个 gem,如果你不依赖任何 gem,就会简单很多

4. 安装

有了 formula,有了源代码,其实现在就可以 release 给大家用了。
安装步骤如下,
brew tap x140yu/core git@github.com:X140Yu/homebrew-foo.git
这条命令会把你 formula 所在的仓库 clone 到 /usr/local/Homebrew/Library/Taps/x140yu/homebre-core 里面。为你的 foo 建立搜索范围。
brew install foo
homebrew 会在上面那个目录里找到你的 formula,就可以安装了。
如果你像我一样进行了上面的操作,那你的 CLI 就已经安装成功并可以运行了,
notion image

5. 更新

软件发布了新版本支持了新功能怎么办?
  1. 更新代码
  1. 升级 Formula/foo.rb 中的 tag 像这样
  1. 把代码 push 到远程仓库
  1. 打上与刚才一致的 tag
在安装的机器上执行 brew update && brew reinstall foo 就可以更新到你修改的最新版本了
notion image

6. 卸载

notion image
示例代码仓库在这里 https://github.com/X140Yu/homebrew-foo 在某些关键的地方添加注释,希望你能看得明白
怎么样,不是很麻烦吧,如果遇到什么问题,欢迎留言~

© Xinyu 2014 - 2024