HomebrewのFormulaを作成しzsh-autocompleteをbrewコマンドで入れられるようにした
dotfilesを作っっている中で、自動で補完の候補が表示されるzsh-autocompleteがHomebrewでインストールできなかったので、Homebrew Formulaを作成した。
自作のTap(自分のレポジトリからインストール)でもよかったが、今回は頑張ってHomebre/homebrew-coreにプルリクを送った。
詳細は公式のFormula Cookbookを確認してください。
要件の確認
CookbookにあるBasic instructionsを確認する。
今回この中で、Acceptable FormulaeのNiche(or self-submitted) stuffにある
be maintained (i.e. the last release wasn’t ages ago, it works without patching on all Homebrew-supported OS versions and has no outstanding, unpatched security vulnerabilities)
の箇所が引っかかりました。
Homebrewでは基本的にGitHub Releasesからダウンロードを行うのですが、zsh-autocompleteではREADMEに書いてあるgit clone
のインストール方法とGitHub Releasesにあるバージョンが一年ほど違いました。
zsh-autocompleteは最近もかなり活発に開発されており、古いバージョンだとバグが多いのでzsh-autocompleteの作者さんに連絡をしました。
しかし英語が苦手なのでうまく伝わらなかったのかもしれませんが、「これがstableだから問題ないよ」と言われてしまいひとまず諦めました。
プルリクのための作業するディレクトリの準備
Cookbookには記載なく、こちらを参考に作成。
スクリプトの作成
Cookbookにある通り、以下を実行し雛形を作成。
brew create --set-name=zsh-autocomplete https://github.com/marlonrichert/zsh-autocomplete/archive/refs/tags/22.01.21.tar.gz
その後、homebrew-coreにある似たようなツールのソースコードを参考にしながら以下のようなスクリプトを作成しました。
class ZshAutocomplete < Formula
desc "Real-time type-ahead completion for Zsh"
homepage "https://github.com/marlonrichert/zsh-autocomplete"
url "https://github.com/marlonrichert/zsh-autocomplete/archive/refs/tags/22.01.21.tar.gz"
sha256 "3e725a8f603796a87cc915d02f26736d967c828b3ec1335543991ca6cbb1b753"
license "MIT"
head "https://github.com/marlonrichert/zsh-autocomplete.git", branch: "main"
depends_on "clitest" => :test
uses_from_macos "zsh" => :test
def install
pkgshare.install Dir["*"] + [".clitest"]
end
def caveats
<<~EOS
Installation
1. Add at or near the top of your .zshrc file (before any calls to compdef):
source #{HOMEBREW_PREFIX}/share/zsh-autocomplete/zsh-autocomplete.plugin.zsh
2. Remove any calls to compinit from your .zshrc file.
3. If you're using Ubuntu, add to your .zshenv file:
skip_global_compinit=1
Then restart your shell.
For more details, see:
https://github.com/marlonrichert/zsh-autocomplete
EOS
end
test do
cd pkgshare do
system "zsh", "./run-tests.zsh"
end
end
end
-
head
を追加し、GitHubから最新バージョンをインストールできるようにした - インストールの箇所では
pkgshare.install Dir["*"]
だとドットから始まる隠しファイルがコピーされなかったので後ろにテストで使う必要なファイルを付け加えた -
caveats
ではzshの他のツールやzsh-autocompleteのREADMEを参考に作成 - テストはzsh-autocompleteのテストをそのまま使用したが、カレントディレクトリにzsh-autocompleteのソースコードが必要なため
cd
し、インストールした箇所に移動し実行した
テスト・プルリクの作成など
こちらを参考にテストを行い通ったら、プルリクを作成。
今回作成したプルリク(人生初でとても緊張した)
参考にした方や前後のプルリクを見ると結構コメントされていてドキドキだったが何もなくマージされた🎉。参考資料
最初に流れを掴む時に日本語で時系列ごとに書かれていてとても分かりやすかったです。
Discussion