💧

aqua をより導入しやすくする最近の update (2021-12-29)

2021/12/29に公開

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

https://aquaproj.github.io/

https://zenn.dev/topics/aquaclivm

ここ数日の update で aqua がより導入しやすくなったので紹介します。

例として、 tfcmtgithub-comment を aqua で install する手順も紹介します。

https://zenn.dev/shunsuke_suzuki/articles/improve-terraform-cicd-with-tfcmt

https://zenn.dev/shunsuke_suzuki/articles/improve-cicd-with-github-comment

執筆時点のバージョンは以下のとおりです。

Update

  • aqua init コマンドの導入
  • aqua-renovate-config と aqua-installer を改善し、より簡潔に使えるようにした
  • aqua-renovate-config の version を固定できるようにした

aqua init コマンドの導入

aqua.yaml の雛形を生成する aqua init コマンドを追加しました。
今までは適当なところから設定ファイルをコピペしたりしてましたが、コマンドで完結するようになりました。

$ aqua init

aqua-renovate-config と aqua-installer の改善

  • aqua-installer で install する aqua のバージョンを aqua-renovate-config で追加設定なしに update できるようにした
  • aqua-renovate-config の version を固定できるようにした
  • aqua-installer で PATH の設定と aqua i の実行まで行うようにした

より簡潔に記述できるようになり、 RenovateRegex Manager の設定を書かなくてもよくなったので、 Renovate をよく知らない人でも導入しやすくなりました。

AS IS

GitHub Actions

- uses: aquaproj/aqua-installer@v0.3.0
  with:
    version: v0.8.8 # renovate: depName=aquaproj/aqua
- run: echo "${AQUA_ROOT_DIR:-$HOME/.aqua}/bin" >> $GITHUB_PATH
- run: aqua i -l

renovate.json

{
  "extends": [
    "github>aquaproj/aqua-renovate-config"
  ],
  "regexManagers": [
    {
      "fileMatch": ["^\\.github/.*\\.ya?ml$"],
      "matchStrings": [
        "version: (?<currentValue>.*?) # renovate: depName=(?<depName>.*)"
      ],
      "datasourceTemplate": "github-releases"
    }
  ]
}

TO BE

- uses: aquaproj/aqua-installer@v0.4.0
  with:
    aqua_version: v0.8.8
{
  "extends": [
    "github>aquaproj/aqua-renovate-config#0.1.2"
  ]
}

aqua-renovate-config の version を固定できるようにした

これは利便性というより信頼性の改善ですが、 aqua-renovate-config の version を固定できるようにしました。

元々 Renovate Preset Config はバージョンを固定する方法がなく、
default branch のものを使うしかありませんでした。

それが今年の 11 月に version を固定できるようになっていることに気づきました。

https://github.com/renovatebot/renovate/pull/11565

そこで aqua-renovate-config でも tag を打って versioning することにしました。
現状 Renovate Preset 用の Renovate Manager がないのがネックですが、
突如 Preset の内容が変わって壊れることがなくなりました(元々そんなに変わるものでもないですが)。

aqua で tfcmt, github-comment を install する

GitHub Actions で tfcmt, github-comment を実行したいとします。

まず local に aqua を install します。

$ brew install aquaproj/aqua/aqua
$ echo 'export PATH=$HOME/.aqua/bin:$PATH' >> .bash_profile

次に対象のリポジトリにファイルを追加していきます。

  • aqua.yaml
  • renovate.json
  • GitHub Actions
$ aqua init
$ aqua g suzuki-shunsuke/tfcmt suzuki-shunsuke/github-comment >> aqua.yaml

ちなみに Terraform や tfenv を aqua で install することも出来ます。

renovate.json

{
  "extends": [
    "github>aquaproj/aqua-renovate-config#0.1.2"
  ]
}

GitHub Actions (一部抜粋)

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: aquaproj/aqua-installer@v0.4.0
        with:
          aqua_version: v0.8.8
      - run: github-comment -v
      - run: tfcmt -v

以上、 github-comment と tfcmt を GitHub Actions で実行できました。加えて、 Renovate によって継続的に update されます。
よくシェルスクリプトや setup 用の Action でツールを install している場合、バージョンが古いままなのを見かけますが、 aqua だとそういうことがなくなります。
今回の update で aqua 自体も特別な設定無しで update されるようになり、とても便利になりました(人にも勧めやすくなりました)。

Dependabot と干渉しないように Renovate を導入する

今回の update とは無関係ですが、ついでに書いておきます。

aqua で継続的に自動 update をするには Renovate が必要ですが、既に Dependabot などを導入しているため、 Renovate を導入しづらいというケースもあるでしょう。
なにも考えずに導入すると、同じ package が Dependabot と Renovate 両方で update される(PR が作られる) ことになりかねません。
そういう場合、 Renovate の includePaths などで対象を aqua.yaml や .github 配下などに制限すれば干渉を避けられるでしょう。

Discussion