GitHub Actions Artifact Expired - "artifact has expired" on Download
A download of an older artifact fails because it has passed its retention period and was deleted. Artifacts are retained for a configurable window (90 days by default, less if overridden) and then removed.
What this error means
Re-running an old workflow, or downloading an artifact from a past run, fails because the artifact no longer exists - it expired and was garbage-collected.
Error: Unable to download artifact(s): Artifact has expired
# the run is older than the retention periodCommon causes
Retention period elapsed
Artifacts are deleted after their retention window. By default this is 90 days, but org/repo settings or retention-days can shorten it.
Relying on artifacts for long-term storage
Using build artifacts as a durable store fails once they expire. Artifacts are for short-lived run outputs, not archival.
How to fix it
Set retention-days to what you need
Raise retention-days (up to the repo/org maximum) for artifacts you must keep longer, within limits.
- uses: actions/upload-artifact@v4
with:
name: build
path: dist
retention-days: 30Use durable storage for long-lived outputs
- Push artifacts you need to keep to a release, package registry, or object storage (S3/GCS).
- Do not depend on cross-run artifact downloads for runs older than retention.
- Regenerate the artifact by re-running the producing job when needed.
How to prevent it
- Treat artifacts as short-lived run outputs, not archives.
- Set retention-days deliberately for artifacts you reuse.
- Publish durable outputs to releases or object storage.