unsloth/.github/workflows
Daniel Han d65f8b19d8 ci(windows): cache Studio venv + llama.cpp prebuilt + frontend dist
Windows Studio install (install.ps1 --local --no-torch) is the
second-biggest cost on PR 5312 after the Recents-step fix:
  Windows Studio UI CI:     414s install (of 24m47s wallclock)
  Windows Studio Update:    414s install (of 9m28s)
  Windows Studio API:       379s install (of 7m48s)
  Windows Studio GGUF (x3): 353s..429s install

Of that 6-7 min, ~3.5 min is uv pip install of the studio venv,
~45s is npm ci + vite build of studio/frontend/dist, ~30s is the
llama.cpp prebuilt fetch+extract; ~90s is winget bringing system
tools in (Python, uv, Node, git, cmake, VS, bun) which sits at
the runner-image layer and isn't cacheable from a workflow.

Add three actions/cache@v4 entries before the install step in
each Windows workflow:

  - ~/.unsloth/studio/unsloth_studio  (the studio venv)
    keyed on hashFiles(pyproject.toml, studio/backend/requirements/**,
    install.ps1, studio/setup.ps1, studio/install_python_stack.py)

  - ~/.unsloth/llama.cpp              (the prebuilt llama.cpp tree)
    keyed on hashFiles(studio/install_llama_prebuilt.py)

  - studio/frontend/dist              (the vite build output)
    keyed on hashFiles(studio/frontend/package-lock.json,
    studio/frontend/src/**, studio/frontend/index.html,
    studio/frontend/vite.config.*, studio/frontend/tsconfig*.json,
    studio/frontend/components.json)

Security:
  * Cache keys are content-addressable hashes of every input file
    that meaningfully changes the produced artefact. A malicious
    PR that modifies any of those triggers a fresh build; the
    cache cannot mask a real dependency change.
  * GitHub Actions cache is branch-partitioned -- a PR cache
    cannot poison main's cache. Only a successful build on main
    can populate the main-branch cache.
  * No restore-keys: prefix-matched fallback would resurrect a
    venv whose lockfile no longer matches; uv pip install would
    then silently keep the old packages. We want all-or-nothing
    on lockfile hash.
  * The cache version salt (-v1-) lets us invalidate every entry
    immediately if a future advisory or build-system change
    requires it.

setup.ps1 already takes the "reusing existing virtual environment"
fast-path when ~/.unsloth/studio/unsloth_studio exists, and the
"prebuilt up to date and validated" fast-path when llama.cpp is
already laid down -- no setup.ps1 changes needed.

Estimated saving: ~5 min per Windows job, ~30 min compute per PR
when caches hit. First run on each lockfile change still pays the
full install cost (the cache-miss path is unchanged).
2026-05-08 07:28:07 +00:00
..
consolidated-tests-ci.yml CI(Core): expand KNOWN_BROKEN_COMPILE with 7 latest-transformers failures 2026-05-07 09:17:47 +00:00
lint-ci.yml CI: SHA-pin every action; fix 4 bugs in advisory-audit 2026-05-07 01:12:40 +00:00
mlx-ci.yml ci(mac): make Mac smoke tests robust to Metal output drift 2026-05-07 05:38:17 +00:00
notebooks-ci.yml CI(notebooks): api-introspect installs unsloth from local checkout 2026-05-07 12:58:34 +00:00
release-desktop.yml Fix Studio desktop tray installer and titlebar and bux fixes (#5179) 2026-04-30 08:40:39 -07:00
security-audit.yml CI: SHA-pin every action; fix 4 bugs in advisory-audit 2026-05-07 01:12:40 +00:00
stale.yml CI: SHA-pin every action; fix 4 bugs in advisory-audit 2026-05-07 01:12:40 +00:00
studio-api-smoke.yml CI(studio): fix 4 real failures surfaced by the new smoke jobs 2026-05-07 04:20:11 +00:00
studio-backend-ci.yml CI: SHA-pin every action; fix 4 bugs in advisory-audit 2026-05-07 01:12:40 +00:00
studio-frontend-ci.yml CI(studio): always-upload artifacts + gate /api/system + path/health plumbing 2026-05-07 04:09:09 +00:00
studio-inference-smoke.yml CI(studio): always-upload artifacts + gate /api/system + path/health plumbing 2026-05-07 04:09:09 +00:00
studio-mac-api-smoke.yml ci(mac): add Mac Studio API/UI/GGUF CI workflows 2026-05-07 05:14:51 +00:00
studio-mac-inference-smoke.yml ci(mac): trim max_tokens + timeouts so tool-calling/json fit in 25min 2026-05-07 08:59:32 +00:00
studio-mac-ui-smoke.yml ci(mac): single-process Chromium + JSON.parse try/catch in pipeTransport 2026-05-07 11:05:32 +00:00
studio-mac-update-smoke.yml ci(mac): add Mac Studio Update CI 2026-05-07 05:08:43 +00:00
studio-tauri-smoke.yml CI(studio): always-upload artifacts + gate /api/system + path/health plumbing 2026-05-07 04:09:09 +00:00
studio-ui-smoke.yml CI(ui): add second Playwright job covering Compare/Recipes/Export/Studio/Settings 2026-05-07 04:09:09 +00:00
studio-update-smoke.yml CI(update-smoke): drop cache: 'pip' to avoid fatal post-step 2026-05-07 07:38:26 +00:00
studio-windows-api-smoke.yml ci(windows): cache Studio venv + llama.cpp prebuilt + frontend dist 2026-05-08 07:28:07 +00:00
studio-windows-inference-smoke.yml ci(windows): cache Studio venv + llama.cpp prebuilt + frontend dist 2026-05-08 07:28:07 +00:00
studio-windows-ui-smoke.yml ci(windows): cache Studio venv + llama.cpp prebuilt + frontend dist 2026-05-08 07:28:07 +00:00
studio-windows-update-smoke.yml ci(windows): cache Studio venv + llama.cpp prebuilt + frontend dist 2026-05-08 07:28:07 +00:00
wheel-smoke.yml CI: SHA-pin every action; fix 4 bugs in advisory-audit 2026-05-07 01:12:40 +00:00