GitHub Actionsの実行履歴をまとめて削除する / How to delete workflow run histories at once


TL;DR

owner="Organization名 または User名"
repo="リポジトリ名"
file_name="ファイル名"

gh api repos/${owner}/${repo}/actions/workflows/${file_name}/runs \
| jq -r '.workflow_runs[].id' \
| xargs -P4 -I{} gh api repos/${owner}/${repo}/actions/runs/{} -X DELETE

やりたいこと

▼ 左側のWorkflow一覧から不要なWorkflowを削除したい。

▼ ちなみに1回のrunはweb上で消すこともできる。しかし今回はtippy-test-trivyのrunをまとめて削除したい。

方法

GitHub CLIとjqでいい感じにする。

▼ Homebrewでインストール

brew install gh jq

#1 取得

gh api repos/${owner}/${repo}/actions/workflows/${file_name}/runs

公式リンク: List workflow runs

冒頭に貼ったスクショの画面ではURLが次のようになっている。末尾がファイル名(拡張子はyaml or yml)

https://github.com/${owner}/${repo}/actions/workflows/${file_name}

#2 jqでフィルター

| jq -r '.workflow_runs[].id'

全件なら上記。例えばブランチで絞りたい場合、以下のようにする。

| jq -r '.workflow_runs[] | select(.head_branch = "master") | "\(.id)"'

細かい条件を作りたい場合はjq職人になりましょう。

#3 削除

| xargs -P4 -I{} gh api repos/${owner}/${repo}/actions/runs/{} -X DELETE

公式リンク: Delete a workflow run

-P4は4並列。APIの叩き過ぎで怒られた場合は減らしてください。

まとめ(再掲)

owner="Organization名 または User名"
repo="リポジトリ名"
file_name="ファイル名"

gh api repos/${owner}/${repo}/actions/workflows/${file_name}/runs \
| jq -r '.workflow_runs[].id' \
| xargs -P4 -I{} gh api repos/{owner}/{repo}/actions/runs/{} -X DELETE