unsloth/.github/workflows
Daniel Han e774c4117f CI(lint): split Python lint into a multi-language Lint CI workflow
Drop the python-lint job from studio-backend-ci.yml and move it into
the dedicated `Lint CI` workflow. Two material changes:

1. License-header check now accepts BOTH header families
   The previous version only counted SPDX-License-Identifier, which
   warned on every Apache-2.0 file in unsloth/, unsloth_cli/, and
   scripts/ (e.g. unsloth/models/llama.py opens with the standard
   `# Copyright ... Daniel Han-Chen & the Unsloth team. All rights
   reserved. # Licensed under the Apache License, Version 2.0` block,
   which is correct, but my SPDX-only regex flagged it).
   New rule: a file is OK if either `SPDX-License-Identifier` or
   `Licensed under the Apache License` appears in the first 20 lines.
   Empty __init__.py files are skipped. Whole-repo coverage instead
   of just studio/backend.

2. Add shell / YAML / JSON parse gates
   - `bash -n` over every committed *.sh (14 today). Same idea as
     compileall: parse-only check.
   - `yaml.safe_load_all` over every *.yml / *.yaml (97 today),
     including .github/workflows/* so a typo in the workflow file
     itself shows up immediately.
   - `json.loads` over every *.json (18 today). Skips
     package-lock.json / bun.lock (huge, machine-generated) and
     tsconfig*.json (TypeScript JSONC convention -- already
     validated by `tsc --noEmit` in Frontend CI).

TypeScript and Rust are NOT duplicated here:
  - Studio Frontend CI runs `npm run typecheck` + `npm run build`
    on every studio/frontend/** change, which is a full TS AST +
    type check.
  - Studio Tauri CI runs `tauri build --debug --no-bundle` on every
    studio/src-tauri/** or studio/frontend/** change, which is a
    full Rust compile.
A duplicate fast-fail step here would burn cache for marginal
value, and the dedicated workflows already block merges.

Lint CI runs on every PR (no path filter): the whole job is
under 30 s of CI time, so paying that on every PR is preferable
to missing a regression on a path the focused workflows skip.
2026-05-06 21:08:44 +00:00
..
lint-ci.yml CI(lint): split Python lint into a multi-language Lint CI workflow 2026-05-06 21:08:44 +00:00
mlx-ci.yml ci(mlx): fix path filter that pointed at a non-existent file 2026-05-06 12:13: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
stale.yml chore: Update outdated GitHub Actions version (#3936) 2026-01-27 07:19:38 -08:00
studio-backend-ci.yml CI(lint): split Python lint into a multi-language Lint CI workflow 2026-05-06 21:08:44 +00:00
studio-frontend-ci.yml CI: scope GITHUB_TOKEN permissions and unblock ~60 skipped tests 2026-05-06 11:52:21 +00:00
studio-inference-smoke.yml CI: pass GH_TOKEN to install/update steps to dodge GitHub API rate limits 2026-05-06 13:20:45 +00:00
studio-tauri-smoke.yml CI: scope GITHUB_TOKEN permissions and unblock ~60 skipped tests 2026-05-06 11:52:21 +00:00
studio-ui-smoke.yml CI: pass GH_TOKEN to install/update steps to dodge GitHub API rate limits 2026-05-06 13:20:45 +00:00
studio-update-smoke.yml CI: pass GH_TOKEN to install/update steps to dodge GitHub API rate limits 2026-05-06 13:20:45 +00:00
wheel-smoke.yml CI: scope GITHUB_TOKEN permissions and unblock ~60 skipped tests 2026-05-06 11:52:21 +00:00