Safeguard
Developer Tools•

Should release binaries live as CI workflow artifacts?

CI artifacts expire, and deleting a run deletes them. Why release binaries need a permanent, access controlled home, and how to hand them over safely.

Safeguard Security Team
3 min read

No. CI workflow artifacts are temporary build output. On GitHub Actions they expire after 90 days by default, and deleting a workflow run deletes its artifacts with no restore. Release binaries need a permanent store with its own access rules, retention and integrity records.

What CI artifacts are for

GitHub stores build logs and artifacts with each workflow run. Retention is configurable per repository, organization and enterprise, and per artifact at upload time. After expiry they are gone, and the documentation warns that a deleted artifact cannot be restored. When a run is deleted, all artifacts of that run are deleted too.

That makes them fine for handing a build to the next job and a poor system of record for what you shipped.

Where release binaries should live

NeedWorkflow artifactRelease store
Hand a build to the next jobGoodNot needed
Customers download itNoYes
Keep for years for auditNoYes, with retention rules
Immutable once publishedNoYes
Signed and checksummedOptionalRequired
Access control by roleRepository levelDedicated

A release store can be a release page, an artifact repository, a package registry or an object bucket with versioning. What matters is that it is separate from the pipeline's scratch space.

Steps

  1. Build once in CI and upload to workflow artifacts for the pipeline's own use.
  2. Run verification against that build: scans, tests, signature checks.
  3. On approval, publish the same files to the release store. Do not rebuild.
  4. Generate a checksum file and a signature at publish time. See how to sign release files with cosign.
  5. Make the release immutable. See what immutable releases lock.
  6. Record the digest, commit, workflow run and approver in the release record.
  7. Set retention in the release store to match your policy, not CI's default.

A quick test

Ask one question: if the CI project vanished tomorrow, could you still produce every binary you shipped this year, with its signature, checksum and the record of who approved it? If the answer is no, your release store is the CI system, and its retention rules are your retention rules. Fix that before an auditor or a customer asks for a build from last spring.

Teams often discover the gap during an incident, when they need to compare the shipped binary with a rebuilt one. Having the original file, not a reconstruction, makes that comparison quick and conclusive.

Mistakes to avoid

  • Linking customers to CI artifact URLs. They need authentication and they expire.
  • Keeping the only copy of a signed build in a run you may delete.
  • Letting anyone who can rerun a workflow regenerate a release file.
  • Forgetting that logs expire on the same clock as artifacts, so copy evidence you need.

For what auditors expect to see per release, read what to archive for each release.

Safeguard's compliance and evidence automation stores scan results and release evidence independently of the CI system that produced them.

Quick check

How long do GitHub Actions artifacts last by default?

90 days, configurable. You can also set a custom period for an individual artifact at upload.

Can I recover a deleted artifact?

No. GitHub documents that once an artifact is deleted it cannot be restored.

Sources

Last reviewed: 19 October 2026.

Never miss an update

Weekly insights on software supply chain security, delivered to your inbox.

Self-healing security runs on Safeguard.

Your first fix PR is minutes away.

No sales call required, even your agent can complete the purchase over MCP.