## 问题:`ui-browser.yml` 的 setup-uv 默认 prune-cache 会在 job 结束时删掉 VM201 共享 uv 缓存里其它 job 正在使用的临时环境 ### 实录(2026-10-09) 本仓 `ui-browser.yml` 的 `chromium-regression` job(runs-on self-hosted ci 池)用: ```yaml - uses: astral-sh/setup-uv@v8.1.0 with: enable-cache: true ``` `setup-uv` 的 `prune-cache` 默认 `"true"`(其 action.yml:62-64)→ job 结束 post 步骤执行 `uv cache prune --ci`。 uv 的 `cache prune` 会**无条件删除 `builds-v0` 下全部条目**(astral-sh/uv `crates/uv-cache/src/lib.rs`:「Third, remove all temporary build environments」,无占用检查)。CI 池宿主的 uv 缓存是全部 slot 共享的 bind mount,于是本仓这个 job 结束时把同一宿主上**其它 job 正在使用的** `uv run --with` 临时 venv 一并删掉——实录:gate-hub PR #1417 的 quality job 225 项测试 FileNotFoundError(全部指向被删的 `builds-v0/.tmpMzQjSl/bin/python`),完整根因取证见 zlxlabs/gate-hub#1418。 ### 建议 `setup-uv` 加一行 `prune-cache: false`: ```yaml - uses: astral-sh/setup-uv@v8.1.0 with: enable-cache: true prune-cache: false ``` 理由: - `uv cache prune --ci` 在共享宿主缓存上的唯一正确性杀伤面就是 `builds-v0`(gate-hub 侧会另做 per-job 隔离根治);关闭它同时避免每次 job 结束把共享 unzipped wheels 删冷,其它仓的暖缓存收益保得住。 - 本仓自己的缓存寿命不受影响:`uv cache prune` 本来就只该作用于「缓存属于本 job 独占」的 hosted runner 场景。
Activity
zj1123581321 commentedon Oct 10, 2026
分诊核实(2026-10-10):
.github/workflows/ui-browser.yml:18-20的 setup-uv 仍只有enable-cache: true、无prune-cache覆盖(默认 true),单子有效。定 P1:已实录打爆共享宿主上其它 job(gate-hub#1417 quality 全量 FileNotFoundError)。已派 quick 卡补prune-cache: false,合并后按谓词(workflow 文件含该行)验证关单。zj1123581321 commentedon Oct 10, 2026
已修复并合并,按谓词验证关单。
ui-browser.yml:20-21现为uv cache prune --ci,共享宿主上其它 job 的 builds-v0 临时环境不再被本 job 删除(gate-hub#1418 机理关断)关闭 ui-browser setup-uv 的 prune-cache 保护共享 CI 宿主