🗑️

指定したワークフローを一覧から削除する [GitHub Actions]

2022/01/31に公開
1

概要

GitHub Actions で試行錯誤しているとワークフローの実行ログが溜まってきて、ワークフローの一覧(下記画像)に要らなくなったものが残ることがあります。
ワークフロー内の実行ログを全て消すと一覧からも消えるのですが手動でやるのは面倒です。
ワークフローを指定して一覧から削除するコマンドを紹介します。[1]

コマンド

Mac, Linux
gh run list --workflow "${WORKFLOW}" --limit 1000 --json databaseId,status \
  --jq '.[] | select(.status == "completed") | .databaseId' \
  | xargs -n 1 -I {} gh api -X DELETE repos/${REPOSITORY}/actions/runs/{}
Windows (PowerShell)
gh run list --workflow "${env:WORKFLOW}" --limit 1000 --json databaseId,status `
  --jq '.[] | select(.status == \"completed\") | .databaseId' `
  | % { gh api -X DELETE repos/${env:REPOSITORY}/actions/runs/$_ }

環境変数部分は下記。
直接書き換えるか、事前に環境変数をセットしてください。

環境変数
WORKFLOW workflow-id
workflow-name
filename
12345
Delete workflow
delete-workflow.yml
REPOSITORY owner/repository SnowCait/actions-sandbox

関連ドキュメント

参考

https://qiita.com/tippy/items/79ca3f7b7bcac1d92136

ワークフロー

GitHub Actions のワークフローにしておくと便利です。

delete-workflow.yml
name: Delete workflow

on:
  workflow_dispatch:
    inputs:
      workflow:
        description: workflow-id, workflow-name or filename
        required: true
        type: string

jobs:
  delete:
    runs-on: ubuntu-20.04
    timeout-minutes: 1
    env:
      GH_TOKEN: ${{ github.token }}
      GH_REPO: ${{ github.repository }}
      WORKFLOW: ${{ github.event.inputs.workflow }}

    steps:
      - run: gh workflow view "${WORKFLOW}"
      - run: |
          gh run list --workflow "${WORKFLOW}" --limit 1000 --json databaseId,status --jq '.[] | select(.status == "completed") | .databaseId' \
            | xargs -n 1 -I {} gh api -X DELETE repos/${REPOSITORY}/actions/runs/{}
        env:
          REPOSITORY: ${{ github.repository }}
脚注
  1. ワークフローそのものを削除するわけではありません ↩︎

Discussion

jkkitakitajkkitakita

ありがとうございます!参考になりました!
gh api の option として --silent を追加しないと
実行毎に response body を表示してしまって、連続実行できない場合もあるかも?でした。

gh run list --workflow "${WORKFLOW}" --limit 1000 --json databaseId,status --jq '.[] | \
  select(.status == "completed") | .databaseId' | \
  xargs -n 1 -I {} gh api --silent -X DELETE repos/${REPOSITORY}/actions/runs/{}