From 47ca07ef4e93624fb839b639f064f20aae910851 Mon Sep 17 00:00:00 2001 From: Yusuke Watanabe <42527473+ywatanabe1989@users.noreply.github.com> Date: Fri, 24 Jul 2026 02:20:40 +0900 Subject: [PATCH] =?UTF-8?q?fix(ci):=20remove=20the=20per-runner=20RUNNER?= =?UTF-8?q?=5FTOOL=5FCACHE=20env=20=E2=80=94=20it=20is=20a=20no-op?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The step-level env added in the previous change does NOT take effect: RUNNER_TOOL_CACHE is a runner-reserved default variable, and a workflow-level env does not override it. Measured on scitex-hpc ci run 30028631599 (2026-07-23, after the previous merge): all pytest-matrix legs still resolved the runner's ~/.runner-toolcache, not the intended per-runner /tmp path, identical to the unpatched jobs. Leaving a no-op that looks like a fix is worse than no fix. Replaced with a comment recording the finding and pointing at the only layer that can fix the shared-toolcache flake: the runner launcher (relaunch-scitex-hpc-runner.sh), which is where RUNNER_TOOL_CACHE is exported. Tracked in scitex-hpc card ci-runner-toolcache-per-runner-launcher-ssot-20260723. --- .github/workflows/pytest-matrix.yml | 45 ++++++----------------------- 1 file changed, 9 insertions(+), 36 deletions(-) diff --git a/.github/workflows/pytest-matrix.yml b/.github/workflows/pytest-matrix.yml index e21e05b..6cf38cb 100644 --- a/.github/workflows/pytest-matrix.yml +++ b/.github/workflows/pytest-matrix.yml @@ -36,42 +36,15 @@ jobs: - uses: astral-sh/setup-uv@v7 with: cache-dependency-glob: pyproject.toml - env: - # PER-RUNNER TOOL CACHE. Every runner on the Spartan lease inherited - # RUNNER_TOOL_CACHE=~/.runner-toolcache from the supervisor, so ~80 - # runners shared ONE mutable cache on GPFS. @actions/tool-cache's - # writer is destructive, not additive: - # - # _createToolPath(): rmRF(/) <- deletes the tree - # rmRF(/.complete) - # mkdirP(/) - # ...copy files in... - # _completeToolPath(): write .complete - # - # and the reader, find(), treats dir + `.complete` as a HIT and puts - # it on PATH WITHOUT checking that the binary is inside. So when a new - # uv release makes every concurrent job a cache MISS at once, each one - # deletes the tree the others are using or filling. Two observed faces, - # same cause: - # ENOENT copying into the toolcache (two writers collide) - # "Added .../uv//x86_64 to the path" then - # ".../uv: No such file or directory" -> exit 127 - # (a reader's hit gets deleted under it — figrecipe main, run - # 29945387939, 2026-07-22: all three matrix legs, three runners) - # - # Scoping the cache per runner removes the sharing, so no job can - # destroy another's tree. This is why PRE-SEEDING the image does NOT - # fix it: _createToolPath rmRF's a pre-seeded tree exactly the same. - # - # /tmp is node-local and may be cleared: that degrades to a cache MISS - # (re-download, slower), never a dangling path — mkdirP recreates it. - # Deliberately NOT on GPFS: punim0264 is at 98.2% of its 8M inode - # limit and a per-runner cache there would multiply inode use by ~80. - # - # Set at STEP level on purpose: the `runner` context is not available - # to job-level `env`. setup-uv writes the resolved path to $GITHUB_PATH, - # so later steps resolve uv without needing this variable themselves. - RUNNER_TOOL_CACHE: /tmp/scitex-ci-runner-work/toolcache/${{ runner.name }} + # NOTE: a per-runner RUNNER_TOOL_CACHE override was tried here and + # REMOVED as a no-op. RUNNER_TOOL_CACHE is a runner-reserved default; + # a workflow-level `env:` does NOT override it (measured 2026-07-23, + # scitex-hpc ci run 30028631599: the step still resolved the runner's + # ~/.runner-toolcache, not the override). The shared-toolcache flake + # (setup-uv concurrent-populate mutual destruction) can only be fixed + # where the RUNNER exports the variable — the launcher script + # (relaunch-scitex-hpc-runner.sh), per-runner + node-local. Tracked in + # scitex-hpc card ci-runner-toolcache-per-runner-launcher-ssot-20260723. - name: Install (.[all,dev]) + pytest run: | set -euo pipefail