簡體   English   中英

從 GitHub Actions 中刪除工作流

[英]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_USERNAMEREPO_NAME替換為相應的 github 用戶名和 repo 名稱。

這將刪除所有不在master分支上的舊工作流。 你可以進一步調整它來做你需要的。

先決條件:

  • 您將在此處找到最新的gh版本。

筆記:

  • 如果這是您第一次使用它,您可能需要gh auth login
  • 如果您不想看到詳細的輸出,您可以進一步將命令更改為gh api --silent
  • 對於命令鏈的最后xargs部分 - 原始使用-J而不是-I ,GNU xargs不支持。 -J產生一個命令,而-I將為每條記錄執行命令,所以它有點慢。

感謝社區論壇上的 OP 首先分享這個。

這里有一些命令可以快速清理您的工作流程。

您將需要xargsghjq 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 工具ghjq后,您可以運行以下命令來刪除該工作流的所有運行。 刪除所有運行后,它將不再顯示在 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
  • 告知你的github 用戶名令牌
  • 通知回購所有者名稱
  • 選擇要清理的 repo 工作流程

可以在這里看到一個例子。 請注意,您需要使用 Ritchie CLI 工具導入此存儲庫才能使命令正常工作。

  1. 安裝 Ritchie CLI: https ://docs.ritchiecli.io/

  2. 運行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
  1. 運行rit set formula-runner
? Select a default formula run type: docker
The default formula runner has been successfully configured!
  1. 啟動 Docker 桌面

  2. 轉到https://github.com/settings/tokens ,添加生成 GitHub 個人訪問令牌(使用“工作流”范圍)

  3. 運行rit github delete workflow-logs

  4. 輸入您的 GitHub 用戶名、GitHub 令牌、GitHub 所有者、GitHub 存儲庫名稱,然后選擇您希望刪除運行的工作流🙌

  5. 撤銷您的PAT

我創建了這個命令行工具來方便地選擇多個條目並將它們從可導航列表中一起刪除:

https://github.com/jv-k/delete-workflow-runs

我對@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/{}

對於刪除工作流且無法刪除工作流運行 (404) 的人?

找到這個帖子后,我仍然花了相當長的時間讓我的工作流程逐漸消失......

@ribeiro 提供的答案是正確的,但是對於已刪除其工作流程的人,他們將無法刪除運行,它將解析為 404!

如何刪除不再有工作流的工作流運行我嘗試了很多事情,最后,只有這對我有用:

  1. 對於您刪除的每個工作流,創建與前一個同名的 yml 文件( filename.yml工作流中的 name 屬性必須與前一個相同)。 這樣 github 會將它們視為“現有”。
  2. 創建 a.sh 文件並輸入以下內容(我將使用 Ribeiro 提供的答案,但是,我將刪除 state 過濾器,因為我希望將它們全部刪除)
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
  1. 運行 .sh 文件。 您應該會看到已刪除運行的工作流程(確實需要一些時間)

截至 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 文件,它就像一個魅力。

您可以從 github 的 Code 選項卡中刪除該文件,因為它是作為普通提交添加的

在此處輸入圖像描述

單擊文件,然后單擊刪除圖標:

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM