You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何删除GitHub Packages中存储的旧snapshot构件版本

解决方案

方法1:集成官方Action到现有工作流(推荐)

这是最省心的方案,直接在你现有的部署SNAPSHOT的工作流末尾添加删除旧版本的步骤即可:

  • 首先给工作流配置权限,确保GITHUB_TOKEN有包的读写权限,在工作流根级别添加配置:
permissions:
  packages: write
  contents: read
  • 然后在部署步骤完成后,添加如下步骤:
- name: 删除旧的SNAPSHOT版本
  uses: actions/delete-package-versions@v4
  with:
    package-name: 'mycompany.mytool'
    package-type: 'maven'
    min-versions-to-keep: 1
    delete-only-pre-releases: true
    version-pattern: '.*-SNAPSHOT'

说明:min-versions-to-keep设为1即仅保留最新的1个版本,delete-only-pre-releases和version-pattern参数可以双重限定只删除带SNAPSHOT后缀的版本,避免误删正式发布的非快照版本。

方法2:使用GitHub CLI自定义脚本(灵活度更高)

如果需要更复杂的过滤逻辑,可以直接调用GitHub API实现,示例脚本如下,同样可以集成到工作流中:

# 替换为你的包信息
OWNER="你的GitHub用户名/组织名"
PACKAGE_NAME="mycompany.mytool"
PACKAGE_TYPE="maven"
KEEP_LATEST=1

# 查询所有SNAPSHOT版本,跳过最新的N个,删除剩余版本
gh api --method GET /users/$OWNER/packages/$PACKAGE_TYPE/$PACKAGE_NAME/versions \
  --jq '.[].name | select(test(".*-SNAPSHOT"))' | \
  tail -n +$((KEEP_LATEST + 1)) | \
  while read VERSION; do
    gh api --method DELETE /users/$OWNER/packages/$PACKAGE_TYPE/$PACKAGE_NAME/versions/$VERSION
    echo "已删除旧版本: $VERSION"
  done

该脚本需要你给工作流的GITHUB_TOKEN授予packages:write权限,且运行环境已安装GitHub CLI(GitHub官方托管的runner默认已预装)。若你的包托管在GitHub组织下,将API路径中的/users/替换为/orgs/即可。

注意事项

  • 操作前建议先做一次测试,把删除命令先替换为打印输出,确认匹配到的版本都是你要删除的旧版本,避免误删正式版本。
  • 版本删除后最多可能有10分钟的缓存时间,期间旧版本链接可能还能访问,等待缓存过期即可。

内容的提问来源于stack exchange,提问作者mipa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 11:39:00