From a61cbe7172cbc8314ee6837b3048b7ae0fb86385 Mon Sep 17 00:00:00 2001 From: Anthony Dahanne Date: Thu, 25 May 2023 10:45:37 -0400 Subject: [PATCH] Add blog post explaining how to manually test (#59) * Add author anthonydahanne * Add blog post explaining how to manually test Fix grammar Co-authored-by: Daniel Mikusa Review comment Co-authored-by: Daniel Mikusa Review comment Co-authored-by: Daniel Mikusa Fixes after comments --- assets/images/authors/anthonydahanne.jpg | Bin 0 -> 25850 bytes config.toml | 1 + ...ly-testing-changes-to-paketo-buildpacks.md | 252 ++++++++++++++++++ 3 files changed, 253 insertions(+) create mode 100755 assets/images/authors/anthonydahanne.jpg create mode 100644 content/posts/0020-manually-testing-changes-to-paketo-buildpacks.md diff --git a/assets/images/authors/anthonydahanne.jpg b/assets/images/authors/anthonydahanne.jpg new file mode 100755 index 0000000000000000000000000000000000000000..3a90a8d57694c42fcd306a869d70752f736f0810 GIT binary patch literal 25850 zcmbTdXHZjJ`1ZR~Afb0nBw!%X&{Vn!f+PYV0qIphM5+`u1VM@=2?ByKhEPO|5s_Y0 z1O%)gH7G^8hzceTRTKp5`|vZ`{jGBUDAWfcWgjcwaCHMXHpXzXqrTH64FLh0<)H83&gSa3r1f&gsl|T?B(7z5)F#v!hK>w=& z|91m{Ay5fP7+gwPMiBsmAP_JVA|U~VZhm=o^Bn+Hl2Fz%B1x*a9ffJfsv0x1Z^1DK z>e|%YU#(zGg6S+N=`C9k$Zb1z;&gQNOwG*q;t3WuwsvHD3e~~G)63h(_mE#mXjpi} zvB;>nQ}GF>6O)otFQlbsT+Gbk<>cn&UoE&+SbV#rw5+_Mvg&?)L*s*{=9Y)g+dDeD zx_gAZL&GDZW8)LACucs0#Q)9C%`Ysjepy@J`1O+8>J z6at0)j~)>C^yUwu1eMS-l2j(S!H&kNXd5%(st2-f)wM}sOx#!0g6XfMw_r_YcC7x7 zr2nPp|D7P#|1U-VN6`P#^KTN6g@85(459>B17B~A@t;H%^Yv<6SI6?X?t|c=EC)BD zylMk0pJ^0l2hJkulzZ4&6fiu}cIcF}`q?--g=8thDJ4A>uUDOvrAyN2XI>Rv#G5`! z+k)H~Y2ws}ENtn5?CTRXt0$bVV>v3dhlmZo{ghuUh`#!G#Fs*Lw$eZLeAYdWbGcE8A9^lc`$+mH z{q*D1CQYi^xuK2g$iMOD`g;U%4V-z+jicc`O99IbFJt?oy?0_Et{<|CPn%2ZLX>vK zU6*k#QJooMsJahH`vHD_4z4;Xs%~~VMSw?TF<(cq;dbr+>iQ6mg}Xx+By{Lit0#$_c{ zozz!Os?L#5_BxPi7S&mH z`8Yuoa&OR=WUp?wtXe&8IiwVR@I_97i`n7SxEy}+XbWkItoMlJEa!)7T zZnQ*8lMT!j=@D@DV?;k5rV-uv^nmC1o)oDy1>~IqD_LC2g`gdonvLaQN>I;p)P7nt zxnCP@b~{-yzwAaKO+QepwaUD*Risv~h^WE#6*ri6T6#$6n7ur)KmU4RJfKsm%F1;G zXT_U(q=5n5NE1h*j3d=yb6kpf`CJ*wTir+n2SsCkJ9_l+Gqb}5q1$RX(Oz}3o~V&t zJyW%v#KlP2v-Xy+{7Klg-t4w*S5GH^yof@q005M!HBKkH&TU^=|M13r6rCC!1 zeoydA^K6!h;Py$L%%xOKOnAF46w-#`S^P|}iW@HV3C*pKpjlC2zb!T@W_2->ch2oy zJXx{jLEZf=Ovay?V2TDMh-@-|z=obiR@eQGr#I-YV(u0OQ%jMwO$TM5X7?g`L}>=`;FlPcr2Jqw2Z%- z6H3(#?qrJr=Pn$eFaXFu$r!q+_PXH-wYKz{tM=uN->u7_I(96d`5sYL_A|5N7nlea z71sFRIC)=Q?#GOByMjjV-eSVRrY&K>30xEMg$hr>;|MWvd&kW;Pq*JoX>oZYz&tMS zGt189I`9A-`$ox{KoY*Ki#l&x+@F`L39sl)PzwR(w%;%%3gN4LMG657fNe8X~yN{2Oyr$L9z2ajen#=N-$)XctMncm*6Qxe-&Za?TM%4!{X z@#tV>jm$+-u-vI88E*8pM0!W|Pw$m*cOPT9d(eLXf3#T}U}ojE=k!#5xF|n*J6Sou z^r9jl7f5RD^vN`o@F#WYBTZ}r!BYChG3q&n`6R{zw2E8JtamJiM&7I#*&gHF7PEGxblPB9bVOck2mRq zHtDNC(WXIcJuyENHNE*yBOIsD#id(Sx2L{TA2vR(^9YlRPNOyJGZc^_JiwJtzT#I0 z4xnP$!!=Fx|NQ&)d{f!?-i}NQU<5IWV|CJF#q_K9zK>kXEMnLsB@DYEj)1aAIQ&3B zwu5M8u2_Uj+g%`&*qwNn&)tM;91m#`TZGutSy8G2K8XUbfUKv~+1jo)W&?uF*{~pSU z2%iV;ok6Wa`@;vzS$6K}vnu_g{X?E$L(mig#O#mdQ72VSl0$TAUoHM3+&5b6wlE&?&aNyJM^VPMpNIN#Eq&hb8#5j-C-J0 z0Gijcy(rJB`B*A7;Bev~Ro1i98K%kz8fKKdraW?1O|8Xy?<^krpL2zqgB-dP%m^MD zavwyi&N!*g5E+~6cCgjWL03Yj1Z1b`3U$^?zm+0?BYb?X#Dyp?q8sn!OEu4we6;Lz zXx7tF@lDjm`T9iqunQGSZq9v4L3n$%wpm8x!yx!pth}7py7Ig3?BAsEPmg^*NIVHL zRP9#2%_=s-uF&8REH5sHCl7}pYcxN7df)4d-7BjW;*Hithmo+^4P0ZFyI9Df;iP)< z{W%&e2+HKaNd0kFUgo^d`gCSj2yK^k+DngXh#d`~y758Yw&>K}oX1?_{a@)+HTI3X z*EL>mv$x!wp*;(_5zKRBeK)cs94KOu+Lqc^oSn%=429b7Ha3(RjE_CKinZ4W3K`^F zP?WSknA2^!%{yDqJ}f#O+I}oDOkT?U<>oZ- zf5ThCcD^1j@yd1>cFBjufG?J-gVcRh#>?Uc_7@-!OLx^CHiS8_EJE3T&x>4~pTG{z zmIbDAfrYGCO22zd(1lq3sf}Ajmq#kyQpc?p^3*r@~+MqfjweHj~+nRXoc%YoDW)k90Vn)P@#FK{+WAIl>LIQRmYe zgsSHQPFL!mhl2MFy4RgisJwBq&ClzX!wwz=+%uh%@9xE+z^ZPpS~>slTR1qYrBA(I z`i7cyTE)gZcIax*dZiIrr`h*Pgz9lMw5n3)RvE=*WTh%y*Qk#`)(OfSF16(7UUIS0 zOU@;?XWeNRr>4w=E{&3>^6hpf!U{LzmHeiqzfVG6_Eg3q)*cw{Y1Wm=e&r)wREK7c z17P(D?MBOC$Kj{rNoGwqu&hC&jL?!GxxRKfAmNCT-CmG7c=OPTcfoV-X5)ITLf1Mj z1RCCZZ6D8YA6N=k*_Sl@`mq0#FScvy7amY;y2@i^9eJG$+zv7zk~MS&-95Bo>ii&P zK%d$&8Pw(pzT*hMacJcZc|aCF$4S0qlbmwna*d-p5A<$Y633$;073bcwWYH(HG5>p z0CGUG5_8{BA`^o((jZykx4Z5aG@g9v6+{KrksIB2e|!#j;SoWf3gXI>72Mv{fU-K|blDvvDj>a-Vn8q&5wH zlxGY(U_VrUGW38tR9TXUOYM%zw6~!=i6>k>4CyIR*2rZuq@a)iG)KQR-fCA@Q$&jF-(W-8R#yUXJP&hjah+J|G z9Mw!J*DdR~B;%e?kzevZv)8B!Ggcbn$}{o2utV#&PS0)3SiyzjtbKzL+0JU)3KPw; zD;5Jh;+*>oRXx)7S}l-DWD|?87y3yYeV*mu2en{QH`5viU0pl$mMk4B9q`uAfx4>! z_Y<3(Z)|zX_U_BgZ8>x%+Qym%M8G3K`f|Mi` zWsZjel7ybN^(BD|hCJynCp|?q(Nk=GM?tnCv3$@VIF2I`*YWlT%0JPh^V_$jU7a1V zZOxxNb1MOcJOE3*awO0q_@k!sszxqrap5>fHxHza;7$~)r&1%L&mE{iCukO4>s~JxY_!=gUawuBHVIiq`&>%580#h*; zctL;4Kl-ih3k5-~dj0Qte|^S26gY)OoU=+Er=GOF0dD?8sB#M^eg5g#g9pYWl?amu!DJS8I zI>TQ(g43@RNAAFKjd+qK!g;&~71D^?6@#zVpO`Kge(YFDPBVzOM>H=o=5+(08zqW( zt2WUcxLJ;Qo@kfu9kx~d4^qVCIzr_A}C$4kM`+n3nR!~pb+i>IEptp}s7*hI)7z}O}0p;q~ ztcJ1U7HLrl>av%#>vLEokY-*=>{Rm4X--@h7&pFLcsj4`f%L0%t$?jd3(V}NYMguefP?qF;oVGUaG@N2 zThEBARpj&Qg$c(%$24?J91DX{y3Y&cbWAVo+O=aB0KVZ=9?sa38^0O;09uJ@Lq;hY z&0P&VE7JMYxDtcTZT(nzG9Nbu#&bSJi@)Yd5ajO2P^mhhjx}CUfHNj+^M}hY@_PM>?8IAbT6jJ`hI^hjn3fa1`5HMCgGd^;nIPbx; ztLS|i7olf~JzdT~H^D0D&K=`}LA0mkKS3^vEK+w%ze(1MtDb&2WVv@29+tB8jg6D^ z8Czj!MdC*~93c)7G)5d8`Y^aY91)Fp(*Vil18_jTy|O!IwQveZYlZB8?0MpP0oTw1 zHC7V%u^Q@l{De~S@mA<5>%o+SPV>Dx16Cvx2TGmL@C+pG7Ve2xW@bV5pt6z2SZ8fK zX7u8gnd>9*p9j<=8lq$2m*1W#Md!BdyJAJeV+0qr)mPr)jffDC;aeI@*3R@^X)e+Q zsi8nS`*7%KssG!pM^=7Y{MNz=$;T#b-M$zFlBeM~XllQ`2B8%f8BwC0VVcglMMbtgb7zoejg>moyTpQ%D{xLj~l#KfZMn68YTSbuaVUfi$Q* z>|7$@uJvk(l6hmX!Tc4KcNg2vfT`Pc_7`!j6$zE4s{wImdX`O*FOF@oO_SD^e&hpG z%uqB8iO`T#0ls?nWO8LRBJ24(%aBlq=AVGxL7!^1;+8q#uStc-CkyE!p>9?y+rm1M?@?2Y&}@jLQnB<|VLp`A1scIfPFLD@~6 zmdo=ycRc*ixXkCr1vHk3?+y6P*A(zQowja`qhs>aFevFPl|0q2mfn)3jv44}&mTY3 z>rly>c!<^QjNAIj#(R)V4;r7aI&V=Z^Q0qaO!rJ(UqFNS*I2DSvh0loV#kz3;N|=J zyC+c6Ll;rr?&OLg)#+p4t7^=9MZ=XqDVQmNEbRm~fg`Pq>D-A%=@jQPC3fx5Q3VBh}AkR4|`%hPIM5Pyo}hRJgu`x>a>qCcCl2B;(rqcsrTFKP}{Xteu&CNPW7WR zNiZmw1hAxj{~S4T*ePcDR<)^JaS)k|*WBpq)PH@%k#m60|9MvbR?BEm7A`y$PR?l8eV?!^v;oRa?fy@v|06?m_1?qIM25|88r>O0O?Gsu}FRE(O<=-vDsARX=yG; zA7W$i!I*R>;b-5C0ga_QiC+}doc)95vi->3+75GQ)7b$VpItS+A*qLf`>yAfDfz9Z z)J}v}s1`jy%j?UaR;$Tz|0KU9o6rm7*JW5GGA4 zOYPhYI(Ro~A!rjVejGlg3M~2^9Ml0l-*l#iz~;y*i_66WzzImlY2AK!>)g%KW7|T| z@p@A%IA+9kbTngY__YjEhp)5dZM}Igl$gD3?)c6lR);Q0giA|)1o4cRsa;f^Db)5zL!P#natuaj({9xv3O-ZF&uw#cgH>vIp$+TTD^TbKFZ#PThI?$FS}S2s`w zvd2ik*V$U~G*eJC7GH1bR&kERhht9iJ>U-${zyNn_KbkZs>8`r3@R zhQK_4W^8WzrzHi;8L|CI8nFU}{ZAW7jfeN^SJoDOu(m*NqkLoaDxkARPE89EO#>(E zN`xgYhNxnOYG@AErOf4w=F<%a(Lqk)L`6H820*V2-$gF_XpbyoF~XoZ%MhqwDrBYl z{P7E5WZofX_zAek@^5e@w)b21OX18vz^u+>UnRh$3fEC*^-3PbJ_snzZ3iF0!|D)o z+pperSO_1PChJ`|f!VYbes~{V{#~iwa=+zx`Ko*b zuSW`mTmFTu5`?uWj``RQDjw+}xc#oh33p_;(aLqgul{T)$>53#V8munAWsv`M(tvj zVx`(?9sCFlg}Wz`fBhQrnb)1)K%S*}+2aWSf4#@7zYS`#IM{A-<9?k1fgq9LEaFL$ z5dA4Wj+M$-I3To)$KDLG*!Tx5dGE>CrTGu=<}JEkmbf#D4NB*RU4(}0qe62AfDnz{ zQZ3kUaqgkihddw?4suF&q|n@9X>n) zJy<+6wlAaEBRv6L$7q>)Lz<$s1}Pd#^+46X3bY^J5Oe2q9!q4|uJozrx1o7bt`_na zQkRDJ$`$WZ_M&tnQRfA^Wkae#ACwWXEzWSw3CnY84pwf*Nwv~89jCYI8&GHdkO{y} zBV#=bDiqwtnaW{Li|$(KD{bsLx_;>fUi!|R*`V%!q+W>~}Q@)_>_`UQs zEOai0?He)gtj8XEcT^%6ZU}5F{cs)pP|Q98JLWcD9C>&$`bFioLuE1G4xTd+kbevS zY7-rch`W}u48z#J$=*)IaB&Y3IQ0*(7LR7+YUive%FB~UT_&8T<(%@H$(I(L>=VKl z>tO< zbHss@z-Q{$_sO$w+?F3LxZR+n@?t$JFYyootV`p3A_#?er z^o&~?E@v0IPk9=lD$46xYicV`V|W3OKG*!ukp$~ni^by%{`j7XDAIP&qp|F?p4^&~ z*HCWU>^ zJ1Ya;suo`>q?u*k`!ur2F%q1>oAD!ywnUT%=X2v6DUeOXT`mpP+4N``Tku&HY&|eiEb$h*8?5d)lWpaf_d`x6^MQd z)QYLwwWC44srh;bJ|U1|CVRc#BIMmw-{Hd99mj<3@HM#Q{Z#JL5|xqU2q-Oji+U#d z#>^uxS1AA~gES`Mpfr=z_W)ayg4(5V$)mbqN4tqRfaOY(69?+LEWS?1_xVQtB}#MW z82I1cm;ajO)_3yKUc=GHp)4{5V)cdEJ@|FDp~(oC&gq)AkcA9bN!rOARc09tg1W6F z%rc<$8`H8I9||BU%skj&5Qvk0Q(OV9!=rdEO&&M93Y$MZ%r<68B9k{@H`fZYe8~tC zv1Y6wYJzEWxkx~16Mgw@=Ph^>Y0%>Ocp7!?e5rYQExjlV;ES2fp&~%@@6`F9OMAUr z-Y9vxhX#WgG~aB7MF=l(NkD;4dp*$dJJ1~AnutO%`AYAv%<316eClX=aiU6cm~}y^ zUjd;(lfqesqQ2-Ebba(6K7MGA}o7$PJi^a8lvQidCm3w5`&J2LSo;NGp3MU(G~5Xy)ztAS%Jl} zjN`mtC$GBRmybQT%_K}#sy|8+n!}*!{jM^}x=>*S+ca=JCS2T)8Rc}F#RWk$BF)(x z-6?MwTdlNH`DljzmQmu-&Xcd%!S&ZoS>{>@H<$AdBeNB9J>GvRoLh_@>===naH2iD zV|zjT%ja|jsNs)(#^^<5mETKc*Vr$&zHR;z>+_Kbjq}uWdsap}tA9YqY=a2?Zq!c< zR1UsYVfu4VX*Ont#&H^3PRPTC?q%0FUs3(&?mn(Hw0pA;wk*11~;C{@jEfJ@;2_X~_73=4A5%Od3QA5ftz1(L&88Tmq@v+9X~*rB2?R06(j z>5txr3e>4`RmAk^&-Nx0k(kS?rOQuqZcQC_?z!d3e7xF&26ek9Z&u1o+mFN(N=NVb zylCR9X39ISz}tajSsF-4z%kj&zlnn$hsPRZl3tkAoW$}DoLe%SRLy29OHP|i6u$kk zdrQ!{quMMf zk8HkJlZaz3k``|R(qSDSk$#&jjWkaupWp6~dnY5sB)jp^E+a2>+ZaXedm{|Mf+O1& zV_DMcJ!-X)33RU*7q$tGMw1%%~rbJS@^ zni}~F2#7M;mhVM-7G>RWRxZGWSWA*12PYZ&{#_&rKw>!B%j{rR>hLM{Wha ziQZpu#whPnAkBCm;ApAl+fj zRiBR~7vUyu{^wV9bt*%?D~TPF?PhAD5$z{qmv2l7rjyX?oq7vw@#X2*g~F)ftr)@& zE#yKL`;GWiEmd0zqf3~i3=G}=(x#zrr(a!+I{3ammU6sjqt--meYP+dQdB$>-1ykm z5MO)U3xo1Ph=8o&CJnvNb(CAF;tx9uQd`NTqVjtm>dcHjbMq{HwpP8_!WGk^A3qFK zP<#2lRYqWq@?IB*n8pr-rQ^5f9jN+^4GYQLbjciz)vykZ99Vwx+KrHw;oZ)w@vvaH<|(aNC$eu@q45F$t!pAK$(M5+VME^MfF>$Q}fQy)8xq-)*^q7iHZmM_+Nc z(Rz^%`lLtV0ald-6BCeBmo9mG8zQ1`=*olF4@_RfGCe8>bhVL!g>2Gu|5) z_CUiDb=o+9B@p*}?YoED-sd$0D5NvadH?F;?GGJNZ(;Utpf%@KOGsS`rIu{SyFx!m zn1A!>jv3E<^a>m)()ivN-VGJ*U!L`Sd*6f+()tx4j=1a6)nv|6&`2Il3YP2spy0l5 z{cnTWh>G!lb<|e(qOQ2SSix^ur2!3ljVFsGlToJ1H!50np`UtiJd*hIz!8td=*Z$A zI$@3t5?n}5`3DGADR(evm>eq+&9gt@(sVc3+s29C*q1(`s+~tSMpOV`DPb!C%aB@n z&-A>^wGr1o>Y4_mdOx-GCtAw809+WN-!9&r=k7>p{u4Y>3#u z%G+qG-}T;^XoV^}fQ{xMO_;%W(d6Uv9a}g8?a|D%*IQ=24G=(49R^KHBxrmg-VOWi zrP4XQv<1ot^kCt!y>DA_sO=%CUPe6j6X4OOhbddf2+J?@KwxQ z1NC5_+b9e@d5euoP#R#v7R;H>i@MzgJ#OZA#kmKi;mS1|T4z6J2S3#3%CK4^rc!@i z87q3z7aj0MDuPG>aajuZIl>>O5Z+*m{q|FN)*0u!8rkc0%2zzCRnusZKR! zyKa9i&9dAZ;4u*=cwOFQNY;0}HqoRkQj3)YW~(~AxvQ=($Q7p3QHqhRV>`t~L#b|| z!^}RdfE?40BSFJyhFD3y9C?#`11nJt<5d|^a@{Qh;Ocj84Yd(%i+j1T-9_9Rt zqc)l(Oc8!zBE0mTs^uClfV;VR820D>Sj0Jd>J(|DLZEZJ^X;76N6y3^2n>P8f3+T; z6jVt`s{4?tr#U~Ye#***SS3q0 z6y>9Hve|;<&B^+1Lk5<$aEMG*r%?$5MJV}HULtadsM2*18!v6b7gz}9%KrgJ7JMYh z@Xx}kq;S28(p1rniSB39`$C4x9h#KhEAxXy+2g8=6j}DSlE4D2tVhPdWKZKdB2C@} z0>KyArEqu9Ojs6iob!94IPXjp4UL3>8PL$=(TZVX)SpoTtPb}(>-h8IVR^}S-~Bwl z@vN&X_F)U{Dv7A7G??XyW{{1XyMXSfKJ7P1j>&fqO3&=guGp*t#spPxC<2(ht6RI0(?m#`QbL@m>rJr}mvyS(%))U6CxzVIh9hl(3|{ z^IlU1FnT1-ZjRBBeY?**qF1NJhPR;pJMbt}bk|FRA?(Kb4F8qS)LuEk!4PlNi0H6` z_tSB!*qdDs1G@=lMTR|LUed8FNibhf4iWqV=FCiYIDktuW8EJbTuOIse?U&ED*ata z+#cT?Oa)GfA)mW{{3m;j9BQyHw$I^*lAv3)2L{b4JoW6fMg^E%>h9i4Z!;u*X14x~ zzm%Nzxy1dJBWREXYW?iLS~2zLA~uwD*5%7|a9t_+s#}3tjz+5lsavCUfHYvk=QM!q zWVFI8fh1VPtiaz&*EaD{*ij*%2}7^4&o!dv$3D4nJWt`8Yj5plXYQ`xnXGxIwTQhB z(!s6ajk}y`0 z%%V-~XF8ZNTu+p?@WAoO7j)Gh`^)>&rPaliAUIfll0g0 zI%wAi_r2UCteE36*Xc|OH!udKvpH5jzWqIanaZdW&tXxr({uAFfAhAfMH;ch+3Y=# zVZqzF!JqEnVRJ6b4Z@}h)(wU$+s<6leE34J+nPJX`cA2rW)KU(!(1QmLj$Oq6 z12%?~6x{(K6fl&6ZB7YTqd|{`bWg={~X9Y+fZ4L4jocsXlp#E))!JgGOMUSTNU%Pe@NTa(fE9#@*@83wP`r~6J- zU?s%dHuVYJl9lp~Y7H`e*^D69_?+DNsmx8)zz2y8HjL#@hp_0z5;j*n{diUYJD~)_ z9;!|U=W-17VvHYcw5kr3FegSXbCW%C!Nx`#m5nc&JFaM?889y3fM1$<@66e9Jw=5W4?Oz%snKe2#E$e z141NL`p4(PV|O-TmD2v(yWNW7vt2*wpwSV~wN@+-hOPrb)G9@L5N{L9mS0Nn`d=5C z1id82qh|`(U@_Qyu3U!Co2s%r|A-=%WBBPJB%hnxU_v7ZmMBHaTqVZ$K<~#)ho9PB zlmlYb5c#82b6!oA|12s3C9s%gN#gHTp7JM!+?tq-c`f$u)@;XJyIdu?H|WH|IK+yk zKf9H+_|vN~4OplV@#)E&#*JVaLnVjfQtN@W=}xXT{%i@Rpilw@ zD{H^|Z+{gs7@_ECamW}~dS`Ua1(z~w29RKR4mD_EvAF9Y+lgxfE>ZeCV79yTBijs(P>Dqc__n8yAOwM4>lQ?^Y@OSsNJaO zfG&C-B_c#f1jO>J-k*%9d6&YS-u31)^LpM3ZZ`k3&)iSRcYTPLY`H=0!M)E~xI>zZ zE*SAl$EnpQ@n4?iezF{%$^9fAQ5GAC_`|obN{6?28@YG{!mx~}FQ^aoyZT+uDES$k zQp+J{@6GT_6lDdOPDdBaYwA9~#viT#O|QBI^rJ7{`|k?rcb{c^)!sYX+!Nv=VU;^F@zw`iG>HEIe6?Qs-nQ1(HgxFC7>`}I56F|9joO4?yDUyGcyL35 zJ-MwR0@#tU5-9p3c4Yz!rp10{hurHkSEM;hVFp8nS2x${ISNeHSOHd+9Qx~z{eP6^ z<8Q|;Ll_qEU(2*zH|+t!CV4OPkp;8Y-a}BL2X@{jHk-`gR?1uisj8f5Ye`iUGm{Jb9zPs=x<-EC4K0 zft&%1Min$7%jZz&pV!^_3Dca-lHBzLPTtYX9z7!FF7(4S14pecV|&6|mi&1OASlLR z>&Y0%-h03Hln|?$)y$)X<{VobD3=BQP11fE{B*eNm05J3_D{r|V2oI^=HRQ; z=B;&Ka@vz2pG0WATiKTw(WN1+Z$%$C?0YExvyxN2ex@q8oJJ4^Fsv5}Ea%djB*W)5 z%~usNN|hSMzFE*KDa%9y24MJNC#bCzkgez^-uX=V-Zt|_sQlhFyW!UZ=rS$Tw z3Ifw?$$>}NkGs8n^DcEq?aMgr2V=+hhMQ&N?=b*fj|) za8lYMd#`0m3L6&7g7xpl6an+i?KDcPizuR`d(En0e{s+U@lPchk?I(Map7RYYxv@M@o7#t`*j3JLk<55j zN+V~&{Cmvkh_+k__)sWR;E&T-Wh?6EG*Bt*wjK5PSdd0@j4Ypbhzu7Y3CO_2>VyY1 zXM|()r+%M2G($85l9 z>r1x`sMxxG;wS1fCu#Yn!!7kdHI;zxkL)sf@`HDOh;86Xj!pIPaH^@C>qs}5Jt&d&xkSKC&V9>f$3FT`Ubve);lth#sE&ZTChS&v09#|dht z1>Jbm2z9`!o+2e~b?N}aFi+fcN|DC&j#Q4b3sl5`VFrUsALWg7U6e9-jg_62chUF< z{M;bE>|_E)1m6KHXi5x_a1i82m#7f62U7#v$_|I1@ImeSTbAA+21<{`xM{+HQ#}Jq zUdM}dI(RR;D=~MMgx{)(K`J8v8QupriBAiyOYmTFC1DsYY^}_nlAQo$#lHv{ZH>ezMuBRUa2ss$^v`i6Fp_qgz1jzf!lY*ajlR1Z7G{z zGKh=1KW{7j2kLiOx2mW^1h)tgRw>(>_Z@Te85zGw({smHd_Z}Y#8N*==rg&|;J@g& z!>XcG->V@xer=1k+5Ik(h*dYNZ%jh1Zm!B-HJ@W|-`B>Jd<-2cS*d`gczwU@v3W(| zchwL|I^SJ*+geyu`cmqj zvyorFWNL%%sbfQ|Tz>rZykJ=wM8&|+;`NQsf8(6&+9A&wc;VdLA9Fw4@97Xh6cIZ9 zr|8WSC}Cd$%UO!B8Nndiulxf78Cy@#I&yfMRe#98MG2K4gJvO204JEf1hD`Br7S^E zuVPRJV)^bM<3q8`wgvW@69KE-4e;6Vzt39tN79`?h5#G=_D^)7D(PY{#rnm15e!Tw zAgqK-WGQGEEfE`!_}Ym+Kol;uiTKGLt(L%R4a(>5gAzVYybNjcXT2RX%6!t&eB$3c zBRtK}q(`g_-|li`!A4FjJ}$kFo%*?Fy+V{=FWp^EbcUS?q5+#O^4f%}L{Gr|nTJ`q zqgI{N6N`yJ+?6A9KSxWoay9KMtn7e2e*ZmADSCGC_l}eZ=@SoKcQ!$p*Hp#3slbW0 zfEAB>`O?&T~J0yjI56Uzury zR-6bCLX~*2ZPVg840I{6+wQ8(s^C_6%_X@@v$JY4jRzh@05kxmXVe9tBG`5bTRy8Q zJ_4KfEHjKj8d69c1e3!TM0HsB*0Qe#6<;Iu+FoD~AzD6oF<+Ss)37^mZ;~j~);jil zCM=ZT!QL!IM6)$r$_Qr33nCL+?ep)7@Q*(1y6uZ19+>8u(%aQZTIDf zLd*NRZ=!LhfoqB!E1H6}!#9)GjSr7gr=Pw)u~F&fX@6fLz)(1QfDW_znY{?J34A;y zKe{KjSW4mO)M}qzDg!XRz-v9Nq447$VCiu}J=A(P#Hba^SBT@Z|8SKc{P#krg?)IV zN>!17hHNZa@6MAbp?v4#xoQBFL3Qg9E=}d|=u}K<7M0s$d$7t!{rXE+n-e{dXJ|7?*??zbRDsBBJh$O_~iaM%A}k)}MTpIDQ@ev;d&T&u2Z zOb5Xj*3LR0Gh^ySQ6&!F1JV4DZ>&tYmWkX)!HkcucKSTc3*$&)d1U#)#Chwk+TyJb z08|*w!nFb7y+2R?RMpojv#p#&EZs^W_Q%Nbx2S@w96rSNDjQ^0Pj{9JdIzS~YG-C& zH(|L1>M8LO2j<)#+tz)!fr1e_qrwe{D^Wub=0VDpqu!W{tDSO}cOGZylFHdH%@W`{%yvAf=yWTmP+UiIR1@ z6UUC2T5}ifn!dLgGT3yJjjDr|)oeBS+MfM?y2}sf&HBnR`76eFYnutrt;ZZf0r|wX zPv?c3zBywTt(QoEF*y|Lfq%fLlWQv|n+*`GnlYO1Ye~@rJ++HidHcIRX3M*XTA8gP zfwkc=5HVQl1Z6sIWW?_I1FN4w%weldSefmvI003|Af`iAu80$>wti7}hq%&N&EO`Ap@w0~#?*Pi2Orvz4|6(Nv z1X$nD+RO;hN1G66SumZ_YCTq30?RuS^~(Fa!kfhhV=um5Pr1N}W)Q=e_u&`}ZOR9j zL*iR;`#lWq_bfs6(hm>~05qfrf{JKz&am_uwwS%XrLOqh!ce~Nr=!O*142WUvIU}w zZ)$6@kzYX-ZHYNMUb>q#Fe%S_@8!xw}h* znK=W1sWQ+DGfy0&8dt2!eSh{SUAKs+TZ4cYI!Sp7dN&ub4B4%EHd3yhjxCB&z{Uarthym!*}KfOkb`i{+nY2#S1nxrZ}{n{ONt%X4Yx(M`{H4YJ+8 zOUWgBwufABEPh?(c%Tsztxv&#(Krr3HGeNvAj{HpBvU8Pd|BL*Y4TiNvDMhoi5+_> zEEns_y2ho%rY`;~V$sbjkELt<;;bxqsl7&XDgHt;XvT*dh;aJUyM(DHmr^R;MyDl` zb^`S^>!qD-<|J%s0?!K7VxX3@H`P+_QI6PD?RXjjoEcL&7y)s>v7Ws~_ABtoZNmsHM){ghvgB zqtetxTUuiWI*R_yag1MAex!_YD|9ava=u;K`=t(Me&v|clSfS#)@SUpPe>1{$t4`; zL%cS69s;PCRW$b`z@vv{O2`J~uf?qDfOA%dHWD-#j8~b1;xE0EL%*V0BIpT~Q8jsr z!|924UJkdcbF>cM+j#k`{TP;^jXw+I&OIz{de{#__mU*lCl7!`^ zw^SFj*=v-g1xsa4Gmyjm)ip@G2q&765*KE|WP^iAWtcENZL(VL(23&E1ZQE;Edk_3=GT^_0VRGLiyW660 z{c)~N5bJUuTMc|Gsl;H*l+%10eiV{0U}W`9JP(HX?utbvtDY5w*&suTBL^ z0cG~U?9$o0RRU91D>}xYd-g>b@AO0a_ZX%6XENLF-xWRpKphEiAV6gB>XNTlLr;*4&2u@>81VxRJ#-@xxW=G`#bscHtoteIrTtmj& z+fnCmXToD$#U*wsarskmLtmpUhN_3s*j*z_5QGPePEf*Pm(#@To6Qc=8< zu+e)skN~(FunkLC!p$+I@NOy|kPQ7M(QOxsK^#8VUmwQ~?tttwTdZV;|` z9JN9Q`R-PE*k38U-=0@UL-;wj17JzPyj1EbmJCsb_mH)u3Xi~m4^1G+@~=9g`{{~x z8}EH)oO91F;0TV+8n?t%qSid^}|g^_iNSqQH7u5`h+GXfzFb(e?uH4$ASGlxG4s8 zF@b;D4aW`%RG0u-=Lx((k9#1BY?@P8^TSOK_+u_`Ce>*4{*sC>fQHz;4ubN%te+EO zzubruM~LSO0^w*42`XAwo|-Eo-=4Ye`$s&qwH`2|;d$U)?eXLINz1o8R$6beC3R7) z%)W8|>(YitL`^-W2*K6J(JJ#hBZg^4ZBNyZNcR8{XXHKlpqv=O;O{PC^PRY zE9tJ5TK3^|de|EQ0H5I{^PHQlL_hoP&cqrjI$9j{=F{8dW&yf^y;si~BPKtD1vOuW z;{*~BT4^)@UR!ZFITRyH%#F_YErJ81$O>XYfU@GEQgA)j!o199D? zF3RE<_SBw#I1pA!Pu}j9e%2qB2DPW{p6dr_WAPB-f9Q;%VpASesm8%X(7?SvLK2@9 z-x#R0fiEnTR6F~2cjH+}f%utzmNhRwk0>SLIKPOuQm1dTM;ll$7L5$a{`jqGBmVZ5 z9H=vIW1QuKqq&zncVN$_I#T7q@5U*{6D*fRduqFSUP|=ps2}q7Nq?q{L8t6kK>_a2 zk&UpYpC-i)hx7sb?5HS6>tJ--tsON0w2f}2O9f8Fhkv?rIO10iH`Ht05e$?8G4ql= z!ra_(jjlhuYZGh?^%LFP}|DP%cA>fojbg;9gfT9>UrIS zI=n}-AkuCU5LYrYx;cOlhEDDxj-WVjvMxsT{sm0BRbo)vTleEpA;)0SW1Xx#=#cv?YGL9rwpMbLT4Wsp+ zH}r6m=Ol(ibeaY`mbGk)wcHyF{awj%0}O(!h8lSSO}a?i2?61>LO(x|4- zxx>W93a{kkO!$rmz$)>&8Mx%h*^1J%$yY`1L&%17yp{^PSktbA(3ab)jd-9u$(NH) z83!7^ST46b8y<2SrNDCxa{7xDF*Ljej@vJkH$?Z|;OUzbCX&(L#I8$O3w@B84OKUP z1Mz8hgZ@q0oO%Shf$kXvJQq-;%R01WE{(XD{zzAUW?R?|!z5=e*sCQ@ZkKxP`D>x1 z?Y+YU^GwP4RpC1JrgT~iVC7f}xQbS`ckk_)n>oBL?#RB($1Tq0QBW5~io8<8)3(@j zapyG;#9&A3yLZRJO{K9^X>j{q4$D>SoFfi|!yh5G`E23w26iT<9X(kl)AjX z`K20t$KU6+v``;nP4ghaMLArFE`klcEIeV?R25`G@Xmy*_x{|2;g8?JE(eiE6#bpUFe07rxda~M7@FM3XN+i=ox zPQR+dJNoTP8x!33axJH6fMywlpfr-DslV;<{?AAL)AiZTga?~rc~Mog)B0hr6Jw}q zoKSwKAo#8wJX`EO^YT_l^4ZqXl1tk?{~A=m&j9h9Y|by5q8%%`jMFXbPI90}vX%n?U@j4P2c4v4hXAZLfjJ<)Y4Pcf1!>M428gQ9%&Sodeagc?+1A%LJ&0ObpY%^w28+6R~ogcnpI)zdo%j4$0QVgQ~LbU(z zhAgAvkDC{nW%TcS>|1JC6BC^+io=pMzk%wIv8{&4=SLJc4UjrPRIR7$6|OpO1X?Re zlbl?{uKQ;If}u7zEv%-&{kGn6SA|cqm`=jH*q*&P20e|?_4O(oy36vOqM4TqDV*Y6 z{_pf}1>!X(Db$B9qeH7>UaUZ5o>wg0m@3;-AwWuPI59@TcNW#*Jr)U_{~DaN)t*)I z^ZHM_O1h1UN>_7Up+XM2`W$qn#TwBc8=w7qtD$rDkXXn24-w`i)y zMs_1&u5Bl6Ceg`<*2QETh>hpjrrlt?!JqKR^QsQKmk4a2nz>GX4O^4&`h}4#0fbBP zly~D1^>#s0M#@LAS7j+4Fx<31N9L4S8Ct>6?#eKKs`*fyEq$NObxWT8UOFtbrnZk{ zdX@ZW100A}2cvQOG0I;ahb~u``geHyhF0KK_w3 zrU%ygB!t2Bb)DQ)HsU4lq+bQ{O+Foe4a9^h<1^S^&Ouej09GqBaI1>z{1NwkwhBPA zP#C2x2A=7j#ad*os^h}w z8ll^K#<>U;SW_CH{=_9#RoUh1_AjH!i0Yr_DIk}08nA7L>%J)^uN~I9U!Or5UwmF;b{oJP$RZx0UO=+rHN5Oe)*QJeCF6*nF90(AOvkBHfQ6tZS+@ z*rqL?9L9|~>)&wxd8mNClRHe>zY=^>E0+$ zyEFFv1J<*9AKa1_e9upD5=zChZ(#5z@gjptH_&QsUgw|Dc&W0Wecq0%IrN2t zGbny;DS*geDY>cnDzms&{&@WwoqL-~qo3C2Df+(7{B-i%Jk%RyUFbz6w#e>Yy z$1Qgl3_WbOSFjwjI09$g3T3BoxaUf;n1?Ij8_lSSuE75>m%k3hSecbSt-xo@jt2R4 zSj83JAX?#1m_29)okh1fKDtRLxF~rROsmQyJpIzDy^po9;C_G37_!^PoF3xZ^(w~0 zV*xTyUQJJI-E92-nEso`KOP>pmR|_He~rveYbVXarmFNmsob*(B131^sagpCwx3}b z&Sf5n6Bqwn(4BpUH{av{^(>c6*slqyY1~40LLzO*3%JkKuPFu;uMJM=&GJuMbs{fo znNk-l%Ac-}VMhqGCpk;`h7WBZ=P)Cr#j$Nlh@3d)_8T~Z2N!k|qE_~ZGxt@Y_WdSq z0$z(4<6f!!4df{u0#0t>JSGARdNYXk4i`P_KQlK{(>vs<=%gp1BISS}1I(*uwQh3X z20{>@Z{uOX^%77vKm;;Vzm12ka7;8lb7s@$j2?>*tQxy@`>ucd>i_ry%PA*5&Uh*# zEFp`Tx;QUM5KCA|w6=q?B#A!Ktb4cD!W_pUJ12+VK2&#Im=v53GC`X@2#vIl_I=9F zy$|jHIZNiRV(lQ&CirZw`%HI3^{OAQAyPO89rLYc>1;l1RXaH@hfDW-t?;lz{SD`x zG}N=o8(4T*wI8k5YtvtNi`q=y4>yqS=>>xM4XYUG7_*rr=FcG5^9^7M*(@{jR^2nG zO9W2Wx8c~{#j)cgoX+husfTCD&UhAYI|)|Vto*JT052?xN&XbYoutD(m z@wodu4`9qaw-yM2vb?$413Vp*`?HcCaEmW&E4Gp_Ec;Nzj-o1;ao66>-NaPg}AVz5?xSm)uJtA(|+qf z~m14S&?F72mb!dY(AA7h6@exXuG#%TvL*Ns>LFem2snN(#zr!S9ZD;s zUkCWB1F=fB9tmSc8eJUc{&(@yeE;n7kUuAm6fDm#I9w$+a6DLd1yHISI{-p*wivM) ziOl?F5uF*kX7d)EOQQ`xoeSPtDt$~-mp$>Jt7_(z;W%dXbmz;_hWk;SW5L5`V_6z_ z-W9m&00ukavmyhp^U-|ZuXkpuTO-@LC{?_=lGzB_cX@x4*uCtsV- zj*l-wJv;e%Q^NV$fj{Wl2h#*D1`GBcj>KrK~^VDh6AjC)tqkZe!pX z*mp*eBgqSc1Pn%XereSRc^;5)6 zaUjyr_UjlfTp=ZxtL`wtpwRBT^SK49K&sqL2M9#DKoPwlE48yvqx0 znW?Vwh1=o(1W}tUjA{%DVdj!J6P;Is8^B@^hZ2fQ;63bk@V1K63AulY!?8fhe?Rq@ zY=;%P0~} z%8U71Z*F$kKAea&%y{|Z$z0?gL75{DBkvRD%hS(R!2(`5oZ;;1n`4#|$mpdy7f)vY z>B0I!215IDZS03oeQgz91<%QS(eR^`I_7h#c$|Upd4>PR^-}zg0oXkR7p(wJV97cB zyklMEGeI?*MDgeta1mJwy@)xo0urg4#4H)_dFdDvV~1x`Rx!;NKl2RPC`UK0dtUb} zxlf`_=03#y21pfFXpYZP(HMOs6I|Bk9tcD1Oi${&j_6UBQYd;IFo8C)T?!`2`>$_3 zijOM;9}|TX(~MSe#6>sBELdt6Rb~tG$kuDOLXw#a7J-3#G$FRJjowi#R679DV5*X= zXMYnR3Lrj443Oi*S=IKW!6E`Qt;>~@@hdaSF-U7oy7@LTeibg7^2Ua=++Nr$RYP5+ z*luFg=>j#d5<}pg{%(S(Ty<{iBi{Wlkwxd@SfD%8^W(X>@>Ou4bP{yzC6BlTX0A4Fab3TW>b>YaV_EpH6a$^gP>!HSgQulr8)ZzUrYk@s-Ug| zBJ+$MxHz_>!?+4?g9y3ri8qfRx?f0T-~u$>=DdTCvX}ahLMZY+UfM#?_Je>kz(AUL z{R3*Tm z0D;5Lo5_WkQUQ^GPE=^bwtN=;u49^2Iab+g#)i@e%sWYLGc+xZa#|O_*myoEd|~C; z%a-U9J%@^$@s(C!C=qsT=qhzkdVZM?1C;Z;ik%QzJtE-* zU|y`F_WodO#o#-7Q?vmdC4^28bke29PxU|UKJ5Sc>HVYCvlYj-ylh`~-D$0CJ-=_m z(2l|xRsfxReALr=bY;WtKLkJh^KU%vC9G8Fvz#PfhzcOP0M7on7WrYl+T6V675T(a zg=N##=@D1hiKHEWcU+>{r06HncHOXo^V|#%P*dJ5nq+1qPyGgHMK@P(Z`^tY(t2P5 zi8V6@P)LC`Mp13%wxRLK)g4JvZ2-y$Krk}IfujTKNf*{kgxki@_$wW72TX#g)a=GXMPtTG0GrRZ4oJ0rVuKNKKXPQnvDYv-WSdLib&zAvU?WA77 zflGd{;!+VONA$gWrW7xT*1OCAD@>dd)>?jx<+R91c-pCuK7`OacNFl>mpxqxf zqcKTPJ3yAvb`^!_1uy8HKDj<%-D(EHRZJnOa#)$fs)*A!%NR5(f!?uUFt?Un$RiC> zgjlsMN@M2ywpMG915bTSU{H3IgxPscKXb${%a+VOP|G#Aop%|2&H+^_Z@KKcktl7M2X&qY9d?Vk6fZHduGCOD; z;Yy>AWl72=h~u4H{!-cF669OGmReCS0)Hbn;1*`K%hU#KVY|T?3txV$ ztJZacJLY;?MQmIn)aeC?D?P~YK@+K_@7Iktd(B!Db-kT*c z;NB=Xl|EO&%sx&7$w)cTK}J)3EK6SKyQzRz#b*ngMZ(_E=-CIIYMoE%?v(BTXTI>q z+|YGoh~hw5jBjS+;-jBINO}`OiU#DEX57O5GURxO6Aaeqk^H~lz+!Go!;`+)OyRAE za`;+Z=8Vk!XDTjSwDI7EFkKX&A`1e&z1E6nA+A~>+Ez9kb+3?V^cb#A;lR4zij z9&FZLbtFjIQ8l0h=_6qnrGK7bA^ z!<71*XmmJs8gjwVDI{&eRX~$Lh|N`Fr=hN*cs5Ga@MEz8x^37rw#w-B8HM?K22*#b z570&FHKjTNv+8(p--`*vp2PdE#fg8p?JM-l4+(AO0U;}|{UU+cd#y8$4=XB9NE>VDaJNsmnK$l-bQ@D4DCwv&p;<;t4a# z5jZhLszvTBXaFuCB+(VX&wW>Sz3LD^x&ct}+(HyK5cI(>A+7tz;z7X4TGq>^YH+jT zqni&GD&h*h=mE!ZS#y;*3+MQ7G`QpNKTaa2?DXV84e^j z^48I*iG|Tkz0%>h8bYN#1l8_YGyU>F`UcB1nr5Dif_W0E^O{X{a zSKPe#1@y;x18YQVXCAeU;R)R9ZE~(GHvI6G{w1-%|H7ZN=*e9<2doI!lq@<>BX#Gx zm+0Sma*+`S>oT}E)(c= z(BSdkC!B+xseW$GIj2c9o>hwkfxDgC+Lzd?=&2QJjQB;sA_%i8B=tDSXfH|om(DY_F_q^m|ZEzf;aP?x$a>fq|$WTm26 zWYEX*^~m^c{2Q3acvF&kvqFM|6XJjjMxaUNmm^n}&9BuB@R`i zXg|rlXYRs*8yn3BOJuBdM~@bu*w034Se`K?FYY1Ji$9|_TbH2S3{!-oSGyV?_s scripts/build.sh +> ls bin +build detect helper main +``` + +### Mac arm64 note +If you're using a Mac arm64 (M1, M2, etc.), you may need to prepend `GOARCH="amd64"` to `scripts/build.sh` to specify that you want to build for `amd64` (it will help if you publish your image and then try to run it on a Linux amd64 host); like this: + +```shell +GOARCH="amd64" ./scripts/build.sh +``` + +If you don't, you could see such messages along the way: + +``` +===> DETECTING +======== Error: paketo-buildpacks/spring-boot@{{.version}} ======== +fork/exec /cnb/buildpacks/paketo-buildpacks_spring-boot/{{.version}}/bin/detect: exec format error +``` + +### Run the Paketo Buildpack + +If you try to build a [sample Java project](https://github.com/paketo-buildpacks/samples/tree/main/java/maven) using your newly build `spring-boot` buildpack: + +```shell +pack build -p ~/workspaces/paketo-buildpacks/samples/java/maven applications/maven-app \ + -b . +``` +`-p` providing the path of the application to build an image for. + +`-b .` providing the path of our buildpack we just built (it will be looking for `bin/detect` and `bin/build` under this folder) + +Well, you will get an error: + +``` +===> DETECTING +======== Results ======== +pass: paketo-buildpacks/spring-boot@{{.version}} +Resolving plan... (try #1) +fail: paketo-buildpacks/spring-boot@{{.version}} requires jvm-application +``` + +With Paketo Buildpacks, you typically can't run just one buildpack; most of them are inter-dependent. + +In our case, `spring-boot` buildpack `requires` a buildpack providing `jvm-application`; probably the `executable-jar` buildpack will provide it, but then this one will `require` a buildpack providing a JVM, etc. + +#### Note about Pack build + +You would think that `-b .` would just append our buildpack after the other detected buildpacks provided by the builder... Unfortunately, as soon as you use `-b` once, `pack` will only consider the buildpacks provided in the command line. + +There's a way not to spend hours to find the right incantation: observing what the chain is when you let your builder pick the needed `buildpacks`: + +``` +pack build -p ~/workspaces/paketo-buildpacks/samples/java/maven applications/maven-app +[...] +===> DETECTING +10 of 26 buildpacks participating +paketo-buildpacks/ca-certificates 3.6.1 +paketo-buildpacks/bellsoft-liberica 10.2.3 +paketo-buildpacks/syft 1.30.0 +paketo-buildpacks/maven 6.15.2 +paketo-buildpacks/executable-jar 6.7.1 +paketo-buildpacks/apache-tomcat 7.13.3 +paketo-buildpacks/apache-tomee 1.7.1 +paketo-buildpacks/liberty 3.7.1 +paketo-buildpacks/dist-zip 5.6.1 +paketo-buildpacks/spring-boot 5.25.0 +[...] +``` + +Now, that we know the full chain, we just need to replace the original `paketo-buildpacks/spring-boot` with ours. + +``` +pack build -p ~/workspaces/paketo-buildpacks/samples/java/maven applications/maven-app \ + -b urn:cnb:builder:paketo-buildpacks/ca-certificates \ + -b urn:cnb:builder:paketo-buildpacks/bellsoft-liberica \ + -b urn:cnb:builder:paketo-buildpacks/syft \ + -b urn:cnb:builder:paketo-buildpacks/maven \ + -b urn:cnb:builder:paketo-buildpacks/executable-jar \ + -b urn:cnb:builder:paketo-buildpacks/apache-tomcat \ + -b urn:cnb:builder:paketo-buildpacks/apache-tomee \ + -b urn:cnb:builder:paketo-buildpacks/liberty \ + -b urn:cnb:builder:paketo-buildpacks/dist-zip \ + -b . +[...] +===> DETECTING +paketo-buildpacks/ca-certificates 3.6.1 +paketo-buildpacks/bellsoft-liberica 10.2.3 +paketo-buildpacks/syft 1.30.0 +paketo-buildpacks/maven 6.15.2 +paketo-buildpacks/executable-jar 6.7.1 +paketo-buildpacks/apache-tomcat 7.13.3 +paketo-buildpacks/apache-tomee 1.7.1 +paketo-buildpacks/liberty 3.7.1 +paketo-buildpacks/dist-zip 5.6.1 +paketo-buildpacks/spring-boot {{.version}} +[...] +``` + +with the `urn:cnb:builder:` prefix being used to indicate to `pack` that it should take the buildpack from the builder - otherwise you would force the addition of duplicate buildpacks to the end builder; not an issue but will slow down your build. + +Now our buildpack is picked up and our modified code will run. + +About the `{{.version}}`: this is what you get unless you set a specific version in your buildpack `buildpack.toml` - it's up to you to set a test version, it does not bother the rest of the toolchain to use the default `{{.version}}`) + +Loggers and plain `fmt.Println` will help you check the values of your variables, etc. + +### Publish your Paketo Buildpack changes + +It's possible that when you're ready to make a Pull Request to the maintainers of the buildpack you're working on, the maintainers may ask questions on your changes. + +If you want to ease their task, you can publish your buildpack with: + +``` +pack buildpack package anthonydahanne/spring-boot:fix-273 --publish + +Successfully published package anthonydahanne/spring-boot:fix-273 +``` + +In this example, I published the image to my free DockerHub account; of course you could use any other public registry. + +Now in the PR comments, you can explain which sample you used to test your changes, along with a command-line that the maintainers can run immediately: + +``` +pack build -p ~/workspaces/paketo-buildpacks/samples/java/maven applications/maven-app \ + -b urn:cnb:builder:paketo-buildpacks/ca-certificates \ + -b urn:cnb:builder:paketo-buildpacks/bellsoft-liberica \ + -b urn:cnb:builder:paketo-buildpacks/syft \ + -b urn:cnb:builder:paketo-buildpacks/maven \ + -b urn:cnb:builder:paketo-buildpacks/executable-jar \ + -b urn:cnb:builder:paketo-buildpacks/apache-tomcat \ + -b urn:cnb:builder:paketo-buildpacks/apache-tomee \ + -b urn:cnb:builder:paketo-buildpacks/liberty \ + -b urn:cnb:builder:paketo-buildpacks/dist-zip \ + -b anthonydahanne/spring-boot:fix-273 +``` + +🥰 Big kudos to you if you ever do that in your PR! 🥰 + +### Bonus chapter: testing how your Paketo Buildpack interact with the other Buildpacks + +In an advanced feature / scenario, you could need to change one or several `PlanEntry`, and in this case, you would want to make sure your changes did not break other buildpacks. + +In that case, you would want to test your buildpack with several samples; and it would become very difficult and lengthy to find out all the incantations for each case. + +Enter the `composite` buildpacks: let's take the [`java`](https://github.com/paketo-buildpacks/java) buildpack for example. + +A `composite` buildpack does not introduce any code; just a composition of `component` buildpacks. + +If we continue with the example of a `spring-boot` buildpack change, we need to update those files: + +**buildpack.toml** Make sure to change `spring-boot` dependency version +``` + [[order.group]] + id = "paketo-buildpacks/spring-boot" + optional = true +- version = "5.25.0" ++ version = "{{.version}}" +``` + +**package.toml** Make sure to change the coordinates of the `spring-boot` buildpack to yours +``` +[[dependencies]] +- uri = "docker://gcr.io/paketo-buildpacks/spring-boot:5.25.0" ++ uri = "docker://anthonydahanne/spring-boot:fix-273" +[... end of file ...] ++ ++[buildpack] ++uri = "." +``` + +Now you're good to go to publish your composite buildpack: + +``` +pack buildpack package anthonydahanne/java:fix-273 --config ./package.toml --publish + +Successfully published package anthonydahanne/java:fix-273 +``` + +And of course be able to use it: + +```shell +pack build -p ~/workspaces/paketo-buildpacks/samples/java/maven applications/maven-app -b anthonydahanne/java:fix-273 +``` + +##### Updating the builder itself + +Now that we can test that the buildpacks inside the composite work well together, we could go even further creating a Paketo builder that would embed this composite and other buildpacks; in case we want to make sure our buildpack is not breaking non-related buildpacks. + +Let's update the [`tiny` builder](https://github.com/paketo-buildpacks/builder-jammy-tiny) to include our composite. + +**builder.toml** Make sure to change the java buildpacks reference +``` + [[buildpacks]] +- uri = "docker://gcr.io/paketo-buildpacks/java:9.7.0" +- version = "9.7.0" ++ uri = "docker://anthonydahanne/java:fix-273" ++ version = "{{.version}}" + [[order.group]] + id = "paketo-buildpacks/java" +- version = "9.7.0" ++ version = "{{.version}}" +``` + +Now, let's update it: + +``` +pack builder create anthonydahanne/tiny-builder:fix-273 --config builder.toml --publish +Successfully created builder image anthonydahanne/tiny-builder:fix-273 +Tip: Run pack build --builder anthonydahanne/tiny-builder:fix-273 to use this builder +``` + +And finally use it: + +``` +pack build -p ~/workspaces/paketo-buildpacks/samples/java/maven applications/maven-app --builder=anthonydahanne/tiny-builder:fix-273 +``` + +You'll find in the builders repository ([`tiny`](https://github.com/paketo-buildpacks/builder-jammy-tiny), [`base`](https://github.com/paketo-buildpacks/builder-jammy-base) and [`full`](https://github.com/paketo-buildpacks/builder-jammy-full)) integration test that you could try your builder against; to make sure your changes did not break standard expectations. + +## Final notes + +With Paketo buildpacks, everything is in the open, so you can definitely test your changes from a single unit test to a full builder that includes your composite, that includes your changed component! + +Most of the time though, you will probably just need to be able to build and run your modified buildpack: it's easy and will help your colleagues or maintainers test your changes! \ No newline at end of file