getsentry / getsentry/XcodeBuildMCP

Test-products retention is unbounded in practice (100 bundles / 3 days, no config knob) — can fill a disk

オープン
#524 コメント 1 件 リアクション 2 件 担当者 0 名 GitHub で見る
主要言語
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

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。