From 83760025b6f7ba2093c57858fb75bdb762b480c5 Mon Sep 17 00:00:00 2001 From: Danny Date: Thu, 19 Mar 2026 16:10:03 +0100 Subject: [PATCH] Fix darkforge-test heredoc indentation in cloud-init The cat heredoc inside cloud-init runcmd was indented, causing the shebang line to become " #!/bin/bash" (with leading spaces) which makes the script fail to execute as a proper interpreter. Fixed by removing indentation from the heredoc body. Also improved the error message to explain that the clone likely failed during provisioning and show the manual clone command. Added tmux kill-session before starting new session to avoid "duplicate session" errors on re-run. Co-Authored-By: Claude Opus 4.6 (1M context) --- rescue-objects.tar | Bin 0 -> 20480 bytes tests/proxmox/create-vm.sh | 33 +++++++++++++++++++++------------ 2 files changed, 21 insertions(+), 12 deletions(-) create mode 100644 rescue-objects.tar diff --git a/rescue-objects.tar b/rescue-objects.tar new file mode 100644 index 0000000000000000000000000000000000000000..efee8e1b9f9d659ed3e31a139ceaf45b718b426c GIT binary patch literal 20480 zcmeIa1#lh9mL)1?wiqmCSvp6|%*-rHM@$woGcz+YS-WjZujj! z@BR7xZqIa#Ga{q1@?`F+Tve;GYUSRC(age$$=1-)#K_5!2?S(f)aNo}W(5J+4Gmcg zxq$4PKu#ctjTOjlVrU3r2Qjm-ngY1ESU_O^3kd)Ku(Gm}fc@HXu(SQk7QpV~cSozh=)b#KC z{x2f|{OjNVzqbEf5;Qg}7z7xY9LR`7L4`z<(pQ#bHG>amP$KQV&r?5s@~?Hp`fOl&|lMkZk35MUi}caB2^PU60sPXst4`BNf|5<=6tY9Q=|IC5@&usl)&VObO zl21++pG^3G92_iMEX+VI03#O{8#5ON0viX3tdy{jvWTRVx)`Gy$jQlp@&Aphd_qc6 zLe8#c+9oRE023)!1XeB*m0z7?wfe_!dn z3Og#Rzc_m;)_L13o=F6+sbB)Zoczheu`}9XYLb+7H;;J>`A8$DEuWP>wrB2p>rdxB1r~Ia@0_K~=$!5EM9XXa@P^W5jnd;!-Ic9G4y$3} zD8ES4aK4Kyi%w;R2)VYk8 z19O{U226L6*j7Rm zj!=c+A}YNhemjeIs6zEi;|3AZ3*X`5=O61>Q_amagjLzy%UrnMOm4nm@iVxLVbg!Z z1!LvsCpf?;(q^gK~R-RuXoY!d}b1ScNixnhu7=*XpEM%UI;bk ztjF^FeGH5d3=mcC3N!R$bcnaiEWdO9gwz;=2qUuRopACCrYIn9ank&ubZ)!%=ke;y zX%5R&y{IcscDm|0jigF)b7I3X1*&k*d3l-9HP9Cd6^FQI6| zeOoDGb2k3V#&66PSpA8WTM8m(yN%ym4O-yZFSMlohnCR zpcjAs-C{byFR4ACr!>JpPU#Lui&uE5e&l$TSIW_^f@aSpk{yiChSkuyys>fb))|(* zL%a(EZEp4)Jvz*U-vGQOb1Yu_B4Ai$p7cxCU7}O~JQNrX&(olal#v7ef+)Fjf!P<6 z!wFc2kzI-e@dLP4x3`>8oXD-bhwz{GKbgLwwjA|`!XTbShk&3VusT-RI&QDXO)MDc z-{$j^;Q6XH>{pm@E79TN_eL18;<}DOM~>QzUyAj06+=9*9Lx%4s~`-h@?)Z!k@_sA z`-ltBD{DS8?kEZgQ-N5Op+ko?O~NELbcOx&pKDJx=3FUC7{chL?5O-6GngAv-LH1U z#CXHZI4G)II$DjL4q(fbcB@z2BG$tS_vo^D)c0{%7_laM8*?fVrk~Z$vm6NVfF^3Hy5*f zD_id$sfYHYuUJ`GlOK-`rYY7=;+@uM3-oYHmqcjERh2D&V)i}x+Tj{ zr~jCcSY9F{OSM}&{wb(RN|agoIKh=ueeskgsAWV5D^z~VCtlCy)zVQ05@`WhnitRU z=e;K?9ZaJvB*z+Abtj9a*yxa9$n2_3y2I#$MJ)#fF?yO!X>-{_c;fALM$w^yo`x*XU~H$?o9G9b=hECVK05w|+R4{Ov$ze>Pd@$;In{!IGy`fxB|+Uwa0)z7 z1c`WO$FhpehQ&z789iM%K~*wAbp`~&!g+~kM{^%E`D8o2J2-b^QdWgv7dV}LQ@5X6 zHxwQPmCi(763OwCBNNb+9q?WV=z!G6i3o7*-%2geFob-Y+uHhIL-n|tfsy*+QQcM; zC-M=ySYxxNC5#a{J>J-aV2;f+^gwH$_K?nLnE%RDq#h<$XZ;Bz|O=W z`nk-aM6Kq7wW0nHhTJw=qCtA0_t&jg`#6d$>h2%l-9|YWMef$(&@`9;2!M-cmk?eL z-g_eC7=@SqnY;T^l9Ft7^7z*ku)~^(z{@TGwrXKp1p)4ymG(Q`cBP|fRDtP(i_`v= z*X_*hD^sg}?e3-k^#E*G;1#Qaoz8NTm}Fg;6!a7=04)x}IT>k!{+aw{VtJ0&&E3*f zIST3w;dbg%M4ltwzF~yNc&F5xwT|5yhwU@(aF}6*SV(#ZyG$y=hqh)3@8Z%UrLpQV zAK8>;UHeb48@xBkCnnaps$@pd$M0-Sm3)>hg$O?G-Kb4-m7Mh9>hF*Vr=_Da*x?6( zOcDtZR#3ez~-mxCzI@TARMxknKy60c>(WuB-|rf8&_z8Hq;E?K81gOCeW) zvX*OJt|x0&;o7JaHO~r+d<>3)#PhWCzyeQ?eHTzQUG3}a5M2&6RXr~02o3q7`sQZW zYIZl1lv_fWOP6CeJ*^IJs%aS2_cl|&6#K@+t(%>*#@d&saK}e)xu(Gjpo$1c z5o=^wIh0z^LnLJ?Hv55vcO-1Cy3IRN*f8n<~h6IaA`O}|C0SyrA-Nr`q#Wq3(d-4LFHybBL2mi}Z0hX`h}AlKTK z&)}A+R`o5tE)#ye8lGZI)Y#nSqNKb!O^jP-pxLRmU83 z=?6?~JP6Wc+Ev1qs~)5XER5#{M5Z6NX=JkR+KMWx;EOIAhQ7Z;5YOgaRMj0!+XOf{ zcN-cK-znyAZY#BDv$Mo#q1cieuUW1IOdTEwkZ3fPAKmD4(QM$1(C%d^+>*i!d=7b*C-jx8bwrd%Kv0Ei95$_@lDo3e7S0y&LLO*z?3OaX=_EbMF? zTz^jq{SV{&2j74HUjO~21^?22*?xcj{RbHTnu_20?_Y!Ke-o>J=Kml1??3N3@DKU_ zZ}s1Q;XextGs|!N_rKy6`j7fA8zUDxCp$CqZ~gbb0{{Qr$M`e<|9PzcV`P7y|3FrD z0P7$6@4wFfEbPD6fByjRFD$u%FX&#XuZ|>aPWeQ{Xh zK9nDMhLah>XBdq)CK2H@BL)eab#HkmysD|SFf4~qH0NJw zt+-oQXfk`d-^x6&Kx0!_cT#oFW52wDwBxaH=q8{x>wZ4;{n>INdY|dNa5E=MBv&}1 zp!y03|J?UjVgIIL6ru{PgzwfpCf>aw4MX09BRWT)JcCf1z^Uxv1A8;quDq}RI2vk= zDQbqhZ)&+EeloA&Mt}slsgf$h9#M)HIIerfphC`Z#kf8Iiw41hpqz}7V35%Cy=*?C z@S|*CT`HaJ4$5RQfjeFPpj;uCow@o&%S9Q-1?P9&PUQ=?s>K{WHP$}pXI@|2JWn)< z*{ATrcH)BZu6kHc0NQKgBKfU`a`f-K5 z-FBt?gC9Y+1mwi9)fbsKJ+UwJBX^FTZ)q=8)!ZkP{@Aw_J+7!9ji}RolgkHk2c(AP zdF1^+u?@7$SzRADaTXntlrhW-Cz2WNfgmSZm@NR&ow(B3@la zz%CW2=BKe*u#gi^Crz_LcxGM2>K0ab&(J9(r*+H~RLR!_w=9I1mImV=kI*w8lzG6U zl!ejCPrR4~eSL*9qwUB{)R2ZI;8w>bRb$NXvL9!Io-UM&$zba@Uhp+XW=S6xr7Z90{Ld3?z5K4e@^5?kG|NXS;CXw*1)5O7%eSsdJGo z&q<1HXkJB$?sNSoNU^AcSSFI}Mos77qVn7lG}$%J(<2ktxeEUJ$M8^K7unnF;%m}5 zEkWNjA(L~Tw?zZCqg@jUna3^(x5mAqI{X?-+6kMS-Hq;3pi-43+fCtceWs`}_cb4^ zA(55xIZa@UKQBSl?!4=CCYa92o;ye$l)AiwK&XZXL*mI1$iRV!OJy(VB#nh0Wt_t^ zQgWf`gz(syAWZJ3RN?%QY)08zl@_-oh1~>a;y|lfDL!USQ!XG}z$wtacy^utgz)~E zC!0L4mj8R0Hs?i#<`PqLyTDxs?6Ab@c}wM`O_`Bn`Iq3`MxF5juE! z*-4;V#2f+^yMIIkGZw1YA?r-E>gPWGj6%-aOfE6g9{fHf*^txaYnzN1k+)BmpNK9S zv(Y#|)Q@k^^lq-McKw{`6=K>P-TB^k{R(tsoNzqV=C^Iu3Dv>Moy4n4S1j>%aQ5j)mpI%ZtiMQtyYA^^dL%8)Zec z+x0%!K|iS`@vR~69!VQ5pt;%QJ3U17ZtjPGMcoB~a0S&`2>taI5u2yjr175TB zw%>V!qru%JZF8E>)XpNmkErl(ROu{HV}oVO^d(OII_oi)@T`Dc2CsuoB=g;%>N8Vj;3{ zDjGH%OMu)(ljT?}ub#{6{$k8m#Qw7jzasQl%GjS4?t^-Ko1`!XNx`0jpcQG;1X$C7 zpO#u+GsIK^rKmwTFeT6%LwOa)&xEn3Ts5rRl<-zC+@k!ksa}$qvtCBCpOg!_NS$z4 zYshX2Jc)?SPxd+j@lx2Mg{a@7AQfFU2s{e0msn231zLNoo#wI@ z)huKvKAlU2z!+3tVbGvvU{4?Rq-1YasGQ>L?QPINx4XgY@!)1VWx0p=a-)nzZ&vJ@ zn=?k0UNxNkQKz~IGoH}&yI9#M0SY06gHIz3_$kAu1&3WWS#JLzE(3M;SL9*iE zbcgt>i=!K0!u2^8|tBgGsgS+ux3m0+(r1#lG zB3>9-&OAv~!xZ_c|6Cj&rtY zcKB}U+ammCt!?i2wcp0WF@s7DssW?t*z@poqB6Qv?qm;%k8R0x7-#!?Gm2{yIxi$E zHQ=U54VoTEFxGd3Uc?vt$%QdVkOKi$@uvQr&>TMR!TJGe$c1X&10YBIJ?F#zy~~^2 z3tW5l<092NbdbEm{?{QATwKNvotB<(kiws(P#3=zIA-E6;56*f%ke2yqe%0Hwh&G&)(su;{+daqhJG8xSf25QdLcdlx znb{80vi&WqG$$wxiDiWmT>wleI$QnCQ~Edch1p#Ldj* zxC2lK*MS25!H_Lg?{>2+5*664hZ9$mW{{xn+C4GWjX)vxV5~k4#Pg>%kL{rc8TVL8 zSAK@)3&ev@(*!%Ki3(H0>lZoGPFmdLqP69POk8k z`!Z=9;Q9IavCM2jWhoFQRoPryFo6gVy&A0rQo2D}vo{PmWh^)k@66h$#BeR1%E{0y z8a(7SxuM8I!}}_5)%d0Nc*&IUO{PN#5$3(E?~|(} z$EBW%m2H6)*pA{Y1F=xNT_T{W&)yOyZ@RvsbQl-2$IhekJU)MyjNKpV?{Gt zh(0$fJrHq?Ht*#=C+9o!wV~(Fnvb9$bpV(Nmu^lH#l>`5eG%4-``z)uh>NqaXEZ57 zhLqW}sA0E*m>E@(T&fGRYxF`*ywG2d3=ui9xvR1jMCOsgqvNuKl!<0)i*n{q1e)zs z9^#>;cPYFZ!`~D(7PBP;*h%!&)5yW>V;G^vbs#1xdidJBLf?p9)(b;|uksyJ2Ii!^ zKjkzw64}LZoaVtHYm&U{>SQ{RC7ys7M-PtoVk=!W&I@`8UGynkJ@52cZXY6zZ;0FZ z2v%pl-Z2BP_iRT6yI`qGir!_;3e>1R1x`;|?E)E)>3Gije=2o&b}kiyG1D)coMoe% zLC@%wZJP-m>5>fClJ)C+U!NfpruDmE=EJUbiC=RxXq@MdF(%vxq4Bntn%HUt zfInFMz|}dmka6bPre2WZdYc94@OJEhbd+=xos_P`R~{38p<*&JmB1YD2_= z#1irXsDU?nm*Qj&b(#Xb^s}OmysRZxZ?K(3S7zHq^XKwjUPQgGRmC5r826e-gF83F zFC1bIsdH18KR4qL>13Bv&-T($9CofSzBGsrjDc|$C7mqe@O+hIJ8;Jky$bpicOJOZ zk)8T_Z&SK?PSm6L{4}^x`BVNy?(Ht~wb|X(ZQkaR_M(ZwRb;Ndsb}tz@a&TKa3`ALi9uYmYpBnLUBIAAZAHIVV0Ja(y{W+9_bV^h z30)^!NWV_U6b;s0GK7z3L@l0@AD>4V?lyTOK3S7(4o=SayxsL)W!^7RV^57DeZ?V0 z4dtY09OPkFJTaDsQ|6~EwtDAk-UzudChT;By~2V?w9%<=!*M@7#Be_^Mg{C+!_1pv z+}+Cx%ugD2?_t?=o=mBNNyM=wT@Grpg|C-3S4cg=m0%wPu@~VHn zaB^a)U7vnD6wCGcF~}lY5heGHs;yZLzyB?aW8^joTIs?FrPQl4{0Ma(ahxanJDdkF z&$^-yERFtYF52-V2eCm>gXn7suWcx{0WA^g{F#abB^=_(b^b#Y48_Vv^16fzy)Dpb)Te+c& zFT{gJsC2VL$|cmu(9x!=DyZpNW-&(oI(?| zLMr&)lR+jtCn+Pic5ujrzgPC5U?V>;LBMqq$?2mH8|y-w4~`NLG(?Ylmpghau1?~= z{Yv6K0Y;tF3 zuA!l~iqvp705EyNR%6UJUX>`r%xg3tN-AVULuj<P8Bus4t^h1Hi(G@f3NRBZn%UeZM%; z%2+E82r0v$?)*qUsdgx)9mXOG;=Yw{Js7Nrl^Y?OGtB19oxdCm7G!mtc>?GH2j80A6%xTX6fTN`R{ggf{;Twx4IivZH=PjxXdW8 z`sgXY1Q+Ucer%&X5mO!E@~fvof(J8SxODOPw3{=TSwLteTDmuvho+LROELyYMsr}q zna-|#4@_P__9-ozwqh~b#;>NJgRyw^*;D;Hu>hq-uR&D*C3W&uafYp zKt3{*T??x#=&WQ?qg7!xHQT=pG^4py4oTV1z-BL`0p@B-9##49GU7F7|v9OL{stUDpawn zV~GqqqW}y~$CkCU^zK#!+h{Snm-DrKwY=p0$M1F`=SWKOT8fA#zbr$>R&4Rh7+{LK z!!Mj^C#BbFbxqd!Gz2`#9GPay#wHuIN*(8e@2P{VG08uBGYf0kZJR`JgC281giS{U z?2OI%7_?XLtHG(K0u0lTyLRzkFln7wxr}JyGz4%_z)8^q45j+51kTQ^)qA!NozBR~ zU5t{6Cr3H3N`zCdKa3P3F1cG|*5VJe-{(M@*mtvF<*0}sj1G5lU+xt`xsc32VScWP z3s>T_rND^>BgeKkHqQl!+~FE$!k_M6U#N&Qa{3UR&RSy?%wvensbV4Y1V|M`vf&aB zxqP_%z>iq4I4Y6ok(K4uc{@B^?L_{#-;rUsf$5{|lRLt)*PMj4#hNH9+A8gZz^?64y zu8R0 z3>W zBk^Ltt%B|0wRWNNAPQVfuSY037s>w}sZ4*Yu%U%eJ6MqMe9eA?idtY)!gGk0uqBA_ z+BUfzL|8vKK+twN9k#LGlko)@t)PyOexh>mp)j<}v`CsXXEEu+J)YW9NVTyXO+VcF z9%OSqZSo*Z1j(8ni>m|ERuUyuS8;{dO@awr7sU`8)AChe>c9}k(*dPLYw-qiU*#Q& zp*DSc4AFD=SJ6%Wf@>Qmw@_yG{&s___w{)PT7&@m|~CVgaFn9EQ2pe(MjJOll8pztcad_(NoDbM+N0!MaNT*)6>SZAThHuDY+A8a{$ign~P1t1C# z)&=N;%8n~+D=AY6C2c0YlBTU+p`Ichb?>+(7QnmqYSX;jv$ySK{#2hb9OamGqEs07 z)FBsB^$cCh2uPzM7d3rWqCP%2jk`YnT#o_%`ee2J!491ZU7oIMg1bCOH)2F=PFSvg zth8cVXG8+h8OfhXdDIXK^Gq4YJF1U6V~mU*h{J%WyT%AWEV?C4UMHXJM-UTXW~=wT z)?UEdu%{0B%9R9vBSu&8NIc7Do^j&2fc5GVy)pNc>-iS6kr*<6sYWzKh7jaZ^l=m? z&d5qlDtwlO-Y8H`xBmyR$r4gR86(ClSG4^zdNqc+;yA2!NNT#^!((D1cCa_hYH*O# z7)tOLihRMIMY=b{iXZoUf8p}ZKQ#UC*8fcZ7XQi2$;`=O^eYaN83O_9 zfBt#Tfxo~0|119c-}?Xj3;&tffo#A1fBq|Ot3UhyFav;$%>u!-<=4MG{NexeFZ>6vv;N}$@A>}^4F9T<8+fq#ulP@Pv~!joLu!wB zBBg}$ktV)udBS0N)@Y_Xwz*U|GE#UTJPp{9Ov&!C#4X|rB_Cp3LPD#G!047Cli5_x zU@O4rSHRWEW4V}Za2Fr53*B*U&(9JTtM}43f~m9a-1Dwu_or`gJVxc9A-D9R*NC&?HA&w8*Ll##7<9lQA~no9=FUA4i>#q(l5Wz zQR^JLahFGs1yN|wGD#g*l{v&*M$^`(D`qgOOsbJ~?mV{sc-g+fijKb8E;yxM*d>+J%A$}#Obc<7V1yu3hpCT`hKj-6x@n9b{1)jyr?Dneq* z`^jD2MIl9-8+mpgN&+fP;@X;(KciS&SQ(wkXY`<>jV(tJ=?=Mz)X%R+|*#WjwZnSu5#mlf`u$ zv$L(rV(%rfwV$_-0#HoXg`Qb>G?VJAjXmj_8tDo{v(FV)KXVt&Ont`p!Y|TQFYg}9 zxBjj)lT(4KY2MQWiyQ3*JK9Ub*j ze@p)>^czhJ!ou8aM)(WkN{)<@n>*qzDi1+sAO|%K@BPuT4s}0djNL##8x|!8mPz2? zIUD7DK;vUg38p7dsToNH%e0;djIWEIpKMJ|cSUSzxb?Mh=CXf0|9#Gct!NcjmJtPrdp?JDPs%vmDTZn> zsaMC&$^NSQX-kgN=GMuSkQI~8X&)`Xx5>P4W^lo2dR^KPp^^i9$eeYjS3%p!;2?He zJj-xotFIYbUYXy1nKwcowSFvN<7)s+sjCUjGYDAnnHYFt@#_A0SfXoy?*V8j|I2}> zUyE{dKWbHzo|oJcxm5_tsd-E#g)7Vjw}M8#35FYBBKBIHmC3jcrzwC87ggm3vTKOj z&UT0!qj~oC4!&g`@rY#a7-%(8%)E9-6H28tzMQV*uG`i+(?Y)VoqySpk(!HuPe|rE zzkiuvE!M=Kfu~3lWLiUfPAnP8n&-uGM_H_6oqw9g1Y^OSC-lT#kljDkuZa~vp7Npm z(M0ldQb_uyt5_(It_ZAb*+alyPOm*{R05ky9J3+dQ%CoOjP=LRX+LxC>?~4N_Oo(b zE(VzBCXBlH3Eyb(U}=2gp3eO!epNxo`@+#_-)4a@vrWsZt8AWc@xGRG&9$3Gu5PDZ=iZ&c zQ7t)oDLQVuLZc8-R(6-$I;6J1$EjQnzhDr1ej0++R&M)#aVa0H5Yjd>)m9uSwPa>h zNsug6aSE>q^6p4I00WE~fIUDcqE))6%6(R;WS;hYTl^$7I=03wu8&&q*w_u*-;e~` zFf=nbG9(xxNiM1V4aCx9jyP*rJ235bz&Diw{i75=ldoiC3bnRA8X9iFjDLP3_p8;p zj&|)qor@wUZ(g;)!8($JD>8(GVbk;E!=wkP6O-xO>sg+I9t}#8CFuHX=||w9PSdp{ z{=$VF|Bg4Axq7m2sUHy4I7C1padf{6EzeW2*oF literal 0 HcmV?d00001 diff --git a/tests/proxmox/create-vm.sh b/tests/proxmox/create-vm.sh index d41f0be..c33938b 100755 --- a/tests/proxmox/create-vm.sh +++ b/tests/proxmox/create-vm.sh @@ -179,20 +179,29 @@ runcmd: ' # --- INSTALL CONVENIENCE COMMAND ------------------------------------------- + # NOTE: heredoc inside cloud-init runcmd must NOT be indented or the + # shebang gets leading spaces and the script won't execute properly. - | cat > /usr/local/bin/darkforge-test << 'DTEOF' - #!/bin/bash - SCRIPT="/home/darkforge/darkforge/tests/proxmox/run-in-vm.sh" - if [ ! -f "$SCRIPT" ]; then - echo "ERROR: Test script not found. Is the repo cloned?" - echo " git clone --recurse-submodules https://git.dannyhaslund.dk/danny8632/darkforge.git ~/darkforge" - exit 1 - fi - ARGS="$*" - exec tmux new-session -d -s darkforge \ - "bash ${SCRIPT} --tmux ${ARGS}; echo ''; echo 'Tests finished. Press Enter to close.'; read" \; \ - attach-session -t darkforge - DTEOF +#!/bin/bash +SCRIPT="/home/darkforge/darkforge/tests/proxmox/run-in-vm.sh" +if [ ! -f "$SCRIPT" ]; then + echo "ERROR: Test script not found at: $SCRIPT" + echo "" + echo "The git clone probably failed during provisioning." + echo "Clone manually:" + echo " git clone --recurse-submodules https://git.dannyhaslund.dk/danny8632/darkforge.git ~/darkforge" + echo "" + echo "Then run: darkforge-test" + exit 1 +fi +ARGS="$*" +# Kill any existing tmux session first +tmux kill-session -t darkforge 2>/dev/null || true +exec tmux new-session -d -s darkforge \ + "bash ${SCRIPT} --tmux ${ARGS}; echo ''; echo 'Tests finished. Press Enter to close.'; read" \; \ + attach-session -t darkforge +DTEOF chmod +x /usr/local/bin/darkforge-test # --- SIGNAL DONE -----------------------------------------------------------