本記事は、GitHub Actionsで実行したワークフローのログをGitHubのREST APIを利用してダウンロードしたときの内容を記載します。
はじめに
GitHub Actionsの実行ログを取得したい場合、Webインターフェースからダウンロードすることもできますが、REST APIを利用すると自動化やスクリプトからの操作が可能になります。以下の手順に従って、Personal Access Tokenの発行からログのダウンロードまでを行います。
Personal Access Token を発行
- Developer Settings ページにアクセスします
- "Generate new token (classic)" ボタンをクリックします
- トークンに必要な権限として、repo と workflow にチェックを入れます
- REST APIを利用できるように、まずはGitHubでPersonal Access Tokenを発行しておきます
発行されたトークンは一度しか表示されないので、安全な場所に保存しておきます。
GitHub Actions の workflow のメタ情報を取得
ログをダウンロードするのにworkflowのidが必要なので、まずは以下のAPIでメタ情報を取得します。
$ curl -L \
-H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer <YOUR-TOKEN>" \
-H "X-GitHub-Api-Version: 2022-11-28" \
https://api.github.com/repos/OWNER/REPO/actions/runs
-
YOUR_TOKEN
: 発行したPersonal Access Token -
OWNER
: リポジトリの所有者 -
REPO
: リポジトリ名
具体的には以下のようになります。
$ curl -L \
-H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer ghp_***********************************" \
-H "X-GitHub-Api-Version: 2022-11-28" \
https://api.github.com/repos/h-nimrod/github-action-sandbox/actions/runs
{
"total_count": 115,
"workflow_runs": [
{
"id": 10899092149,
"name": "Experiment GitHub Actions",
"node_id": "WFR_kwLOKP6MjM8AAAACiaLytQ",
"head_branch": "main",
"path": ".github/workflows/experimental_env_vars.yml",
"display_title": "Experiment GitHub Actions",
"run_number": 4,
"event": "workflow_dispatch",
"status": "completed",
"conclusion": "success",
...
workflow_runsにあるidを利用してログをダウンロードします。
ログをダウンロード
次に、先ほど取得したメタ情報からダウンロードしたいworkflowのidを指定してログをダウンロードします。
バイナリで出力されるので、curl に -o をつけてファイルに保存しています。
$ curl -L \
-o workflow_logs.zip \
-H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer <YOUR-TOKEN>" \
-H "X-GitHub-Api-Version: 2022-11-28" \
https://api.github.com/repos/OWNER/REPO/actions/runs/RUN_ID/logs
-
RUN_ID
: 対象のworkflowのid
YOUR_TOKEN, OWNER, REPO はメタ情報を取得したときと同じです。
ダウンロードしたファイルは複数のログのテキストがzipになっています。解凍すると、各ジョブやステップごとのログがテキストファイルとして保存されています。
$ unzip workflow_logs.zip
Archive: workflow_logs.zip
inflating: job2/2_Checkout code.txt
inflating: -2147483648_job1.txt
inflating: job4/1_Set up job.txt
inflating: job1/1_Set up job.txt
inflating: job4/2_Checkout code.txt
inflating: job4/4_Post Checkout code.txt
creating: job3/
inflating: 0_job3.txt
inflating: job2/3_show value.txt
inflating: job2/1_Set up job.txt
inflating: 0_job4.txt
inflating: 0_job2.txt
inflating: job2/7_Complete job.txt
inflating: -2130706432_job3.txt
inflating: job3/1_Set up job.txt
inflating: job4/5_Complete job.txt
inflating: job1/7_Complete job.txt
inflating: -2122317824_job4.txt
inflating: job2/6_Post Checkout code.txt
inflating: -2139095040_job2.txt
inflating: job1/3_show and update value.txt
inflating: job3/7_Complete job.txt
inflating: 0_job1.txt
inflating: job1/6_Post Checkout code.txt
inflating: job3/2_Checkout code.txt
inflating: job1/2_Checkout code.txt
inflating: job3/3_show value.txt
inflating: job3/6_Post Checkout code.txt