# Storage & Eviction

## Storage quotas

Each repository has a cache quota that applies across its GitHub Actions, Git
LFS, build, and regular package-manager cache entries.

| | Default |
|---|---|
| **Per-repository quota** | 25 GB |
| **Unused entry TTL** | 7 days |

Custom quotas can be configured per repository via the Avrea console or the CLI.

## Eviction policy

When a repository exceeds its quota, we evict the entries using
**least-recently-used (LRU)** ordering:

1. Entries are sorted by last access time.
2. The oldest entries are deleted first until the repository is back within quota.
3. Entries unused for more than 7 days are eligible for eviction regardless of quota.

## Cache types

Storage is shared across all cache types within a repository:

- **gha**: GitHub Actions cache entries
- **lfs**: Git LFS objects
- **go-build**, **bazel-build**, **gradle-build**, **turbo-build**, **sccache-build**, **ccache-build**, **maven-build**, **nix-build**: build cache entries
- **packages**: cached package registry artifacts

## Private Swift package storage

Private Swift package payloads do not count against a repository's regular
cache quota. They are stored in organization-isolated artifact storage. Public
Swift packages use shared package storage.

Unused private archives and manifests are eligible for eviction after seven
days. A small immutable release record is retained so an evicted payload can be
rebuilt and verified before it is served again. Accessing an archive or one of
its manifests keeps the complete snapshot hot.

The organization artifact budget is currently operational and alert-only.
Exceeding it does not reject package resolution or immediately delete data;
cold payloads continue to follow the normal retention policy.