💧

標準的な Action を aqua 向けの Action に置き換える

2022/01/15に公開

CLI ツールを YAML でバージョン管理できるツール aqua を開発しています。

https://aquaproj.github.io/

https://zenn.dev/topics/aquaclivm

幾つかのツール用の GitHub Actions の Action を、 aqua 向けの Action に置き換える話を書きます。
ここでいう「aqua 向けの Action」とは、ツールのインストールは行わない Action のことを指しています。

golangci-lint などのツールには標準的な Action が存在します。
ここでいう「標準的な Action」とは、そのツールの開発者が提供している Action のような、そのツールを使っているプロジェクトでよく使われている Action のことを指しています。

e.g. https://github.com/golangci/golangci-lint-action

- uses: golangci/golangci-lint-action@v2
  with:
    version: v1.29

それらの Action の多くはツールのインストールまで行うため、 aqua でツールを管理したい場合、都合が悪いです。

CI ではこれらの Action を使いつつローカルでは Homebrew で最新のやつをインストールしているとかだと、 古いバージョンが使われている CI は通ってるのにローカルで大量の lint error が出るなんてこともありえます。
aqua で CI とローカルでバージョンを揃えるとそういった問題から解放されます。

これらの Action に関する自分の課題意識は以前にも書いているのでそちらも参照してください。

https://zenn.dev/shunsuke_suzuki/articles/what-is-aqua#ci-での利用

https://aquaproj.github.io/docs/comparison/github-actions

標準的な Action を置き換える

ようやく本題ですが、上記のような標準的な Action は使わずに、 aqua でツールをインストールして実行する方式に置き換えてみましょう。

ツールの install は aqua-installer を使えば出来ます。

- uses: aquaproj/aqua-installer@v0.6.0
  with:
    aqua_version: v0.10.0

あとは単純にツールを実行すれば、最低限の目標は達成できます。

- run: golangci-lint run

しかしこれだと lint は出来ても golangci-lint-action のように結果を annotation で分かりやすく通知することが出来ません。

そこで reviewdog を使って結果を通知する Action を作りました。

https://github.com/suzuki-shunsuke/github-action-golangci-lint

- uses: suzuki-shunsuke/github-action-golangci-lint@v0.1.1

golangci-lint 以外にも自分が使う幾つかのツール向けに Action を作りました。

これらの Action ではツールのインストールを行わないので、事前にインストールする必要があります。
全部 reviewdog で結果を通知するようにしています。

なお、これらの Action は aqua に依存しているわけではないので、
例えば asdf のような別のツールと組み合わせて使うことも可能です。

以上、簡単ですが aqua 向けに作った Action を幾つか紹介しました。
aqua と組み合わせることで

  • ツールのバージョンを開発環境や CI できっちり揃え、バージョンの違いによるトラブルをなくす
  • 開発環境に簡単にツールをインストールできる
  • Renovate で簡単に継続的に update できる

といったメリットが得られます。

Discussion