gh
コマンドにより、開発者はPull Request、Issue、Gistなどを管理するために、コマンドラインでGitHubが使えるようになりました。1.9.0では、GitHubのさらに多くの機能をターミナルで利用できます。それが、GitHub Actionsです。
Mislav氏が最近のブログで紹介したとおり、GitHub Actions内でghを使うことは既にできるようにになっています。さらに、今回新たに追加された2つのトップレベルのコマンド、gh run
とgh workflow
により、ローカルターミナルからワークフローの実行やファイルに関する情報を簡単に取得できるようになりました。
ワークフローの実行状況を把握する
正しいコードを書こうと努めても、ビルドがエラーになることはあります。オープンなPull Requestに対するエラーを把握するにはgh pr checks
が有効ですが、リポジトリ全体のワークフローの実行状況を把握するには役立ちません。新しいgh run list
では、Push、Pull Request、webhook、あるいはマニュアルでのイベント実行のどちらでトリガーされたかにかかわらず、あらゆる種類のワークフロー実行の概要を把握できます。
また、進行中のワークフローをより簡単に把握できるよう、gh run watch
を作成しました。この機能では、ワークフローの実行を追跡したり、他のツールと組み合わせて実行の終了を通知したりすることができます。gh run watch
をUbuntuのnotify-send
のようなコマンドと組み合わせれば、キーボードから離れて他の作業に時間を費やすことができます。
実行が終了すると、このように知らせてくれます。
1件の実行を詳しく調べるにはgh run view
を使います。任意でジョブの個々のステップについても詳しく調べることができます。たとえば、あるコードで文法チェッカーが失敗した理由を把握するには以下のようにします。
それでもわからないエラーの場合は、grep
などのツールとgh run view --log
を組み合わせて、実行のログ出力全体を検索します。これはビルドマトリックス全体のエラーをデバッグするのに役立ちます。たとえば以下の場合、UbuntuとmacOSでパニックが起きていますが、Windowsでは起きていないことがわかります。
また、--log
では情報が多すぎる場合、gh run --log-failed
を使うと、エラーになった各ステップのログ行のみが出力されます。自分でgrep
を実行しなくても、エラーになったステップのログにすぐにアクセスできるためとても便利です。たとえば、ここでは--log-failed
を使って、すべてのステップのログ出力ではなく、エラーになったステップのログ出力のみを見ています。
gh run
は、ワークフローの実行中に生成されたアーティファクトについても把握しており、その発見や取得に役立ちます。
アーティファクトをダウンロードするには、gh run download -n tps-report
で名前を指定するか、インタラクティブなセレクターを使用します。
最後に、実行の断続的なエラーが疑われる場合やエラーが発生する箇所を確認したい場合は、gh run rerun
を使ってターミナルから退出せずに再実行できるようになりました。
ワークフローファイルの管理も簡単に
GitHub Actionsでの実行は、リポジトリの.github/workflows
にあるYAML形式のワークフローファイルで定義します。ワークフローファイルには、ワークフローの名前、動作、ワークフローを実行させるイベントの種類などを記述します。
gh workflow view
を使うと、最近実行されたワークフローの概要を確認し、ワークフローを期待どおりに動作させることができます。gh workflow view --yaml
を使うと、ワークフローの処理内容を色付きで表示できます。
時には、ワークフローが中断したり、処理中であったりする場合があります。そのようなワークフローをリポジトリから完全に削除しなくても管理できるようにするため、gh workflow enable
とgh workflow disable
が使えるようになりました。
多くのワークフローは、Pull RequestやPushされたブランチによって実行がトリガーされますが、workflow_dispatchイベントを使うと、コマンドでワークフローファイルを実行できます。
コマンドでワークフローを実行してリポジトリのクリーンアップタスクを行ったり、作業がまだ進行中の段階でワークフローの手動Dispatchを設定したりすることもできます。gh workflow run
を使って、このイベントに対応したワークフローをコマンドラインから起動できるようになったため、workflow_dispatch
ワークフローの操作やスクリプト作成がより簡単になりました。
gh workflow runがワークフローファイルの開発にどのように役立つかについて、ツールチェーンに組み込む例をご紹介します。受信したPull Requestが特定の条件を満たしていることを確認する自動化を実行したいと思います。ここではpr-check.ymlというワークフローファイルを使って、受信したPull Requestに本文があるかどうかをチェックします。
name: Pull Request Check on: workflow_dispatch: inputs: body: default: "" test: default: "false" pull_request_target: jobs: check-body-length: runs-on: ubuntu-latest steps: - name: check env: PRNUM: ${{ github.event.pull_request.number }} PRBODY: ${{ github.event.pull_request.body }} TESTBODY: ${{ github.event.inputs.body }} TEST: ${{ github.event.inputs.test }} run: | if [ "$TEST" = "true" ] then PRBODY=$TESTBODY fi commentPR () { if [ "$TEST" = "true" ] then echo "would comment: '${1}'" else gh pr comment $PRNUM -b "${1}" fi } if [ "$PRBODY" = "" ] then commentPR "Thanks! Please add a body so we can better review your contribution." fi
これはpull_request_target
とworkflow_dispatch
の両方に応答します。つまり、リポジトリでPull Requestがオープンされたり、手動で起動されたりすると、常に実行されます。
手動で起動された場合は、モックPull Requestの本文をチェックするテスト入力を受け取ります。以下のように実行します。
gh run view --log
の出力を見て、コードが期待どおりの動作をしているかどうかを確認できます。コマンドラインを使っているため、このプロセスをさらにスクリプト化したり、エイリアスを使って効率化したりすることができます。
仕事をしながらターミナルからプログラムでこのワークフローを実行できるため、if [ $PRBODY = true ]
条件を変更してもっと複雑なことができるようにしたいと考えています。
ご意見をお寄せください
gh run
やgh workflow
を使ってどんなことができるか、ディスカッションフォーラムでお知らせください!皆さんからのフィードバックをお待ちしています。GitHub CLIをまだお使いでない方は、ぜひインストールしてください。
将来的には、ワークフローファイルの作成やデプロイをより簡単にできるようにしたいと考えています。今のところは、GitHub 1.9.0のすべての新機能をお楽しみいただければと思います。