unsloth/.github/workflows
Daniel Han 41640d9695 CI: add consolidated CPU tests (unsloth Bucket-A + unsloth_zoo@main + test_apply_fused_lm_head)
Adds .github/workflows/consolidated-tests-ci.yml: one ubuntu-latest job that
covers test_* coverage the existing CI does not already pick up.

What this consolidates:

1. unsloth Bucket-A (16 test_* across 5 files): tests/saving/test_save_shell_injection.py,
   tests/saving/test_patch_saving_none_tokenizer.py, tests/saving/test_fix_sentencepiece_gguf_robustness.py,
   tests/utils/test_attention_masks.py, tests/utils/test_trunc_normal_patch.py.
   Currently excluded by the Repo tests (CPU) job's --ignore=tests/saving and --ignore=tests/utils
   because those directories also house GPU-bound and real-HF-weight tests; the five files above are
   pure-Python / AST / protobuf / regex and run cleanly on CPU.

2. unsloth_zoo @ main full pytest tests/ (172 collected, 2 deselected as CUDA-only).
   unsloth_zoo has no CI on main today (.github/workflows/ is empty upstream); 106 of 111 test_*
   are CPU-runnable. Locally validated: 172 passed, 2 deselected, 11.17 s.

3. unsloth_zoo.compiler.test_apply_fused_lm_head. Lives at unsloth_zoo/compiler.py:1983, not under
   tests/, so it is not picked up by pytest's default collection. Plain function with no fixtures:
   pure regex over transformers source strings, no GPU, no model download. Wall ~5-15 s, dominated
   by the transformers import. Invoked via python -c.

Implementation notes:

- Install ladder mirrors studio-backend-ci.yml's Repo tests (CPU) job + mlx-ci.yml: studio.txt,
  the explicit pin list, torch CPU + torchvision, transformers, bitsandbytes, then unsloth -e .
  --no-deps and unsloth_zoo -e <clone> --no-deps. The --no-deps install lets pip honor the explicit
  torch CPU-index install rather than fighting it.
- unsloth_zoo source comes from a shallow git clone at $RUNNER_TEMP/unsloth-zoo so the full tests/
  directory is available (the wheel does not ship tests/). UNSLOTH_ZOO_REF is workflow_dispatch input
  with default 'main'.
- PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python on the Bucket-A step. transformers' bundled
  sentencepiece_model_pb2.py was generated against an older protoc and raises against the C++
  protobuf 4+/5+/6 implementation; the pure-Python parser bypasses that check. Cost is negligible
  for these tests, which avoids pinning protobuf and fighting transitive deps.
- Two unsloth_zoo CUDA-only cases in test_unsloth_zoo_lora_merge.py are explicitly --deselect'd to
  document intent (they auto-skip on no-CUDA anyway).
- One Bucket-A test (test_run_attention_flash_varlen_receives_window_and_softcap) is --deselect'd
  because it monkeypatches flash_attn_varlen_func, only bound on the module when flash_attn is
  importable. flash_attn requires CUDA + dev toolchain; not installable on ubuntu-latest.
- continue-on-error: true on the job for the first pass: surfaces results in the PR check UI without
  blocking merge. Once one full green run is observed, flip to false.

Locally validated on the workspace_6 host (Linux + Python 3.13.12, CUDA visible):
- Bucket-A: 15 passed, 1 deselected, 10.1 s
- unsloth_zoo @ main: 172 passed, 2 deselected, 11.2 s
- test_apply_fused_lm_head: OK

Coverage previously absent from CI: 16 unsloth tests (15 effective), 106 unsloth_zoo tests, plus
one in-tree compiler.py test. All CPU-only.
2026-05-07 04:26:27 +00:00
..
consolidated-tests-ci.yml CI: add consolidated CPU tests (unsloth Bucket-A + unsloth_zoo@main + test_apply_fused_lm_head) 2026-05-07 04:26:27 +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(mlx): fresh-process reloads + soft-skip GGUF on llama.cpp limitation 2026-05-07 04:12:21 +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-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(studio): always-upload artifacts + gate /api/system + path/health plumbing 2026-05-07 04:09:09 +00:00
wheel-smoke.yml CI: SHA-pin every action; fix 4 bugs in advisory-audit 2026-05-07 01:12:40 +00:00