Skip to content

ci: stop artifact storage from failing CI, and cap release artifact retention - #10

Merged
rynfar merged 2 commits into
pylonfrom
fix/2026-08-12-release-artifact-retention
Aug 12, 2026
Merged

ci: stop artifact storage from failing CI, and cap release artifact retention#10
rynfar merged 2 commits into
pylonfrom
fix/2026-08-12-release-artifact-retention

Conversation

@rynfar

@rynfar rynfar commented Aug 12, 2026

Copy link
Copy Markdown
Collaborator

Problem

The nightly Release run builds four desktop platforms and uploads ~880 MB of artifacts per run, with no retention-days — so they inherit the repository default of 90 days (which is also the maximum GitHub allows). A few active days accumulate GBs.

This repository had reached 14.8 GB of live artifacts, 99.9% of it desktop-*, and exhausted the account's Actions artifact storage quota:

date artifacts size
2026-08-07 41 8.28 GB
2026-08-08 25 5.37 GB
2026-08-11 4 0.85 GB

The failure does not stay in the release lane. Once the quota is gone, every artifact upload in the org fails — so an unrelated PR goes red on Failed to CreateArtifact: Artifact storage quota has been hit in a step that has nothing to do with its diff. #9 hit exactly that: its Test step passed and the job still failed, in the thread-transfer-report upload.

What this does

Sets retention-days: 7 on the desktop build and resource-monitor uploads.

These are intra-run handoff, not deliverables: publish_release downloads desktop-* and attaches them to the GitHub Release, and that Release is the durable copy. Seven days is a deliberate middle — long enough to re-run a failed publish_release against the same build, short enough to cap steady state near 6 GB rather than ~78 GB. The tracing-config upload in the same workflow already used retention-days: 1, so the pattern was established.

Storage was also pruned by hand alongside this: 68 desktop artifacts from 2026-08-06 through 2026-08-08 deleted, 13.93 GB freed (14.80 GB → 0.87 GB), keeping the most recent set.

Worth considering separately

The repository-wide retention default is still 90 days (Settings → Actions → "Artifact and log retention"). Lowering it to ~14 days would give every current and future workflow a sane ceiling without needing a per-step change each time. That is a settings change rather than a code change, so it is not in this PR.

Verification

No behavior change to what gets built or published — only how long the intermediates are kept. vp fmt --check clean; the two new keys sit at the same indent as their sibling with: entries. The real proof is the next nightly still publishing its Release normally.

Model: Claude Opus 5 via Claude Code.


View with [code]smith Autofix with [code]smith
Need help on this PR? Tag @codesmith with what you need. Autofix is disabled.

The nightly release run uploads four desktop builds totalling ~880 MB and
inherits the repository's default 90-day artifact retention, so a few active
days accumulate GBs. This repository reached ~14.8 GB, 99.9% of it
`desktop-*`, and exhausted the account's Actions artifact storage quota.

That failure is not contained to releases: once the quota is gone, every
upload in the org fails, so an unrelated pull request goes red on
"Failed to CreateArtifact" in a step that has nothing to do with its diff.
PR #9 hit exactly that in the thread-transfer-report upload while its own
tests passed.

These artifacts are intra-run handoff — `publish_release` downloads
`desktop-*` and attaches them to the GitHub Release, which is the durable
copy. Seven days keeps a window wide enough to re-run a failed publish job
against the same build while capping steady state near 6 GB. The resource
monitors get the same treatment for the same reason; the tracing config
already used `retention-days: 1`.

Storage was also pruned manually: 68 desktop artifacts from 2026-08-06
through 2026-08-08 were deleted, freeing 13.93 GB and leaving the most
recent set.
@github-actions github-actions Bot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:S labels Aug 12, 2026
@github-actions

github-actions Bot commented Aug 12, 2026

Copy link
Copy Markdown

Thread transfer impact

⚠️ The latest CI run did not produce a thread transfer result for b260397.

This comment will update automatically after the next completed run.

The thread-transfer upload is a few KB of JSON whose only consumer is
thread-transfer-report.yml, which turns it into a PR comment. Account artifact
storage is shared and org-wide, so anything can exhaust it — and once it is
exhausted every upload fails. A fatal step here therefore lets an unrelated
storage condition fail a run whose tests passed, which is exactly what
happened to #9 twice: step "Test" succeeded and the job went red on
"Failed to CreateArtifact: Artifact storage quota has been hit".

Losing the transfer comment is the right way to degrade. Blocking code review
on shared storage headroom is not.
@rynfar rynfar changed the title ci: cap release build artifact retention at 7 days ci: stop artifact storage from failing CI, and cap release artifact retention Aug 12, 2026
@rynfar

rynfar commented Aug 12, 2026

Copy link
Copy Markdown
Collaborator Author

Added a second, related commit: continue-on-error: true on the thread-transfer upload in ci.yml.

#9 made the case for it concretely. Its Test step passed twice, and the job went red both times on Failed to CreateArtifact: Artifact storage quota has been hit — a step with nothing to do with its diff. Pruning 13.93 GB did not help on re-run, because GitHub recalculates usage only every 6–12 hours.

That upload is a few KB of JSON, and its only consumer is thread-transfer-report.yml turning it into a PR comment. Artifact storage is a shared org-wide resource that anything can exhaust, and when it is exhausted every upload fails. Losing the transfer comment is the right way to degrade; blocking code review on storage headroom is not.

So this PR now does two complementary things:

  • release.ymlretention-days: 7 on the desktop and resource-monitor uploads, so the nightly stops accumulating ~880 MB/run at 90-day retention. Prevents the quota from being exhausted.
  • ci.yml — the transfer upload is non-fatal, so if quota is exhausted by something else, PRs stay reviewable. Contains the blast radius.

Sequencing note: ci.yml for a pull_request run comes from the PR's own head, so #9 cannot benefit until this merges and #9 rebases onto it. Once you approve this, I will merge it, rebase #9, and re-run.

@rynfar
rynfar merged commit 274500c into pylon Aug 12, 2026
11 checks passed
@rynfar
rynfar deleted the fix/2026-08-12-release-artifact-retention branch August 12, 2026 17:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:S vouch:trusted PR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant