VimでGitHub Actionsのステータスを確認

始めに

最近少しずつGitHub Actionsを使い始めています。とても便利でよくできているエコシステムだなって感心しました。 そこで、VimでGitHub Actionsのステータスを確認できたら便利かなと思ってブラウザをやめてVimでGitHubを使うで作ったgh.vimに機能を追加しました。

gh://:owner/:repo/actions を開くとそのリポジトリにGtHub Actionsが動いていれば、ワークフローとジョブのステータスが表示されます。

UI

ワークフローとジョブがツリー状になっています。 ルートはリポジトリ名、その下はワークフロー一覧となっています。 さらにその下はジョブとそのステップになっています。

- clipboard-image                                             <-- リポジトリ名
| - ✗ add github actions... @skanehira [add-github-actions]   <-- ワークフロー
| | - ✗ Test (ubuntu-latest)                                  <-- ジョブ
| | | | ✓ #1 Set up job                                       <-+
| | | | ✓ #2 Run actions/checkout@v2                            |
| | | | ✓ #3 Run actions/setup-go@v2                            | ジョブステップ
| | | | ✓ #4 install xclip                                      |
| | | | ✗ #5 Test                                               |
| | | | ✓ #10 Post Run actions/checkout@v2                      |
| | | | ✓ #11 Complete job                                    <-+

ワークフロー行では次のフォーマットになっていて、 ジョブが成功しているかどうかが一目で分かるようになっています。

実行結果 コミットメッセージ 作者 ブランチ名
------------------------------------------------------
✓ add github actions... @skanehira [add-github-actions]
✗ add github actions... @skanehira [add-github-actions]

GitHubではワークフローとジョブのレスポンスにstatusconclusionというフィールドがあって、statusはActionsの実行状態、conclusionが実行結果です。 ↑の実行結果はconclusionをもとに判定しています。

機能

現時点ではワークフローとジョブの表示とURLのコピー・ブラウザで開くの機能があります。 一応ジョブのre-runはやろうと思えばできますが、これ本当に必要かな?って思っているので未実装です。

gh.vim自体をできるだけシンプルに保ちたいので、 とりあえずあったら良いんじゃない?という感じで実装をしないようにしています。

選択したワークフロー/ジョブのURLをコピーする機能を実装したのは、たとえばURLを開発メンバーにここ落ちているよって共有するのに便利です。

2020/11/29追記 ジョブのログを確認できるようになりました。

実装

GitHub v3のAPIでリポジトリのGitHub Actionsの情報を取得しています。

https://developer.github.com/v3/actions/workflow-runs/#list-workflow-runs-for-a-repository

このAPIはGitHub Actionsの情報のみ取得するので、たとえばCIをAWSのcodebuildで行っているといったケースでは情報は取れないです。 また、このAPIではワークフロー一覧しか取得できないのでさらにその中にあるジョブとステップ情報は次のAPIから取得する必要があります。REST APIだとこういうのがツライですよね。..

https://developer.github.com/v3/actions/workflow-jobs/#list-jobs-for-a-workflow-run

本当はRESTではなくGraphQLを使いたかったんですが、v4 APIはGitHub Actions未対応なのでひとまずv3を使っています。 早くv4でGitHub Actionsの情報を取れるようになってほしいですね。

ツリー実装はVimでGitHubのプロジェクトボードを使うのときに作ったものをそのまま使っているので、難なく実装できました。 汎用なツリーモジュールにしといて良かったです。 ライブラリにするのはちょっと難しいんですが、VimでツリーのUIを実現したい方は適当にコードからパクってもらって大丈夫です。

余談

↑は初期UIですが、文字情報しかなくてとても分かりづらかったので、GitHubのUIを参考にみたら今の形になりました。自分のデザインのセンスがなさすぎてツライ。..


Vim

2020/11/29 00:00