Bench fixtures
S36 calls for four big-repo fixtures used by the nightly perf run:
big_repo_1m_commits/— repository with 1M commits across a sensible branch graphrepo_100k_files/— repository with 100k files in a reasonable directory structureissues_100k/— repo with 100k issues + 1M commentsusers_org_5k_members/— org with 5k members and 200 teams (one level)
These fixtures aren't generated yet — the seed cost is non-trivial
(tens of minutes per fixture) and the current repo shape doesn't
yet warrant the disk-and-CI-time spend. The S36 baseline uses the
small dev seed fixtures via bench/run.go.
Generation plan (deferred)
Each fixture has a generator under bench/fixtures/<name>/seed.go
that takes a fixed RNG seed and produces a deterministic on-disk
shape. The CI integrity check re-runs the generator and asserts
the resulting tree-hash matches the committed manifest, so a
generator regression doesn't silently change what the bench measures.
Run order (when generators land):
go run ./bench/fixtures/big_repo_1m_commits -out=./bench/fixtures/big_repo_1m_commits
go run ./bench/fixtures/repo_100k_files -out=./bench/fixtures/repo_100k_files
…
The fixtures themselves are gitignored (regenerable). The generators live in source.
Dev fixture (today)
The make seed flow in the repo root produces the small dev
fixtures used by make bench-small. That's enough to catch
regressions in the harness itself plus the small-scale handler
latency floor; the big-fixture targets in S36's "Definition of
done" land with the generators above.
Actions smoke fixture
actions/smoke-run-only.yml is the canonical first end-to-end Actions
workflow fixture. Copy it into .shithub/workflows/smoke.yml in a
repository with a registered ubuntu-latest runner.
actions/checkout-canary.yml is the next fixture once the run-only smoke is
green. It verifies actions/checkout@v4 and pins that the runner workspace is
on the workflow run's exact shithub.sha. Artifact aliases remain reserved
until artifact execution is implemented.
View source
| 1 | # Bench fixtures |
| 2 | |
| 3 | S36 calls for four big-repo fixtures used by the nightly perf run: |
| 4 | |
| 5 | - `big_repo_1m_commits/` — repository with 1M commits across a sensible branch graph |
| 6 | - `repo_100k_files/` — repository with 100k files in a reasonable directory structure |
| 7 | - `issues_100k/` — repo with 100k issues + 1M comments |
| 8 | - `users_org_5k_members/` — org with 5k members and 200 teams (one level) |
| 9 | |
| 10 | These fixtures aren't generated yet — the seed cost is non-trivial |
| 11 | (tens of minutes per fixture) and the current repo shape doesn't |
| 12 | yet warrant the disk-and-CI-time spend. The S36 baseline uses the |
| 13 | small dev seed fixtures via `bench/run.go`. |
| 14 | |
| 15 | ## Generation plan (deferred) |
| 16 | |
| 17 | Each fixture has a generator under `bench/fixtures/<name>/seed.go` |
| 18 | that takes a fixed RNG seed and produces a deterministic on-disk |
| 19 | shape. The CI integrity check re-runs the generator and asserts |
| 20 | the resulting tree-hash matches the committed manifest, so a |
| 21 | generator regression doesn't silently change what the bench measures. |
| 22 | |
| 23 | Run order (when generators land): |
| 24 | |
| 25 | ``` |
| 26 | go run ./bench/fixtures/big_repo_1m_commits -out=./bench/fixtures/big_repo_1m_commits |
| 27 | go run ./bench/fixtures/repo_100k_files -out=./bench/fixtures/repo_100k_files |
| 28 | … |
| 29 | ``` |
| 30 | |
| 31 | The fixtures themselves are gitignored (regenerable). The generators |
| 32 | live in source. |
| 33 | |
| 34 | ## Dev fixture (today) |
| 35 | |
| 36 | The `make seed` flow in the repo root produces the small dev |
| 37 | fixtures used by `make bench-small`. That's enough to catch |
| 38 | regressions in the harness itself plus the small-scale handler |
| 39 | latency floor; the big-fixture targets in S36's "Definition of |
| 40 | done" land with the generators above. |
| 41 | |
| 42 | ## Actions smoke fixture |
| 43 | |
| 44 | `actions/smoke-run-only.yml` is the canonical first end-to-end Actions |
| 45 | workflow fixture. Copy it into `.shithub/workflows/smoke.yml` in a |
| 46 | repository with a registered `ubuntu-latest` runner. |
| 47 | |
| 48 | `actions/checkout-canary.yml` is the next fixture once the run-only smoke is |
| 49 | green. It verifies `actions/checkout@v4` and pins that the runner workspace is |
| 50 | on the workflow run's exact `shithub.sha`. Artifact aliases remain reserved |
| 51 | until artifact execution is implemented. |