getsentry / getsentry/XcodeBuildMCP
Test-products retention is unbounded in practice (100 bundles / 3 days, no config knob) — can fill a disk
- 主要言語
- TypeScript
- スター
- 6.4k
- フォーク
- 319
- PR マージ指標
- 30日以内にマージされた PR はありません
説明
**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.
コントリビューションガイド
このリポジトリのコントリビューションガイドは索引されていません
調査の方向性
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.
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- typescript
- 領域
- tooling
- issue の種類
- 機能追加
- 難易度
- 4/5
- 見積もり時間
- 3〜5日
- 活発さ
- 活発
- 明瞭さ
- おおむね明確
- 初心者へのやさしさ
- 48/100