hermes-agent/.github/workflows
ethernet 4e3768ea36 perf(ci): sparse+blobless checkout for the test-slice generate job
The "Generate slices" job spent ~90% of its wall time in actions/checkout
(4-27s across the last 10 runs, of a 10-32s job) pulling a ~212MB working
tree. Everything in the test matrix waits on it.

It doesn't need those files. `--generate-slices` returns before
`_approximately_count_tests`, so it only ever uses test file *paths* plus
the cached durations — it never opens a test file.

The blocker was discovery: `_discover_files` rglobs the filesystem, which
finds nothing under a sparse checkout. So add `--discover-from-git`, which
lists paths via `git ls-files`. Sparse checkout only clears the worktree
(entries are marked skip-worktree), so the index still carries every path
and enumerates exactly the same set. Skip-part filtering and the
root-override rule are duplicated to match `_discover_files` semantics.

Measured on a real clone of this repo:

    full depth=1 clone:       7s   212M
    blobless+sparse clone:    3s   3.4M   (still sees all 2510 test paths)

Both discovery paths produce byte-identical slice JSON over the full 2472
test files, so slice assignment is unchanged.

Tests assert the properties that make this safe: the two discovery paths
agree on a full checkout, the git path still works when the files are
absent from disk, and the skip-part override behaves the same either way.
2026-07-31 14:15:26 -04:00
..
ci.yml feat(ci): sparse checkout in 'detect-changes' to speed up ci 2026-07-31 14:15:26 -04:00
contributor-check.yml feat(ci): migrate all workflows to GKE self-hosted runners 2026-07-31 14:15:25 -04:00
deploy-site.yml fix(ci): review fixes — PR-read-only buildx cache, per-arch profile labels 2026-07-31 14:15:26 -04:00
docker-lint.yml feat(ci): migrate all workflows to GKE self-hosted runners 2026-07-31 14:15:25 -04:00
docker.yml perf(ci): drop per-job ripgrep/uv/Python setup, use the baked runner image 2026-07-31 14:15:26 -04:00
docs-site-checks.yml fix(ci): review fixes — PR-read-only buildx cache, per-arch profile labels 2026-07-31 14:15:26 -04:00
e2e-desktop.yml perf(ci): drop per-job ripgrep/uv/Python setup, use the baked runner image 2026-07-31 14:15:26 -04:00
history-check.yml feat(ci): migrate all workflows to GKE self-hosted runners 2026-07-31 14:15:25 -04:00
infographic-check.yml feat(ci): migrate all workflows to GKE self-hosted runners 2026-07-31 14:15:25 -04:00
js-autofix.yml fix(ci): review fixes — PR-read-only buildx cache, per-arch profile labels 2026-07-31 14:15:26 -04:00
js-tests.yml feat(ci): speed up npm worktree list 2026-07-31 14:15:26 -04:00
label-rerun.yml feat(ci): migrate all workflows to GKE self-hosted runners 2026-07-31 14:15:25 -04:00
lint.yml perf(ci): drop per-job ripgrep/uv/Python setup, use the baked runner image 2026-07-31 14:15:26 -04:00
lockfile-diff.yml feat(ci): migrate all workflows to GKE self-hosted runners 2026-07-31 14:15:25 -04:00
osv-scanner.yml fix(ci): update actions/download-artifact to v8.0.1 2026-07-31 14:15:26 -04:00
publish-e2e-evidence.yml feat(ci): migrate all workflows to GKE self-hosted runners 2026-07-31 14:15:25 -04:00
review-labels.yml feat(ci): migrate all workflows to GKE self-hosted runners 2026-07-31 14:15:25 -04:00
skills-index-freshness.yml feat(ci): migrate all workflows to GKE self-hosted runners 2026-07-31 14:15:25 -04:00
skills-index.yml feat(ci): migrate all workflows to GKE self-hosted runners 2026-07-31 14:15:25 -04:00
supply-chain-audit.yml feat(ci): migrate all workflows to GKE self-hosted runners 2026-07-31 14:15:25 -04:00
tests.yml perf(ci): sparse+blobless checkout for the test-slice generate job 2026-07-31 14:15:26 -04:00
uv-lockfile-check.yml perf(ci): drop per-job ripgrep/uv/Python setup, use the baked runner image 2026-07-31 14:15:26 -04:00