批量删除 GitHub Action Workflows 流水线
首先安装 gh 工具,并且登录和授权。
安装 gh,并授权
#!/usr/bin/env bash
set -euo pipefail
ORG_NAME=${1:?ORG_NAME is required}
REPO_NAME=${2:?REPO_NAME is required}
repo="$ORG_NAME/$REPO_NAME"
url="repos/$repo/actions/runs"
total_deleted=0
delete_id() {
  local id=$1
  local result=""
  echo "Deleting URL: $url/$id"
  if gh api -X DELETE "$url/$id" --silent; then
    result="✅ Deleted '$id'"
    total_deleted=$((total_deleted + 1))
  else
    result="❌ Failed '$id'"
    echo "$result"
    echo "An error occurred while deleting ID '$id'. Press Enter to exit."
    echo "Total IDs deleted: $total_deleted"
    read -n 1 -s -r -p ""
    exit 1
  fi
  printf "%s\n" "$result"
}
while true; do
  total_ids=$(gh api "$url" | jq '.workflow_runs | length')
  if [[ $total_ids -eq 0 ]]; then
    echo "No more IDs to delete. Press Enter to exit."
    echo "Total IDs deleted: $total_deleted"
    read -n 1 -s -r -p ""
    break
  fi
  # 使用 process substitution 避免子 shell
  while read -r id; do
    id="${id//$'\r'/}"   # 去掉回车符
    delete_id "$id"
  done < <(gh api "$url" | jq -r '.workflow_runs[].id')
  # 可选:等待几秒再继续循环,避免频繁调用 API
  # sleep 2
done