三行
- GitHub リポジトリの actions の実行に、エラーや警告 (deprecation など含む) の annotation がつくことがある
- annotation 一覧みたいなものはないので、 workflow がたくさんあると、それぞれの annotation を見て対応するのが大変
- 実は actions の更新とかは Renovate でできるので大変じゃないこともある!
- markdown で一覧するためのシェルスクリプトを書いた GitHub - hogashi/list-workflow-annotation-for-repo
解説
困り
annotation といっているのはこれ (画像) *1 。この画像の場合、 Node.js 16 を使う actions は非推奨なので Node.js 20 を使うものに更新してね、具体的には actions/checkout@v3 と actions/setup-node@v3 だよ、と言われている。
Node.js 16 actions are deprecated. Please update the following actions to use Node.js 20: actions/checkout@v3, actions/setup-node@v3. For more information see: https://github.blog/changelog/2023-09-22-github-actions-transitioning-from-node-16-to-node-20/.
書かれていることに沿って更新したらいいのだけど、こういうのっていろんな workflow にそれぞれ書いていて (特に actions/checkout とか)、それぞれ annotation がついている。どれで何が出ているかの一覧ができないので、結構不便。
先行研究と困り
一覧するためのツールとして、 gh コマンドの拡張機能という先行研究がある。最近の workflow の実行を取ってきて annotation を一覧するというもの。これはかなり便利で見やすくて、小さいリポジトリならこれで戦える。
swfz.hatenablog.com
問題は workflow がたくさんある大きいリポジトリで、最近の実行だけ見ていると間に合わない。ので、リポジトリにある workflow それぞれについて、最も最近の実行の annotation を取ってきたい。
作ったもの
という動機で書いたのが今回のシェルスクリプト。
github.com
gh コマンドを叩きまくって、 workflow 一覧 → それぞれの check suite の最新の run 一覧 → それぞれの annotation 一覧 という順番で取ってくる。 GitHub Actions は登場人物が多くて難しい (理解してないだけでもっと簡単な方法があったりするのかも……)。
シェルスクリプトなので、 git clone でもコピペでもいいので手元に持ってきて、素朴にこう実行したら動く (gh とか jq とかは必要なので適宜入れてください)。
$ ./list-workflow-annotation-for-repo.sh owner/repo > annotations.md
実行すると markdown で出力される (標準出力に出すので↑みたいにするのがおすすめ)。改行とかはあんまり頑張ってないので見づらいかもだけど、例えば GitHub issue に貼るとこういう感じで見れる。各見出しは、該当の annotation が出ている workflow やその実行の画面へのリンクになっている。
出力される markdown はこんな感じ (クリックで開く)
## [CodeQL](https://github.com/hogashi/twitterOpenOriginalImage/blob/master/.github/workflows/codeql-analysis.yml) Latest run: [https://github.com/hogashi/twitterOpenOriginalImage/actions/runs/9468391494](https://github.com/hogashi/twitterOpenOriginalImage/actions/runs/9468391494) ### [Analyze (javascript)](https://github.com/hogashi/twitterOpenOriginalImage/actions/runs/9468391494/job/26084641757) ## [git-issue-release](https://github.com/hogashi/twitterOpenOriginalImage/blob/master/.github/workflows/git-issue-release.yml) Latest run: [https://github.com/hogashi/twitterOpenOriginalImage/actions/runs/9468384396](https://github.com/hogashi/twitterOpenOriginalImage/actions/runs/9468384396) ### [action](https://github.com/hogashi/twitterOpenOriginalImage/actions/runs/9468384396/job/26084617386) ``` Node.js 16 actions are deprecated. Please update the following actions to use Node.js 20: kouki-dan/git-issue-release@v1. For more information see: https://github.blog/changelog/2023-09-22-github-actions-transitioning-from-node-16-to-node-20/. ``` ``` The following actions uses node12 which is deprecated and will be forced to run on node16: kouki-dan/git-issue-release@v1. For more info: https://github.blog/changelog/2023-06-13-github-actions-all-actions-will-run-on-node16-instead-of-node12-by-default/ ``` ## [Node.js CI](https://github.com/hogashi/twitterOpenOriginalImage/blob/master/.github/workflows/nodejs.yml) Latest run: [https://github.com/hogashi/twitterOpenOriginalImage/actions/runs/9471522972](https://github.com/hogashi/twitterOpenOriginalImage/actions/runs/9471522972) ### [check](https://github.com/hogashi/twitterOpenOriginalImage/actions/runs/9471522972/job/26094921517) ``` Node.js 16 actions are deprecated. Please update the following actions to use Node.js 20: actions/checkout@v3, actions/setup-node@v3. For more information see: https://github.blog/changelog/2023-09-22-github-actions-transitioning-from-node-16-to-node-20/. ```
これを見ながら、順番にバージョンを上げたりしていったらよい。
それ Renovate でできるよ
これ書いてて気付いたんだけど、 actions の更新は Renovate がやってくれる。なので、いっこ annotation を見かけたら、 Renovate の Dependency Dashboard issue を見に行って、チェックをつけたら終了できる。便利ですね〜
今回書いたシェルスクリプトの存在意義を頑張ってこじつけると、 annotation というのは ("使ってる actions が古いよ"だけではなく) エラーや警告全般が存在するので、何かエラーや警告が出ているかどうかを見て回る、というのに使える。
例えば、 typo しているとエラーになるわけだけど、そういうときはこういう annotation がつく。エラーだと当然実行が失敗するので気付けるけど、警告系だと気付かないことも多そうだし、まあまあ使えることもあるかも。
The workflow is not valid. .github/workflows/nodejs.yml (Line: 9, Col: 5): Unexpected value 'runs-o' .github/workflows/nodejs.yml (Line: 9, Col: 5): Required property is missing: runs-on