skå*_*fan 1 github github-api github-actions
我在.github/workflows
存储库的文件夹中创建了几个工作流,以尝试使用GitHub Actions。从那以后,我学到了很多东西,并从我的仓库中删除了所说的“实验”工作流程。删除“实验性”工作流yaml文件并提交删除操作后,当我转到存储库的“操作”选项卡时,仍会看到此后删除的工作流。
我没有选择删除并重新开始的选项吗?这不可能吗?是否有可能通过GitHub API?嗯
sta*_*son 30
目前似乎没有办法删除这些工作流——这没有意义——但似乎一旦犯了创建一个的错误,他们就会永远坚持下去。到目前为止,我找到的唯一解决方案是禁用这些工作流程。
因此,如果我转到“操作”选项卡(编辑 url 以匹配您的存储库),然后我可以单击工作流并通过该选项卡右上角的 [...] 禁用它,如下面的快照所示:
删除这里的记录是我在此处找到的解决方案,对原始记录略有修改:
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
Run Code Online (Sandbox Code Playgroud)
相应地将GH_USERNAME
和替换REPO_NAME
为所需的 github 用户名和 repo 名称。
这将删除所有不在master
分支上的旧工作流。你可以进一步调整它来做你需要的。
先决条件:
gh
版本。笔记:
gh auth login
如果这是您第一次使用它,您可能必须这样做gh api --silent
如果您不想看到详细的输出,您可以进一步将命令更改为。xargs
命令链的最后部分 - 使用原始的
-J
代替-I
,GNU 不支持xargs
。-J
结果是单个命令,并且-I
会为每条记录执行该命令,所以它有点慢。感谢社区论坛上的 OP 首先分享这一点。
Dav*_*uel 21
@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 -t -I{} gh api -X DELETE /repos/$OWNER/$REPOSITORY/actions/runs/{}
Run Code Online (Sandbox Code Playgroud)
(-t
将xargs
每个工作流程运行删除请求打印到终端的选项。)
它需要GitHub CLI:
brew install gh
gh auth login
Run Code Online (Sandbox Code Playgroud)
和jq:
brew install jq
Run Code Online (Sandbox Code Playgroud)
*注意:如果您想完全删除工作流文件,请不要忘记在运行脚本后从主分支中删除它。
Sam*_*ler 16
这里有一些命令可以快速清理您的工作流程。
你需要 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/{}
Run Code Online (Sandbox Code Playgroud)
Gia*_*olà 13
我设法通过使用“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",
...
}
]
}
Run Code Online (Sandbox Code Playgroud)
使用您要删除的工作流的 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",
...
},
}
Run Code Online (Sandbox Code Playgroud)
对于每个运行 ID(假设为 363876785),删除它:
$ gh api repos/$YOUR_USER/$YOUR_REPO/actions/runs/363876785 -X DELETE
Run Code Online (Sandbox Code Playgroud)
在此之后,Web UI 左栏中的不可删除的 Action 应该会消失。
Séb*_*ier 10
在 GitHub 实现“删除所有工作流程运行”之前,您必须依赖 API。gh
通过在工作站上安装CLI 工具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/{}
Run Code Online (Sandbox Code Playgroud)
最后一个命令将删除最近 100 次运行(来自 GitHub API 的限制)。如果有更多,请运行多次以删除全部。
基于@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
Run Code Online (Sandbox Code Playgroud)
结果:
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
Run Code Online (Sandbox Code Playgroud)
确保已安装 Github 客户端并在 Github 中获得所需的令牌权限。
删除属于您工作流程的所有作业,您的工作流程将消失
P/s:如果您有数千个作业要删除,那么使用 API 是一个很好的方法: https: //docs.github.com/en/rest/reference/actions#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 }
Run Code Online (Sandbox Code Playgroud)
重新运行“一行”,直到没有更多;目前它分页至 30 个结果。
归档时间: |
|
查看次数: |
483 次 |
最近记录: |