unsloth/.github/workflows
Daniel Han 2843e2a9bb ci(windows): pre-upgrade npm to 11 + Defender exclusions for ~/.unsloth + frontend
Side-by-side substep timing (Update CI, same SHA, post cache-revert):

                           Mac   Linux   Windows
  install uv                1s      1s      12s
  uv pip install unsloth    8s     10s      29s
  Node setup                4s      4s      35s   <- winget reinstall
  frontend build           20s     22s     204s   <- 10x slower
  9-step uv pip deps       15s     20s      92s   <- 5x slower
  llama.cpp validate       38s     21s      13s
  -------------------------------------------------
  total                    96s     93s     400s

Two Windows-specific time sinks have nothing to do with the install
logic itself; they are runner-environment friction:

(1) `setup.ps1` line 1109-1145 requires Node 22.12+ AND npm >=11
    (Vite 8 hard requirement). actions/setup-node@v4 with
    `node-version: '22'` lands Node 22.22.2 + the npm 10.9.7 it
    bundles, so the npm check fails and setup.ps1 falls into the
    "winget install Node.js LTS" branch (~35 s) for a Node reinstall
    we do not actually need. `npm install -g npm@^11` upgrades the
    bundled npm in-place in ~5 s, which lets setup.ps1 short-circuit
    on the existing Node 22.

(2) windows-latest's Windows Defender real-time scanning opens and
    hashes every file the install writes. Vite/Tailwind/TSC produce
    thousands of small chunks during the frontend build, and uv pip
    extracts thousands of small files per wheel. The scan latency
    dominates both. Adding Add-MpPreference -ExclusionPath entries
    for the four directories Studio writes to drops per-file open
    latency from ~ms to ~us. The runneradmin user has the privilege
    needed; wrap each call in try/catch so a permission flake leaves
    the install otherwise unaffected.

Excluded paths:

  $env:USERPROFILE\.unsloth                       (Studio venv + llama.cpp)
  $env:USERPROFILE\AppData\Local\uv               (uv wheel cache + extracts)
  $env:GITHUB_WORKSPACE\studio\frontend\node_modules
  $env:GITHUB_WORKSPACE\studio\frontend\dist

Six Windows jobs touched (4 workflows, with the inference workflow
fanning out to 3 jobs):

  studio-windows-update-smoke.yml      (1 job)
  studio-windows-api-smoke.yml         (1 job)
  studio-windows-ui-smoke.yml          (1 job)
  studio-windows-inference-smoke.yml   (3 jobs: openai-anthropic,
                                        tool-calling, json-images)

The new "Pre-install Windows tweaks" step is identical across every
Windows job; the rationale is described once in
studio-windows-update-smoke.yml and cross-referenced from the others.

Expected savings per Windows job:
  - npm fix: ~35 s saved (winget Node reinstall skipped)
  - Defender exclusions: ~30-90 s saved (frontend / uv-pip-extract)
  - Combined: ~60-120 s per job, or ~6-12 min CPU per PR push across
    all 6 Windows jobs.

Not addressed (out of scope for this commit):
  - The fundamental Vite/TSC/Tailwind frontend build cost on NTFS.
    Optimising that would mean changing the build pipeline (e.g.
    skipping `tsc -b` and relying on type-check elsewhere), which is
    much more invasive.
  - The uv pip extraction cost. The actions/setup-python@v5 cache
    already caches pip wheels; uv has its own cache that we could
    cache separately, but the cache restore overhead on Windows
    (76 s for the venv we tried and reverted) tends to eat the
    savings -- the Defender exclusion above goes after the same
    cost via a different lever.
2026-05-08 08:54:50 +00:00
..
consolidated-tests-ci.yml ci(core): factor llama.cpp build out of consolidated matrix into its own job 2026-05-08 08:44:38 +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(inference): trim tool-calling test wall-time roughly 50% 2026-05-08 08:54:08 +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(inference): trim tool-calling test wall-time roughly 50% 2026-05-08 08:54:08 +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): pre-upgrade npm to 11 + Defender exclusions for ~/.unsloth + frontend 2026-05-08 08:54:50 +00:00
studio-windows-inference-smoke.yml ci(inference): trim tool-calling test wall-time roughly 50% 2026-05-08 08:54:08 +00:00
studio-windows-ui-smoke.yml ci(windows): pre-upgrade npm to 11 + Defender exclusions for ~/.unsloth + frontend 2026-05-08 08:54:50 +00:00
studio-windows-update-smoke.yml ci(windows): pre-upgrade npm to 11 + Defender exclusions for ~/.unsloth + frontend 2026-05-08 08:54:50 +00:00
wheel-smoke.yml CI: SHA-pin every action; fix 4 bugs in advisory-audit 2026-05-07 01:12:40 +00:00