[英]Delete a workflow from GitHub Actions
我在存儲庫的.github/workflows
文件夾中創建了幾個工作流來試驗 GitHub Actions。 從那以后,我學到了很多東西,並從我的倉庫中刪除了所說的“實驗性”工作流程。 在刪除“實驗性”工作流 yaml 文件並提交刪除后,當我 go 到我存儲庫的“操作”選項卡時,我仍然看到我已經刪除的工作流。
我看不到刪除並從頭開始的選項? 這不可能嗎? 是否可以通過 GitHub API。嗯。
自 2020 年 7 月 7 日起, 您現在可以刪除單個工作流運行的結果。 為此,導航到您的工作流程,找到您要刪除的工作流程運行,然后選擇“...”菜單。 在此菜單中,選擇“刪除工作流運行”。
工作流運行及其日志將被刪除。
目前,您必須為每個單獨運行的工作流執行此操作。
編輯:截至 2021 年 2 月,似乎在刪除所有工作流程運行后,工作流程自行消失。 下面的一條評論似乎也證實了這一點。
目前似乎沒有一種方法可以刪除這些工作流程——這毫無意義——但似乎一旦有人犯了創建一個錯誤,他們就會永遠堅持下去。 到目前為止,我發現的唯一解決方案是禁用這些工作流程。
因此,如果我轉到Actions 選項卡(編輯 url 以匹配您的 repo),然后我可以單擊一個工作流並通過該選項卡右上角的 [...] 禁用它,如下面的快照所示:
在此處刪除記錄是我在此處找到的解決方案,對原始版本稍作修改:
user=GH_USERNAME repo=REPO_NAME; gh api repos/$user/$repo/actions/runs \
--paginate -q '.workflow_runs[] | select(.head_branch != "master") | "\(.id)"' | \
xargs -n1 -I % gh api repos/$user/$repo/actions/runs/% -X DELETE
將GH_USERNAME
和REPO_NAME
替換為相應的 github 用戶名和 repo 名稱。
這將刪除所有不在master
分支上的舊工作流。 你可以進一步調整它來做你需要的。
先決條件:
gh
版本。筆記:
gh auth login
gh api --silent
。xargs
部分 - 原始使用-J
而不是-I
,GNU xargs
不支持。 -J
產生一個命令,而-I
將為每條記錄執行命令,所以它有點慢。感謝社區論壇上的 OP 首先分享這個。
這里有一些命令可以快速清理您的工作流程。
您將需要xargs
、 gh
和jq
CLI 工具。
根據您運行的次數,您必須多次執行刪除步驟,因為 GH API 端點是分頁的。
OWNER=<your user/org name>
REPO=<repo name>
# list workflows
gh api -X GET /repos/$OWNER/$REPO/actions/workflows | jq '.workflows[] | .name,.id'
# copy the ID of the workflow you want to clear and set it
WORKFLOW_ID=<workflow id>
# list runs
gh api -X GET /repos/$OWNER/$REPO/actions/workflows/$WORKFLOW_ID/runs | jq '.workflow_runs[] | .id'
# delete runs (you'll have to run this multiple times if there's many because of pagination)
gh api -X GET /repos/$OWNER/$REPO/actions/workflows/$WORKFLOW_ID/runs | jq '.workflow_runs[] | .id' | xargs -I{} gh api -X DELETE /repos/$OWNER/$REPO/actions/runs/{}
根據@Giampaolo Rodolà 的回答(對我有用),我創建了這個簡單的 shell 腳本來完成這項工作。
在執行此腳本之前禁用要刪除的工作流(通過 Github 控制台)。
org=<your org>
repo=<your repo>
# Get workflow IDs with status "disabled_manually"
workflow_ids=($(gh api repos/$org/$repo/actions/workflows | jq '.workflows[] | select(.["state"] | contains("disabled_manually")) | .id'))
for workflow_id in "${workflow_ids[@]}"
do
echo "Listing runs for the workflow ID $workflow_id"
run_ids=( $(gh api repos/$org/$repo/actions/workflows/$workflow_id/runs --paginate | jq '.workflow_runs[].id') )
for run_id in "${run_ids[@]}"
do
echo "Deleting Run ID $run_id"
gh api repos/$org/$repo/actions/runs/$run_id -X DELETE >/dev/null
done
done
結果:
Listing runs for the workflow ID 5261185
Deleting Run ID 507553125
Deleting Run ID 507548002
Listing runs for the workflow ID 5261568
Deleting Run ID 525274011
Deleting Run ID 525264327
Deleting Run ID 525247443
確保在 Github 中安裝了 Github 客戶端和所需的令牌權限。
我設法通過使用“gh” CLI 工具和閱讀REST API 文檔來解決這個問題(目前無法通過 UI)。
首先,獲取所有工作流程(這些工作流程顯示在 Web UI -> 操作 -> 左欄中):
$ gh api repos/$YOUR_USER/$YOUR_REPO/actions/workflows
{
"total_count": 2,
"workflows": [
{
"id": 3611607,
"name": "FreeBSD",
...
},
{
"id": 4336318,
"name": "MacOS",
...
}
]
}
使用您要刪除的工作流的 ID(例如 3611607)來獲取其所有單獨的運行:
$ gh api repos/$YOUR_USER/$YOUR_REPO/actions/workflows/3611607/runs
{
"total_count": 17,
"workflow_runs": [
{
"id": 363876785,
"name": "FreeBSD",
...
},
{
"id": 363876786,
"name": "FreeBSD",
...
},
{
"id": 363876787,
"name": "FreeBSD",
...
},
}
對於每個運行 ID(比如說 363876785),使用以下命令將其刪除:
$ gh api repos/$YOUR_USER/$YOUR_REPO/actions/runs/363876785 -X DELETE
之后,Web UI 左欄中不可刪除的 Action 應該會消失。
刪除屬於您的工作流程的所有工作,您的工作流程將消失
P/s:如果您有數千個作業要刪除,那么使用 API 是一個很好的方法:https ://docs.github.com/en/rest/reference/actions#workflow-runs
在 GitHub 實現“刪除所有工作流運行”之前,您必須依賴 API。 在工作站上安裝 CLI 工具gh
和jq
后,您可以運行以下命令來刪除該工作流的所有運行。 刪除所有運行后,它將不再顯示在 UI 中。
cd /path/to/your/repo
gh workflow list # Pick-up the workflow ID for which you want to delete all runs
WORKFLOW_ID=<the workflow id> # Change this line!
# List last 10 runs of the workflow you picked to double check the id
gh run list -L 10 -w $WORKFLOW_ID
# Some set up
REPO_INFO=$(gh repo view --json name,owner)
REPO_FULL_NAME="$(echo $REPO_INFO | jq '.owner.login' -r)/$(echo $REPO_INFO | jq '.name' -r)"
# Ready? Let's delete some runs!
gh api -X GET "/repos/$REPO_FULL_NAME/actions/workflows/$WORKFLOW_ID/runs?per_page=100" | jq '.workflow_runs[] | .id' -r | xargs -t -I{} gh api --silent -X DELETE /repos/$REPO_FULL_NAME/actions/runs/{}
最后一個命令將刪除最后 100 次運行(來自 GitHub API 的限制)。 如果有更多,請多次運行以刪除所有內容。
@Sheece Gardazi答案的改進版本,支持選擇特定工作流程:
export OWNER="my-user"
export REPOSITORY="my-repo"
export WORKFLOW="My Workflow"
gh api -X GET /repos/$OWNER/$REPOSITORY/actions/runs --paginate \
| jq '.workflow_runs[] | select(.name == '\"$WORKFLOW\"') | .id' \
| xargs -I{} gh api -X DELETE /repos/$OWNER/$REPOSITORY/actions/runs/{}
它需要GitHub CLI :
brew install gh
gh auth login
和jq :
brew install jq
遵循 Github Actions 文檔: https ://docs.github.com/en/actions/managing-workflow-runs/deleting-a-workflow-run
刪除不再需要的workflow
應該很容易,就像在這張圖片中顯示的那樣
如果您沒有看到delete option
,而是看到disable workflow
,那是因為該工作流仍然有一些workflow runs
。 您需要刪除這些工作流程運行,然后會出現刪除選項:)
還有一個 PowerShell 實現(感謝其他受訪者),它也需要gh
cli 。
$user = "your user"
$repo = "repo"
(gh api repos/$user/$repo/actions/runs | ConvertFrom-Json).workflow_runs |
%{ $_.id } |
%{ gh api repos/$user/$repo/actions/runs/$_ -X DELETE }
重新運行“單線”,直到沒有更多; 它目前分頁到 30 個結果。
我有 600 多個要刪除的操作,因此有多個頁面。 我必須在 for 循環中運行命令:
# install following packages
sudo snap install jq gh
# To authenticate github cli
gh auth login
# for reference path to your code repository: https://github.com/$OWNER/$REPOSITORY
export OWNER=<OWNER_NAME/ORGANIZATIONS_NAME>
export REPOSITORY=<REPOSITORY_NAME>
# repeat command 30 times, if there are 30 pages of workflow history
for i in {1..30}; do gh api -X GET /repos/$OWNER/$REPOSITORY/actions/runs | jq '.workflow_runs[] | .id' | xargs -I{} gh api -X DELETE /repos/$OWNER/$REPOSITORY/actions/runs/{}; done
盡管這篇文章中有所有答案,但我無法刪除工作流程。對我有用的是,我首先使用“gh auth login”對自己進行了身份驗證,然后使用以下命令獲取您的工作流程的詳細信息想刪除。 如果您不知道工作流 ID,則只需運行“gh api repos/$org/$repo/actions/workflows/”即可查看所有工作流。 運行此程序后,您將知道需要從中刪除工作流的分支。 在我們的例子中,工作流程存在於“開發”分支中。 您可以在“html_url”中看到這一點。 一旦我從開發分支中刪除了工作流文件,工作流就從各處消失了。 此外,當您運行“gh api repos/$org/$repo/actions/workflows/$workflow_id”時,您會注意到狀態將更改為“已刪除”。
$> gh api repos/$org/$repo/actions/workflows/$workflow_id
{
"id": 6,
"node_id": "blah",
"name": "Run Unit Tests",
"path": ".github/workflows/unittests.yml",
"state": "active",
"created_at": "2021-05-15T00:25:19.000-07:00",
"updated_at": "2022-03-10T13:02:43.000-08:00",
"url": "blah",
"html_url": "https://company-name/workspace/project/blob/develop/.github/workflows/unittests.yml",
"badge_url": "blah"
}
對於任何想知道的人,刪除.github/workflows
中的workflow.yml
文件是可行的,但您需要確保在所有分支中都將其刪除。 如果master/main
仍然有工作流文件,那么 GitHub 將保留它們。
刪除所有相關的工作流程運行后,它應該會自動刪除。
就我而言,刪除通過 CLI 運行的工作流只是解決方案的一部分。 GitHub 仍然拒絕顯示我之后嘗試再次添加的任何工作流程。
我通過使用 GH 中的“新工作流程”按鈕並從模板創建工作流程來解決它。 我粘貼了原始 YML 文件的內容並重命名了該文件,以使一切看起來像以前一樣。 最后,我通過網絡提交——GitHub 再次展示了我的工作流程。
這是另一個使用Ritchie CLI自動從 Github 操作工作流中刪除所有日志的選項。
您需要做的就是:
rit github delete workflow-logs
可以在這里看到一個例子。 請注意,您需要使用 Ritchie CLI 工具導入此存儲庫才能使命令正常工作。
安裝 Ritchie CLI: https ://docs.ritchiecli.io/
運行rit add repo
? Select your provider: Github
? Repository name: formulas-github
? Repository URL: https://github.com/GuillaumeFalourd/formulas-github
? Is a private repository? no
? Select a tag version: {latest}
? Set the priority: 1
rit set formula-runner
? Select a default formula run type: docker
The default formula runner has been successfully configured!
啟動 Docker 桌面
轉到https://github.com/settings/tokens ,添加生成 GitHub 個人訪問令牌(使用“工作流”范圍)
運行rit github delete workflow-logs
輸入您的 GitHub 用戶名、GitHub 令牌、GitHub 所有者、GitHub 存儲庫名稱,然后選擇您希望刪除運行的工作流🙌
撤銷您的PAT
我創建了這個命令行工具來方便地選擇多個條目並將它們從可導航列表中一起刪除:
我對@david-miguel的回答做了一些小的調整,將過濾卸載到github的api,而不是在本地進行。
#!/bin/sh
OWNER="user-name|org-name"
REPOSITORY="repository-name"
WORKFLOW="workflow-human-friendly-name"
gh run list --repo "$OWNER/$REPOSITORY" -w "$WORKFLOW" --json databaseId \
| jq '.[].databaseId' \
| xargs -I{} gh api -X DELETE /repos/$OWNER/$REPOSITORY/actions/runs/{}
找到這個帖子后,我仍然花了相當長的時間讓我的工作流程逐漸消失......
@ribeiro 提供的答案是正確的,但是對於已刪除其工作流程的人,他們將無法刪除運行,它將解析為 404!
如何刪除不再有工作流的工作流運行我嘗試了很多事情,最后,只有這對我有用:
OWNER="aOwner"
REPO="aRepo"
workflow_ids=($(gh api repos/$OWNER/$REPO/actions/workflows | jq '.workflows[] | .id'))
for workflow_id in "${workflow_ids[@]}"
do
echo "Listing runs for the workflow ID $workflow_id"
run_ids=( $(gh api repos/$OWNER/$REPO/actions/workflows/$workflow_id/runs --paginate | jq '.workflow_runs[].id') )
for run_id in "${run_ids[@]}"
do
echo "Deleting Run ID $run_id"
gh api repos/$OWNER/$REPO/actions/runs/$run_id -X DELETE >/dev/null
done
done
截至 2022 年 12 月 31 日,假設您有一個工作流.github/workflows/test.yml
。
刪除此工作流文件並合並到主分支后,側面菜單上的工作流以及所有工作流運行歷史記錄都將消失。
您可以通過手動 go 驗證到舊的工作流程鏈接https://github.com/[username]/[repo]/actions/workflows/test.yml
這是目前的結果。
這是一個僅使用 GitHub CLI 的答案(您需要安裝並驗證 re: https://github.com/cli/cli#installation )和 awk:
OWNER="repoOwner"
REPO="repoName"
gh run list --repo <[HOST/]OWNER/REPO> -workflow <string> | \
awk -F '\t' '{ if ($2 == "failure") { print $7 } }' | \
while read id; do gh api repos/$OWNER/$REPO/runs/$id -X DELETE; done
更新您的本地分支以與 master 同步,然后刪除 github/workflows。 提交並推送您的更改。 應在 master 中刪除 Wokflow
我確實找到了這樣做的方法。 您可以轉到.github/workflows或設置工作流的任何位置,然后提交刪除文件(工作流文件) ,最終將其刪除。
如果要刪除多個工作流運行,則應使用 GitHub Action API 獲取要刪除的運行 ID,然后發送帶有包含個人訪問令牌的標頭的 DELETE 請求以刪除工作流運行。
試試這個 python 腳本來刪除所有工作流運行。
https://github.com/wh201906/garage/blob/master/Python/DeleteGithubAction/delete.py
它使用 grequests 一次發出多個請求,並且此腳本不需要 gh 和 jq。
您的工作流程是 *.yml 文件保存在文件夾 /.github/workflows/ 中的存儲庫中
只需刪除它們!
我嘗試從這個位置 .github/workflows/ 刪除 yml 文件,它就像一個魅力。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.