From 052c4ffb7d684ec584fc175b3cf44df7cd1887e7 Mon Sep 17 00:00:00 2001 From: Zoltan Kochan Date: Sun, 10 May 2026 23:30:57 +0200 Subject: [PATCH] fix: honor devEngines.packageManager.onFail=error (#252) Export pnpm_config_pm_on_fail=download so the bootstrap pnpm switches to the version pinned in devEngines.packageManager instead of throwing BAD_PM_VERSION on the user's first invocation. --- .github/workflows/test.yaml | 51 ++++++++++++++++++++++++++++++++++++ dist/index.js | Bin 1385076 -> 1384773 bytes src/install-pnpm/run.ts | 5 ++++ 3 files changed, 56 insertions(+) diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index c0e183b..c7522a3 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -298,6 +298,57 @@ jobs: fi shell: bash + test_dev_engines_on_fail_error: + name: 'Test devEngines.packageManager with onFail=error (${{ matrix.version }}, ${{ matrix.os }})' + # Regression test for #252: with devEngines.packageManager.onFail="error" and no + # `version:` input, the user's first `pnpm` call hit BAD_PM_VERSION because the + # bootstrap version didn't match. The action now exports + # pnpm_config_pm_on_fail=download so pnpm switches versions instead of erroring. + + runs-on: ${{ matrix.os }} + + strategy: + fail-fast: false + matrix: + os: + - ubuntu-latest + - macos-latest + - windows-latest + version: + - '9.15.5' + - '>=9.15.0' + + steps: + - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1 + + - name: Set up package.json with devEngines.packageManager onFail=error + run: echo '{"devEngines":{"packageManager":{"name":"pnpm","version":"${{ matrix.version }}","onFail":"error"}}}' > package.json + shell: bash + + - name: Run the action + uses: ./ + + - name: 'Test: version' + run: | + set -e + required='${{ matrix.version }}' + actual="$(pnpm --version)" + echo "pnpm version: ${actual}" + + if [ "${required}" = ">=9.15.0" ]; then + min="9.15.0" + if [ "$(printf '%s\n' "${min}" "${actual}" | sort -V | head -n1)" != "${min}" ]; then + echo "Expected pnpm version >= ${min}, but got ${actual}" + exit 1 + fi + else + if [ "${actual}" != "${required}" ]; then + echo "Expected pnpm version ${required}, but got ${actual}" + exit 1 + fi + fi + shell: bash + test_run_install: name: 'Test with run_install (${{ matrix.run_install.name }}, ${{ matrix.os }})' diff --git a/dist/index.js b/dist/index.js index f7910dc05a6e3a36a092fd438c1d8d25a266cb0a..4164ba5cd735d9e2faac217a7b31cc552648708f 100644 GIT binary patch delta 13412 zcmaKTd3;k<`u^u6H@UfKo8=~@8(k@-r6JuQbm59!(tSzOC2dM6Y4#>f(k$Ho6;Odu zM-b(V3Nq@9+n~a@oN;GSN1bs-)Nw{fb{$bi5dlHP;rHI8MQ8ba|7f1`zURH~+0S{- zdvDLZ-2KXd?mZh<%yrtT91)*2?DqSzY~}gkg4J$EzSFj54gBEh3Y4eRIBi--&_7xb zw1*=>UzT&*2P-m>^NH_Pv@b-X+nP2$55M9~b@1D=DFc2-HZ^37+O+<#%O2DYyL~qB zx_0fjC73m8<5ow)j`D5Ao0FgTWYe`(f`Dz?nX$wt*1r4$RT;2p?UMn2FdX9ALsdUY zTASTriFm{Rp{pxBc_I_= zGf|RAP;0|Jk+^_-lZ#%UP%VD408K!qW+7S;kDAD49coBGI((=WJ%e=QraE-52*gFr zXb9kzW^@d|*Mgn`$ZbUn09sqoPJqu^Q8&QyHdF#I)`rwcI*q5XyW3Dw6LEWOM*CRA z9tu}lba+P_GJ^BdZOA7CT-k|~G^)XYKIBI=WrON74{AZ3MCU~}A`o8~G1v_szbVMom`?|R7cW7 z$S#c6<*&AQz5a>D(#kMCW1>{}-f`3g9?y@XRslRzGlkxe=<@RmxU2L!te!?MgYx}p z^tS~%ew8#BU|NR4LH|^KSi_e(sw-IAZ@4mp13LV-)yN0WG^{~x@Vj>ndJ-`@uGx@Z zpsCRj-!(`@W$L(At=?$tFv5bHNpY*!78F$R%cWC?f4Ls@fsb$3qcrf5xB*%D{-3%Y zr32vWQ2?}(8_;Djh?1MpbpV@hMk_&k>SiRS(F8ud4K0@H)^e6Gl-m^@JC$G@+IKtZ zf$U%0jbu}622aUE&gfga(r&h7*gR>!q><`?|9-*|L*@h-juymJ@2 z8tFD3*@fUwK#uGZ3Txs$(Ya)Txm4TD?-E#WLYNQ6g(rk_0UA#T7YTLTFrGXiY`-$W z4xbPfA>D1<96`Mf&p#-YKW)-bs00;$b1X|&tiLD0Z1 z8merD`5o0o*J`M8DEdUi7q$m0z1_2OzZb0PVl$}H#HVK#Q)Mm)O}w$y9)Kc3l`WuX z^;<38YMU)6vWG&I<2dObLVj++4xvgmL;inn5q2})`wyXIkvZD@(xFCub)DWg)TZxl z?5L{@{)gI7-Q8H}Gvno-2h7MdN{gA?|B3J% zKiI$cRJf0!VS#D2+S=IK3Z4~i<$Lvy0HJ8Pz%a?&I#+XjWD_RjcK5+ zb1=F?4NUn5IbX!EC1 z`Z@R@AB(7Vet%xfP<8wkI+Z}xh-G|pBWvy6kUh&iU?i`rsAu_}yFQW1;#btKlc;jO z0!NamhoB7`Q>Z+E$5N;?WF&8-P=`hAxNUH)#(HHQh6lRvGnrH&)nyyZ$Jz5JJsQW_ zEUFW{U6(~ILFMKGjYaGC<>xqpmQj0jA>?SRSG0DYEl1 z$8kBX(wu_TQ)Y7QLaGv>I`V8Gm5P+mjJ!O@fVX?Fu<$CrLF8i%HAaCSQwcQ%U45v8 z`h&te$obc-2@lx12Q`s_pqcD0r4nH12e}Z)ZZkemMtzLx@I#BKAUvA3gsS2_ETMi4 zohn7$X|7yQ%}A>TFrQ~iJA*VJz$~=pyanq)Wb+@j&7IuD-$&b-_cLq0vYqn z)HGkEdj_aXfENcSGeF7;YFJ>7(JA*dlo&nOR~!6(Z;b^w)d*BKR`XD0Lr~*sx7%%X zL5tg0*#V>eW3w8-&S)R?kK1S3+5cbdY@TgruNi;8f}d$5br7c5|7aChw6Bb|%Cj;$ zC4aV(dI@U#rJKs4qr+n|ld&Pn4-F#6S5eFPMVoD*1H56Q#!v@YW~Z(apf+Ys1P%8=CO_`EVJ$dc7)J7$s z;bp3YK_0y0P3W+C^30nQBLqD77G)4aOVod*UKiBIrWLvPSLz;G-NrB8e!D$Z$7Vk5l_l4}SkR^+HU_#=kp3aghGz z1T_qH{U@mqNN=8`nn3FOh)TsJAHj@^rnR%GyFQ|R2X4APrd~#4B>5k(gg{*T2~`Jh z;1k$gd+-mRP-jsiIdh77R*u@p?u*nfglL-RFHsXbzHpg(MvSKMv$RM@9uk)U?5fH4jOe%oHIc)t=r2j}{ZT47z7I8rYv0cQ`^iwsh6Ki|jA;~C zRUs4UI4aU1(B61V)Cl6AkBP>4vHk>fl8J;*h+0uju1({zgen320lSY!n;o`CJD>8{ zryz%%I4LSmK`kWh2T_FruqQ!$tq8T?zp&yJP-k}xW0MF+Xi60Qy9psH7aT(1gF6+cn zeq)f9i$h2SXS}aqrbFv_vXT$ma)o&9|IEm$6yN>-%jm%ARbnL+fQzfdz&ptLD)Fre zu=3a@@j_T>T$6YSYA2y4@jL+v6Wk(BqEJ71yhFSLWZY^LX90{F#n}M28pS#D!jAlI zt9FKV6;ut|XYYI3NWdAi*z8=GylWJ{vyl!u;391GZCm%GnjH8*{QEc*BtQFycyu1} zk&6s{2q7Q7Hl9w#=F`eWcwam%#)$dBL6q#KZ*%*~=7 z6s7td+K@ev4LqqR2PjyW3u{9GuREOYCx_?LH?aR{VCU>t4Azv>uS$>w*H+Uxs2V$} z>1lxD)%03W4%N_01r`VXb(z^gq9esUrwPQB6lb`L=x_wq} z1TNM27QC~Lz6snE=xHOekTrT*E<{#xb0a+^02H^-$C1G5z}L~N7UbkM+64JHV4!r01|5Jo<821F3M*9|@5S zXLx81V13gK=Q3ux(n&~PN^aKb&d|)38gOjxHr!$0T zl#ISi{|uo~eDM|fF@OhOrRM{@`6_)KWVZjF&Mrm)61YHrClc%V>F>elHpK#rf1r1x zDN^?@dMSj}@S4l?0)Ss#rk_SrPYpkfc4CuH_%Dp2A~4(0L>~Rk92Y zg4i5ya%{U-k($`#&>G?D9KFPF<9@d-tGKEOKb<4dKoss|jzk&VnsX)F5M9Ij^2U7O zr}CgQJ^4IOGJ?tj{8b{i+RhpLkQjDw%{&3G>mU6lPm-HbD88YWInoB@;n+QBTFPB6lniaA*lvP zs+4rWBc4jh-AEcO&u@kDh+>)K8X0urt<92y6a=uM3%fnqXhFLJUmB34h`AxFy{a9P z4oMblUVrP5+$oes+tLj#^kj9Hgl6aozS+TGbo<%4Lb8&Ac+I6%k`J#!ljQwfl4Jz< z^)DsAMuJHP-oIB;gkQT)0-+A_<$V&h5UzW|2cX`QWZwglyab2pZUcTq24?##qaZ4t(Z_B5k2VJN%RAC)`uG37fsj zIHTriFR!zfRvF1x-$=GIXyU1jj94ZJIPjR7NyocoOtU~A6G)<*`HV*Tr<0f@0bR$} zxO)m8k7pKOeF}3e8j2Q;pU^UyIA=XG2Vb|Ip|)o*63EF~&!pgnRAyc*ogB?08&erd zjkgpr4ft&>leoa+(0ct&gWv16PH_&0JsQiiIqX~=Kc6~EIhPNjU>+XKX57p?LGp_kOrvhHZz;2x5==NSs$$ZKYZ+q@ z3TkJhzby`fmQwF8Tot>TzNdqvMVU9sV@ zG{#0{?CDiZe*)0q=%_S8t5-2;W&dNlX>@4ap&vJ)&KWz#r`7bLpLyFR9jr^S*W^AXR4zX&la0Gh)vDAOb{!jyrQG>tQ(aX?I? zjXJyjzb54fKPd~q03bFWv12`B$Hz86ce5Lq9AL4E4UpBgfl3Gcs#)kT1K6{=4 zpTB*SNsNt4zXR`m6lVRZ>tO(A1hV;h<|Z2A7Kt}A@M5Em4BpASl?jA4HW1G-x%j@9 z7!^M95<>&Oz5N-+fCSAByyGQUE|;HWHUf=}njU-s%6juThG)O0o?{mB>{s;yvk9nb zw7*T!RRGel7Z|n5#CNg5AL#ab>^`pEX|FO7`bFmF5^-*H)#AO+OBRp=uQGkKxR2Mg z#Jsdby`;796etj|2fL>Nc76hcW@kVPzUEI%Gs-2e|A{GD3_SN+f%F4Jn|U8$JZek2`4t<~bJP6z)lPGLyxcy?naO5G3KY4I988g3L|IY0ke)O1`ID0|JG+Z> z>tQam`L!5Hr7FCfk&4LKH0d9a!0y8P)1{BkU?$m`A+-r-q;#Urk!D_zuo2$1T*-QH zzVucIRFS0%r60xts&&$*5(RzHy)6Y_*DR&TsTS$ONRaze)t)x#i$Y+a{!Zx~5<%F7 zvnWX#&NfTOfZ1*{ORola*DS3CNFI>Z0~sC~kisb%CS!wAAA%>3t&~0}2Ha$qej@<9 z)+K$75(HiNkXM>c9HY|F7l2m2yD;u$1bC+=?syt7x7Cet6JmkSh1a#kWfE0K+)g2? zCVP!>-z$)nJZg=bC&qKf;#hpGTqPy{bjKYOBQM?)i1Pv{gAkq7jm3Syo225)8{$N` zC>W;_cwN|VLtHXh5sbq~5OHCrDXv}|aRJed;OcN(KZ=mM!*QRAPz2vF9mj!qa5`=% zUSM)u9#9c=^V--vNKRxG~Nq5cnadO`1qTKZ`3A@>2CSn9$4gQu)RMx5SYH zx5Uf7!GRqK8RW|i3G0*L71`L1gq?7{AKH+RPBc3cI6d43M@}U4DBX_+4Xmt75KDfjmQ{%bj#$&kqBNO4opr%Pjt0DE?+Z?ReYtEtaJfgy zWgh`+Be$-U#jOyyU3lL=CAoOtv$AiH8P49!xk=wkvdsvE@QHo03UP?<{t(XIFAK+oT-pY|-=?uIE5Z9)Wl4nW zm;IKv962bv4TZ=L2W96Ig$~zheC!!GrPvQ-e-q*P$7C6}X@^{alaI*~@X#??8ov6N zEEA`{Do?|2rOCzQx?{3UbKq{oT#(g68w?j@Z_{v>c%)ojOB|PF8A`lIC0~!dtXzqA z9h4`)72?r@@>h@(?^Vgy@%lmDVmlsEMKdk0$ZMfbAoC?5u&%Kr`M;FlFHj)A4#?=4 z0{QP`FkQiY3q@7CpmmRy%ae$LlRqv88VTkHg!sKNxg5{Y!fS)w26=MAk9HXBvY%cl zzq?TAcg1!9vUjswgZ^!LVVGWOoOqMm4|DN`o8&`Fy^QSbWb8xeTiG=nlC)4tnP7gYxTzaMPUpjeJT#`G8I1 z)xVJ!llhOyr(~et^}L*j`K~C#n-9w8{aZhk@~Sy_Eh}%0Sya9v&jX8CXYoB*ib0iv zzj{T!2-V_M$7HFb{8jmVa;V|o|03U&5G&vfA<=&#zbKwH>HAU+F%=6reOj)C-o_bc z4laSjQ?d1j8;|@)^XAUV2kblOU_u zE(9vh%u&1paCnZQacR3tTRjXPAi(=Qc(V)hKFHa|t7f&a>qg{9MOQSW#0`@bNs7BE zAk7!k6go74i{>hNVb0w+S8;=&%Y_k1m`e)M75O~rHfAW^;&EP<0(QzSd@5T}1CJEu zD9(U3eV(EKa&behVh^zDi@6HSv+XSl6iN{@>4MwxaKxF9Pa9}xg$B;`E?2(4Kx5@5 zNXsI{K?I)UMT#mjPzgcmwASSE=vU}uK#m@mowrYgUzdL@_X%-f~27|D33s(HS=r5w0@=?&?X?QAGtKs&{D(!#ML(#T>lzl%fbY z@SCR;tuaU=OFmV=3(9&t@R{PKpPHi270;tK^5W-;`x(ID^NOb>fGPh{yd@GCVM(Z& zlX<^G|l?!nxt6U6PC#$pq{DD<^ z1U)Xia;IVrX;&#(0kCdMqOu)ePolC9fSIG@skn2FawWj4bCjzfYP=vxnYs)D#5G;Y z2ZX?}KkZd!0x%|cvJv;0z^D;FV}eH-Nphc3#fYX|T&D>i8d9d?Hj8oz(BlmjWkfg) z`{`bbG7F~-EA60MH>}(kRqh`KWua9$AeeUH43jd6?6NBVSP9Wv?>)*|KES)@eq|}Z z$@`U|)Df4qCj{F|bYahYKw{zFLyX|Sub{LM^1!c@ItB&t;YXDXVkb}T?AZ62GLIM@ zQ&uS;R(SJ^%EtuD`e7ADgG{-#9Hg%VnPx*slVM&x0`Y|cO=E;l*Z1=29uwD3#`i1h zk)Xk~t-3OIo4+V-`$akqUpxTA&_LP_D(_DP)_&%&@(hS4k0{eA;N9q?@}i&_S}35m z@VG}n*W$N6Qr1CU;>Su1@aV_N?ZCzB{-MmF1-&l(ExeH@_k5weA4z(F9004e;6rir zRe0lRWe{licc+#8yxr9gi`CfumGXMfefgC#9hiFj8D*suNO{Be${Z@!#ZBO9Av*_e z_+Dv)2=uA%mDdPNF1)G+_N29!l-Xdp>ymN>WL>(X3;_gwfKqd@`d`XT06YJsOyceD zse@pW30GfM8hLT8p3WuDTvl3yz{k^s>^cG9P7!+?LBRN0nk@qHahkOX1uZaZ4Rkli z?l_jA8MBM44d&(52JyXji*F}#73&l0&9fuY=i(rJWkh0OzZMg(Y&7v>&=*Z#F_;}P ze-n`W11apVP|)YXr!90RnMh}Sh?gu@dI6DTvJ!}Xlca2xLJ;Vl3o$_SUj~3GnOeR(2skYb#qW4?EY!zVwMS!7c+0@Un^cp;k7Yckpy8 z`<|dW=+puSbNPc!p@J!P@i{Hg9MSlMopY0^m8?Jn3~!B<7`<_~>n*%1nka&3J_ zYu!*yYe#JhXEIjJD(YK1Ok5jOcUIBa)6uQ3n+*VGoM**&yWNYH8os~W=xIEWbSxs)5WH&Qlm$)9PLwosZ_Zg!N z3T$8#rG6)@>=9^ymE5|4-6>(bydvV{{A9_^>=Qz`M+CO88JOO}&Woipaq|{-K3pt7 z565nVEWV9}PdK7>X+(NETZ4elwcWuYK-{sN-2w2=?Q9l60)`=oN}1y5TTdH#7PI&A zVdWKfvNQ$VXWPlP31YSAYJyrkyNkU_0`%(J2ibffV9syY4nC9{+|3RFyuF+40&U)- z>?j}bz5Q`k18ke@-@~?vA$lw)YzADnw1j;>4w#bUAp0c*e({ChLkp}p{WX}MPJHug z>|CHv55L9^AP_}wu(<#W-+)J*r0EUzei~TX7l+thfJ1MyYTWlWn>L%?^po`O-e!|y zdd*BWVc%iX7+`n&{EllV<68KmF5u+w2d8>?1KQGf5m>F);qPM_Mp=aABys?f2{D* zT~FRW!>$5DQhAo`<0o$0^5p!;(mXTeF5N^Z`s=c+P`DZ0n~oa z{u+Xf@}&?UBn6%X^-ozdPC)Hw0F3-TP?{(($_ zv*fBaxQhDZs`?mYk-x}QPYJp@o!b8Dw$>P9t#MY($kC7BV#=|)S*6Jmasb~2f%8j}Eiwm_9D0+cUOoh*ji;MqZypH6GySI%@U z*O&{~GY)Tz_!p*QkZ31s?W!Ch6SbId!iRegxl{{)^uFa%RSAIf#(Pv52&k|}RR{#u zANshu~|7RCTM6s&i_F zNFZIEEf#p3+X6B*d2pV3SOodf0`;f_$oOQ5S_M&Ma&xJAl?UW6cB*T$@pA{%8Myr= z^`rRD2i0?N(mr(-&Usm#LJa%ViTtg=aX{Sz;q;Q1)am&B1L|+sA*UwCkyEf{O;bhe ztK}hl{GhrTZ05bJei*JGZ@#R4T?Pf?chpA&0)rD5tygE_AKq5y;pg8|!>2tY`>$%a z&v;1O2kHm;p!gHV)t3;+drqo51PX&wWA@t&Ggrt;2xk97y<5aO;B19ApFEF?MeJ?( z&Ck_eq6+-{Kh+BWvd^g(;J7c;$~&%0OzCNF)738VIcwX>3$4L^OMP`<%;2=OI{VGT z^<%?9v%Aq(*6Hz9Px|Z2yFERg!m{GUk@}wUrQxntZ;5-cPFHRj@9wXj7-`i{wN*@; zov!f?eCCo`MRtAx?^O5#FRGLAi(jhMvBDQ^KdqKW%eE~E^_Py+wDy{6YYW?ghFa&? za9yLtI_fb@j5Un}{535O>-6x*w8hfiRnx93HRwDgU0ph3S$OeepSQWxQ(o5C>!~Q3 zbb3lVB8FyTUjRPlIIXq{OSGl<c4Qi#p23S|*Bpo#i8Ao+g)}!c<{&`@ChQ;(pH(Ym>dVVZuIEI1F3z1$8M-pb{mx z=)4*}(D+)NI9u`$U#sUtOCD*f=&7%%Fa~;;=sL=Z`-d{3@7B8(dwMM%gS%oX(5P$gGdC=ms);y9Iz}6oj(a=x-ZI}}y~Qxy(jS?`>&~io z#fs|VOX(dq7z#UllRxQE3GT9Zi=*Y>q|O)&L!0mZ^XTHy1%+^BxLn_y7VKy zes6Qz#E4VhVfI>@Mi;k@6#Dv#+`b-vXuNlSnAdws`vcWcOVX&gq zFxl-aEp^p&l@$(mv=mizTBw8?@y5i2lBAqT2wvT%qj**J` z^1g~tbw_(>WO{M+xWCTjEAQ|2h4h6Letkzx^Q5!hJnFpTbYc;{={t2JZbyl7vhb4n z5ms%pX)QLJ0X|hI$afTI@{2V#8$KmVTp$2c$`i9HqN0a)@Xt9uTSL$v2^7Ey0-sod fV+Tn}O&k-!nXx%Du?ygEX5t@#2tAUO_y+oaHFJ&Y delta 13612 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