@@ -10,7 +10,7 @@ name: utoopm-e2e-bench
1010# pull_request / push with `(pm)` in title/msg → e2e jobs
1111# pull_request labeled `benchmark` → bench-phases (utoo / utoo-npm / bun)
1212# workflow_dispatch with `target` choice → manual one-off runs
13- # (pm-bench-all = full PM shootout vs pnpm/yarn/bun/aube;
13+ # (pm-bench-all = full PM shootout vs pnpm/pnpm12/ yarn/bun/aube;
1414# pm-bench-phases = same as the labeled trigger but ad-hoc;
1515# pm-bench-pcap = tcpdump capture for resolve phase)
1616#
4040 type : choice
4141 options : [both, npmjs, npmmirror]
4242 pm_list :
43- description : ' [pm-bench-all] Comma-separated PMs (e.g. utoo,bun); "all" → utoo,pnpm,yarn,bun,aube'
43+ description : ' [pm-bench-all] Comma-separated PMs (e.g. utoo,bun); "all" → utoo,pnpm,pnpm12, yarn,bun,aube'
4444 required : false
4545 default : ' utoo,bun'
4646 type : string
@@ -544,13 +544,34 @@ jobs:
544544 uses : oven-sh/setup-bun@v2
545545 with :
546546 bun-version : latest
547+ - name : Install pnpm 12
548+ id : pnpm12
549+ if : contains(github.event.inputs.phases_pm_list, 'pnpm12')
550+ uses : pnpm/setup@v2
551+ env :
552+ PNPM_CONFIG_PM_ON_FAIL : ignore
553+ with :
554+ version : next-12
555+ dest : ~/setup-pnpm12
556+ install : false
557+ - name : Expose pnpm 12 binary
558+ if : contains(github.event.inputs.phases_pm_list, 'pnpm12')
559+ run : echo "PNPM12_BIN=${{ steps.pnpm12.outputs.dest }}/pnpm" >> "$GITHUB_ENV"
560+ - name : Install pnpm
561+ if : contains(github.event.inputs.phases_pm_list, 'pnpm')
562+ uses : pnpm/action-setup@v4
563+ with :
564+ version : 10
565+ - name : Install aube
566+ if : contains(github.event.inputs.phases_pm_list, 'aube')
567+ run : npm install -g @endevco/aube@1.29.1
547568 - uses : ./.github/actions/install-bench-tools
548569 with :
549570 platform : linux
550571 # utoo-npm (last published release) only changes on releases — bench it
551572 # on manual dispatch only; label-triggered PR runs compare against
552573 # utoo-next, which is the signal that can actually change per PR.
553- - if : github.event_name == 'workflow_dispatch'
574+ - if : github.event_name == 'workflow_dispatch' && contains(github.event.inputs.phases_pm_list, 'utoo-npm')
554575 uses : ./.github/actions/install-utoo-npm-baseline
555576 # The utoo-next binary is built upstream by build-linux's
556577 # "Build next branch utoo (bench baseline)" step. Just download.
@@ -572,13 +593,18 @@ jobs:
572593 if [ -n "${UTOO_NPM_BIN:-}" ]; then "$UTOO_NPM_BIN" --version; fi
573594 "$UTOO_NEXT_BIN" --version
574595 bun --version
596+ if command -v pnpm >/dev/null; then env npm_config_package_manager_strict=false npm_config_manage_package_manager_versions=false pnpm --version; fi
597+ if [ -n "${PNPM12_BIN:-}" ]; then env PNPM_CONFIG_PM_ON_FAIL=ignore "$PNPM12_BIN" --version; fi
598+ if command -v aube >/dev/null; then aube --version; fi
575599 - name : Define cache wipe function
576600 run : |
577601 cat > /tmp/wipe-bench-state.sh <<'WIPE'
578602 #!/usr/bin/env bash
579603 rm -rf /tmp/pm-bench /tmp/pm-bench-results /tmp/pm-bench-output \
580604 /tmp/utoo-bench-cache /tmp/utoo-npm-bench-cache \
581605 /tmp/utoo-next-bench-cache /tmp/utoo-alt-bench-cache /tmp/bun-bench-cache \
606+ /tmp/pnpm-bench-store /tmp/pnpm12-bench-store \
607+ /tmp/aube-bench-data /tmp/aube-bench-cache \
582608 ~/.bun/install/cache ~/.cache/nm 2>/dev/null || true
583609 mkdir -p /tmp/pm-bench-output
584610 WIPE
@@ -664,22 +690,49 @@ jobs:
664690 uses : oven-sh/setup-bun@v2
665691 with :
666692 bun-version : latest
693+ - name : Install pnpm 12
694+ id : pnpm12
695+ if : contains(github.event.inputs.phases_pm_list, 'pnpm12')
696+ uses : pnpm/setup@v2
697+ env :
698+ PNPM_CONFIG_PM_ON_FAIL : ignore
699+ with :
700+ version : next-12
701+ dest : ~/setup-pnpm12
702+ install : false
703+ - name : Expose pnpm 12 binary
704+ if : contains(github.event.inputs.phases_pm_list, 'pnpm12')
705+ run : echo "PNPM12_BIN=${{ steps.pnpm12.outputs.dest }}/pnpm" >> "$GITHUB_ENV"
706+ - name : Install pnpm
707+ if : contains(github.event.inputs.phases_pm_list, 'pnpm')
708+ uses : pnpm/action-setup@v4
709+ with :
710+ version : 10
711+ - name : Install aube
712+ if : contains(github.event.inputs.phases_pm_list, 'aube')
713+ run : npm install -g @endevco/aube@1.29.1
667714 - uses : ./.github/actions/install-bench-tools
668715 with :
669716 platform : mac
670- - uses : ./.github/actions/install-utoo-npm-baseline
717+ - if : contains(github.event.inputs.phases_pm_list, 'utoo-npm')
718+ uses : ./.github/actions/install-utoo-npm-baseline
671719 - name : Verify tools
672720 run : |
673721 hyperfine --version
674722 utoo --version
675- "$ UTOO_NPM_BIN" --version
723+ if [ -n "${ UTOO_NPM_BIN:-}" ]; then "$UTOO_NPM_BIN" --version; fi
676724 bun --version
725+ if command -v pnpm >/dev/null; then env npm_config_package_manager_strict=false npm_config_manage_package_manager_versions=false pnpm --version; fi
726+ if [ -n "${PNPM12_BIN:-}" ]; then env PNPM_CONFIG_PM_ON_FAIL=ignore "$PNPM12_BIN" --version; fi
727+ if command -v aube >/dev/null; then aube --version; fi
677728 - name : Define cache wipe function
678729 run : |
679730 cat > /tmp/wipe-bench-state.sh <<'WIPE'
680731 #!/usr/bin/env bash
681732 rm -rf /tmp/pm-bench /tmp/pm-bench-results /tmp/pm-bench-output \
682733 /tmp/utoo-bench-cache /tmp/utoo-npm-bench-cache /tmp/utoo-alt-bench-cache /tmp/bun-bench-cache \
734+ /tmp/pnpm-bench-store /tmp/pnpm12-bench-store \
735+ /tmp/aube-bench-data /tmp/aube-bench-cache \
683736 ~/.bun/install/cache ~/.cache/nm 2>/dev/null || true
684737 mkdir -p /tmp/pm-bench-output
685738 WIPE
@@ -740,7 +793,7 @@ jobs:
740793 # ============================================================
741794 # PM-BENCH-ALL (manual full PM shootout)
742795 # workflow_dispatch with target=pm-bench-all only — comparing utoo
743- # against pnpm/yarn/bun/aube on cold + warm installs across
796+ # against pnpm/pnpm12/ yarn/bun/aube on cold + warm installs across
744797 # configurable registries is slow, so it's never auto-triggered.
745798 # ============================================================
746799
@@ -777,9 +830,22 @@ jobs:
777830 run : |
778831 PM_LIST="${{ github.event.inputs.pm_list || 'utoo,bun' }}"
779832 if [ "$PM_LIST" = "all" ]; then
780- PM_LIST="utoo,pnpm,yarn,bun,aube"
833+ PM_LIST="utoo,pnpm,pnpm12, yarn,bun,aube"
781834 fi
782835 echo "list=$PM_LIST" >> $GITHUB_OUTPUT
836+ - name : Install pnpm 12
837+ id : pnpm12
838+ if : contains(steps.pm.outputs.list, 'pnpm12')
839+ uses : pnpm/setup@v2
840+ env :
841+ PNPM_CONFIG_PM_ON_FAIL : ignore
842+ with :
843+ version : next-12
844+ dest : ~/setup-pnpm12
845+ install : false
846+ - name : Expose pnpm 12 binary
847+ if : contains(steps.pm.outputs.list, 'pnpm12')
848+ run : echo "PNPM12_BIN=${{ steps.pnpm12.outputs.dest }}/pnpm" >> "$GITHUB_ENV"
783849 - name : Install pnpm
784850 if : contains(steps.pm.outputs.list, 'pnpm')
785851 uses : pnpm/action-setup@v4
@@ -803,7 +869,11 @@ jobs:
803869 hyperfine --version
804870 IFS=',' read -ra PMS <<< "${{ steps.pm.outputs.list }}"
805871 for pm in "${PMS[@]}"; do
806- echo "$pm: $($pm --version 2>&1 || echo 'not installed')"
872+ if [ "$pm" = "pnpm12" ]; then
873+ echo "$pm: $(env PNPM_CONFIG_PM_ON_FAIL=ignore "$PNPM12_BIN" --version 2>&1 || echo 'not installed')"
874+ else
875+ echo "$pm: $($pm --version 2>&1 || echo 'not installed')"
876+ fi
807877 done
808878 - name : Run benchmark
809879 run : |
@@ -843,9 +913,22 @@ jobs:
843913 run : |
844914 PM_LIST="${{ github.event.inputs.pm_list || 'utoo,bun' }}"
845915 if [ "$PM_LIST" = "all" ]; then
846- PM_LIST="utoo,pnpm,yarn,bun,aube"
916+ PM_LIST="utoo,pnpm,pnpm12, yarn,bun,aube"
847917 fi
848918 echo "list=$PM_LIST" >> $GITHUB_OUTPUT
919+ - name : Install pnpm 12
920+ id : pnpm12
921+ if : contains(steps.pm.outputs.list, 'pnpm12')
922+ uses : pnpm/setup@v2
923+ env :
924+ PNPM_CONFIG_PM_ON_FAIL : ignore
925+ with :
926+ version : next-12
927+ dest : ~/setup-pnpm12
928+ install : false
929+ - name : Expose pnpm 12 binary
930+ if : contains(steps.pm.outputs.list, 'pnpm12')
931+ run : echo "PNPM12_BIN=${{ steps.pnpm12.outputs.dest }}/pnpm" >> "$GITHUB_ENV"
849932 - name : Install pnpm
850933 if : contains(steps.pm.outputs.list, 'pnpm')
851934 uses : pnpm/action-setup@v4
@@ -869,7 +952,11 @@ jobs:
869952 hyperfine --version
870953 IFS=',' read -ra PMS <<< "${{ steps.pm.outputs.list }}"
871954 for pm in "${PMS[@]}"; do
872- echo "$pm: $($pm --version 2>&1 || echo 'not installed')"
955+ if [ "$pm" = "pnpm12" ]; then
956+ echo "$pm: $(env PNPM_CONFIG_PM_ON_FAIL=ignore "$PNPM12_BIN" --version 2>&1 || echo 'not installed')"
957+ else
958+ echo "$pm: $($pm --version 2>&1 || echo 'not installed')"
959+ fi
873960 done
874961 - name : Run benchmark
875962 run : |
0 commit comments