我有一个 GitHub 工作流程,可以为我的 Flutter 应用程序创建 APK。直到最近这一切都很好,我似乎已经耗尽了某种配额。现在,当工作流程运行时,我收到此错误:
Create Artifact Container failed: Artifact storage quota has been hit. Unable to upload any new artifacts
我认为删除所有工件会再次释放空间,所以我使用了另一个工作流程来实现这一点:
name: 'Delete old artifacts'
on:
push:
branches:
- master
- develop
pull_request:
branches:
- master
- develop
jobs:
delete-artifacts:
runs-on: ubuntu-latest
steps:
- uses: kolpav/purge-artifacts-action@v1
with:
token: ${{ secrets.GITHUB_TOKEN }}
expire-in: 0days
新的工作流程似乎正在运行,我不再在 GitHub UI 中看到旧文件。但是,在尝试运行 APK 工作流程时我仍然收到错误。有什么想法如何修复这个错误吗?
更新:
您实际上可以删除旧的工件来绕过这个问题。只需转到您的操作,单击以前的构建并检查页面底部是否有存储的工件。有一个回收站图标,您可以单击将其删除。
您还可以指定 Github 何时自动为您删除旧工件。您进入“设置”->“操作”->“常规”并找到“工件和日志保留”。
请注意,Github 可能需要一些时间才能更新已完成的配额。
另请参阅官方文档。
无法撤消。配额是每月的,所以你只需等待配额重置即可。
Github Actions(运行时间)和 Github Storage(工件)应该有单独的配额。
对于 Github Actions,我知道它们对公共存储库是免费的,因此您可以更改存储库的可见性,至少在需要时可以暂时更改。至于 Github Storage,我不确定同样的技巧是否有效,从未测试过。
请告诉我,我可以更新答案。
我设法通过在部署脚本中添加新步骤来阻止此错误:
- name: Delete Old Artifacts
uses: actions/github-script@v6
id: artifact
with:
script: |
const res = await github.rest.actions.listArtifactsForRepo({
owner: context.repo.owner,
repo: context.repo.repo,
})
res.data.artifacts
.forEach(({ id }) => {
github.rest.actions.deleteArtifact({
owner: context.repo.owner,
repo: context.repo.repo,
artifact_id: id,
})
})
将其放在上传步骤的正上方,它将删除存储库以前的所有工件。
我设法通过在部署脚本中添加新步骤来阻止此错误:
要添加“删除旧工件”步骤,请确保您已在“设置”>“操作”>“常规”>“工作流程权限”中选择“读写权限”选项
我对此感到非常沮丧。我们制作了一组脚本,可以:
这个解决方法已经工作了一两个月,直到有一天我决定在我的 CI 构建和发布中包含 1 个新工件。我想:“它只有 30MB,所以我怀疑它会让我从(当前)0.3GB 消耗量超出允许的 0.5GB”。
所以我做到了......到目前为止一切顺利。但突然 5 天后,我得到:
.csv
文件,其中仅列出一行,其中告诉我使用该报告的存储库名称,但它没有指定它是否是工件、资产、或日志。现在,在您批评不购买付费选项之前:我是一名独立开发者,尚未为受此影响的单一私人回购赚取任何收入。我的所有其他存储库都是开源的。
因此,我决定构建最肮脏的黑客攻击,但它有效并消除了所有的挫败感:一个将资产上传到第二个存储库的脚本,仅用于二进制文件。我已经成功地做到了,以便它用 --force 推动以摆脱以前的二进制文件(这样它们就不会存在于 git 历史记录中,并且不需要花费很长时间/PB 来下载/存储它)。
如果有足够的兴趣(只需投票)我可以将其开源,例如将其发布在 GitHubActions 市场中。