2024-08-10 GitHub Actions の実行履歴を削除する
GitHub Actions の古いワークフローの実行履歴を削除したい。
手動で削除する方法
下記の公式ヘルプページに削除方法が記載されている。
Deleting a workflow run - GitHub Docs
自動で削除する方法
下記の公式ページではAPIを直接叩くBashスクリプトが紹介されている。
Using workflow run logs - GitHub Docs
$ ./delete-logs.sh REPOSITORY_NAME WORKFLOW_NAME
#!/usr/bin/env bash
# Delete all logs for a given workflow
# Usage: delete-logs.sh <repository> <workflow-name>
set -oe pipefail
REPOSITORY=$1
WORKFLOW_NAME=$2
# Validate arguments
if [[ -z "$REPOSITORY" ]]; then
echo "Repository is required"
exit 1
fi
if [[ -z "$WORKFLOW_NAME" ]]; then
echo "Workflow name is required"
exit 1
fi
echo "Getting all completed runs for workflow $WORKFLOW_NAME in $REPOSITORY"
RUNS=$(
gh api \
-H "Accept: application/vnd.github+json" \
-H "X-GitHub-Api-Version: 2022-11-28" \
"/repos/$REPOSITORY/actions/workflows/$WORKFLOW_NAME/runs" \
--paginate \
--jq '.workflow_runs[] | select(.conclusion != "") | .id'
)
echo "Found $(echo "$RUNS" | wc -l) completed runs for workflow $WORKFLOW_NAME"
# Delete logs for each run
for RUN in $RUNS; do
echo "Deleting logs for run $RUN"
gh api \
--silent \
--method DELETE \
-H "Accept: application/vnd.github+json" \
-H "X-GitHub-Api-Version: 2022-11-28" \
"/repos/$REPOSITORY/actions/runs/$RUN/logs" || echo "Failed to delete logs for run $RUN"
# Sleep for 100ms to avoid rate limiting
sleep 0.1
done
gh を使って自動削除する
gh
コマンドを使って削除する方法が簡単で良かった。
下記のように workflow-name
を指定して最新100件をループさせて削除することができる。
for id in $(gh run list --workflow workflow-name --json databaseId --jq '.[].databaseId' --limit 100); do
gh run delete $id
done