Workflow – Clean Up Old GitHub Deployments
Quick Chat
透過 GitHub CLI (gh
) 刪除一個儲存庫中最舊的部署(deployment)記錄,保留最新的 10 筆。
Operation
登入
gh auth login
Clean-Up-Old-GitHub-Deployments.ps1
取得指定儲存庫的所有部署記錄 ID。
跳過最新的 10 個 ID。
對剩下的(最舊的)每一個 ID:
- 顯示一條刪除提示訊息。
- 發送一個
DELETE
API 請求,將其從 GitHub 移除。
$Owner = "Owner Name"
$Repo = "Repo Name"
gh api repos/$Owner/$Repo/deployments --paginate --jq '.[].id' | Select-Object -Skip 10 | ForEach-Object {
Write-Host "Deleting deployment $_"
gh api --method DELETE repos/$Owner/$Repo/deployments/$_
}
這段程式碼可以拆解為幾個部分來理解:
$Owner
和$Repo
是 PowerShell 的變數,用來存放你的 GitHub 儲存庫的擁有者和名稱。gh api repos/$Owner/$Repo/deployments --paginate --jq '.[].id'
$Owner
和$Repo
會被替換成你設定的值。- 這段指令會透過 GitHub CLI 取得你指定儲存庫的所有部署記錄,並只列出它們的 ID。
| Select-Object -Skip 10
- 這段指令會跳過清單中最前面的 10 個 ID。
- 因為 GitHub API 預設是把最新的記錄放在最前面,所以這個步驟等於是保留了最新的 10 筆部署,並選取了剩下的、最舊的部署。
| ForEach-Object { ... }
- 對每一個被選中的舊部署 ID,執行大括號
{}
裡面的指令。
- 對每一個被選中的舊部署 ID,執行大括號
Write-Host "Deleting deployment $_"
- 顯示一條提示訊息,讓你知道目前正在刪除哪一個部署。
gh api --method DELETE repos/$Owner/$Repo/deployments/$_
- 這行指令會發送一個
DELETE
請求,把這個舊的部署從 GitHub 上永久刪除。
- 這行指令會發送一個