Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .github/workflows/benchmark.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ on:
default: '["clean", "node_modules", "cache", "cache+node_modules", "cache+lockfile", "cache+lockfile+node_modules", "ci", "lockfile", "lockfile+node_modules", "registry-clean", "registry-lockfile"]'
binaries:
description: "The binaries to run the benchmarks on"
default: '"npm,yarn,berry,zpm,pnpm,pacquet,vlt,bun,deno,aube,upm,nx,turbo,vp,node"'
default: '"npm,yarn,berry,zpm,pnpm,pacquet,vlt,vlt-npm,bun,deno,aube,upm,nx,turbo,vp,node"'
warmup:
description: "The number of warmup runs on each benchmark"
default: "2"
Expand Down Expand Up @@ -94,7 +94,7 @@ jobs:
if [[ "${{ github.event_name }}" == "workflow_dispatch" ]]; then
[[ "$IN_FIXTURES" == '["next", "astro", "vue", "svelte", "large", "babylon"]' ]] || partial=true
[[ "$IN_VARIATIONS" == '["clean", "node_modules", "cache", "cache+node_modules", "cache+lockfile", "cache+lockfile+node_modules", "ci", "lockfile", "lockfile+node_modules", "registry-clean", "registry-lockfile"]' ]] || partial=true
[[ "$IN_BINARIES" == '"npm,yarn,berry,zpm,pnpm,pacquet,vlt,bun,deno,aube,upm,nx,turbo,vp,node"' ]] || partial=true
[[ "$IN_BINARIES" == '"npm,yarn,berry,zpm,pnpm,pacquet,vlt,vlt-npm,bun,deno,aube,upm,nx,turbo,vp,node"' ]] || partial=true
[[ "$IN_WARMUP" == "2" ]] || partial=true
[[ "$IN_RUNS" == "5" ]] || partial=true
fi
Expand Down Expand Up @@ -128,7 +128,7 @@ jobs:
env:
# rc.21 is advertised by the canary channel but its Linux ARM64 npm binary is missing.
BENCH_ZPM_VERSION: "6.0.0-rc.20"
BENCH_INCLUDE: ${{ fromJson(inputs.binaries || '"npm,yarn,berry,zpm,pnpm,pacquet,vlt,bun,deno,aube,upm,nx,turbo,vp,node"') }}
BENCH_INCLUDE: ${{ fromJson(inputs.binaries || '"npm,yarn,berry,zpm,pnpm,pacquet,vlt,vlt-npm,bun,deno,aube,upm,nx,turbo,vp,node"') }}
BENCH_WARMUP: ${{ (github.event_name == 'push' && github.ref != 'refs/heads/main') && '1' || (inputs.warmup || '2') }}
BENCH_RUNS: ${{ (github.event_name == 'push' && github.ref != 'refs/heads/main') && '1' || (inputs.runs || '5') }}
steps:
Expand Down
1 change: 1 addition & 0 deletions app/src/hooks/use-history-data.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ const PACKAGE_MANAGERS = [
"deno",
"bun",
"vlt",
"vlt-npm",
"aube",
"upm",
"nx",
Expand Down
1 change: 1 addition & 0 deletions app/src/lib/get-icons.ts
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ const packageManagerMap: Partial<Record<PackageManager, LucideIcon>> = {
berry: Berry,
zpm: Zpm,
vlt: Vlt,
"vlt-npm": Vlt,
};

const frameworkMap: Partial<Record<Fixture, LucideIcon>> = {
Expand Down
2 changes: 2 additions & 0 deletions app/src/lib/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -258,6 +258,7 @@ export const calculateLeaderboard = (
"bun",
"deno",
"vlt",
"vlt-npm",
"aube",
"upm",
].includes(pm),
Expand Down Expand Up @@ -533,6 +534,7 @@ export function getPackageManagerDisplayName(
if (packageManager === "pacquet") return "pnpm (v12)";
if (packageManager === "berry") return "yarn (berry)";
if (packageManager === "zpm") return "yarn (zpm)";
if (packageManager === "vlt-npm") return "vlt (npm registry)";
if (packageManager === "turbo") return "turborepo";
if (packageManager === "vp") return "vite+";
if (packageManager === "aws") return "AWS CodeArtifact";
Expand Down
9 changes: 9 additions & 0 deletions app/src/types/chart-data.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ export type PackageManager =
| "deno"
| "bun"
| "vlt"
| "vlt-npm"
| "aube"
| "upm"
| "nx"
Expand Down Expand Up @@ -57,6 +58,7 @@ export interface PackageManagerVersions {
deno?: string;
bun?: string;
vlt?: string;
"vlt-npm"?: string;
aube?: string;
upm?: string;
nx?: string;
Expand All @@ -83,6 +85,7 @@ export interface PackageManagerData {
deno?: number;
bun?: number;
vlt?: number;
"vlt-npm"?: number;
aube?: number;
upm?: number;
nx?: number;
Expand All @@ -103,6 +106,7 @@ export interface PackageManagerData {
deno_stddev?: number;
bun_stddev?: number;
vlt_stddev?: number;
"vlt-npm_stddev"?: number;
aube_stddev?: number;
upm_stddev?: number;
nx_stddev?: number;
Expand All @@ -123,6 +127,7 @@ export interface PackageManagerData {
deno_fill?: string;
bun_fill?: string;
vlt_fill?: string;
"vlt-npm_fill"?: string;
aube_fill?: string;
upm_fill?: string;
nx_fill?: string;
Expand All @@ -143,6 +148,7 @@ export interface PackageManagerData {
deno_count?: number;
bun_count?: number;
vlt_count?: number;
"vlt-npm_count"?: number;
aube_count?: number;
upm_count?: number;
nx_count?: number;
Expand All @@ -163,6 +169,7 @@ export interface PackageManagerData {
deno_dnf?: boolean;
bun_dnf?: boolean;
vlt_dnf?: boolean;
"vlt-npm_dnf"?: boolean;
aube_dnf?: boolean;
upm_dnf?: boolean;
nx_dnf?: boolean;
Expand Down Expand Up @@ -214,6 +221,7 @@ export interface PackageCountData {
deno?: PackageCountEntry;
bun?: PackageCountEntry;
vlt?: PackageCountEntry;
"vlt-npm"?: PackageCountEntry;
aube?: PackageCountEntry;
upm?: PackageCountEntry;
nx?: PackageCountEntry;
Expand Down Expand Up @@ -242,6 +250,7 @@ export interface ProcessCountData {
deno?: PackageCountEntry;
bun?: PackageCountEntry;
vlt?: PackageCountEntry;
"vlt-npm"?: PackageCountEntry;
aube?: PackageCountEntry;
upm?: PackageCountEntry;
nx?: PackageCountEntry;
Expand Down
1 change: 1 addition & 0 deletions bench
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ AVAILABLE_PMS=(
pnpm11
pacquet
vlt
vlt-npm
bun
deno
aube
Expand Down
3 changes: 2 additions & 1 deletion scripts/clean-helpers.sh
Original file line number Diff line number Diff line change
Expand Up @@ -236,12 +236,13 @@ clean_git() {
}

clean_workspace_protocol() {
echo "Restoring package.json files (undo workspace: protocol changes)..."
echo "Restoring package.json and vlt.json files (undo workspace: protocol and registry changes)..."
if command -v git &> /dev/null && git rev-parse --git-dir > /dev/null 2>&1; then
# Restore each path independently. A single `git checkout -- packages/
# package.json` fails as a whole when `packages/` does not exist (most
# fixtures are not monorepos), leaving package.json un-restored.
git checkout -- package.json 2>/dev/null || true
git checkout -- vlt.json 2>/dev/null || true
[ -e packages ] && git checkout -- packages/ 2>/dev/null || true
fi
}
Expand Down
12 changes: 12 additions & 0 deletions scripts/collect-package-count.js
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ const countFiles = [
{ filename: 'pnpm11-count.txt', pmName: 'pnpm11' },
{ filename: 'pacquet-count.txt', pmName: 'pacquet' },
{ filename: 'vlt-count.txt', pmName: 'vlt' },
{ filename: 'vlt-npm-count.txt', pmName: 'vlt-npm' },
{ filename: 'bun-count.txt', pmName: 'bun' },
{ filename: 'deno-count.txt', pmName: 'deno' },
{ filename: 'aube-count.txt', pmName: 'aube' },
Expand Down Expand Up @@ -94,6 +95,17 @@ if (!pmName || !countData) {
process.exit(0);
}

// vlt-npm uses the same vlt binary and lockfile format as vlt, so
// package-count.sh infers "vlt" for both. If vlt-npm was benchmarked
// (output logs exist) but has no dedicated count, copy vlt's count.
if (result['vlt'] && !result['vlt-npm']) {
const vltNpmLogs = fs.readdirSync(outputFolder).filter(f => f.startsWith('vlt-npm-output-'));
if (vltNpmLogs.length > 0) {
result['vlt-npm'] = { ...result['vlt'] };
console.log('Copied vlt package count to vlt-npm (same lockfile format)');
}
}

// Save the updated result back to the JSON file
fs.writeFileSync(packageCountPath, JSON.stringify(result, null, 2));

Expand Down
1 change: 1 addition & 0 deletions scripts/collect-process-count.js
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ const countFiles = [
{ filename: 'pnpm11-process-count.txt', pmName: 'pnpm11' },
{ filename: 'pacquet-process-count.txt', pmName: 'pacquet' },
{ filename: 'vlt-process-count.txt', pmName: 'vlt' },
{ filename: 'vlt-npm-process-count.txt', pmName: 'vlt-npm' },
{ filename: 'bun-process-count.txt', pmName: 'bun' },
{ filename: 'deno-process-count.txt', pmName: 'deno' },
{ filename: 'aube-process-count.txt', pmName: 'aube' },
Expand Down
1 change: 1 addition & 0 deletions scripts/generate-chart.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ const COLORS = {
deno: "#70ffaf",
bun: "#f472b6",
vlt: "#000000",
"vlt-npm": "#666666",
nx: "#3b82f6",
turbo: "#ff1e56",
vp: "#4f30e8",
Expand Down
3 changes: 3 additions & 0 deletions scripts/setup.sh
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,9 @@ NODE_VERSION=$(node -v)

# Output versions
echo "npm: $NPM_VERSION"
VLT_NPM_VERSION="$VLT_VERSION"
echo "vlt: $VLT_VERSION"
echo "vlt-npm: $VLT_NPM_VERSION"
echo "yarn: $YARN_VERSION"
echo "yarn (berry): $BERRY_VERSION"
echo "yarn (zpm): $ZPM_VERSION"
Expand All @@ -133,6 +135,7 @@ echo "node: $NODE_VERSION"
echo "{
\"npm\": \"$NPM_VERSION\",
\"vlt\": \"$VLT_VERSION\",
\"vlt-npm\": \"$VLT_NPM_VERSION\",
\"yarn\": \"$YARN_VERSION\",
\"berry\": \"$BERRY_VERSION\",
\"zpm\": \"$ZPM_VERSION\",
Expand Down
2 changes: 2 additions & 0 deletions scripts/variations/cache+lockfile+node_modules.sh
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@ hyperfine --ignore-failure \
${BENCH_INCLUDE_PACQUET:+--command-name="pacquet" "$BENCH_COMMAND_PACQUET"} \
${BENCH_INCLUDE_VLT:+--prepare="$(append_setup "$BENCH_PREPARE_BASE" "$BENCH_SETUP_VLT")"} \
${BENCH_INCLUDE_VLT:+--command-name="vlt" "$BENCH_COMMAND_VLT"} \
${BENCH_INCLUDE_VLT_NPM:+--prepare="$(append_setup "$BENCH_PREPARE_BASE" "$BENCH_SETUP_VLT_NPM")"} \
${BENCH_INCLUDE_VLT_NPM:+--command-name="vlt-npm" "$BENCH_COMMAND_VLT_NPM"} \
${BENCH_INCLUDE_BUN:+--prepare="$(append_setup "$BENCH_PREPARE_BASE" "$BENCH_SETUP_BUN")"} \
${BENCH_INCLUDE_BUN:+--command-name="bun" "$BENCH_COMMAND_BUN"} \
${BENCH_INCLUDE_DENO:+--prepare="$(append_setup "$BENCH_PREPARE_BASE" "$BENCH_SETUP_DENO")"} \
Expand Down
2 changes: 2 additions & 0 deletions scripts/variations/cache+lockfile.sh
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@ hyperfine --ignore-failure \
${BENCH_INCLUDE_PACQUET:+--command-name="pacquet" "$BENCH_COMMAND_PACQUET"} \
${BENCH_INCLUDE_VLT:+--prepare="$(append_setup "$BENCH_PREPARE_BASE" "$BENCH_SETUP_VLT")"} \
${BENCH_INCLUDE_VLT:+--command-name="vlt" "$BENCH_COMMAND_VLT"} \
${BENCH_INCLUDE_VLT_NPM:+--prepare="$(append_setup "$BENCH_PREPARE_BASE" "$BENCH_SETUP_VLT_NPM")"} \
${BENCH_INCLUDE_VLT_NPM:+--command-name="vlt-npm" "$BENCH_COMMAND_VLT_NPM"} \
${BENCH_INCLUDE_BUN:+--prepare="$(append_setup "$BENCH_PREPARE_BASE" "$BENCH_SETUP_BUN")"} \
${BENCH_INCLUDE_BUN:+--command-name="bun" "$BENCH_COMMAND_BUN"} \
${BENCH_INCLUDE_DENO:+--prepare="$(append_setup "$BENCH_PREPARE_BASE" "$BENCH_SETUP_DENO")"} \
Expand Down
2 changes: 2 additions & 0 deletions scripts/variations/cache+node_modules.sh
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@ hyperfine --ignore-failure \
${BENCH_INCLUDE_PACQUET:+--command-name="pacquet" "$BENCH_COMMAND_PACQUET"} \
${BENCH_INCLUDE_VLT:+--prepare="$(append_setup "$BENCH_PREPARE_BASE" "$BENCH_SETUP_VLT")"} \
${BENCH_INCLUDE_VLT:+--command-name="vlt" "$BENCH_COMMAND_VLT"} \
${BENCH_INCLUDE_VLT_NPM:+--prepare="$(append_setup "$BENCH_PREPARE_BASE" "$BENCH_SETUP_VLT_NPM")"} \
${BENCH_INCLUDE_VLT_NPM:+--command-name="vlt-npm" "$BENCH_COMMAND_VLT_NPM"} \
${BENCH_INCLUDE_BUN:+--prepare="$(append_setup "$BENCH_PREPARE_BASE" "$BENCH_SETUP_BUN")"} \
${BENCH_INCLUDE_BUN:+--command-name="bun" "$BENCH_COMMAND_BUN"} \
${BENCH_INCLUDE_DENO:+--prepare="$(append_setup "$BENCH_PREPARE_BASE" "$BENCH_SETUP_DENO")"} \
Expand Down
2 changes: 2 additions & 0 deletions scripts/variations/cache.sh
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@ hyperfine --ignore-failure \
${BENCH_INCLUDE_PACQUET:+--command-name="pacquet" "$BENCH_COMMAND_PACQUET"} \
${BENCH_INCLUDE_VLT:+--prepare="$(append_setup "$BENCH_PREPARE_BASE" "$BENCH_SETUP_VLT")"} \
${BENCH_INCLUDE_VLT:+--command-name="vlt" "$BENCH_COMMAND_VLT"} \
${BENCH_INCLUDE_VLT_NPM:+--prepare="$(append_setup "$BENCH_PREPARE_BASE" "$BENCH_SETUP_VLT_NPM")"} \
${BENCH_INCLUDE_VLT_NPM:+--command-name="vlt-npm" "$BENCH_COMMAND_VLT_NPM"} \
${BENCH_INCLUDE_BUN:+--prepare="$(append_setup "$BENCH_PREPARE_BASE" "$BENCH_SETUP_BUN")"} \
${BENCH_INCLUDE_BUN:+--command-name="bun" "$BENCH_COMMAND_BUN"} \
${BENCH_INCLUDE_DENO:+--prepare="$(append_setup "$BENCH_PREPARE_BASE" "$BENCH_SETUP_DENO")"} \
Expand Down
6 changes: 6 additions & 0 deletions scripts/variations/ci.sh
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ BENCH_CI_ZPM="yarn install --immutable --silent"
BENCH_CI_PNPM="corepack pnpm@latest install --frozen-lockfile --ignore-scripts --silent"
BENCH_CI_PACQUET="/tmp/pnpm12/bin/pnpm install --frozen-lockfile --ignore-scripts --silent"
BENCH_CI_VLT="vlt ci --view=silent"
BENCH_CI_VLT_NPM="vlt ci --view=silent"
BENCH_CI_BUN="bun install --frozen-lockfile --ignore-scripts --silent"
BENCH_CI_DENO="deno install --frozen --quiet"
BENCH_CI_AUBE="aube ci --ignore-scripts --silent"
Expand All @@ -38,6 +39,7 @@ BENCH_COMMAND_ZPM="timeout $BENCH_TIMEOUT $BENCH_CI_ZPM > $BENCH_OUTPUT_FOLDER/z
BENCH_COMMAND_PNPM="timeout $BENCH_TIMEOUT $BENCH_CI_PNPM > $BENCH_OUTPUT_FOLDER/pnpm-output-\${HYPERFINE_ITERATION}.log 2>&1"
BENCH_COMMAND_PACQUET="timeout $BENCH_TIMEOUT $BENCH_CI_PACQUET > $BENCH_OUTPUT_FOLDER/pacquet-output-\${HYPERFINE_ITERATION}.log 2>&1"
BENCH_COMMAND_VLT="timeout $BENCH_TIMEOUT $BENCH_CI_VLT > $BENCH_OUTPUT_FOLDER/vlt-output-\${HYPERFINE_ITERATION}.log 2>&1"
BENCH_COMMAND_VLT_NPM="timeout $BENCH_TIMEOUT $BENCH_CI_VLT_NPM > $BENCH_OUTPUT_FOLDER/vlt-npm-output-\${HYPERFINE_ITERATION}.log 2>&1"
BENCH_COMMAND_BUN="timeout $BENCH_TIMEOUT $BENCH_CI_BUN > $BENCH_OUTPUT_FOLDER/bun-output-\${HYPERFINE_ITERATION}.log 2>&1"
BENCH_COMMAND_DENO="timeout $BENCH_TIMEOUT $BENCH_CI_DENO > $BENCH_OUTPUT_FOLDER/deno-output-\${HYPERFINE_ITERATION}.log 2>&1"
BENCH_COMMAND_AUBE="timeout $BENCH_TIMEOUT $BENCH_CI_AUBE > $BENCH_OUTPUT_FOLDER/aube-output-\${HYPERFINE_ITERATION}.log 2>&1"
Expand All @@ -51,6 +53,7 @@ BENCH_INSTALL_ZPM="$BENCH_CI_ZPM"
BENCH_INSTALL_PNPM="$BENCH_CI_PNPM"
BENCH_INSTALL_PACQUET="$BENCH_CI_PACQUET"
BENCH_INSTALL_VLT="$BENCH_CI_VLT"
BENCH_INSTALL_VLT_NPM="$BENCH_CI_VLT_NPM"
BENCH_INSTALL_BUN="$BENCH_CI_BUN"
BENCH_INSTALL_DENO="$BENCH_CI_DENO"
BENCH_INSTALL_AUBE="$BENCH_CI_AUBE"
Expand Down Expand Up @@ -94,6 +97,7 @@ BENCH_PREPARE_ZPM="$(ci_prepare "$BENCH_SETUP_ZPM" "yarn install --silent")"
BENCH_PREPARE_PNPM="$(ci_prepare "$BENCH_SETUP_PNPM" "corepack pnpm@latest install --ignore-scripts --silent")"
BENCH_PREPARE_PACQUET="$(ci_prepare "$BENCH_SETUP_PACQUET" "/tmp/pnpm12/bin/pnpm install --ignore-scripts --silent")"
BENCH_PREPARE_VLT="$(ci_prepare "$BENCH_SETUP_VLT" "vlt install --view=silent")"
BENCH_PREPARE_VLT_NPM="$(ci_prepare "$BENCH_SETUP_VLT_NPM" "vlt install --view=silent")"
BENCH_PREPARE_BUN="$(ci_prepare "$BENCH_SETUP_BUN" "bun install --ignore-scripts --silent")"
BENCH_PREPARE_DENO="$(ci_prepare "$BENCH_SETUP_DENO" "deno install --quiet")"
BENCH_PREPARE_AUBE="$(ci_prepare "$BENCH_SETUP_AUBE" "aube install --ignore-scripts --silent")"
Expand Down Expand Up @@ -121,6 +125,8 @@ hyperfine --ignore-failure \
${BENCH_INCLUDE_PACQUET:+--command-name="pacquet" "$BENCH_COMMAND_PACQUET"} \
${BENCH_INCLUDE_VLT:+--prepare="$BENCH_PREPARE_VLT"} \
${BENCH_INCLUDE_VLT:+--command-name="vlt" "$BENCH_COMMAND_VLT"} \
${BENCH_INCLUDE_VLT_NPM:+--prepare="$BENCH_PREPARE_VLT_NPM"} \
${BENCH_INCLUDE_VLT_NPM:+--command-name="vlt-npm" "$BENCH_COMMAND_VLT_NPM"} \
${BENCH_INCLUDE_BUN:+--prepare="$BENCH_PREPARE_BUN"} \
${BENCH_INCLUDE_BUN:+--command-name="bun" "$BENCH_COMMAND_BUN"} \
${BENCH_INCLUDE_DENO:+--prepare="$BENCH_PREPARE_DENO"} \
Expand Down
2 changes: 2 additions & 0 deletions scripts/variations/clean.sh
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@ hyperfine --ignore-failure \
${BENCH_INCLUDE_PACQUET:+--command-name="pacquet" "$BENCH_COMMAND_PACQUET"} \
${BENCH_INCLUDE_VLT:+--prepare="$(append_setup "$BENCH_PREPARE_BASE" "$BENCH_SETUP_VLT")"} \
${BENCH_INCLUDE_VLT:+--command-name="vlt" "$BENCH_COMMAND_VLT"} \
${BENCH_INCLUDE_VLT_NPM:+--prepare="$(append_setup "$BENCH_PREPARE_BASE" "$BENCH_SETUP_VLT_NPM")"} \
${BENCH_INCLUDE_VLT_NPM:+--command-name="vlt-npm" "$BENCH_COMMAND_VLT_NPM"} \
${BENCH_INCLUDE_BUN:+--prepare="$(append_setup "$BENCH_PREPARE_BASE" "$BENCH_SETUP_BUN")"} \
${BENCH_INCLUDE_BUN:+--command-name="bun" "$BENCH_COMMAND_BUN"} \
${BENCH_INCLUDE_DENO:+--prepare="$(append_setup "$BENCH_PREPARE_BASE" "$BENCH_SETUP_DENO")"} \
Expand Down
21 changes: 14 additions & 7 deletions scripts/variations/common.sh
Original file line number Diff line number Diff line change
Expand Up @@ -31,16 +31,16 @@ else
fi

# Defines configurable values for the benchmark
BENCH_INCLUDE="${BENCH_INCLUDE:=npm,yarn,berry,zpm,pnpm,pacquet,vlt,bun,deno,aube,upm,nx,turbo,vp,node}"
BENCH_INCLUDE="${BENCH_INCLUDE:=npm,yarn,berry,zpm,pnpm,pacquet,vlt,vlt-npm,bun,deno,aube,upm,nx,turbo,vp,node}"
BENCH_WARMUP="${BENCH_WARMUP:=2}"
BENCH_RUNS="${BENCH_RUNS:=5}"
# Per-command timeout in seconds (default: 5 minutes).
# If a single install exceeds this, it is killed. hyperfine --ignore-failure
# lets the suite continue; the timed-out run records as a failure.
BENCH_TIMEOUT="${BENCH_TIMEOUT:=300}"
for pm in npm yarn berry zpm pnpm pacquet vlt bun deno aube upm nx turbo vp node; do
CHOICE=$(echo "$pm" | tr '[:lower:]' '[:upper:]')
if echo "$BENCH_INCLUDE" | grep -qw "$pm"; then
for pm in npm yarn berry zpm pnpm pacquet vlt vlt-npm bun deno aube upm nx turbo vp node; do
Comment thread
coderabbitai[bot] marked this conversation as resolved.
CHOICE=$(echo "$pm" | tr '[:lower:]' '[:upper:]' | tr '-' '_')
if echo ",$BENCH_INCLUDE," | grep -qF ",$pm,"; then
# Only allow nx, turbo, vp, node for task-runner variations (run, build, build-cache)
if [[ "$pm" == "nx" || "$pm" == "turbo" || "$pm" == "vp" || "$pm" == "node" ]]; then
if [[ "$BENCH_VARIATION" = "run" || "$BENCH_VARIATION" = "build" || "$BENCH_VARIATION" = "build-cache" ]]; then
Expand Down Expand Up @@ -74,6 +74,7 @@ BENCH_SETUP_PNPM="npm pkg delete packageManager >/dev/null 2>&1 || true"

BENCH_SETUP_PACQUET="npm pkg delete packageManager >/dev/null 2>&1 || true"
BENCH_SETUP_VLT="node $BENCH_SCRIPTS/add-workspace-protocol.js . >> $BENCH_OUTPUT_FOLDER/vlt-prepare.log 2>&1"
BENCH_SETUP_VLT_NPM="node $BENCH_SCRIPTS/add-workspace-protocol.js . >> $BENCH_OUTPUT_FOLDER/vlt-npm-prepare.log 2>&1; vlt config set registries.npm=https://registry.npmjs.org/ --config=project >> $BENCH_OUTPUT_FOLDER/vlt-npm-prepare.log 2>&1"
BENCH_SETUP_BUN=""
BENCH_SETUP_DENO=""
BENCH_SETUP_AUBE="npm pkg delete packageManager >/dev/null 2>&1 || true"
Expand Down Expand Up @@ -103,6 +104,8 @@ BENCH_INSTALL_PNPM="corepack pnpm@latest install --ignore-scripts --silent"
BENCH_INSTALL_PACQUET="/tmp/pnpm12/bin/pnpm install --ignore-scripts --silent"
# vlt uses the npm registry alias configured by each fixture's vlt.json.
BENCH_INSTALL_VLT="vlt install --view=silent"
# vlt-npm uses the same vlt binary but with the npm registry (set by BENCH_SETUP_VLT_NPM).
BENCH_INSTALL_VLT_NPM="vlt install --view=silent"
BENCH_INSTALL_BUN="bun install --ignore-scripts --silent"
BENCH_INSTALL_DENO="deno install --quiet"
BENCH_INSTALL_AUBE="aube install --ignore-scripts --silent"
Expand All @@ -115,6 +118,7 @@ BENCH_COMMAND_ZPM="timeout $BENCH_TIMEOUT $BENCH_INSTALL_ZPM > $BENCH_OUTPUT_FOL
BENCH_COMMAND_PNPM="timeout $BENCH_TIMEOUT $BENCH_INSTALL_PNPM > $BENCH_OUTPUT_FOLDER/pnpm-output-\${HYPERFINE_ITERATION}.log 2>&1"
BENCH_COMMAND_PACQUET="timeout $BENCH_TIMEOUT $BENCH_INSTALL_PACQUET > $BENCH_OUTPUT_FOLDER/pacquet-output-\${HYPERFINE_ITERATION}.log 2>&1"
BENCH_COMMAND_VLT="timeout $BENCH_TIMEOUT $BENCH_INSTALL_VLT > $BENCH_OUTPUT_FOLDER/vlt-output-\${HYPERFINE_ITERATION}.log 2>&1"
BENCH_COMMAND_VLT_NPM="timeout $BENCH_TIMEOUT $BENCH_INSTALL_VLT_NPM > $BENCH_OUTPUT_FOLDER/vlt-npm-output-\${HYPERFINE_ITERATION}.log 2>&1"
BENCH_COMMAND_BUN="timeout $BENCH_TIMEOUT $BENCH_INSTALL_BUN > $BENCH_OUTPUT_FOLDER/bun-output-\${HYPERFINE_ITERATION}.log 2>&1"
BENCH_COMMAND_DENO="timeout $BENCH_TIMEOUT $BENCH_INSTALL_DENO > $BENCH_OUTPUT_FOLDER/deno-output-\${HYPERFINE_ITERATION}.log 2>&1"
BENCH_COMMAND_AUBE="timeout $BENCH_TIMEOUT $BENCH_INSTALL_AUBE > $BENCH_OUTPUT_FOLDER/aube-output-\${HYPERFINE_ITERATION}.log 2>&1"
Expand Down Expand Up @@ -151,8 +155,8 @@ collect_package_count() {
ls -la "$BENCH_OUTPUT_FOLDER"

# Prints the output of each install
for pm in npm yarn berry zpm pnpm pacquet vlt bun deno aube upm nx turbo vp node; do
if echo "$BENCH_INCLUDE" | grep -qw "$pm"; then
for pm in npm yarn berry zpm pnpm pacquet vlt vlt-npm bun deno aube upm nx turbo vp node; do
if echo ",$BENCH_INCLUDE," | grep -qF ",$pm,"; then
for i in {0..9}; do
echo "-- Reading output of $pm install $i ---"
log_file="$BENCH_OUTPUT_FOLDER/${pm}-output-$i.log"
Expand Down Expand Up @@ -190,6 +194,7 @@ collect_process_count() {
[pnpm]="$BENCH_SETUP_PNPM"
[pacquet]="$BENCH_SETUP_PACQUET"
[vlt]="$BENCH_SETUP_VLT"
[vlt-npm]="$BENCH_SETUP_VLT_NPM"
[bun]="$BENCH_SETUP_BUN"
[deno]="$BENCH_SETUP_DENO"
[aube]="$BENCH_SETUP_AUBE"
Expand All @@ -203,6 +208,7 @@ collect_process_count() {
[pnpm]="$BENCH_INSTALL_PNPM"
[pacquet]="$BENCH_INSTALL_PACQUET"
[vlt]="$BENCH_INSTALL_VLT"
[vlt-npm]="$BENCH_INSTALL_VLT_NPM"
[bun]="$BENCH_INSTALL_BUN"
[deno]="$BENCH_INSTALL_DENO"
[aube]="$BENCH_INSTALL_AUBE"
Expand All @@ -216,13 +222,14 @@ collect_process_count() {
[pnpm]="$BENCH_INCLUDE_PNPM"
[pacquet]="$BENCH_INCLUDE_PACQUET"
[vlt]="$BENCH_INCLUDE_VLT"
[vlt-npm]="$BENCH_INCLUDE_VLT_NPM"
[bun]="$BENCH_INCLUDE_BUN"
[deno]="$BENCH_INCLUDE_DENO"
[aube]="$BENCH_INCLUDE_AUBE"
[upm]="$BENCH_INCLUDE_UPM"
)

for pm in npm yarn berry zpm pnpm pacquet vlt bun deno aube upm; do
for pm in npm yarn berry zpm pnpm pacquet vlt vlt-npm bun deno aube upm; do
if [ -n "${PM_INCLUDE[$pm]:-}" ]; then
local prepare_cmd="$BENCH_PREPARE_BASE"
local setup="${PM_SETUP[$pm]:-}"
Expand Down
Loading