目前 Github Actions 中的 workflows 执行记录在页面上没有提供批量删除的功能,只能单个点击鼠标操作删除。
如果有很多的记录需要清理,目前只能通过调用 github 的 api 进行删除,具体方法如下:
准备工作
我这里直接在命令行中使用 shell 脚本进行处理,用到的工具有 jq 和 gh,这两个工具不是系统自带的,需要自行安装。
例如,在 macOS 上安装:
brew install jq
brew install gh
其他系统可参考官方文档。
jq 是一个轻量级且灵活的命令行 JSON 处理器,类似于 sed、awk、grep 及其它用于 JSON 数据的工具。它是用便携式 C 语言编写的,没有运行时依赖,使您能够轻松地切割、过滤、映射和转换结构化数据。
gh,或者称为 GitHub CLI,是 Github 官方的命令行工具,用于在终端或脚本中使用 GitHub。
执行删除
jq 和 gh 都有了,就可以开始一键清除 workflows 执行记录了。执行以下命令:
1. 环境变量设置你的 github 信息
export OWNER="用户名"
export REPOSITORY="仓库名"
2. 登录 github
gh auth login
3. 调用 api 删除 workflows 记录
gh api -X GET "/repos/$OWNER/$REPOSITORY/actions/runs?per_page=300" | jq '.workflow_runs[] | .id' | xargs -I{} sh -c 'echo {} && gh api --silent -X DELETE /repos/$OWNER/$REPOSITORY/actions/runs/{}'
执行时会输出被删除记录的 ID,这个方式存在一个问题是它不一定每次都能删干净,如果没有删干净可以多执行几次就行。
执行以下命令可以查询剩余的 workflows 记录:
gh api -X GET "/repos/$OWNER/$REPOSITORY/actions/runs?per_page=300" | jq '.workflow_runs[] | .id' | xargs -I{} echo {}