Repository navigation
ci(benchmark): add syncpack, Bun and Yarn repositories, and interactive pickers - #189
Merged
Merged
Conversation
- syncpack (`update --check`) runs on every repository. - vendurehq/vendure (Bun workspace, 54 package.json files) adds `bun outdated --recursive`. - backstage/backstage (Yarn 4 workspace, 269 package.json files) is the largest repository. Yarn 2+ lists updates only in its interactive picker, so it has no package-manager row here. - The package manager comes from `packageManager`, else the lockfile. pnpm and Bun run as the native binaries their npm packages ship; Yarn runs as the release the repository commits. - The sandbox also redirects npm's, Bun's and Yarn's own cache variables: a shell that sets BUN_INSTALL made Bun's "first run" read a warm cache. - Rows shared by several package managers read "npm / pnpm / bun outdated"; the chart is more compact to fit five repositories.
Each tool that has an interactive list of updates opens it in a 160x50 terminal (scripts/bench-pty.py) and is timed until every update is loaded: the last thing it draws or writes to its cache before 5 s of quiet. That counts the rows a picker fetches off screen, as yarn upgrade-interactive does for seconds after its screen settles. Pickers: inup, yarn upgrade-interactive, pnpm update -i --latest, bun update -i, taze -I, syncpack update -i, npm-check -u and ncu -i. ncu shows one package.json at a time with --workspaces, so like npm-check it only runs on the single-package repository; npm has no picker. They run in rounds, every tool once per round, with first and repeat runs as for listing, outside CI (where pickers refuse to open) and with what installing left behind hidden from git status (inup asks before working on a dirty tree). The README section and docs page gain picker tables next to the listing ones.
"pnpm update -i", "bun update -i" and "yarn upgrade-interactive" read as "pnpm / bun update -i / yarn upgrade-interactive".
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Extends the Benchmark workflow with more tools, two bigger repositories, and timings for the interactive pickers,
yarn upgrade-interactiveincluded.What's new
Tools
syncpack update --check; 1.5M weekly downloads; a native Rust binary) runs on every repository.bun outdated --recursiveruns on the new Bun repository.Repositories
Picker benchmark. Each tool that has an interactive list of updates opens it in a 160×50 terminal (
scripts/bench-pty.py), and is timed until every update is loaded:yarn upgrade-interactivepnpm update -i --latestbun update -i-Isyncpack update -inpm-check -uncu -i--workspacesit shows one package.json at a time)npm has no picker.
"Loaded" means the last thing the picker draws or writes to its cache before 5 s of quiet. That counts rows fetched off screen:
yarn upgrade-interactivestops drawing after about 2.5 s on backstage and keeps fetching for several seconds more. Pickers run in rounds, one run per tool per round. A picker that exits, draws nothing, or never goes quiet fails the job.README and docs. The README section gets "Listing outdated dependencies" and "Opening the picker" tables, each with a first run and a repeat run. The docs page explains both measurements and lists every command.
Left out:
deno outdatedlists only about 11 of the roughly 600 updates the other tools find on these npm/pnpm repositories, so its numbers wouldn't be comparable.Fixes
npm_config_cache,BUN_INSTALL,BUN_INSTALL_CACHE_DIRandYARN_GLOBAL_FOLDER. A shell that setsBUN_INSTALLmade Bun's "first run" read a warm cache: 0.05 s instead of 7.7 s.packageManager, else the lockfile. pnpm and Bun run as their native binaries; Yarn runs as the release the repository commits.Preview from this PR's check (3 runs per tool, GitHub Actions; run)
The published numbers will come from a 10-run dispatch.
What the preview shows:
yarn upgrade-interactiveon backstage: inup's picker wins first runs (4.88 s vs 9.53 s) and repeat runs (1.66 s vs 3.38 s).The docs page says all of this.