以前 aqua v0.7.3 がリリースされた際に aqua で組織・チームのツール群を管理 という記事を書きました。
あれからもうすぐ 2 ヶ月になり、最新バージョンは v0.7.16 になりました。
そこで v0.7.4 ~ v0.7.16 の間の更新と、関連 repository の更新を幾つか(全部ではない)紹介します。
基本的に Release Note に書いてある内容です。
GitHub の Access Token が基本的に不要になりました Homebrew で install できるようになりました aqua.yaml がより簡潔に書けるようになりました aqua.yaml の packages を他のローカルのファイルから import できるようになりました aqua.yaml をディレクトリの階層的にネストできるようになりました aqua which コマンドをサポートしました github_archive, github_content type をサポートしました (advanced) バージョンによってパッケージの type が変更された場合にも対応できるようになりました Standard Registry の package の数が 139 => 220 になりました。aqua のための CircleCI Orb をリリースしましたGitHub の Access Token が基本的に不要になりました private repository から package をインストール場合は当然必要ですが、そうでなければ不要になりました。
これにより、 aqua を導入するハードルが下がりましたし、 GitHub API の Rate Limit に引っかかることが基本的になくなりました。
余談ですが、 private repository のツールを簡単に install できるのも aqua の便利な点だなと思っています。
Homebrew で install できるようになりました $ brew install suzuki-shunsuke/aqua/aqua
Copy Homebrew で install できるようにすることで、より手軽に導入してもらえるようになりました。
ちなみに aqua を aqua で管理出来ないのかというと、現状できません(無限ループになってしまう)。
aqua.yaml がより簡潔に書けるようになりました AS IS
- name : direnv/direnv registry : standard version : v2.28.0
Copy TO BE
- name : direnv/direnv@v2.28.0
Copy registry: standard
が省略可能version を name に @ のあとに書ける これにより 1 行で書けるようになりました。
ただ簡潔にかけて楽というだけでなく、 Renovate 用のコメントでパッケージ名を間違えて指定するリスクがなくなりました。
e.g. パッケージ名を間違えている例
- name : direnv/direnv registry : standard version : v2.28.0
Copy aqua-renovate-config を使えばコメントを書かなくても version を上げることが出来ます。
aqua.yaml の packages を他のローカルのファイルから import できるようになりました e.g.
ディレクトリ構成
aqua.yaml aqua/ reviewdog.yaml golangci-lint.yaml ...
Copy aqua.yaml
packages : - import : aqua/ *.yaml
Copy aqua/reviewdog.yaml
packages : - name : reviewdog/reviewdog@v0.13.0
Copy このようにファイルを分割することで、特定のパッケージが update された場合のみ CI で特定の job を実行するといったことがやりやすくなります。
例えば GitHub Actions の on.<push|pull_request>.paths
の場合、
name : test on : pull_request : paths : - '**.go' - aqua/golangci - lint.yaml
Copy aqua.yaml をディレクトリの階層的にネストできるようになりました aqua はカレントディレクトリからルートディレクトリに遡って ^\.?aqua\.ya?ml$
を探索します。
このとき、それまではファイルを一つ見つけた時点で探索をやめていましたが、全ての階層を探索するようになりました。
同じパッケージが定義されていた場合、先に見つかった設定ファイルの version が優先されます。
これにより、 Monorepo でも aqua が使いやすくなりました。
Monorepo 直下に aqua.yaml を置きつつ、サブディレクトリに aqua.yaml を置いても、サブディレクトリ配下で Monorepo 直下の aqua.yaml も参照できるようになりました。
aqua which コマンドをサポートしました $ which gh /Users/shunsuke-suzuki/.aqua/bin/gh $ aqua which gh /Users/shunsuke-suzuki/.aqua/pkgs/github_release/github.com/cli/cli/v2.2.0/gh_2.2.0_macOS_amd64.tar.gz/gh_2.2.0_macOS_amd64/bin/gh
Copy aqua は ~/.aqua/bin
配下にシンボリックリンクを作成し、コマンド実行時に動的にバージョンを決定し、インストールされたコマンドを実行します。
よって which
や command -v
では実際に実行されるコマンドのパスが分かりませんが、 aqua which コマンドを使うとパスが分かります。
ちなみに aqua で管理されてないコマンドでもパスを取得できます。
$ aqua which git /usr/local/bin/git
Copy 少々変わった使い方ですが、 aqua でインストールされた実行ファイルを別のパスにコピーしたい場合に便利です。
$ cp "$(aqua which gh)" src/gh
Copy github_archive, github_content type をサポートしました Standard Registry にある package をインストールしているだけの方は、そもそも package の type というものを気にする必要もないので
あまり関係ない話かもしれませんが、 http
, github_release
package に加えて、 github_archive
, github_content
package もサポートされました。
github_archive
は GitHub Repository の Archive をパッケージとして扱うもので、 tfenv を aqua でインストールする際なんかに使われています。
github_content
は GitHub Content API を使って GitHub Repository の単一ファイルをパッケージとして扱うものです。
(advanced) バージョンによってパッケージの type が変更された場合にも対応できるようになりました これまた advanced な内容で多くの方にはあまり関係ない裏側の仕組みの話ですが、パッケージによってはバージョンによって type が変わることがあります(かなりまれですが)。
あとは repository の owner が変わったりなんかもありますが、そういった場合にも対応できるようになりました。
ちなみに GitHub Release の asset のファイル名のフォーマットや、 asset のディレクトリ構成が変わることは時々ありますが、それらには元々対応できています。
e.g. https://github.com/suzuki-shunsuke/aqua-registry/blob/v0.10.7/registry.yaml#L486-L492
https://github.com/suzuki-shunsuke/aqua/blob/v0.7.16/docs/registry_config.md#version_constraint-version_overrides
Standard Registry package の数が 139 => 220 になりました。 Standard Registry は v0.8.6 から v0.10.7 になりましたが、その結果 package の数は 139 から 220 になりました。
aqua のための CircleCI Orb をリリースしました CircleCI で Orb を使って aqua を install したり aqua を使ってパッケージをインストールできるようになりました。
aqua とパッケージを cache してくれます。