如何删除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
相关产品推荐
相关产品推荐

