有谁知道从GitHub Actions删除工作流程的方法吗?

时间:2019-09-13 16:14:09

标签: github github-api github-actions

我在存储库的.github/workflows文件夹中创建了几个工作流程,以尝试使用GitHub Actions。从那以后,我学到了很多东西,并从我的仓库中删除了所说的“实验”工作流程。删除“实验性”工作流yaml文件并提交删除操作后,当我转到存储库的“操作”选项卡时,我仍然查看自此删除后的工作流。

我看不到要删除并重新开始的选项吗?!这不可能吗?是否有可能通过GitHub API?嗯。

13 个答案:

答案 0 :(得分:11)

我通过使用“gh”CLI 工具并阅读 REST API docs 设法解决了这个问题(目前无法通过 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 应该会消失。

答案 1 :(得分:9)

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

您将需要 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/{}

答案 2 :(得分:7)

目前无法实现。会在将来。

答案 3 :(得分:4)

基于@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 | 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 中获得所需的令牌权限。

答案 4 :(得分:2)

似乎没有一种方法可以删除这些工作流程-这没有任何意义-但是似乎一旦有人犯了错误地创建一个工作流程,便会永远被其困扰。到目前为止,我发现的唯一解决方案是禁用这些工作流程。

因此,如果我转到Actions tab,则可以单击工作流程并通过该选项卡右上角的[...]禁用它,如下快照所示:

enter image description here

要一次删除所有工作流程结果

要删除记录,这是我找到的here解决方案,对原始记录进行了一些修改:

user=GH_USERNAME repo=REPO_NAME; gh api repos/$user/$repo/actions/runs | \
jq -r '.workflow_runs[] | select(.head_branch != "master") | "\(.id)"' | \
xargs -n1 -I % gh api repos/$user/$repo/actions/runs/% -X DELETE

分别用所需的github用户名和回购名称替换GH_USERNAMEREPO_NAME

这将删除所有不在master分支上的旧工作流程。您可以进一步调整以执行所需的操作。

您将找到最新的gh版本here

注意:对于命令链的最后xargs部分-原始文件使用-J而不是-I,GNU xargs不支持。 -J产生一条命令,而-I将为每条记录执行该命令,因此速度稍慢。

我还认为它每次仅提供少量记录,因此我不得不运行2次才能删除这些工作流记录的几页。

感谢社区论坛上的OP首先分享此信息。

答案 5 :(得分:1)

从更新本地分支以与master同步,然后删除github / workflows。 提交并推动您的更改。 Wokflow应该在主机中删除

答案 6 :(得分:1)

我尝试从此位置.github / workflows /删除yml文件,并且它像一种魅力一样工作。

答案 7 :(得分:1)

对于任何想知道的人,删除workflow.yml中的.github/workflows文件都可以,但是您需要确保在所有分支中都将其删除。如果master/main仍具有工作流程文件,则GitHub将保留它们。

答案 8 :(得分:0)

您的工作流程是* .yml文件,保存在您的存储库中的/.github/workflows /

文件夹中

只需删除它们!

答案 9 :(得分:0)

一旦您删除所有相关的工作流程运行,它就会自动删除。

答案 10 :(得分:0)

在我的案例中,删除通过 CLI 运行的工作流只是解决方案的一部分。 GitHub 仍然拒绝显示我之后尝试再次添加的任何工作流程。

我通过使用 GH 中的“新工作流程”按钮并从模板创建工作流程解决了这个问题。 我粘贴了原始 YML 文件的内容并重命名了该文件,以便一切看起来都像以前一样。 最后,我通过网络提交 - GitHub 再次展示了我的工作流程。

答案 11 :(得分:-1)

我确实找到了这样做的方法。您可以转到 .github/workflows 或您的工作流设置的任何位置,然后提交删除文件(工作流文件),最终将其删除。

答案 12 :(得分:-3)

您可以从github中的“代码”标签中删除该文件,因为该文件是作为常规提交添加的

enter image description here

单击文件,然后单击删除图标:

enter image description here