使用GitHub API下载Artifact时提示过期,未达请求限制
解决GitHub Artifact下载的「Artifact has expired」和「Permission Denied」问题
一、处理「Artifact has expired」(HTTP 410错误)
原因
GitHub Artifact有严格的有效期限制:
- 免费版仓库:默认90天
- 付费版仓库:默认40天(可延长至最多1095天)
Artifact过期后会被永久删除,调用API时直接返回HTTP 410错误,无法获取有效下载链接。
解决办法
确认Artifact状态
进入仓库的「Actions」→「Artifacts」页面,查看目标Artifact是否标红显示「Expired」,确认是否真的过期。重新生成Artifact
若Artifact已过期,只能重新触发对应的Workflow,生成新的Artifact。延长后续Artifact的有效期
使用actions/upload-artifact上传Artifact时,通过retention-days参数自定义有效期(不可超过仓库类型允许的最大值):- name: 上传Artifact uses: actions/upload-artifact@v4 with: name: my-artifact path: ./target/artifact.zip retention-days: 90 # 免费仓库最高90天,付费仓库最高1095天优化curl命令避免无效赋值
原命令会把API的错误信息赋值给ALLMODS_URL,导致后续curl执行失败。添加-f参数让curl在非成功状态码时退出,再判断URL有效性:ALLMODS_URL=$(curl -f -H "Accept: application/vnd.github+json" -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" -L "https://api.github.com/repos/OWNER/REPO/actions/artifacts/124384712/zip") if [ -n "$ALLMODS_URL" ]; then curl -O "$ALLMODS_URL" fi
二、处理「Permission Denied」问题
解决办法
检查GITHUB_TOKEN权限
默认的GITHUB_TOKEN需要actions: read权限才能下载Artifact,在Workflow开头添加权限声明:permissions: actions: read跨仓库下载时,默认
GITHUB_TOKEN无权限,需使用个人访问令牌(PAT),并确保PAT勾选actions:read和repo(私有仓库)权限,将PAT存入仓库Secrets后替换secrets.GITHUB_TOKEN。确认Artifact与仓库权限匹配
- 若Artifact属于私有仓库,确保当前Workflow所在仓库有权限访问该私有仓库(跨仓库场景需在源仓库设置仓库访问权限)。
- 检查下载action的参数正确性,
name必须与上传时的Artifact名称完全一致:- name: 下载Artifact uses: actions/download-artifact@v4 with: name: my-artifact # 与上传时的name严格一致 path: ./downloads
修复路径权限问题
若下载到指定路径时提示权限拒绝,提前创建路径并设置合理权限:mkdir -p ./downloads chmod 755 ./downloads
内容的提问来源于stack exchange,提问作者rafal1137
相关产品推荐
相关产品推荐

