Closed1

aqua-registry で CI の定期 rerun を自動化した

Shunsuke SuzukiShunsuke Suzuki

aqua-registry の一部のメンテ業務を自動化してメンテの負担を減らした話です。
aqua のユーザーには直接関係ない話ですが、 aqua のメンテはこういった様々な自動化の取り組みによって支えられています。

https://github.com/aquaproj/aqua-registry

aqua についてはこちら

https://aquaproj.github.io/

https://zenn.dev/shunsuke_suzuki/books/aqua-handbook

aqua-registry では各 package の新しいバージョンが出ると自動で update PR が作成され CI が走り、新しいバージョンで正しく package をインストールできるかテストされ、問題なければ PR が自動マージされるようになっています。

例:

https://github.com/aquaproj/aqua-registry/pull/28572

(余談ですが、この PR 作成には Renovate ではなく aqua-registry-updater という独自ツールが使われています)

CI が失敗した場合はログを見て原因を確認し、必要に応じて registry を修正したりツール側に問題を報告したり修正 PR を投げたりします。
例えば asset の format が tar.gz から zip に変わっていたら registry 側を修正しますし、ツール側の release workflow の不具合で release に失敗していたら問題を報告し、可能であれば修正して PR を投げます。
これまで自分は様々なツールの release まわりの issue を報告したり修正したりしてきました(自分で言うのもなんですが、これほど多くの OSS に貢献している人はあまりいないと思います)。

しかし、一部のツールは GitHub Release が作成されてから asset が upload されるまでにタイムラグがあり、 PR が作られた時点では asset が upload されてなくて CI が失敗する場合があります。
その場合、 asset が upload されるまで待ったうえで CI を rerun する必要があります。
今まではこれを手作業でやっていたのですが、確認作業まで含めると地味に面倒でしかも割と頻繁に起こり(サポートしているツールが多いので色々なツールで発生します)自分の負担になっていました。

そこで CI が失敗して PR がマージされなかった場合、定期的に CI を自動で rerun するようにしました。

https://github.com/aquaproj/aqua-registry/blob/main/.github/workflows/auto-rerun.yaml

https://github.com/aquaproj/aqua-registry/actions/workflows/auto-rerun.yaml

GitHub Actions の schedule event で workflow を 1 時間ごとに実行し、
PR が作られてから 4 日以内の PR の失敗している workflow run を自動で rerun しています。
asset が upload されるまでにタイムラグがある場合でもたいてい 4 日以内には upload されますし、
それ以上古いのを rerun しても延々と失敗し続けるだけの可能性が高いので 4 日以内に限定しています。
また、 stop-rerun という label をつけると対象外になります。
これは失敗した原因を確認し rerun しても直らない (asset 名が変わってるとか) 場合に rerun を止める目的で label を手動でセットします。

結果

rerun を自動化した結果、手動で rerun しないといけないケースは激減しました。
まぁ 1 時間ごとに実行しているので自動 rerun の前に自分が気づいてしまうケースもあるので 0 ではないのですが、それでも激減しました。

実際に自動 rerun で PR が merge された例

rerun されたのがわかりやすいように GitHub Actions の job summary に出力するようにしています。

https://github.com/aquaproj/aqua-registry/actions/runs/11717607212

rerun されている workflow を見ると無事 CI が pass して PR がマージされています。

https://github.com/aquaproj/aqua-registry/actions/runs/11717103517

https://github.com/aquaproj/aqua-registry/pull/28565

このスクラップは6日前にクローズされました