From 1cc48993afb180be3d33a363337331875f2643b2 Mon Sep 17 00:00:00 2001 From: grabowski Date: Thu, 23 Jul 2026 17:35:56 +0700 Subject: [PATCH] CI: fit the dependency set on the runner's disk uv's cache moves into the workspace so it shares a filesystem with .venv and hardlinks instead of double-storing ~1.3 GB per job (the 'Failed to hardlink, falling back to full copy' warning was the tell before ENOSPC), and both matrices run max-parallel 1 so the host holds one dependency set at a time instead of six. --- .gitea/workflows/ci.yml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index f4b240d..97a7be3 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -22,6 +22,10 @@ on: env: UV_PYTHON: "3.12" + # Cache on the same filesystem as .venv so uv hardlinks instead of + # double-storing ~1.3 GB per job (PySide6 + scipy + matplotlib) — + # the runner host ran out of disk with the default cache location. + UV_CACHE_DIR: .uv-cache # No test opens a window, but if one ever creates a figure the Qt # backend must not try to reach a display on a headless runner. QT_QPA_PLATFORM: offscreen @@ -32,6 +36,9 @@ jobs: runs-on: ubuntu-latest strategy: fail-fast: false + # Serialized: the runner host has limited disk; one dependency + # set at a time keeps peak usage at a single job's worth. + max-parallel: 1 matrix: python: ["3.11", "3.13"] env: @@ -55,6 +62,8 @@ jobs: container: ${{ matrix.distro }} strategy: fail-fast: false + # See the linux job: serialized for the runner host's disk. + max-parallel: 1 matrix: include: # git in every list: the checkout below is plain git because