getsentry / getsentry/XcodeBuildMCP
Test-products retention is unbounded in practice (100 bundles / 3 days, no config knob) — can fill a disk
- Vorherrschende Sprache
- TypeScript
- Sterne
- 6.4k
- Forks
- 319
- PR-Merge-Kennzahlen
- Keine gemergten PRs in 30 T.
Beschreibung
**Version:** 2.7.0
## Problem
Each `test_sim` / `test_*` run stages a full `.xctestproducts` bundle (a `Binaries/` copy of the built test products) under `~/Library/Developer/XcodeBuildMCP/workspaces//test-products/`. In one of the repos I work on, each bundle is **~6.6 GB**.
`pruneManagedTestProductsDirectory` only removes bundles that are either:
- older than **3 days** (`TEST_PRODUCTS_MAX_AGE_MS`), or
- in excess of **100** retained (`TEST_PRODUCTS_MAX_COUNT`),
and the sweep only runs while the server is active (1h cooldown). At ~6.6 GB/bundle that permits roughly **660 GB** before count-based GC ever triggers. In practice, 20 runs over two days silently consumed **66 GB** and contributed to filling my disk.
## Root cause
These limits are hardcoded in `utils/test-products-lifecycle.js`:
```js
const TEST_PRODUCTS_MAX_AGE_MS = 3 * 24 * 60 * 60 * 1e3;
const TEST_PRODUCTS_MAX_COUNT = 100;
```
and the caller in `utils/workspace-filesystem-lifecycle.js` only ever passes `maxAgeMs` (the log max-age, also 3 days) — never `maxCount`. There is no env/config surface to tune count, age, or a total-size cap, unlike `XCODEBUILDMCP_DERIVED_DATA_PATH` for derived data.
## Request
Expose retention controls, e.g.:
- `XCODEBUILDMCP_TEST_PRODUCTS_MAX_COUNT`
- `XCODEBUILDMCP_TEST_PRODUCTS_MAX_AGE`
- `XCODEBUILDMCP_TEST_PRODUCTS_MAX_TOTAL_BYTES`
and/or lower the defaults given bundles are multi-GB (e.g. keep only the newest N per workspace). A total-size budget would be the most robust guard against filling the disk between the age/count thresholds.
Beitragsleitfaden
Für dieses Repository ist kein Beitragsleitfaden indexiert
Rechercherichtung
Start by reading utils/test-products-lifecycle.js, including pruneManagedTestProductsDirectory and its TEST_PRODUCTS_MAX_AGE_MS and TEST_PRODUCTS_MAX_COUNT constants, then trace the caller in utils/workspace-filesystem-lifecycle.js. Determine how retention settings should be exposed and how total-size or count/age limits should interact; done means configurable cleanup prevents the documented disk-growth scenario and existing lifecycle behavior remains covered.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- typescript
- Bereich
- tooling
- Issue-Typ
- Feature
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Aktivitätsstatus
- Aktiv
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 48/100