diff --git a/.github/workflows/benchmark.yaml b/.github/workflows/benchmark.yaml index 07f4320f99..22225fbf0f 100644 --- a/.github/workflows/benchmark.yaml +++ b/.github/workflows/benchmark.yaml @@ -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" @@ -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 @@ -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: diff --git a/app/src/hooks/use-history-data.ts b/app/src/hooks/use-history-data.ts index b546583e9c..bba5acef03 100644 --- a/app/src/hooks/use-history-data.ts +++ b/app/src/hooks/use-history-data.ts @@ -17,6 +17,7 @@ const PACKAGE_MANAGERS = [ "deno", "bun", "vlt", + "vlt-npm", "aube", "upm", "nx", diff --git a/app/src/lib/get-icons.ts b/app/src/lib/get-icons.ts index 6f8e26abde..35a306926f 100644 --- a/app/src/lib/get-icons.ts +++ b/app/src/lib/get-icons.ts @@ -47,6 +47,7 @@ const packageManagerMap: Partial> = { berry: Berry, zpm: Zpm, vlt: Vlt, + "vlt-npm": Vlt, }; const frameworkMap: Partial> = { diff --git a/app/src/lib/utils.ts b/app/src/lib/utils.ts index ae9ab102de..ba23c93885 100644 --- a/app/src/lib/utils.ts +++ b/app/src/lib/utils.ts @@ -258,6 +258,7 @@ export const calculateLeaderboard = ( "bun", "deno", "vlt", + "vlt-npm", "aube", "upm", ].includes(pm), @@ -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"; diff --git a/app/src/types/chart-data.ts b/app/src/types/chart-data.ts index 4a42e321c9..eaa4df8794 100644 --- a/app/src/types/chart-data.ts +++ b/app/src/types/chart-data.ts @@ -8,6 +8,7 @@ export type PackageManager = | "deno" | "bun" | "vlt" + | "vlt-npm" | "aube" | "upm" | "nx" @@ -57,6 +58,7 @@ export interface PackageManagerVersions { deno?: string; bun?: string; vlt?: string; + "vlt-npm"?: string; aube?: string; upm?: string; nx?: string; @@ -83,6 +85,7 @@ export interface PackageManagerData { deno?: number; bun?: number; vlt?: number; + "vlt-npm"?: number; aube?: number; upm?: number; nx?: number; @@ -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; @@ -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; @@ -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; @@ -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; @@ -214,6 +221,7 @@ export interface PackageCountData { deno?: PackageCountEntry; bun?: PackageCountEntry; vlt?: PackageCountEntry; + "vlt-npm"?: PackageCountEntry; aube?: PackageCountEntry; upm?: PackageCountEntry; nx?: PackageCountEntry; @@ -242,6 +250,7 @@ export interface ProcessCountData { deno?: PackageCountEntry; bun?: PackageCountEntry; vlt?: PackageCountEntry; + "vlt-npm"?: PackageCountEntry; aube?: PackageCountEntry; upm?: PackageCountEntry; nx?: PackageCountEntry; diff --git a/bench b/bench index 561e9b82cd..188edba392 100755 --- a/bench +++ b/bench @@ -33,6 +33,7 @@ AVAILABLE_PMS=( pnpm11 pacquet vlt + vlt-npm bun deno aube diff --git a/scripts/clean-helpers.sh b/scripts/clean-helpers.sh index 54e2f73d1e..efb799d88b 100644 --- a/scripts/clean-helpers.sh +++ b/scripts/clean-helpers.sh @@ -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 } diff --git a/scripts/collect-package-count.js b/scripts/collect-package-count.js index a522685233..9a1d0fdbc2 100644 --- a/scripts/collect-package-count.js +++ b/scripts/collect-package-count.js @@ -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' }, @@ -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)); diff --git a/scripts/collect-process-count.js b/scripts/collect-process-count.js index 1e26176be4..754c234f3f 100644 --- a/scripts/collect-process-count.js +++ b/scripts/collect-process-count.js @@ -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' }, diff --git a/scripts/generate-chart.js b/scripts/generate-chart.js index 49b2b55a8f..c676ec75b7 100644 --- a/scripts/generate-chart.js +++ b/scripts/generate-chart.js @@ -26,6 +26,7 @@ const COLORS = { deno: "#70ffaf", bun: "#f472b6", vlt: "#000000", + "vlt-npm": "#666666", nx: "#3b82f6", turbo: "#ff1e56", vp: "#4f30e8", diff --git a/scripts/setup.sh b/scripts/setup.sh index ec4af0a054..a8ecbfb939 100644 --- a/scripts/setup.sh +++ b/scripts/setup.sh @@ -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" @@ -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\", diff --git a/scripts/variations/cache+lockfile+node_modules.sh b/scripts/variations/cache+lockfile+node_modules.sh index 16ee6e0c67..6183221019 100644 --- a/scripts/variations/cache+lockfile+node_modules.sh +++ b/scripts/variations/cache+lockfile+node_modules.sh @@ -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")"} \ diff --git a/scripts/variations/cache+lockfile.sh b/scripts/variations/cache+lockfile.sh index 665905c3c5..cb3ea437c0 100644 --- a/scripts/variations/cache+lockfile.sh +++ b/scripts/variations/cache+lockfile.sh @@ -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")"} \ diff --git a/scripts/variations/cache+node_modules.sh b/scripts/variations/cache+node_modules.sh index b009d3ac93..57ad0e06ac 100644 --- a/scripts/variations/cache+node_modules.sh +++ b/scripts/variations/cache+node_modules.sh @@ -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")"} \ diff --git a/scripts/variations/cache.sh b/scripts/variations/cache.sh index 62f361e251..4a2e7e9f94 100644 --- a/scripts/variations/cache.sh +++ b/scripts/variations/cache.sh @@ -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")"} \ diff --git a/scripts/variations/ci.sh b/scripts/variations/ci.sh index 2284bdfeef..a5dd543112 100644 --- a/scripts/variations/ci.sh +++ b/scripts/variations/ci.sh @@ -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" @@ -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" @@ -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" @@ -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")" @@ -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"} \ diff --git a/scripts/variations/clean.sh b/scripts/variations/clean.sh index 2737666c34..90893b2fb7 100644 --- a/scripts/variations/clean.sh +++ b/scripts/variations/clean.sh @@ -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")"} \ diff --git a/scripts/variations/common.sh b/scripts/variations/common.sh index fa846b0b24..3e07d62726 100644 --- a/scripts/variations/common.sh +++ b/scripts/variations/common.sh @@ -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 + 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 @@ -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" @@ -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" @@ -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" @@ -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" @@ -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" @@ -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" @@ -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]:-}" diff --git a/scripts/variations/lockfile+node_modules.sh b/scripts/variations/lockfile+node_modules.sh index 18c4bc9742..8c894eb20c 100644 --- a/scripts/variations/lockfile+node_modules.sh +++ b/scripts/variations/lockfile+node_modules.sh @@ -35,6 +35,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")"} \ diff --git a/scripts/variations/lockfile.sh b/scripts/variations/lockfile.sh index 55fa2eb9c4..31c3ebd114 100644 --- a/scripts/variations/lockfile.sh +++ b/scripts/variations/lockfile.sh @@ -35,6 +35,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")"} \ diff --git a/scripts/variations/node_modules.sh b/scripts/variations/node_modules.sh index c77d86452c..0aeb0e7aea 100644 --- a/scripts/variations/node_modules.sh +++ b/scripts/variations/node_modules.sh @@ -35,6 +35,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")"} \