From b72639aac0c1d043d7e0bee0ac0da4a3be3dc6e5 Mon Sep 17 00:00:00 2001 From: Paul Pacheco Date: Wed, 30 Mar 2022 18:16:30 -0500 Subject: [PATCH] perf: avoid building docker image (#365) * avoid building a custom image * fix: remove unnecessary double-dash * Rebuild with -- fix * linting * Remove unused variable * support windows as well * Fix -- command not found * Fix unused import, remove docker build test * no dockerfile anymore Co-authored-by: Webber Takken --- dist/index.js | Bin 21807124 -> 21807031 bytes dist/index.js.map | Bin 16175200 -> 16166478 bytes dist/platforms/ubuntu/Dockerfile | 20 ------ dist/platforms/windows/Dockerfile | 19 ----- src/index.ts | 7 +- src/model/action.test.ts | 7 -- src/model/action.ts | 14 ---- src/model/docker.test.ts | 14 ---- src/model/docker.ts | 113 ++++++++++++++---------------- 9 files changed, 55 insertions(+), 139 deletions(-) delete mode 100644 dist/platforms/ubuntu/Dockerfile delete mode 100644 dist/platforms/windows/Dockerfile diff --git a/dist/index.js b/dist/index.js index 24fbfd204305dba0bd60eb3af6000880cfe6b446..465e9add46b09362c68c44e4b37ed6150eaebfb7 100644 GIT binary patch delta 2576 zcmb`{c~n$o7=ZCJpCCB0DInlF;D!i{xQk1QxUadSrj;X%FghFe&g2#@X<1rfqJ3Jn zXjWRegeH}hW|nQ1m93VowkVd_V!J&rs0Wlz|1{_P9`4-x-R-=l1})zm9P$Q~M8xgw$hkf1k(W@ajdAcE#xt5oO_eeuYZYCF@k;YJX&CyYmb3 zZM|)QLYJ9Y;0z3Rd4sd7&dX1Ac^n1Kbems0##s`z|6o|S-X2}nOmC`CP17%2zxwGD zT;6=&EVK3t>|GfWrF(A;;VLtgRgd(l+}K*~r&o-&B?t~Dp^4 zcNVEk*^1Doi&TfotzM42fXn9{=yT^gjbeMgbGjqw4rELVy4?90W}e~l2eR$sy{^EV z9NFbG`chSZa?8YiI_Xely!%_2bgxDNb*|nB(`kyn#%!Fxy`9 z>$&xYO46MS)m0vUe7|b%DR09(M}=vb%Wa=7(ww@Uh-rV?s02Bwmr$CxUmY645lstH*2K2x>TCrvd+lB|~pRE})L z>0<$vt0x3hbmbX+{(Dj>*(rIoP3w|b#Z?ZeYI)UWwQ1VgR2z-o%&J;;(Z2KR7u0;J z9Jj+ebF|@`;miwEomXSeMU(rNf%<*3oQ7HGbh~Z5PR$!n?OFLpQEV-?I%oTRhCZ~x z60`JZP@xV&5Q@48LpbWeiu#B^B%%-vIky2CA{KFoM?n1G3xgex%_Q*afo#xMj zaT`jo0=Hu&O0f#7aR)TkU@h*%U08>^aS!greOQkTxE~ww03O6c*o4h^7?0plY{6D+ z!*)D|GVH)kJdRx`#}jxGPhmHn#xr;pd$1SJVIQ8ye!PGeaR4vjWxRq{@fr@|b-aN? zcoT2oZ5+lsco*;CeSClqaReXXV;sdN_!OVvb9{j>aSUJKYkY%maU3U5fs^poWT0e_WUyq2WT<4AWe@*KEM15G18m%RDgXcg delta 2662 zcma*n33OD|9f0vOcaljQk`S_xgs{AXganugVO0`P!X6MoK?|b7ka?L5d9(1|jF`q4 z;)boQ+bGw4w{nR)l#ckfKH zd+=fJ)!TM?``3DhTV}%8lnh&m)<_^^HtWKDuBy}lZ}F~P?^2bTH$7`*<{e|M(G@nW zpb?1$O>4u{hJ~@VPSb9XvBCOoBOXX}G#P=mL^u{*9J7L^?K6VuTiU~x=`%J395cOy zzVhSjid1~RC$&GXBuiFK9n3Q>D9Ybnl<(SIl&{9D*YVrcOg+9sy_%PqKHXJ%utSAX z{bzY54K0^>ot3|2Eu%*_ZgG|C!Yp^L-Z01IF}jVjP21raeMa00B-&$k#OPsfLyxC- z`X4RTx6B;ytcjXijj$ZbhD0F5hJ$8%AZaDot8K<(PB;;>yPAx;I-d~@L`<%d(Qu;6 zpMECO=H;WTq<7x6woDHkQn|ewGpCb2{Gd_O{lC5R7-x8m^pD>!XUBX0Kgc8BOpovf z?2ysAqGidVxy&(i$VcAB(=!F_+1Pw|VrJLA0(YrC@TnTD;|1<~Z9TU;Py5%oN9q1@ zSC0OqLpgHP`u(`dAC}(PYSRt}EZy3vrt58|Z_P>{XsZ9rtlpK*>bTh!ZV$J$*r8;^ zj3yk8G|>@u8bW4bJ`Z)2JL=&u5)E+L~_N_nE6w zFOMi+ZRXgH@`OW&SkoPj=-aAY#d=DCyGRdgRtr!4vQ5b+u+sS|TZ!2LyX*7&(Jg&F zC7#R_y1#ebNRJhcCeNwUuB-Nzq@KFQqtEYDle5z!^#h%1oc33{a#Mw`XX%d)DUaS} zsS)~vPF1W68~5a<2Aym@D0hv0hPz~Vjisg>9=_UA^%IsVPTe2N-Ep2P z$F))SMpTu)F`}CFo)}9VjPPeVJE017ZB*4}u1<@p8JVjcQPn8-Ey>)R7gtM};^frc zD&4$URUDr3r7dcjOj)T*ZB?Baxxi**g`)~|kFDzDs#dQkbC>CNZPg;bh9u>Bz~S55 z@2L8m!{2P(J<@%yZrW2iVu$N-uWqe&mu>G$D!7q_YQIk~n1spj!H)(^K_jMO8m40gW?~kO z#c`O8CNyIX=HhsqfO%-ad@R61EW%1D{v*QLJC*o8tj0^wYUz~;|AP_n{YF3 z!L7Irx8n}niM#L}d>41)9^8xja6cZvgLnx2*olX+3ykM!LxV{-^UN|L;MKO;|08km#`l%;}yJ$*YG-ijGy4A_!-{7n|KRv;~l(<_wYUr z;OF=Seu-b?zr*kG2mBEq;v@VCALGyX3qHYL@i+V(hwv%>fq&v(_zeHX ze=vAyU($6sBue6zWJ$6m9!ZWQS8|NRD;XxqljKVZB*P_zk`a<3NwK6vQYslKDU*~- zDkP&Mm6FktF_N*8aS}sPC8?H-m()mVB@-ldl6uKR$t1~SiBIB}G)SgM8YNRD(@J-J1O$(=^;%7g5>Qt3Hwn;j==JZ`Zp)?PeGA7)pdq8it1Qi4B&Mdgx+Z{1ha z5YJxtdao4!ud&r*{KOx$!V!lMs{k?_~g_OD(@fAm6oK=b)~g~ z@xrpf1`oP0*r2DMtOMNX#b85Abr zqfPdh>B2;VH;w2PsHeDHvLhY+-Ke8W;@;iy7d2Egb-9kV*$3!EJty)`GPqFi)3bVt zoM3dJ%?Av2)HewqEH zd?&1Wp4D&NP`Jv-~Qq>N0UWrwuHBxR--qywHECf>KB z-->(csq^Q{0U~41XsJBikVId{%&$qg2S4{B{j?lAip&N~EEoL7m9n5qoL#sLt|Q>VTiFxrK<;JkNix->vXlaXH81W#H=h;WDODFbB)Ka5t zOyQ~1{vcr4h8X(cfWNykkGHY`DAms6eCD)i4|x?wWCezeSq?pfo(d(#awDqOaiVVFqN z0!z(LajBypW|-c{4?bu^!)F>|-I;O->LLC`L`Y#_VRUGwA%Nz!KJP@igMjG;_m?=( z`dJ2@wqK{dG3|R$gF*ft6gkV#gI1hf>zY4*hNX@hX`+KX1o)SnpJixkMb`taxKh!2 zOm@3DK!@K4`}-<{7MIR+e2&3~GCLReQR+7mpm46iquL%_O)+}Vi5nnFw?3R`N9l9% z?ut7BZnS(Z2z=u|@hfT$(0|$csB%Z#dw3W3>djMsjS|1;d4LlYy&qsh<$H}9`e2^H zNG00?T$Rfo=K(B!-)6eB?wp)L4Ymc;R36692i5(h{hEsJ7tRNbvo62nM!5?NptRAl z12q(H;1XyxA4F}!b9`>v0+7Zw3k(tF$}OmW4dsD7Jz0RSTv-4{$6Y~XdpgodwxjwB zaZjzMqcIBszn0dplr_m=RuFjC9dO!P3xVQJvx1!H#N|sGYP87UPb=O>8_A2nBzdYz z7NJA@D|V)2Lys5Xjc-;Jx>D3)U>-LpY7L#^n3Et&ju1gJ(O2_*z1;6DXtXvAd%wIkxesR0HJhipxJiH;E=HI|XF3dyQ zT;qhe&pmTr22|tsJ1;ZDD!+IUw=OeeQ|7$@A37T5?@4bi2lBlw{(x?p_{r7fK&5vM ztpes>3$&w+%Q16-D}bq%DzPgtOG=d$-5hL3B&Q^$0v8p+cX$QR;modYUFgLM^xZQD zw5;jd;9xU5LE?DhZD93}&5pWhVp0>6CeVi0)(6t};%3kntMvH|AXtDRYAIwT#`4BW z;6Uz<0#M0QShdoXz@b^)TbL+OL_R+H`8gN@@$gj|KDK<|-->2U4qVffK-Kbe1aOuvfJRQw1 z1P|C)XsAnX$NZ_!FI%Fap9&2DE@rxu6`wIODT_{yIfHjY-q%>yN6&88yXfVO9|~Dg z{w5}6CS)Y1XQgG3*F?xxCesnsl$@0UMgU0F3eAdN8@`>w(u3kN)mR&rcrE zl24JruSV(=YFh-sb4(G$fcL-H??f+79?(!>k&s&I{YNi|i;KhPq@0%0gmC;w&d|KvYQ%8RT!^oXJDoAPRt-)5k1`aXlV&0rbQoPMX=g4S&| zL@Ugsc&ijdzFQzz-u@FK?e!6$z5FXf3o88xSPITlkJ?2U9Vyk?*PCL$1f}b?1sr<& z7DEGr3K~6PRH@Mf7=5!-F)r#eaDfMHJK?XZz;^Cz14$aa)!<80?)lqMQ8qxDc}mfp zU0T|>6?BC8Ox_Xj+TXT#~0%(Lqt99Sz$3+WEt<5Vn`Wt zWZTt#Z& z?=9PDXkwL`|08Ifb%~)jH3%{KkYShPO>;}|9)EhT9(;I531F?tBGmp2J({~ck-HjR zLz+TG_5q%D34+MPW~Zc3e78UrR?N@n?q^tJRw^vLDY9B-3o%dDQ2tuUPZ4BReh#pB z)a{H(R5|oHW_RG-n@$2~8c?HM&?5F1`PXtBHY_nIAuS_5D=Fkny0;69y;l6$x69z? zlv?%SD0<@yL&(eb{b}bHpaG}9Fc_+P7_u9EiNT-h9!5S^A#XuB48u4zPE5$trdfZEu{At`bhQ;J%9q2?+ztrg7fyC(^>+R_1g93L7PnS)z#8p1I7wD~!vCiMYmhh?-G2vySBT&$I)oS4t)(|zkXyH+aI$SOH_O6=wKfoe#^eEJaCf$$1XtKcQOmUNL zX==p9QG@IAylDLbqaD#PjAmr%Da%-uPvpOT1{(4)!)RJD3}O$a*`1~dD*pCyLlb2p z6j(S8(yMjF#OiAn*ixethJkdwAuh$j0ID45$_ZcsX3nD;pkUzZL|>i*Z|5rdsli^n zh?h=*{#bnvxa0fkN;*;T_kiavNAXQJ>p;ljXM=5Fqf$VGpEg$}RDGZ&%@5G4F)gp` zKubFJ16JJJ0q#3>KLu%x*G7Cw?Nozm`xAQ_({HXT`lF>;rw!c&jH=BZ2j-#Qp3164 z?XT-dST*3w8CX3Azh7=g(|!taBryX@2g=VFQk2$S#yXz3*OaG#iJJLgjl$8zFw$KB zLECUna8=WkYv|fJGz~?~`=u558lAvGRh)plpBsA#ytb#}QxN;{y>7~<1g=BVt4(t+ z0BHH^qGd|o6Ih4-@1V?uiZHg<>_f>IVMVwQJS$| za-+6a!S`dXLg-!lXgX{epH>owq`-3;I&l^H~i1ThRy55$IV=+{!f5|$KErr`T`CtB;{^V zp_ZcjJJnH^s_-W?^!Se)rnC&_S~~O-CWKKe>S3%_S*6z3AQ>k4o>A)McZ7s8;~G#T zY4SzBWlxcz0bZo8t&MiI%!J?i14Amk3B%a~AE~jz zb?4ug0;oC;%Pczf1r{2jcmTtPyNS*A=-jVse5Q%h!c-GbRm@3GTjfQPgVc&*?f{!G zCrmOM(V;s4E51}|R4^^Q3pSg6A0(n-|6rI8OvH;H)Ku7PlnvnWdjCKd!J+Nw$Gcdl zfsd!*vKJ6jd*ARDO}+;L+35N_Z$ZZ$nX+5Q#f8$oYas34-vfG7dSP;Pb=iL6a&2DC zs)T{pIQ;<#(@*86VB_rB!-jC#f%?yxA(3=T27tqaYMU}5Q%p<}SsnE^R3HKtfCi7m z>h_##S3$tfdI-3=u?J{govdO^mpxeQ(2Yn-NleNJrK{Gk{6hP%qp05v>4KfPS_WMs zI9RYVcY5}GsSYxDThl`G7Q}LNX$_dk_0I|&sQ$7>UIY;F zwt!J(oqG{|d>u%X_b0g1;;RMFZtqKAF+v|>VNL%Rq>%8xfcI1K??KMbgp4x&FN}?a z{ddJL%Y)zkQVs2fzlCmPek1vBNOt^2o1sQeb;V zKYj{?>h1%x$7UfkvNSpM8K~WsXAtorLw2hmSHAunbR4kmOH2DgYXm`TNyk5e0lu)UI3#Z-yBKAOk?TP!R%G4QSzVqn@q` z_N2;JI-0Bpg8ni0w#oBSos{O{23-ZOc?*`+O!)xIL)KCo3JjcIy=+(ATW0ZS_g%n7 zUmK~3>3zYYciKp;>FnA2ige6OwW&txVH$%lZK8Q}SSNL+=UOR|ALLt0Mp~+sTuHN5 z5tq1zI~~5z-Ort* zF3P1!#aK%3&$2ncaMD>~-P!kFQ->KYpnX*!4Qgs5!b)}_l{%Op27a|zlPulNRq_=I zrYohoO2dT5ElPO>%A`cVj5@T&4OJ4ita{nv_Db9TBAOEkt%K!;1^1yOG5Ysx4kjX8 z0aWG}(6oY1*U#&QpR3|&8`v)ze!+fO@d=|TJ}9CVO{@*-@n=eaGf{2Hpk-^<6e_JP z)u!ws*a+7oLY=5r&p(D1`$~2+#1{{m+MIJ2m!s*iFUXEu2eWzL>O5B(R!8y?wo-u4 zJ+RKw_b$RtG4Kx^9q)p7>luXa#Q^`}(K=E`4L3zsx58K*HtC!_71fdK9R%TqE}M{% zlMd{@R+AF^;G+abai#fw;AGdlU@SiCC+Vrfz&~n=?>f_U1FSrLa7NN6anoI?yFrS6 z>En3|;GNiI0H3PVQCE5-!SujJ-AGBQMVCfErepJbtWlDMQ5W*57zP`g-jSgG{-1oH zz$h80zc9#SsvyA`rS4Qm#+0(Df!pXQOPLff2{U|J#()nw{|*<|Fg3-3aS`l1Zt(ZWeJ>4eWk9i0f1H2DD-ZcbM;X3>Z{1}KOJ`F|*Q{nOq6 zqt63?z1#s-Pgrx-2TH(3K_Ja!DJ2lp#A`L?8nR?BnzQpJxX>)jF5`@7d;i78s~_ zb#Oq1iJnsr15j!ReI~LcUU*Uuu-xg>Q|=V^bzOUY3zHq-kd~SSFEC6d;o(#saK%Rv zOIa?Kg1ZMOwv3u#lBe=PR>s~4lim<(V48H{|EjPK8!ppd@jNR$7d-oq!`0a@(o75&o%g3D5dc$momtc>1S&uwY5}CsMq&!t7*idmh%`pH z(A-GSx&O__xyZWxzRD?wXqdG<{oQ7F27Gme#bC;%Ig#(1{l_vK2=B z?w>ckDbhO7lk!?&76M!U@K1u!h;~@QsqG|_Yt}-vy`rQDH_I5hr49eD6na;bG>YCk zQOUF>HN0X=`Z(a#wDwX%dRPY4YkzxbAno`Jj!3ABT51xFZo*3DMprtZUP82#E|e`3 zP8J0eLMw>|uH=2c#AJvo>i_}guV~<8#}1$qT-j{!S<*pjL9r*7>1e3~!T}hJ@Ir)H z?Xw|i$j3HRdSPvlBBAG{Ll3>#NqUn$?I;aUK*n-!awlm}<$D*!9M>`h$Gkuk&#lfN zgM(U!xKmUYX#{1?UlqWtL*Xo2e^~Tiq4nSLFZ@rOwkKPMXNkWjgf3= zRzE!WbUWO&5i?i8O#jlmuJrY_d2lm}PvH%nP4bxdk%~w56>mUKjsZ)W?K6edB1>!D ziVyKsui17;8#5+8H8EIGmCP-YT{o$t!k=FCDiwAE3$NT!`o0@LO*47E3x&;GlMJQrV?WIYj@5!)!thWOa)>ul-7 zpQmhSL{AKkHFU9{?Bsc;C%&ZEUWG6mH|sVmS8t3#s8&xYlyV1-F)=|%gj%}O>sx!o zr@-|8q4`1i&TtLQ?{90>L;a<^$&#}lzX)hk^u19wqw!=g>Y@(E(|*+RCiTiNnARh zM&G2&wCs$8BdSe)kes~Og9 zO-L`KkK+%}(xD_pILA|QZ;dsgmp+XsbD_vD*XSvHg!C>Yt}OHxw6GSnaa;{=g9uY$ zTy8uPP_~s6gO)K07f*bsp}KDYseH#mTP+#} ze=s9K#5gI;rcq>MBsJ(C3}02M)SQmJB`p;K5P}Luqt6RYBMMR#U9|MaK(N2uwt=ue z3Z1uIh|x%QM@tfg+<*)TnOsM^FCb2?d5Y9c>EyH+nEE!RNHZw-x3$jZH{59C7_7{r zj}RsWKeP?47y~q9D{_r8J$8(=G%>qW=ivE(|ka9N)~{z zBoRs}uSRq>Dzh}RG8^kB=y3j(Gd8q08wvs6w-~mWuh@*k=X7tv=Aptw6Gf`H_bVJo zQ^x`2SEeJzo z69CK)>cJ#O$qu=~sk|U*eKWal!*XP+#Y7Ph}lkoXD0F06xX(BcG zY`!~no(NHrTU#*^-2VJTh;}13q4)hKfkh8_tqAu2#B&G@5UR}DNsu3z=>I$ks5oVA z0j$Y?QpEJ%t#plKb$Hh)384gX4$qsoL#I`)SZTL zup-C&ckDDNmfjeuuwM9vga@L08U#~^_vbp$@rd;%fsx;BkSk>gmz}psdJ`(gja*2g z7=q~@kAo!xsA=^n_n6U!W=@x0SClg*YU%4`C$gOZAi-;mDfN#9wlr)8RNjkA0BX#; zxwQ(GJkUaT8r-SdY6KLjz6e`I#_u-)j)$dr{`TTQE#Xx1rl>cu+UI9Nj^RmjoP|)A zDk=s?5DWcW2Vp8HGdYv)*Mm?}JWCY`PR+ucvz??m5UCRM&}}wUM~4pz?daI|m7GAL z8JCcdoaCgGM5$6sH)aEFnhF^-JO?P^GY9e#3uYbWKp|oY1W>A_#dD+xYuI6E!-Gkl zl_AxhZq5PNd^7U28$o?@R^n8f%*E%b<;UiD-)M@HL+z;RQeejE+OhE6`vn9!tJbIf zNn_Ge;_0eih6fcd6b*>z0BJFZ;+2IkIq;kYEUNlILxUDcIm**t7J=`ouk}*y&0Z`u zrIgs!cI5YQsRNx{3_9bp1WE>iZC!QTW|k?E?mtTaS-~Pmyr}QbI=Z$5RGsbFU6z7O zRU7&CN;{lM*7$4-f<=DKhdH*2m_Y~F4g8d`g;`0<%$D_t*y0Jc(s(5BFrt03^n1yD;Pk{)UthKq>ZF4@V6^(8VEU}eQ! zSH5eBdB@gdSG(+(A=Nve1N zYBEgtO&zJ-dr-2Ty$i)$c)%UeBSecL4t+2}7x&$OZyFWq(9rjQQ`M57|AwY_wt(>g zLqjQa8wg_57K5$55;QN3Zk|b3k4v(yc_yMA5iK`e1UkV$6C+;mr1IlNd)oUEf>rRU zKlR!MuEV(g>L9&7`c9zFbyPT684dS3(j!oG=ekic(yx=;@tzgaBVi6DV`__7-C zR?|8YjkVnlap03wXnrTUK%$+u9flE0XyEhhprlMD;toR|$KD)U8rlr7Rrh0116%La zUet5I7#Ju%#)p@SjV1Ik$Y1S!!VI4mptTl*;|(Tk$BWp3Szx&UmrhDg(msd8Uc3XN zWl)WDUtN==F6EwNcvgrFOrJnR&)N!BsD8j;E$njJMHtD;AJNgXPvBiszl2>-EziQ$ zU!15>!g;5B3V!DKV17l3>h7liDv14oN^E1)PE0cQ5ne5HWfxEaee|V0JEc3ymsx(- zmp~8G_P*yrjEP@dkX=gtF2OV_LLH=iE%|+7bkKE3Ns3R+PFK2Y{$>fj>1d^V4+3`} z?brpmkrjn1pFhzOkyR`dVxvHv3VyLF^;q@qT?6w9z|hg6FCd+>y73CDsEMt5@5USd z8%!?}IO9N0-vSzb`3mmrDh5(OXIDl41vvUp;eHHnbb}B(I$mQ_MeP8%>PHQ}0RRsB z2F^|p1tZV5X>Qm}rMBe52F{YITYdf;-tG4`A}HMK(q*OG`#8wenB%ZvA36?tS^ET- zXYvUtk&d5`hAXILHjk>--R{}LlQL34t1^Y_3WnBISS<_x%snM(Yy>x?KC>Qp(6f_3 zn?bW4I8*KK!C3iM>+jWjZ--RdEvkJ1K(JK1+BuW zMb~VxpC>aZ3%F;ssmzNmp9G6*dmdCSa~d3hSQ;lvJ+F3|`-nxdr;p9|co@#tAa_1J zFKo73gagUk(a;N^#ONqAcwyOFb3r<(;PbSLz=p2QeB7Hwh-Fu#&6ITN z8vIWm#MzPb(J7eLO!06winEFhFtA{P2@G6hONYw=$QE5nwZL-(9UKHxgWJ6n+!Y_& zgv#CECE%%rAX10kEf8BoCIF_Y&^+$r+{RN_}PWEFb7JqYOrR7p%2vXRH`> zGx#U0IxH754fq~2z2hecUvr$`$pk{KH7I^)Mea>dh&S8fRNGwO0@7-P`eAW5ddw0e>{k(S{X(q6MR^l5f(2P&qwPU zn6m2Tqxc4xF+Zrp1Kcavis$w)#wwm&UdZ%CH#JtnY3y0VTryPu_=_}zI!#6BFF$9w zaLBLl>+n4ei-Io%dtZK)CeTL{F4|G9{%d$5eywXmuD5o1)09}F9gT^A4T&wyiz1As zjZ7R=X9igf6s4>ja@Am)BZjA=qS+uEb^b0l#Yug=3TndtA-Up}T5}5&S;(Kn%TV}s zlqdal3qa3{^o1S-px$i|F5XxeR~LAccN_E-VHTcLdK-+jii&*uHk6;#<)CA+vtiP( z*uJ9HUeHmGVi?M%+=1B0pYJj74@dg$j&w|M`h9d4$ihatqT~KrO8V31zZUk5dbKk)RhX8rAB$gI>BxP+_kql@ z*s*mVwxvZ6Fuda*21vpfTa$L|hmrN!1K`FF+hNs{9#68NOCQ4Uho{ce;~}Udn_J_4 zmvoN75sC3x@evtG>1n}qa(h7S%Jp^hb8PzcE5^PQ^}9Mm zssWBI^@_*JcCV_ZweB3#gHAfYD~~?-@>awX+hLrq)K&hZ*1A{wo|dWvvP zn!384o%(m}-7%Q9?_cGkbQj&wSoNfgpZ+6Huj&&Xw%` z!eC#XT~n9)x9>|MMPXU8j*i_nIyi)9 zrS;3ofY&S}^i^-ys{EooUAcqUHtf!{p>fZ#Le-51jXIFaBaER^qwd0C$!|DON^|(J zWdot&Q$0-!!_=e<46KVa)`5S)=W0(qt)Qn?Y5#I5I6$f1 zXtPp_aL&zEAYo^}gVe-5M1u&D6n_4K8VC@-Yh|oYUEC3*{qj?1daVXNkku88;pL}B z+8+Th`1ixMqhZ$ARc(1oos(etGzdl${!&q$7>G@;9JiP)c2}_<3*ZQGK5)J1-Oax& zf%Yzzfd{EVWFToZMuf942$(=ns_>P08q9;@+rm>_dIszxY3T~U^VdW_ttY5BU}*qw zXHWeC*Sjf=iU*F86g)gRHDWkI+Zb3QY=XlQlwb6%);L}1hUFXTV6Z1@CW0GOFnb9_ zn%Np_nf>j0g@_2mrP#C_owY#tlLr8VoTvdz%jeZWhE1%M3@NOsopUh;&~q2mpK%+; zg!+18lWH9xDo6p7e}c1PNHl=xH$4Ee-4v)fuSWy-++B^X(1rR$gVVRP{I*4gfq22v zXy4U&p6s2}W+o+MU<)qu4omQ$lN&hMURM}9EFmoAuIQR2gvH&>*pr&SfD@3nJ;H=H>2CD)$59b&-cL&Q66?vA7krkhkek;7)HZt8-2;WwmR5R;#bGo zM&vuGZ46Z+1VNy*w4pY(f3l(9GNzQ;!1n94jX|{K!~1aAIscCA5MnbWx?YF26}CVm z*N5%g=`~-YYc(Trbj%o+oRHK$At5b0HH&xr{m&Y?d_wA^7ze)eHny*#Zc}8Sv9XWI z2X4{1fdCotBe9oTNekh5p^ZMjiBU_N1C5QUmAzu0h9C(*5XM9y5vHK2+2WGp4|W6@ zLj>L*mo7{djA;x;bf;dnS)YgRH-ENPtzXje@jp7WuEq3&( zo?SMJ)mAH;)0b+OhK(G&N&l4Z->{<`P} z3zt)i;Kh~d`S&6v$Xs|x?`_7t3H6M#=(PJelbh6{8nA9u+!+fwpg#Uoryo?(3Mwi{ zyzSU3%-F2j+2tNUq4lTzVaCSF9Pnj$IIJxe{T5*#uPM5PMNhaJZtO&FkDTsi75d-x z12>X1aKu(OCf`U<$x36=QkO`eLVCt&4Yll#NEuZ*#2iH$CtG~puht8B*h_9hneWr! z6=P@rYgq$e8s*$`BF~0KBo7iqr+GsF)$oR}XmOCPKtb#DaS2tZiY;!jV55+qpBh3N zVkyD1k+GdZP)p~9+Efq=N*gr9ejl?$09Il{I~t*V&NTsLTtksFkpl{(8bR~s&}a6j zBV7|z&S9|JwrLD{4F|0&jcROct{DG0?#2R+ryCoimCQ7j9U(`;{NeL%g1M;TS5Iqk zR7W+M8v80{cE4suCwmZ4Y)wv#gH?IE9zqs0c@32`1x;l5ZW#iygNmU_aD!?~u1##` zQ;DU6hH;%vrrxUcKhqZ0g?hI$@l7K7k-QCP6(q3G?4C}TgmOwi*D zzpbmN$1(oyZ*LrIjw68IIU4l#kNAZybVbAgh;3~g6|f*0{DIxXJEDQ`pHqk{Jrs30 zev6e|)fH_|VI7SA3i4F(6?3#%1vjzSXJ~R0!?Y%1%vyDXAhdfQOgdX%V1L}62k&aB z<32fKG*#u^)k$hqzBK6I)hNI{JET^E}8;(~pCCrDov6GB;Wx!EAg_rXQoKz!w==jBhet3Zt3)bE;IfAqWg#5@GTVWM zJcss-dbX6%1!SY)>fkz5sGE#TVO;>&EN0@VNicoh1*DUuIYx@oMUz}a>;oJdTkmMB zCXnkIq+#Idu^C|MajW2!$7Vy8d2OgTVm%@Rx?-tVzGe<8#{juQHp4f<0@B5j`HuKb zpOasEP`ho2>1VN*cZ+c!Srk4P0~!QN9_Iie>u%s1%py#uh{p$AqSV2KF{0m13n!x*TTKrGfD zVfdlDJuu*}y{>zap{KEng0^g(VzWr1xvGk##jj(i=`uyjpJ!`_s7Yv3~+U~EYH1^`2U9)J(eb3mwz z;CpNq?fn|4Sf{d8Z7SF@d0!s~Xkb-f5PuEi1it;6bVTgcTs07rwP2tz(7`0!a7+7= zKQNHfKEws}oCdAv-azm)5f9)XoeR=;Gil@FJ&&OvU`a3Gy`7N9CI{kof|IwA7E*c6vP~SBr)Vn+sV959W8VW!w z>RP6uFF!~+VYtUnFYo%+mU<2Y8Asw0KYDwZv4A4tz+O2*BQ*{*mOaaRhy36` z@5bSy{6H{n+y2R8k}|X6$I!B?V>~JK$OUZt?cTzqiSS&7#e;Ud0*p*S6`a_NeXK}f z)|6Hchh8Tpj`j@4JPdk!tTPoO;~JF@N4#FAXGo9ZmH;yxf{4ClOro`K8OI{iAJ8zaGZej{p^81$fkursIzhcVdi9zY zEgdb;aXIoCoE&YOM{lM;i3D?Sq9rL1p9`8JecOQ)%rDbS{b%`3)N|=wH@ce+KrsAr zO{4Uz`54e@Ud(B`9=cP`7|@P{l_91iImgDJ@~wH3o#_14YYuc~&F?PET3Lf6hg6U& z$8@p(U6}MR53L0;^P$KtA2`v)tJjb=DAhQMn*Nf5odD@zKNZ?d!wPwPT#BHaG{_8= zCO=BUM*}C#$NqE8MC@ZrGY;X*LUixkK~oPnT?z9lOAlbeazXGeKmjHO-n$Mly51V! zs_i)6gOcD9w;!z;`oUO<3Gufj_9H#=G*CWEYs z5p5{)cPjY!Wfq$KHVcd1CmY%rZ<0j*&6-q@4bhaTLXB~tX_g03;{a9s;MhdjTXErj zl?{#h={UT`59)p{+gk%=$@uiFC-oQ)faUu`vW<53Ng1*6S))3e6aJvJ#&&TW_mq?o z$2oz>ZUTtC+TD}XqUjew&h&UHdhaj|0N!pIsAVJTKxW4dB)&k4 zr(s%8rQZ6dZBrv>Vmd6_zb(XBCCTh@si`S@eFdIp}j0k2drW1c$E$HQqZ10tSo|$n3Kg1GJfoFSBi-)m-BYC9HSrrv_cg z`MJiyR!Y``Itw5iFPRV4!24N|Apt3%=0j%WoCtWDW`5Ayd~X;HU5I%yzfqFE(AZvM ze%yuPHeg*EUZ013lnabrB}vPS&1xv>-2N44%FJX-s>=xF-cPvZd3G#IdEZBBVonBS z;)DM<)rejI`K&P;b5mtXdIm`pTGFm2v3&G5h1k{8jq%>Wf7;j*PFTelHL7D?q_f{$`683KCP zG-ruEYv^bSS7TB~`wjzue76Al!nVMkaO9A&m1+C;7Ocd-SPlTZhSqHbR3=@x??Y1# z!`%BXcKfGn1L>-6p`n9>QrRBR!!sr5nrfF*Vz6jjF@S`vMOAXq2n{xWCs@y4#h6Y= z`HG(#QocP!Y&VWm0y=mjF*4ujm4L5s4wNVXL9hEUfQ7$nj`z|i5ho%*jla_S6MSm) zQ3!=MJ~pmVK!CMgO8}YrJ$t&g1G87@do}q|{nCSfe&3!6j+6x%SP3^X_liz`3g{L2 zzA)PEFAsF2V_IgGnOsr(E=W-GicvRII>-~grvwIio@>iik*X0J6|;j?1Yp3T4}JC- zCh(u>1TEiTVa$a+w8qCWGRCdwis;at}T+}Mkuh7cRCDdf__B$EG2`mNXJ$BGs5LwFNNB! zCW$kpF3KxKUsOAW=^lI=kXNrlac28Mbut#4BUWVq0AJq+gl3CH6&dUL$8hzrS%M7| z>|A6&){A{0>FnU*ryPYLHYcbcucKer8RwLo`^wlJ;fZ3y_|iWR^}`u&_ycTo;5{#I2Ft2&!om?LG|)Py21Ff>
sy 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 HZpHrrLSVBe diff --git a/dist/platforms/ubuntu/Dockerfile b/dist/platforms/ubuntu/Dockerfile deleted file mode 100644 index 2cb677c3..00000000 --- a/dist/platforms/ubuntu/Dockerfile +++ /dev/null @@ -1,20 +0,0 @@ -ARG IMAGE -FROM $IMAGE - -LABEL "com.github.actions.name"="Unity - Builder" -LABEL "com.github.actions.description"="Build Unity projects for different platforms." -LABEL "com.github.actions.icon"="box" -LABEL "com.github.actions.color"="gray-dark" - -LABEL "repository"="http://github.com/game-ci/unity-actions" -LABEL "homepage"="http://github.com/game-ci/unity-actions" -LABEL "maintainer"="Webber Takken " - -COPY default-build-script /UnityBuilderAction -COPY platforms/ubuntu/steps /steps -RUN chmod -R +x /steps -COPY platforms/ubuntu/entrypoint.sh /entrypoint.sh -RUN chmod +x /entrypoint.sh -RUN ls - -ENTRYPOINT ["/entrypoint.sh"] diff --git a/dist/platforms/windows/Dockerfile b/dist/platforms/windows/Dockerfile deleted file mode 100644 index 2e3c1d6d..00000000 --- a/dist/platforms/windows/Dockerfile +++ /dev/null @@ -1,19 +0,0 @@ -ARG IMAGE -FROM $IMAGE - -LABEL "com.github.actions.name"="Unity - Builder" -LABEL "com.github.actions.description"="Build Unity projects for different platforms." -LABEL "com.github.actions.icon"="box" -LABEL "com.github.actions.color"="gray-dark" - -LABEL "repository"="http://github.com/game-ci/unity-actions" -LABEL "homepage"="http://github.com/game-ci/unity-actions" -LABEL "maintainer"="Webber Takken " - -COPY default-build-script c:/UnityBuilderAction -COPY platforms/windows/steps c:/steps -COPY platforms/windows/entrypoint.ps1 c:/entrypoint.ps1 -COPY BlankProject c:/BlankProject -RUN dir - -ENTRYPOINT ["powershell", "c:/entrypoint.ps1"] diff --git a/src/index.ts b/src/index.ts index ed79bcb1..8459f9fd 100644 --- a/src/index.ts +++ b/src/index.ts @@ -8,13 +8,11 @@ async function runMain() { Action.checkCompatibility(); Cache.verify(); - const { dockerfile, workspace, actionFolder } = Action; + const { workspace, actionFolder } = Action; const buildParameters = await BuildParameters.create(); const baseImage = new ImageTag(buildParameters); - let builtImage; - if ( buildParameters.cloudRunnerCluster && buildParameters.cloudRunnerCluster !== '' && @@ -27,8 +25,7 @@ async function runMain() { if (process.platform === 'darwin') { MacBuilder.run(actionFolder, workspace, buildParameters); } else { - builtImage = await Docker.build({ path: actionFolder, dockerfile, baseImage }); - await Docker.run(builtImage, { workspace, ...buildParameters }); + await Docker.run(baseImage, { workspace, actionFolder, ...buildParameters }); } } diff --git a/src/model/action.test.ts b/src/model/action.test.ts index f537f298..76fef312 100644 --- a/src/model/action.test.ts +++ b/src/model/action.test.ts @@ -30,11 +30,4 @@ describe('Action', () => { expect(path.basename(actionFolder)).toStrictEqual('dist'); expect(fs.existsSync(actionFolder)).toStrictEqual(true); }); - - it('returns the docker file', () => { - const { dockerfile } = Action; - - expect(path.basename(dockerfile)).toStrictEqual('Dockerfile'); - expect(fs.existsSync(dockerfile)).toStrictEqual(true); - }); }); diff --git a/src/model/action.ts b/src/model/action.ts index 06ee1ccd..28d07963 100644 --- a/src/model/action.ts +++ b/src/model/action.ts @@ -29,20 +29,6 @@ class Action { return `${Action.rootFolder}/dist`; } - static get dockerfile() { - const currentPlatform = process.platform; - switch (currentPlatform) { - case 'linux': - return `${Action.actionFolder}/platforms/ubuntu/Dockerfile`; - case 'win32': - return `${Action.actionFolder}/platforms/windows/Dockerfile`; - case 'darwin': - return 'unused'; //Mac doesn't use a container - default: - throw new Error(`No Dockerfile for currently unsupported platform: ${currentPlatform}`); - } - } - static get workspace() { return process.env.GITHUB_WORKSPACE; } diff --git a/src/model/docker.test.ts b/src/model/docker.test.ts index 0c81f643..290d19bf 100644 --- a/src/model/docker.test.ts +++ b/src/model/docker.test.ts @@ -1,21 +1,7 @@ import Action from './action'; import Docker from './docker'; -import ImageTag from './image-tag'; describe('Docker', () => { - it.skip('builds', async () => { - const path = Action.actionFolder; - const dockerfile = `${path}/Dockerfile`; - const baseImage = new ImageTag({ - repository: '', - name: 'alpine', - version: '3', - platform: 'Test', - }); - const tag = await Docker.build({ path, dockerfile, baseImage }, true); - expect(tag).toBeInstanceOf(ImageTag); - expect(tag.toString()).toStrictEqual('unity-builder:3'); - }, 240000); it.skip('runs', async () => { const image = 'unity-builder:2019.2.11f1-webgl'; const parameters = { diff --git a/src/model/docker.ts b/src/model/docker.ts index 39799561..1ded47cc 100644 --- a/src/model/docker.ts +++ b/src/model/docker.ts @@ -1,74 +1,67 @@ import { exec } from '@actions/exec'; -import ImageTag from './image-tag'; import ImageEnvironmentFactory from './image-environment-factory'; import { existsSync, mkdirSync } from 'fs'; import path from 'path'; class Docker { - static async build(buildParameters, silent = false) { - const { path: buildPath, dockerfile, baseImage } = buildParameters; - const { version, platform } = baseImage; - - const tag = new ImageTag({ repository: '', name: 'unity-builder', version, platform }); - const command = `docker build ${buildPath} \ - --file ${dockerfile} \ - --build-arg IMAGE=${baseImage} \ - --tag ${tag}`; - - await exec(command, undefined, { silent }); - - return tag; - } - static async run(image, parameters, silent = false) { - const { workspace, unitySerial, runnerTempPath, sshAgent } = parameters; - - const baseOsSpecificArguments = this.getBaseOsSpecificArguments( - process.platform, - workspace, - unitySerial, - runnerTempPath, - sshAgent, - ); - - const runCommand = `docker run \ - --workdir /github/workspace \ - --rm \ - ${ImageEnvironmentFactory.getEnvVarString(parameters)} \ - ${baseOsSpecificArguments} \ - ${image}`; - + let runCommand = ''; + switch (process.platform) { + case 'linux': + runCommand = this.getLinuxCommand(image, parameters); + break; + case 'win32': + runCommand = this.getWindowsCommand(image, parameters); + } await exec(runCommand, undefined, { silent }); } - static getBaseOsSpecificArguments(baseOs, workspace, unitySerial, runnerTemporaryPath, sshAgent): string { - switch (baseOs) { - case 'linux': { - const githubHome = path.join(runnerTemporaryPath, '_github_home'); - if (!existsSync(githubHome)) mkdirSync(githubHome); - const githubWorkflow = path.join(runnerTemporaryPath, '_github_workflow'); - if (!existsSync(githubWorkflow)) mkdirSync(githubWorkflow); + static getLinuxCommand(image, parameters): string { + const { workspace, actionFolder, runnerTempPath, sshAgent } = parameters; - return `--env UNITY_SERIAL \ - --env GITHUB_WORKSPACE=/github/workspace \ - ${sshAgent ? '--env SSH_AUTH_SOCK=/ssh-agent' : ''} \ - --volume "${githubHome}":"/root:z" \ - --volume "${githubWorkflow}":"/github/workflow:z" \ - --volume "${workspace}":"/github/workspace:z" \ - ${sshAgent ? `--volume ${sshAgent}:/ssh-agent` : ''} \ - ${sshAgent ? '--volume /home/runner/.ssh/known_hosts:/root/.ssh/known_hosts:ro' : ''}`; - } - case 'win32': - return `--env UNITY_SERIAL="${unitySerial}" \ - --env GITHUB_WORKSPACE=c:/github/workspace \ - --volume "${workspace}":"c:/github/workspace" \ - --volume "c:/regkeys":"c:/regkeys" \ - --volume "C:/Program Files (x86)/Microsoft Visual Studio":"C:/Program Files (x86)/Microsoft Visual Studio" \ - --volume "C:/Program Files (x86)/Windows Kits":"C:/Program Files (x86)/Windows Kits" \ - --volume "C:/ProgramData/Microsoft/VisualStudio":"C:/ProgramData/Microsoft/VisualStudio"`; - //Note: When upgrading to Server 2022, we will need to move to just "program files" since VS will be 64-bit - } - return ''; + const githubHome = path.join(runnerTempPath, '_github_home'); + if (!existsSync(githubHome)) mkdirSync(githubHome); + const githubWorkflow = path.join(runnerTempPath, '_github_workflow'); + if (!existsSync(githubWorkflow)) mkdirSync(githubWorkflow); + + return `docker run \ + --workdir /github/workspace \ + --rm \ + ${ImageEnvironmentFactory.getEnvVarString(parameters)} \ + --env UNITY_SERIAL \ + --env GITHUB_WORKSPACE=/github/workspace \ + ${sshAgent ? '--env SSH_AUTH_SOCK=/ssh-agent' : ''} \ + --volume "${githubHome}":"/root:z" \ + --volume "${githubWorkflow}":"/github/workflow:z" \ + --volume "${workspace}":"/github/workspace:z" \ + --volume "${actionFolder}/default-build-script:/UnityBuilderAction:z" \ + --volume "${actionFolder}/platforms/ubuntu/steps:/steps:z" \ + --volume "${actionFolder}/platforms/ubuntu/entrypoint.sh:/entrypoint.sh:z" \ + ${sshAgent ? `--volume ${sshAgent}:/ssh-agent` : ''} \ + ${sshAgent ? '--volume /home/runner/.ssh/known_hosts:/root/.ssh/known_hosts:ro' : ''} \ + ${image} \ + /bin/bash -c /entrypoint.sh`; + } + + static getWindowsCommand(image: any, parameters: any): string { + const { workspace, actionFolder, unitySerial } = parameters; + return `docker run \ + --workdir /github/workspace \ + --rm \ + ${ImageEnvironmentFactory.getEnvVarString(parameters)} \ + --env UNITY_SERIAL="${unitySerial}" \ + --env GITHUB_WORKSPACE=c:/github/workspace \ + --volume "${workspace}":"c:/github/workspace" \ + --volume "c:/regkeys":"c:/regkeys" \ + --volume "C:/Program Files (x86)/Microsoft Visual Studio":"C:/Program Files (x86)/Microsoft Visual Studio" \ + --volume "C:/Program Files (x86)/Windows Kits":"C:/Program Files (x86)/Windows Kits" \ + --volume "C:/ProgramData/Microsoft/VisualStudio":"C:/ProgramData/Microsoft/VisualStudio" \ + --volume "${actionFolder}/default-build-script":"c:/UnityBuilderAction" \ + --volume "${actionFolder}/platforms/ubuntu/steps":"c:/steps" \ + --volume "${actionFolder}/platforms/windows/entrypoint.ps1":"c:/entrypoint.ps1" \ + --volume "${actionFolder}/BlankProject":"c:/BlankProject" \ + ${image} \ + powershell c:/entrypoint.ps1`; } }