From d9c20f2cfd645a3697a081eb8bc01dbe59af0b29 Mon Sep 17 00:00:00 2001 From: Ryan Baxter Date: Wed, 21 May 2025 10:52:32 -0400 Subject: [PATCH] Initial implementation for signing commits and tags Signed-off-by: Ryan Baxter --- .../src/main/asciidoc/images/sign-commits.png | Bin 0 -> 22994 bytes .../spring-cloud-release-process.adoc | 25 +++++ releaser-core/pom.xml | 5 + .../releaser/internal/ReleaserProperties.java | 34 +++++- .../commercial/ReleaseBundleCreator.java | 7 +- .../java/releaser/internal/git/GitRepo.java | 102 +++++++++++++++++- .../releaser/internal/git/GitRepoTests.java | 1 + .../create_porject_release_bundle.json | 2 +- .../create_release_train_source_bundle.json | 2 +- 9 files changed, 169 insertions(+), 9 deletions(-) create mode 100644 docs/src/main/asciidoc/images/sign-commits.png diff --git a/docs/src/main/asciidoc/images/sign-commits.png b/docs/src/main/asciidoc/images/sign-commits.png new file mode 100644 index 0000000000000000000000000000000000000000..b53a59a0aa0d06aee30b93b60f1ef84d8814ab47 GIT binary patch literal 22994 zcmdSAWl&t(7BEO~32q5)L4&(PaDuzL26t~lfZ$F71a}GU-e_=l*C374K;ul`_r3dW z?o`eEoT{lh)pgEUd#}BhoTa-XRFq`UQHfAtU|`VYWF^&LU|?^c_tnUV&|ix{MsMf~ z23rjscO69q0dpq@7E=o+GfNh42WKc821ZEK+u79I&eEO2%+lJ{QJCti4M;^{YavXf z&8^6$=qzDrV=L?HYN_t4q+#xBXU=ayB`Sg{Mgp;c!1rG}w3mcUPDus}%g_VGsr1XC$L!X4HY~0-FzI~O}&{N-KhUU@qchgTDqCL+B&=2IyqAO zh11l`$-`ZkiV6y+_%CvITdRMtJG%Xsd?+JW|AMfxv#_!LIo#6Q_Wxn{Uyy%>|20`a zN6pgB$=>6y<%Ox(xwu%_|AXp3Fx~$b*gqgmM_cHAIsP;4uLT5DY`rb*btP>bEFInc z4_aQH{~J{24=67;-#<`IH%nIuCkNB3&KpU+^N}Ol%a@K(kK()9#0UZB#%;gz>>U1`tcc2 z=oYpm85bWP!{n{ai_!WTe0XigUe4^j^-CbL-iHJO7#JJ`mmexDgQ2$+Fy2XGj3aQL z=|kJ^W`#;|s=n&TAd-eO%SUi(G|NTIXxz$YD;m5e+@^zxpS$zdMT8+*i?{xb#*u?T zDvg#w^PvXbOf)>e)r}5~G7GH+y*|io`rG|+J-Iu_b5R;k$rp>W!(YFzz!P`1BIL>U8+c0>B;Q1eG8wk7kIZ8c(p)02)G09r3F#!o z%3ryJ2nq6(Z_pM}BoVWlP^ zeY$A|($nb-rHhl$O~jGDNzX}%1*SH42D04=hzPP?hDg|F&_-lTzWaXdvzn&8>HYZ z3KdI&6nQlbA`Vg63jJHi?5DJ zJaO7SbDLg&4kaBRswOxt!NII-rVC(lG-*r~39QW>pX3HV4KZ>uc$K+;-0$;1Be;qq z>WeAJwA{XxdBv7_j)`C?7@1^L@xa~_{djGUbE9y*zj>wXLJzIeg3$3bpx z$nM5N$&gI41^wTVJdZC`Zxu_Se+Gvkpz3x;_I@LT^>>@xI-NoK)kU({<(&~kd=3ks zzzX>yi-nZfC3z4)Yp~D3hCd1q7Q?20HPTI_g25A1k%M}S_#iH9154Mf>x^RXinq(K z*;k+oZ4!MwXaf05JQh)p*cCQzA5M)-1~$)jFg(?k?CZpk0;;#+@TwG?33sw6wKxni zjTCc(BD-v^I4z&+DZS#uWa%!6?n2B;1j>Sma^aujBzjd_S!8kY>bI)HJvw(cZf^K>mH2{ z*tyBona<(Ph^K`ZJ%UsTgEV@$Ygg}FRE^^Q`P+4mr!Pj4H(`+oI}yO&l}98(yRVAfMC=h3cEaHv}L zX$bp7KG!gJGTQ=T0HIzNf&^!kOEy#kCGw}rZ2v=Z2%89ucVf_R*zQw=Hk{WFJS+?sZ32u^@Jam(4+94Hz>iytp!&e%8_7wifm~2~@XKytXi#a;AUyFgUTQ ze9*LZ_IBWVQvXuF&*9lFD_C^*CF^J?vtJndGXgvk9#TExC!}9U-;qR+InaiY%TPcV zp6FTF{!}4YI0Us+y95*Abeo#sR*5wU>(DF=b<8MqCQLs(M?w}fCz7aGbkep@#~sKc z$a0baG~v5am67e_mZaS8K(buy0*tLx_qL-YscG!{W^Zef%)EYeMuFq>3A}jMX^pTq zGQ^Z+h2j5@TOd@Ul#;V0wiq+~XpW#H=g>C`l$kw)Lu zxAtP!Hfg2cW}3?O0dIoAuE>3)$71Doxc`@SN@b+ygC=@=JW&R+y@y@x-N4izY}Z{} z6}E}C%rhrNtXa?H6eXJ}Z*O0BNAIN-aqf@#^F?vmjo4dwE+6ml@3|3-9;OltHGLxU zFuG|sM$1IiCg{w}<^#F}O?_!WBYVMnR98%pPAET^|47FHN(WdYa!I-#LzL+`H@dG`az+154K(t2-YM>Q7Pyb24tMItBR?x&tqC(>2yYQ&+JHKwD{&mrt!qc`EQTssftDB(Z;O|Ha zh~_nL8PRfb|Fe8H5S6FxFbud1Kc$jfL%H z*8}YZW6XxuhIvCz;Hq=~j=cFwYNNS!Kvh;df%D0+$NKe0UMk1>wP>KvgVu1x%}US8 z#M$nu&$a%uQ})?-hfK4!zcCna2-l1B4Y=~$S-e*9bkO@bj5*GXd@bO;_v3cN<4{U0 zg0ijh$LutrpMcZH_EOFg@G$w#%Yip#z(vc?1LX?Q1z^38&p9g)sMk8+;nkkl0Sf5Y zjd@NdbuwJ%fk<8pd8a&_f*-aq@5#$VYDKdil5Y=}_DhXrjfXpz0S=D@Hz!6;j!sp{ ztUHh=R1-0udO4)cYYZ40IT*IhmIMJK50PW0aFD`ESXW?A8K;G@3tSGt^NfsFH!xiv z=6DV9GyZIGF$|Uz9K|?XPQDE0d{CXiMvJ;`__=*GKgdqck?59J%7gZ)`z)7PrL6UH z?gJs{putWDHWfa@T-J21FRWbftTbf>{8S`WO_xF_sEg- zI@J^ey8~Z4AVy*gJXr5@N_14QHN*ty4aLjwRN?QymXOiC@$prWlr}FQSg4KDi#Ew( zeaJ#7F)0c5p`IQUB_8IFODv04g-v-sD~;|I4#giA8+^%P9mT(gB4Xv3Wxv8qXcB{^ z`Qy?!)-oyPlktY5XbQS9^iCyM@Ed+z__x+Ep zK#>f>z-kB{7DQ9iUkaGmAB_uK4|}1NUT50^3NT9hUfSUga7c_ zJG>p?Uu5T)O>q1{8WhP}vCokKh(eOuULtK#hBZP*d>}o_aCY z`^qvhBd&P&Hw^#cPXSX9RNH6--I$(lwS^&DTHKcNu@*9_(LCk#+Ve+l>gXT&=o~|wOJg#B{*`o zuze4|Xq4^`CX4xE(P!B3K!uWSgU8SY2;BA9`K9>j`7!iU_m|KzjZ!txLH<$ca)VtN z90ni7alp&% z`STNG0|b0|=CmbqpA@$uKHNB6dnpt4t8GW$0>m%m>}Cf(tJYaha6=#~PC%yJi}PMg z%>mK{*>9|Y7NbMkM*Cy>Ia(EZ`SX>AKhMmoV)v0XYs?Tlj%x-a`xUaVaai^0OBfCK z8W&I?^(sq0xF&g5}CJ&EL%a0kQgc<%l2wr zfY9z2`alZOg8g@cGqsi@To0k2)>^O2lrr`9GWjkCsoTGR-~7!hvDffsGm>WEd_bgt zqYAHC=BCwB9>>*#h&+!Y0#MBWnFdrZDHra3k7$<^DJpXe^NbPcsc^C=C5|8b)PRtvZs87=cs)H^MGWpWXneCld(=%lsQ)W(PvL3XJ_;otK z<86DZM^$lZC(8{NuTuuQ9ab8T9{hBLuV=xXkcC=Hx9fv^NGYQxql^M-y zfV(+P{}$KZ8ZXZQbNz%6&BBl5$8UcDq>$3xR+1#_9_Rgz(*n(TX5vb&#F#Ux~xT`fVDNyxda4oxq|NokEq4v@axEXaOHTlRB&>^g#E;eM!9qc=qWO zxZ9lx_~siTk?(#msXyvx9v31@vic9nwDJ4C$GMY0KKhX>v-xSD<_jGl&Oe3W^{c|? zP(mXYHT&5Eow*h_I?bP2=%MS@sk=gVyKZ|z$!TQ5c7f?{}$&}Z9e4QLx3 zpVTv5<@d3E6VfVl_+{tol3Egxi9T`Zciip42pS=FvvqaMuqQOYx8m;)kH<*Jyq>vdOiM)$qQPlu$zA@dh6*5 zFfR^#L2GE4nF7U2V6c~q-fmJ~Lj{-4_U7=5E@2jR=-=Luf(O<|sfMtStSQa0ohx0u8Vy-^L56E#)6+46i- zyp`@si`#0HcyD$vA%E`kD?+=Khfk+Dlt9s!N2cq`kt(8h?{_650jmKJI7<1aaO~a& zA6ZdtiToY8&}7ybh=yf#J5OjwhERtWyKo zTC(J@zZQ%|6=F!!XLLB}gq}MthwW4uZhmT2XpsjBjZuF+51W)F<~f$u%#*yRex)jM ze!PvJYR_$ZDOow9+Icir-iS z9Q!7ra1?m6%;&M6*_7&orzCdzKQAXq6JM<00@Yiuo8#mwy$jE&yh6&ZD&R9widwcu z>!&$J(7b+_fa%mnlBo8VXFLQjZbA^;gCFBHUtC1=!IRL_6$Z}gV!5Db&vA};we!|C z8|4>%sLF95ywkNfn50C79B}g!cHEK&aLF;Xy`yP%G>CD(si|}Q&6r<4(rq5guP1yt z*wK>gn;}DFW3kjRrP5<6fGcNW)L@_1wALALvRLD^ENZ@-&2{(`zLkKv>LxHankFi+ z)OZ}wS6a$s0yGaRvxqNHx>f?P% z^keC~G6RmAT|dohNg?v0^X5r(fx8BerT^sqcpM8mNNS4v$+xsZB>!lx}Q^R zlEFmQnvmaoCd`uH)BQDjBxQ1My3_dO6_qKilE1QNObnnu@^>bbE6&CICSs!dT+(tm z$$mp`t=(rmfBzmWO`sm2Uj#o4&6Z~K(P|JHx(69o$M1L(u#tWl%@kCAx|+#|2j5^e z$4eSfrn&_IpBTo{vo~o(9aqy$mrTea+i`2g`CV|fF#hX9cg?b{Nm^6A@4pOXoa^lD>q_ zQ%x~&&E*euJ_EkwYO}eGp1MGO>>hcUZglSR7n=m1(m_9n?{2840+6Pzm}2BT2lq2T zC3_wA%bjbi{@Vl2OIL!;U73BQ9dvun4^_xckp8=ha4^(*b46T&In zLxdfVhOHsK`4KFIyI(=8E%`(+sT|#9{vL}0a47apVZ|f%8p3n{nfxo%k()wk3id})n zYGknFxpmrn?9HY|jhhU70ep9{`;{vokv5K&?Hw0VcDL#sP&*`g%$%RW`}K*9fv zU7rj^lhzw!Ays39(14pA%?2OEw;OhBa`QYuaWRGOp>LIpu;?L7TJKdRgutm^j-*(F ze2|kLDJ2}W{2-^-sM|i}HdA@y7iRsgH<`h{))QGBzVBw!6;{JHj-1xp?{3~@JyiFG zjkO~CM~}$YxxPPOCSr(?g~q}kSmGKeEsbCQ7Rb0d@#}Q+y*eOyM}}nT^)k$)o1|wN z7dXto-?2C@h3yFifkHkL%RxF8J1@4*L=EAGpAM#25BcfHKS2so_`%r6kGWgnEhH8C z*=5x^`2V;*PuK_Xnu*$!uO!a%CAzzC>*xv#%ff1-PO~`lnPBK%)vMBG0s_ z9pmJryCnc4|^P@S>DPh<8fp4i5XI58m|EJn4^# z-$AldHC70fetGp$r6IA$PE2sj z2k=%{QnCXOJ>6b3jtM8s{-;Li`!>{$j5e<`Pr!)MRG!q8#e%JG|E%(d=VLB&_L=6J zW${=qe0rl`L_@+E`ruurA5eu_#)+bGG^Tqvy(M7QdtXfDm@BlRR%u{E-7OOK^dS`0 z7B^jFdS=tjIa#a$Lx1=$}JOUouK?YBFagZ0d9?*U%%;nkwpTZ zzaVQ{W{O-*y2dielOznKo<`Y0V=W>~mA#9wEPy_=2{=!J9$K6Yn3aRIU1mBKpi8WV zb0b`lGJhY*M;o_2!Q=43ztQ^p9hgum^JDWpUbn?;BtFxi^2W)Mb@pLKuY65>C>kNd z;+lj>n3JCp2a@^iLbHp+Kn2v8Doq|?+w;VHU-qYTnZ87)Qc&)^$68T)~8Ib_5F<2^Pcr_5l;d4!3az%GD3q%(Y|M4n(F5uvX>E7AZ=eK znaE{6z8}tsy0UN;{zG|0{dx6Ft4EYg{ssC%!_nLE7DA&prAEHC1>lEv@VMs<1frBc zC6x&=oy?)cUTas%ey&KeT-hDvA0+*s7psQ9NjHl#xMP6$sFn^qU4g#sjF1#D9u!`I z6rn~usr4R2>>Po8m9uhl=DO+>h41J<4p#ZF#W*<!*F;VdKizdnwWz zJ|Z|wQGcg!29-s$Z6VzXJxz}#%M?Cs(fb4Sz31mAuQ)da&rPz6<2qKAn;ygJwMGP{ zF*86gvO;2IE67**H<=shq^uZgGqN<6nd+eFJ+;XGmK1Uf3bOBV$7+(iz?5Un8|{~8 z!XKMV+Lf-OHA=$Q7WlKRh*NuG7)Yn*3#_nv0Nkn?fog~KxiU?+mgs*RHa!YnEQf(f zcTV3*rnecBW`!Pp=p2u!ld#J+QtTmoW!uFsJM$ZU zz>H$>HEOXsNg*~Z|3OO_?6O!D%fkRU@oe;4PJFG0dW4Rr)aEx;B%X`8zSso=*L?$k z3u){*kLs2zp*!m01ri9-#^d<}#&3__uQ66eJ;@B@g0HdIE1A@3tqaZMUON(O@sjSb zV=35Y@|>XIlJ8NA<+yMAMChW$cH@og%aP=e(*$^)&7C<8Fe?=?s(0 zuT!^nXqE|DaVma`$(`4pzp#AT;#rLH+jBB!WHrqE85+O~BDkd_P}e=y4v>iB5$0&$ z_hQn0LO7#BaH9^t6@auomKKvubwJjKIgiKbl>8;o->?lH#>gn&b568x5@y=M#1KOw zRmB3}?lL|rc2+D>8=uD}zZc(mO%1mZn9a>VILtP$EX&Kk6OHi;j6QFVB@Q>H?5teX zep%i_g!;cCT+kx&v9>yi;7=dJ(iFd-OGHcO#cJXnB^8J1f|}EWtj*F{8M{iCKI|~! zm)oXQj@gTBmb>bvu^-&rjyziuBxH_Ma?pww6@qHhhRA!GF&i)myBQMd-tNMW@yRrNglc4KzeY?kO}f$nS@y?|n6`oW{`&dAkhJFOWUGVfP=; zZ_?{qPcgsQ*7fvvHEPt^9Qw%8$u|%+3QakElukp@l&~S~s1N)rTQu!{`Z;3$a|r%( zy-$qNNssX8NzgRx2x0P9|6KfKRLX$d|EWAvh+@;{ICMeYx%Q%0>17T6W&jebd#N#; zSJpzy0M|!VBlvh+SM@#bkviLxm;;|%6j{GEEP4ls>p9!%HhlV)I_964S!K}|hEmJs zqE}~C!SijYU^BZD@YGu5f~~}Wk#bXO31swU)oWrIp~g-giNqhVbL5UuzIR@@H1LOK zV}A>VC3vq>-srSZG*-q~+UjBVv)1xSJ1>^?osrakbF;fRXf^X`s8_3WYz4B1@}FYw z%xPIN9kg`Gxm2#ZQoSdZaEdm3-4iM*iTVrtXDyQj_9CW2KVkO0@$CJ#^)?@dszb$T zQLi`LvXaLUKO_2j?f%OOC_^ZK*s_ac1#&TPv(fztgjn)O)q_m$bYRb4!^a6-peoqY z|B1NsRWYYlX#yfn@54!6*rTSG%CGsRc<;0sYNE z135scr9L#ceF~n=fgF=l`tLjz+9`;K|EqSK5J$!=U&f@wni=x`9WUxGickLkLfgM? z#AtD4y)Vm&$NyW|b|qhD1%_q2g=>KhEiHjv)_H&Kjp1Fqdp}u=@x=fT)PmVm#!%;3 zaAifqu8>SRnOk4xs)Nnn$NYD3^FQ0Q;0hAM^P@!6PR$-&FSTNRkYRpu@G@bVHIveP zFEUpk&F&%JyIo(Lg4FfrM6pgvtP-;M%A0@uz zhPGGk?k~W5e~#w}h4xYud=lF+|8`Z-ntqVKBD8VR33zPx`SYy;CA3STo<(!^cjWk2 zWd)=i$?TgP_9*}5ui2oz|oaV-91$gcWZ1se4y!4QLzd`L(#vFL65k{&e zzvkkh40gOX?&hq)x^;LW@PO1MjlRoN`cxv&VEbm|w@X-NlY5M>=P}*h{koxksTI0i zAL+t#t8>q6+Nb3vu;OLYk*kmFA^1okMWOG2nje5vw1t zGHzJ(K3`_zyJY8IH26RDn#sI8xb9JT80{0>)z+a`54o`(sEz^xk@V+E=`s@cYuw1Vy%iE!h-(By>Tw?$?u0h!?8-ANAJ{xq<40Dku zB(r&-hd*~8qe~mJSlkDF`hh=Zy}`^zs9oW0)2RX4p(cFLWKcg2G<*t6Y9nSnESFCa z7`!7r!SF5gvV_DwJt==@P_AFt>u`RU9S7Fh-s9)P@ z4O)_gL1fn7#oqLN_-@*ZJ!tIV&W9tE!T>)Gnp7Y)1k-C)o4nF2*1J<^sYu=!m}-bs zdueM=U#|8^7bx;9OfJsO#!*N!1Nzv_hoD@|59H787l-xuy$iCyqOUj+0q3E6a-3$m z{Kr^wARpKUml?&N4uvyr3ZLk?Uz!*F0ei{bk%Vz>CsV@~qiR#S53ZKMWc&=XxW zvdOtuWxWnZX{9=FNcJ{aFfLK~9-O`Qa;oZA|HL$ki9xT`2S3p8hJEp3VdIy7u|@=3 zOhnXT37JZHiEYfs)tmXnX%OGZ?J>AEZYc6i!!G zBWe68(;e(8FTCG?yC0$oMqP7;Rx0zGim!0z*oahHdUBO~qLRZZR$kQXuKSpsOEfwS zG(2MaBBp9R?mM2nCdf3m&TGq#yWja|7aQ!XKbOuJSB;z~8NO`ZQ)37(`jDMgUp)V6 z3$hMw-Btmw@3DB@JbX&At>RM6?#3Yb;){2!#FtP@ph$W`h`Bz-?aM+ito7c5Zav?F zxUr0R#j^~jACv8j6m;v|X9cYeg!}dXKribPM=JTD89RvYQ44x8z&?VDNG5MT1KRNr zH`()gOkuZ*gat?0z+yh>}{f0wlg2A(>4q@|EOK5{@}i*qMYs$^7E%eR{HaL zE}2`@Yycl1XI`-VRBE`!(0bW7dc)(iKJked(xe)g&Tb1#1(3&0ZgkoR%DOnb-?-KR zlZ|+ZcXHme{Z_)C}&s7$^+UyCcc zr5k?jc?Eo_nLA*dgzGs}J$+FAb#}nj$)|q5{U8Op#_U9Ixo;9}EU`NyJ0bBqF9N#; z^kqU@2fgG0D;kbB7liANqjx9|n~udi?7(dAYw8Azeu27|-3r38;sO71g7^AIAsy$V zxSC*T?m0{_K$Erex`lteSl@2$vRO~*jo<#;lOVIs8_8GV{*IQ2q33JLfg0q>FH31y zvh&o#j&&U z0HH4t3+5XSzii88NmO_kQ$!`NXR=T+z_yZGcMA8rNY_KWU{_&sp%L8lc~xO$J5Xu! zXMV=7kuu4e+K`hRvIR>tpBjXl!!;#-C2azPx%~}Rl^xMX5gO9nnlTg)%_^m_F@KbBi}SG)=#|?cMN6CPkbb{X1k<+K$5Z270E}X!zVVM%~ zfMq|%p<5V*M~m-(Q?SH#e?vbeW6^SxeU3m#n)YWeWZTwk-gaYy$%=1`_)_NhMqR%; zdDr}PXeMg=Wl?G4GCvv-KpCapzVljbmxlUbnsm_v2_PT){PAeU^&3M*uisLY3~}!(;2Mro)=8`LX3NRw zBYBOT3=zaI&{0Qy33?oG-ge&032k@)n~!%c{0S$Q-c6Kv zBnj+2)$jB@NAr)&5+?z{?F&)9Sp|UUja)C0EK8O)X}{!Bec=JFVHSyn>!Sh>pt3^m zq!QfqNxuMDl{M=Yj_KF0Xj%B3DUD*72bCVP>Uty&t8Kbnsk3+rOsiVTCp!aLd58@rq&rL1U;$&OP6Kh=!GiU+;LFOtB`|Kvjl)Bf^ zjuUY|3S^7G-&;oLI`)Iqo2bRADL#5D@b`VS&V6QG^HkPZH~6k~yDSu6@M+-Ilfmee zAQ&jK!7-et-FXqzH}GosXC`3_(iMQ(s7Wmj>@AZun-pt(7#rmL1+oQr63J^C{5aX{ zyFFJ*c^#$Q>^v|Jg1kN5S(O*Ad{tHKUi>wBb?eQld?e0i@PXq8nAC z?hmp3YBDQ?W*nqM>o>?a<2#vR=D0EPtm0=!y{yWfmxma^wJueayyx$C@VS0u&7fA& zUmIP}0G}u1-z8jv?;vP%naavn8X#=J;Sq;82tI|q11-5^@2RX&T*J3fw0 zobY3Z*0gY0Jd*Kam;IFAqHT2}vA|FWIPO z#zXW^jgQmwy~XQw8*;x3iY&qV4z%6OZ!K-@$j|{)R)n%=oD9q~Ea>%od1qqY%|T$w8VwIFktz zu_1l7?O)Nt zZ)s@~kWIG@Z+}@*{&XMraa1`O&LE0Rfi0uWyWzCO=+m||KZDyjq|7?3$kldGON8T~ z;)62WVve=AZzsDRwQJcaiZq{pPUnx7MTRPRCYzd(0hu0iV)sW+Jws(%v*ANE;WC6! z)GrYVC;Gf>5AQHWeaMRe!V9V;>?FQM``@kj+^$;{_tpz#2*2S=+xbTpMJ$|=uaig9 zo9@E(j(Arlxl^OS_JgJpbkAUhX{47U?bO44?%|l%Yp@V2g-?cbvTY#l9K}ez4dHEH zSvb9AreGd7!AnI7frWnCdR&$GwXui_jOXiHa4@8n4KoYjW#){KjlTW<-q>2&bF#TB45>r#4STdq!D+W&5H`#eOFo%cOLEq- zj0~Ve+F)j8mQprfai&#?8rM=sTHxf0eVf6@$)KvX%JzGJV!H>|I+{?*O+_rb2ce$c z#-YD>ZjgWe#>S3Err8Rg#Dwq7wQ^=G>Q!aW2$Aoh_R%GqVcT3V3JMV#X6IE95kLxJ zKwaUv{&ZtmK$x#XALxx_500S#1@1z>z+l&hUq~DLO(E-cS4!J{)pC$NVDXV8mkze$ zXxj|_d_oPvSuNLBWxmE%(B!?2`FhAbY(68?yd&E}r|8K*ywQc^rF}6gsf73053Z83 zvLi2~GYb@9H5|D~7%4iq^@@s>XVk;3uxUqLviX0SvUHZ zm?Ld&+D@CCoYVe*?XwG2^0fW%p$@8{`^u00H$35Iu+qL+3-=Mo($v*Fm_l?cGeuP; zxGKfDZ3!Ymyjr z8*g3DSP0woOuZC|JI$}39#wB=MBXNy1HUkXj!^GR$$ID~M&#PTZ}Sv9q{Lgn7fJD? zrx~l!B+B1S@&m{lX zt#>naOdUmo>J?=&!-w$>lNTS&4jTG59PK($@$9O+Y=31Kk6M}lz+IKGYm9u`m~P^e zIlY{ErJ}cxKQmEaXQgW4$PWpZo~eI0hdu4$((V8yd znACrzs;xQ6nl4-B~A`cSw&IJBNU+c zr1Uv25EfTs=WM>dO}#|olcARz@^%{=D3dkQHA=v35}}xXXgl5i$EkNKqy^$HlbF%9 zBuEcjfQa^{ks}-KrV4zUi}xEyMIYY^A5DOmAf#?+*`;+;z5R<>0<8qwix!|xN!CgG;3fQ0=vy!?xaL>u^}a_`Aq6>1FO{c1xt7XPZ3b`J4{p(lCA$by&5Lnz7 zHaf}m6w9T2pKwA_q&ym8HG%`z23rEc_rzFp4&PV|7$4S2z8Zvl z+jvG_GeAvV(2dXX(APDY-lyZ(G1pLW(l4)C|^N<&u38y((rRNgPY71=Tl{jo*Cb;O4R3cqoO2totyk zDVP%7L}eXYSbkvMMz0yD!|6flu)6t_{bu>AgPsbkRPV$CIxT->j<$4PXP9&Ov5{5k zf;WoZAOMz?f@*5Houz4BxXZbGG&0580&N1O$-t+m^{I@EvO}FM1*-<1pPzO``ugW! zWo?)l^b`n^d|S$pP78-_3{Oaf?r-M@9BXpU3#psqA&25vH}L`1!-3k+p;x}Q6!dLg z2U!AFh&_$`XWj(?mCH>8gekmFSS zqEOln-qJ2QM(y-1?9EWcz%9L21|g7qK`Qkwh&&Cw{Nzo+(oSe|{$Wy(p-AeMS=ete zd+UcRdJ-CYZ@281Hq|e7i3~>6QsEn&tZm&GmUw&GSWuI4>n%5La}l(c{5sAr6wT|s zL8i?@=1}=dFpKCxT0H`7CDrt+;0>Eik&9)SB31aAV&}wBp`DJfX`;BU-mK&>DXpit z%lDR>x8`M~%bInd4F08}T3Ix*nO#yjLQaxhG*XG_&pl51$1SX$#R-Nyz2CNMI*&Yk z7csZnU^p4t7vh(F`^J>x#ET{QgnK1(UUH49Wz2T@8XH-zin(8CRjnG0;OjI*gIu#w z<>IVt#k}-dEiOKrX`!-QNuEykb^@r#kUw)U&9L| z@HPZ23aVQVPsCRQV6ypjA#E@pq(N|jS5G}VeD*X_JwD(Bw$qbrLD$NrZ+2dME9tQt zI1`2PyNj7^RVf>QZwXfza(q=#2jo}yc8vY1NR$U8fr~dh2X<26d{DV%CxoYc2f(-C zx}a7l#X$;12MypGh4-L{Odk|VgvLNHa7Rr57AcmH>t<Ms#rwbw<|0QZh3abKJ$;&2nz(H4t`Whw1-`bW!y8l`>>V7_17<7<4YbhP6J+$UR- zJy2=(!tH3xvzMc~8F+JtIiQ`zEuA&lobW5J58qZ_D?Q>)PUSkVb{I2D(6>PKd8-Uu zW!N?bCO{ZI>SRMgr~SB1|LQkkU`g+%18GL-X_Iv-D`gy++RNzM>Kkb)SNk>jU-0Pp zm2i2brZz-$^*3e9TBmK?S&&ZH^o!`m zw{I_9dnqZ0`HQvpEDf;vFwisPxcXA&E5ZSu93u8acyuG90xC8Nj06?lKLlDn3=D9e z7nA=S1P8fp{+`j<9>Z!LtZCxDj5ZZey;0H6e~cnVP!S zP(t8cR1zs8rfIYl=Q?y;PRvi1VRX|e?)m6>;A-)a%Mvtk(sukYZygizN`mIb$NyHU zW?+E4l4i?8dekMyB!4U}Vizlw&9v5kQmyO9IiaGSx3WXTSJs~1IqUMsj?7p;V-O)p z91rHy>`TOVa(X6QcPO)4e^DDQbMu^W2zBJzi{-F=Nb4aN_&j-p%o}9}inqzy87ki3 zMsFa!PG;Rpol!Ypf8}=5qq)Z`0G#}Z>6XF%skMbQTEWD^(X{cSy+3P@N8()}@$7}G z$aQpqw$g)T%6`Z%+W8^bJuk!Qnx>&=mPOoY2g?;D^&5y4vA`-BoRdG9w13qo){myS*b z8Ah9hMAW9*N48+*jpkUN#}?C;2v(lj`j3YhW!@Wm&r@IZsUD_3XrCcKwfUWAVg^w?f zA!hV$9uHiV58ou3(czeOC?ZP0)vwz0;dU2U`!KZWjlJ^(`e`7gpB4n7^KW3p1}z}F+vIKy5?1b9P1g*=}7j8Yyt(BhGqkmjn)C8G%d>*tda)fH>&C9 z+unBU-d|tkcqd5V79wsq)m!X4BKweZ$24Q+v>V?(zO!4Helm6v>!k$xq2!742Gw1F zBF(>EPRYr_{A^j~UU!(uEJt^X`guP29!}P&+BO|XyiyMM+>u`k^suPE zc8G)CAG~|8odZ@I*ssA(X>62?lrmoux+Ul5HiuD~@V2c_pc%=obAPRT#XVQgRkYaF{#V6PN!s$M^$!+813ED~0{WQYp#FIm#8wFHOZwGJo_fhJwi5AA839e5$IN%M#-nz%#k%YscsQ-~Zt7Ge)wrblr85{upPK zUM4xMs=nkmg6m%3#Z|hCX3b%p_=xd~apApEnMSfN@M~);Z&w=TR~*IocDeel0s`~Z zrTYuL8#|e+OVJb2r-_FSaC-!o^zPmxwU5}ebk*=1ov{^vF^g;N84E4SC3~J!*Qm^$ z_>M+2Z+P{dr4n2p^vRKre;sdHc}P z6sB`lax7^OL=^Vq^orM>NHk4*Vp5+h_Y-N!tSyqfI1S@Y8d6LW;BI-wbif>vo=yeb zR>M<;1i;Diwg6=Dy(FZzBRb&v}g03J&}B<%;3pRs~Au3O$sDHY>ww_8x%oGEh7?jL|>SNQs|K)vFIWNXOa*uNaSH5F@YT+&NsQl~m1eLE(4&+znq}TuJGr9n z_@f`tp9hjG@TZ{R+fpQrI?}~RfBqyPS1dJEyxHOCKF44{QIAth2%)y!Eg9rL6ukR+ z{rEeN$^qi7g{Ow-hOEvCHp zoL<$2yQhZ+%N3XK(TeBcBcBI@rcAK0;Sn9izM+PVg{U*}Do#;8yT>=`XUcmh?~Gh} z9a+`&%6_7!sakCNa;88?dQEFxtg}xtjoENxp%;aEE4971;>JCf3erY$Bz+0AM~SZR zs#xuox7jNBl(HULd`vY;y*u>cD-}wH_F{lavH&kVPir2}qV*FWYt6b6YA#K;cxNtu z8P~;HnS-%vw2tB8az1^e0+0_O$apvjUk}KVRW|lv*d-e;MlNg!*xtw(A*GR>n$U^3 zeh)eDdb7GLt}5KNRxi{phiFFINRx0lDVU1!x*({Wlreq{d3_WqxKR9gak( zb%1$SwZJsrsa6iumsfYzop14*@x!yAjvxAInB@p3Ad5pE(S z+O7r0#{RfjY!c`~G@DuhQH4?usk$ z)jl}NAGuW4wx59!xGytDh@BZ|=)h;llQudG${<6{JdM%wFJA?GVh`{6c>7aS%>cOW z8v%O`qSed7OqhCOAx;RVY91dTv2-7Tdu}3AGJ|L6nX<&Q0U6NkNQFv=7#<_9^AWGQ zYpDxn?V7D6`&X3;;4_Xbv%CmB+!$FFq;wax92=Q!U&cNp2T~lb)3RkMiqnq}BEI9! zl*;;=e>uRs`FT9=6;=(?J^odZi_sS=S9QV)8G^4ul}k!u+CIW$#IZ}xw=AV6S7E*q zg!*_nw};7|N&q`;GBVn~YXMYvZN0QZWo+M`mE?2Jb;j3*1vp<%xiLu>0<#}&Y}#GW zSHBiVNqUoL3SO#Vk_<1Mhuhxaus9iJoy>mZut20V)=|+4ea)iasJP^EJL>#s>t)8> z=Saw^iZERGBFfZ7GHS!u|NaW-i4Kslbo*U?SCg=wRdH;{R{_%0ca{>|{ie8MOAE{< zGeJ{$RjA^kOgzh349{*iY-&8 zzaiy7C=5_J3@=~YT7e{xgN_&(zVTKTROBRRHv2#}Ssd$MK5ch5KfIgiU}aezXG zK6+#u`+EDw*u(8=l{a`<>Wi9kq#AmC%AXU5Pkn73+bVg0?a|_-3BTE?_m*2;ycB9# zt1pQq=>o>E-FpF25YbpfxSpCG(>b>uG=v(?&-}2@cR0_0*%@yK01jWcfjAx+qba?2 zygSgTU^Wz#yojFKP3buA)~-zbdb z`Bw9$98}B+Uqx)`{v@`B#tVDa zPGv1d^&wx11i)oY>|i4{7A^ek@+i+P?0KhJpFcM`i#`5MeN;0=7&1g{U*v#uW~K+L z96nzPkDcJF&LxzxRnJz0)$_L~*%rCCLKH6o=mCl(tXFNJE#{yRwOlk?=ypivgpfmh zNb;hMEo0V*j8x6!)gAc!vt?o2 z9HI=GKb2exVHV1+t4vsG#i_0qxZi|I7$LUYJMX5`>#grqnP_%5l@*2AbSg8cdvE4M zZT=N9%rKJS5JMqt?!FNs-i+Vn!a5sYG4ktDctf;8h0^B~orCEYT_;`M7mdG9TMNB> zYWJ`|nEY4-n6W3bVewFtq&N1v5)gZPV>lR3(4d4UM5ad-F#4kX=NI(Tj+{{Q`iIj! z&T799>g%U84uUf4l3Ezz#6)h{nguJ$hom_#bjXlLmLeQ}aC_&KbBvU~3niiNG9TTO zszU93;OlbFZM09c{{N{^xJZ-_{1o~@R5@t&>9yCnY|5t4FuQu3fp9ejk% zJi}WhYX9=LXR%}jj4kT;kTr^+&D^+q`=VXEVUdbze?Kzict8fV_?Xy;rJPUhc!}dC z30!N&DCgMz*;}&nEY2OJ>L#ohX&Hg@XFK>!_Z{sFCKy@RcFzIc>X%jhBz7rxH4XA2 zSB>6>|8J#kpmfRCHp*~+FM+vIJ~N;_=P@DiRYV0uUi}}om7Iw>>W(+yBe`(5*gttJ z34O+hkkqSXM{?nBn$}dCBxLW&$TR-l$QzQTbvTs^`t7R$4N2aLe;m2{Pv2_5Z%JaW zv1`LKzx|J2ghXV^Ddm|3eygqFKq^|o@J8DCpKg{vI_p literal 0 HcmV?d00001 diff --git a/docs/src/main/asciidoc/spring-cloud-release-process.adoc b/docs/src/main/asciidoc/spring-cloud-release-process.adoc index db5dc57e..0def3251 100644 --- a/docs/src/main/asciidoc/spring-cloud-release-process.adoc +++ b/docs/src/main/asciidoc/spring-cloud-release-process.adoc @@ -111,6 +111,31 @@ image::https://raw.githubusercontent.com/spring-cloud/spring-cloud-release-tools . Clear the Start_From field . Click Rebuild +=== Signing Commits and Tags + +The releaser can sign commits and tags when doing a release. Signing is enabled when the flag `releaser.git.signCommits` +is set to `true`, by default it is set to `false`. When set to `true` you also need to set `releaser.git.signing-key-passphrase` +to the passphrase for the key being used to sign commits. The key used to sign commits is configured in either global or +git repo config properties. You can set the key to use by doing the following: + +```bash +$ gpg --list-secret-keys +$ git config --global user.signingkey +``` + +This will get you a list of ids of secret keys know by GPG. Select the id of the key you want to use to sign commits +and then set that id in your git config: + +```bash +$ git config [--global] user.signingkey [keyid] +``` + +The releaser (JGit) will use this key along with the passphrase you set to sign commits and tags. + +Signing commits/tags can be enabled/disabled in Jenkins by checking the following box during a release: + +image::images/sign-commits.png[] + === Commercial Releases See https://docs.google.com/document/d/10pk6b2Cy0OW9fzFKEHSRIys-2Z_rseqnu7CIYFXnJoM/edit#heading=h.slor8nyo3f1n[this document] from Trevor for more information on the requirement to create release bundles diff --git a/releaser-core/pom.xml b/releaser-core/pom.xml index bb86f048..7e1970d9 100644 --- a/releaser-core/pom.xml +++ b/releaser-core/pom.xml @@ -95,6 +95,11 @@ org.jfrog.artifactory.client artifactory-java-client-services + + org.eclipse.jgit + org.eclipse.jgit.gpg.bc + ${org.eclipse.jgit-version} + org.apache.groovy groovy diff --git a/releaser-core/src/main/java/releaser/internal/ReleaserProperties.java b/releaser-core/src/main/java/releaser/internal/ReleaserProperties.java index aff6b89f..c68f90e8 100644 --- a/releaser-core/src/main/java/releaser/internal/ReleaserProperties.java +++ b/releaser-core/src/main/java/releaser/internal/ReleaserProperties.java @@ -615,6 +615,21 @@ public class ReleaserProperties implements Serializable { */ private boolean updateAllTestSamples = false; + /** + * If set to {@code true}, we will sign any commits we make. In order to do this + * GPG must contain the keys for the spring-builds user. This flag can be used to + * override signing preferences in the Git config. For example, JGit will sign + * commits/tags if signing is enabled the Git config (either repo config or global + * config). If you do not want to sign anything then you can set this flag to + * false and the releaser will not attempt to sign anything. The same is true if + * signing is set to false in your Git config but you would like the releaser to + * sign commits/tags, setting this flag to true would enable signing to take + * place. + */ + private boolean signCommits = false; + + private String signingKeyPassphrase; + /** * Project to urls mapping. For each project will clone the test project and will * update its versions. @@ -877,6 +892,22 @@ public class ReleaserProperties implements Serializable { this.cacheDirectory = cacheDirectory; } + public boolean isSignCommits() { + return signCommits; + } + + public void setSignCommits(boolean signCommits) { + this.signCommits = signCommits; + } + + public String getSigningKeyPassphrase() { + return signingKeyPassphrase; + } + + public void setSigningKeyPassphrase(String signingKeyPassphrase) { + this.signingKeyPassphrase = signingKeyPassphrase; + } + @Override public String toString() { return "Git{" + "releaseTrainBomUrl='" + this.releaseTrainBomUrl + '\'' + ", documentationUrl='" @@ -888,7 +919,8 @@ public class ReleaserProperties implements Serializable { + ", cloneDestinationDir='" + this.cloneDestinationDir + '\'' + ", fetchVersionsFromGit=" + this.fetchVersionsFromGit + ", numberOfCheckedMilestones=" + this.numberOfCheckedMilestones + ", updateSpringGuides=" + this.updateSpringGuides + ", updateSpringProject=" - + this.updateSpringProject + ", sampleUrlsSize=" + this.allTestSampleUrls.size() + '}'; + + this.updateSpringProject + ", sampleUrlsSize=" + this.allTestSampleUrls.size() + ", signCommits=" + + this.signCommits + '}'; } private static String temporaryDirectory() { diff --git a/releaser-core/src/main/java/releaser/internal/commercial/ReleaseBundleCreator.java b/releaser-core/src/main/java/releaser/internal/commercial/ReleaseBundleCreator.java index ddc529f3..04e46d91 100644 --- a/releaser-core/src/main/java/releaser/internal/commercial/ReleaseBundleCreator.java +++ b/releaser-core/src/main/java/releaser/internal/commercial/ReleaseBundleCreator.java @@ -91,9 +91,10 @@ public class ReleaseBundleCreator { log.info("Creating release bundle with JSON [{}]", json); ArtifactoryRequest aqlRequest = new ArtifactoryRequestImpl().method(ArtifactoryRequest.Method.POST) - .apiUrl("lifecycle/api/v2/release_bundle").addQueryParam("project", "spring").addQueryParam("async", "false") - .addHeader("X-JFrog-Signing-Key-Name", "packagesKey").requestType(ArtifactoryRequest.ContentType.JSON) - .responseType(ArtifactoryRequest.ContentType.JSON).requestBody(json); + .apiUrl("lifecycle/api/v2/release_bundle").addQueryParam("project", "spring") + .addQueryParam("async", "false").addHeader("X-JFrog-Signing-Key-Name", "packagesKey") + .requestType(ArtifactoryRequest.ContentType.JSON).responseType(ArtifactoryRequest.ContentType.JSON) + .requestBody(json); return makeArtifactoryRequest(aqlRequest); } diff --git a/releaser-core/src/main/java/releaser/internal/git/GitRepo.java b/releaser-core/src/main/java/releaser/internal/git/GitRepo.java index 49096bf2..50db2db2 100644 --- a/releaser-core/src/main/java/releaser/internal/git/GitRepo.java +++ b/releaser-core/src/main/java/releaser/internal/git/GitRepo.java @@ -25,6 +25,7 @@ import java.util.Date; import java.util.LinkedList; import java.util.List; import java.util.Optional; +import java.util.Set; import java.util.stream.Stream; import com.jcraft.jsch.IdentityRepository; @@ -48,12 +49,16 @@ import org.eclipse.jgit.api.ResetCommand; import org.eclipse.jgit.api.TransportConfigCallback; import org.eclipse.jgit.api.errors.EmptyCommitException; import org.eclipse.jgit.api.errors.GitAPIException; +import org.eclipse.jgit.errors.UnsupportedCredentialItem; +import org.eclipse.jgit.lib.ConfigConstants; import org.eclipse.jgit.lib.Constants; import org.eclipse.jgit.lib.ObjectId; import org.eclipse.jgit.lib.Ref; import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.revwalk.RevCommit; import org.eclipse.jgit.revwalk.RevWalk; +import org.eclipse.jgit.storage.file.FileBasedConfig; +import org.eclipse.jgit.transport.CredentialItem; import org.eclipse.jgit.transport.CredentialsProvider; import org.eclipse.jgit.transport.FetchResult; import org.eclipse.jgit.transport.RefSpec; @@ -85,9 +90,17 @@ class GitRepo { private final File basedir; + private boolean signCommits = false; + GitRepo(File basedir, ReleaserProperties properties) { this.basedir = basedir; this.gitFactory = new GitRepo.JGitFactory(properties); + this.signCommits = properties.getGit().isSignCommits(); + if (this.signCommits) { + log.info("GitRepo signCommits enabled"); + CredentialsProvider + .setDefault(new SigningCredentialsProvider(properties.getGit().getSigningKeyPassphrase())); + } } // for tests @@ -173,13 +186,14 @@ class GitRepo { void commit(String message) { try (Git git = this.gitFactory.open(file(this.basedir))) { git.add().addFilepattern(".").call(); - git.commit().setAllowEmpty(false).setMessage(message).call(); + git.commit().setSign(this.signCommits).setAllowEmpty(false).setMessage(message).call(); printLog(git); } catch (EmptyCommitException e) { log.info("There were no changes detected. Will not commit an empty commit"); } catch (Exception e) { + e.printStackTrace(); throw new IllegalStateException(e); } } @@ -334,7 +348,7 @@ class GitRepo { */ void tag(String tagName) { try (Git git = this.gitFactory.open(file(this.basedir))) { - git.tag().setName(tagName).call(); + git.tag().setSigned(this.signCommits).setName(tagName).call(); } catch (Exception e) { throw new IllegalStateException(e); @@ -384,7 +398,26 @@ class GitRepo { } void revert(String message) { + Boolean originalGpgSign = null; try (Git git = this.gitFactory.open(file(this.basedir))) { + // The revert API has no way to disable signing if the global git config has + // it enabled + // In order to make sure revert commits are not signed when we disable signing + // we have to set + // signing to false in the repos git config + if (!this.signCommits) { + FileBasedConfig clonedConfig = new FileBasedConfig(new File(file(this.basedir), ".git/config"), + FS.DETECTED); + clonedConfig.load(); + Set names = clonedConfig.getNames(ConfigConstants.CONFIG_COMMIT_SECTION); + if (names.contains(ConfigConstants.CONFIG_KEY_GPGSIGN)) { + originalGpgSign = clonedConfig.getBoolean(ConfigConstants.CONFIG_COMMIT_SECTION, + ConfigConstants.CONFIG_KEY_GPGSIGN, false); + } + clonedConfig.setBoolean(ConfigConstants.CONFIG_COMMIT_SECTION, null, ConfigConstants.CONFIG_KEY_GPGSIGN, + false); + clonedConfig.save(); + } RevCommit commit = git.log().setMaxCount(1).call().iterator().next(); String shortMessage = commit.getShortMessage(); String id = commit.getId().getName(); @@ -395,12 +428,28 @@ class GitRepo { } log.debug("The commit to be reverted is [{}]", commit); git.revert().include(commit).call(); - git.commit().setAmend(true).setMessage(message).call(); + git.commit().setSign(this.signCommits).setAmend(true).setMessage(message).call(); printLog(git); } catch (Exception e) { throw new IllegalStateException(e); } + finally { + if (originalGpgSign != null) { + try { + FileBasedConfig clonedConfig = new FileBasedConfig(new File(file(this.basedir), ".git/config"), + FS.DETECTED); + clonedConfig.load(); + clonedConfig.setBoolean(ConfigConstants.CONFIG_COMMIT_SECTION, null, + ConfigConstants.CONFIG_KEY_GPGSIGN, originalGpgSign); + clonedConfig.save(); + } + catch (Exception e) { + log.warn("Could not revert gpg signing configuration within cloned repo.", e); + } + } + } + } String currentBranch() { @@ -620,4 +669,51 @@ class GitRepo { } + static class SigningCredentialsProvider extends CredentialsProvider { + + private final String passphrase; + + SigningCredentialsProvider(String passphrase) { + this.passphrase = passphrase; + } + + @Override + public boolean isInteractive() { + return false; + } + + @Override + public boolean supports(CredentialItem... items) { + for (CredentialItem i : items) { + if (i instanceof CredentialItem.Password) { + continue; + } + if (i instanceof CredentialItem.StringType) { + if (i.getPromptText().equals("Password: ")) { + continue; + } + } + return false; + } + return true; + } + + @Override + public boolean get(URIish uri, CredentialItem... items) throws UnsupportedCredentialItem { + for (CredentialItem item : items) { + if (item instanceof CredentialItem.Password) { + log.info("Password credential found, setting value."); + if (!StringUtils.hasText(passphrase)) { + log.warn("Password credential found, but passphrase is empty, did you forget to set " + + "releaser.git.signing-key-passphrase?"); + return false; + } + ((CredentialItem.Password) item).setValue(passphrase.trim().toCharArray()); + } + } + return true; + } + + } + } diff --git a/releaser-core/src/test/java/releaser/internal/git/GitRepoTests.java b/releaser-core/src/test/java/releaser/internal/git/GitRepoTests.java index d285fbfd..fd3ae832 100644 --- a/releaser-core/src/test/java/releaser/internal/git/GitRepoTests.java +++ b/releaser-core/src/test/java/releaser/internal/git/GitRepoTests.java @@ -58,6 +58,7 @@ public class GitRepoTests { this.springCloudReleaseProject = new File( GitRepoTests.class.getResource("/projects/spring-cloud-release").toURI()); TestUtils.prepareLocalRepo(); + // Use the constructor with signing disabled for most tests this.gitRepo = new GitRepo(this.tmpFolder); } diff --git a/releaser-core/src/test/resources/mappings/commercial/create_porject_release_bundle.json b/releaser-core/src/test/resources/mappings/commercial/create_porject_release_bundle.json index 8dd63fce..0da4351a 100644 --- a/releaser-core/src/test/resources/mappings/commercial/create_porject_release_bundle.json +++ b/releaser-core/src/test/resources/mappings/commercial/create_porject_release_bundle.json @@ -2,7 +2,7 @@ "id" : "0b389dc6-1b73-487d-8122-41f1c974647f", "name" : "create_project_release_bundle_mapping", "request" : { - "url" : "/lifecycle/api/v2/release_bundle?project=spring", + "url" : "/lifecycle/api/v2/release_bundle?async=false&project=spring", "method" : "POST", "bodyPatterns" : [ { "equalToJson" : "{\"release_bundle_version\":\"4.0.7\",\"release_bundle_name\":\"TNZ-spring-cloud-build-commercial\",\"source_type\":\"aql\",\"source\":{\"aql\":\"items.find({\\\"repo\\\":{\\\"$eq\\\":\\\"spring-enterprise-maven-prod-local\\\"},\\\"$or\\\":[{\\\"path\\\":{\\\"$match\\\":\\\"org/springframework/cloud/spring-cloud-build*/4.0.7\\\"}},{\\\"path\\\":{\\\"$match\\\":\\\"org/springframework/cloud/spring-cloud-starter-build*/4.0.7\\\"}},{\\\"path\\\":{\\\"$match\\\":\\\"org/springframework/cloud/spring-cloud-dependencies-parent*/4.0.7\\\"}}]}).sort({\\\"$asc\\\":[\\\"path\\\",\\\"name\\\"]})\"}}", diff --git a/releaser-core/src/test/resources/mappings/commercial/create_release_train_source_bundle.json b/releaser-core/src/test/resources/mappings/commercial/create_release_train_source_bundle.json index 397907f7..17dd02ce 100644 --- a/releaser-core/src/test/resources/mappings/commercial/create_release_train_source_bundle.json +++ b/releaser-core/src/test/resources/mappings/commercial/create_release_train_source_bundle.json @@ -2,7 +2,7 @@ "id" : "0b389dc6-1b73-487d-8122-41f1c974647f", "name" : "create_release_train_source_bundle_mapping", "request" : { - "url" : "/lifecycle/api/v2/release_bundle?project=spring", + "url" : "/lifecycle/api/v2/release_bundle?async=false&project=spring", "method" : "POST", "bodyPatterns" : [ { "equalToJson" : "{\"release_bundle_name\": \"TNZ-spring-cloud-commercial-release\",\"release_bundle_version\": \"2022.0.7\",\"skip_docker_manifest_resolution\": false,\"source_type\": \"release_bundles\",\"source\": {\"release_bundles\": [{\"project_key\": \"spring\",\"repository_key\": \"spring-release-bundles-v2\",\"release_bundle_name\": \"TNZ-spring-cloud-build-commercial\",\"release_bundle_version\": \"4.0.8\"},{\"project_key\": \"spring\",\"repository_key\": \"spring-release-bundles-v2\",\"release_bundle_name\": \"TNZ-spring-cloud-config-commercial\",\"release_bundle_version\": \"4.0.7\"},{\"project_key\": \"spring\",\"repository_key\": \"spring-release-bundles-v2\",\"release_bundle_name\": \"TNZ-spring-cloud-starter-commercial\",\"release_bundle_version\": \"2022.0.7\"},{\"project_key\": \"spring\",\"repository_key\": \"spring-release-bundles-v2\",\"release_bundle_name\": \"TNZ-spring-cloud-vault-commercial\",\"release_bundle_version\": \"4.0.7\"}]}}",