unsloth/.github/workflows
Daniel Han 0879e72440 CI(security): defense-in-depth additions across 7 axes
Goes after the residual gaps from the supply-chain incident audit.
Each addition targets a real attack class that prior layers couldn't
catch:

  1. step-security/harden-runner (audit mode) on every job. eBPF
     egress firewall on the runner -- if scan_packages misses a
     payload, harden-runner's audit log records every host the
     malicious archive dialed. Audit mode initially so we observe
     the legitimate egress profile before promoting to block.

  2. Trivy filesystem scan (vuln + misconfig + secret). Hits NVD +
     GHSA + GitLab + Aqua Vuln DB and also catches Dockerfile / k8s /
     Tauri / shell IaC misconfigs that pip-audit + OSV don't see.

  3. TruffleHog secret-leak scan on PR diffs. --only-verified so we
     only flag tokens the source provider confirmed are live; runs
     base..head on PRs and full repo on push. Catches accidental API
     key commits that the Lint CI's grep-based codespell check
     cannot. checkout fetch-depth: 0 so the diff range exists.

  4. CycloneDX SBOM generation as artifact. Per-requirements file
     plus a project-level SBOM from pyproject.toml. Lets downstream
     consumers audit our wheel contents (the ML supply-chain SBOM gap
     is a known industry-wide problem; meets half of NTIA SBOM mins).

  5. GitHub Actions pinning verifier. Reports every `uses: foo@v4`
     or `@main` mutable ref. tj-actions/changed-files (Mar 2025) hit
     anyone using non-SHA pins. Currently surfaces 4 third-party
     unpinned refs (dtolnay/rust-toolchain, swatinem/rust-cache) and
     40 first-party (`actions/*`); informational baseline, tighten
     once we're ready. Dependabot's github-actions ecosystem
     auto-bumps SHA pins, so the maintenance cost is zero.

  6. Hash-pin verifier. Reports how many == specs would gain from
     `--hash=sha256:` entries. Currently 11 == pins, 0 with hash.
     Roadmap step: `uv pip compile --generate-hashes` then
     `pip install --require-hashes`. Hash-locked installs would have
     refused a republished litellm 1.82.7 even at the same version
     string.

  7. Custom Semgrep rules at .semgrep/unsloth-rules.yml. Seven rules
     for the *specific shape* of recent ML-stack CVEs we'd otherwise
     re-introduce ourselves: langchain-core deserialize-roundtrip
     (CVE-2025-68664), n8n private-pyodide-eval (CVE-2025-68668),
     marimo websocket-no-auth (CVE-2026-39987), litellm
     popen-with-network-stdin, Shai-Hulud workflow-write,
     pickle-from-network, shell=True with f-string interpolation.

dependabot.yml: extend to pip + cargo ecosystems so security
advisories on Python deps and the Tauri shell auto-generate update
PRs alongside the github-actions / bun / npm ones.

All new steps continue-on-error initially; findings land in
GITHUB_STEP_SUMMARY plus the advisory-audit-logs artifact.
2026-05-07 00:09:40 +00:00
..
lint-ci.yml CI: add codespell + shellcheck to Lint CI; add Security audit workflow 2026-05-06 21:21:59 +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
security-audit.yml CI(security): defense-in-depth additions across 7 axes 2026-05-07 00:09:40 +00: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