From 075ffa6622b48b7974bab5b12c552c6d37879d36 Mon Sep 17 00:00:00 2001 From: justus-e Date: Wed, 27 Jul 2022 12:15:26 +0200 Subject: [PATCH] small fixes --- LOGO.png | Bin 0 -> 14017 bytes README.md | 61 +++++++++++++----- .../templates/webapp-secret.yaml | 3 + .../devopsmetrics/templates/webapp.yaml | 15 +++++ deployment/devopsmetrics/values.yaml | 3 + src/endpoints/githubHook.js | 2 + 6 files changed, 68 insertions(+), 16 deletions(-) create mode 100644 LOGO.png diff --git a/LOGO.png b/LOGO.png new file mode 100644 index 0000000000000000000000000000000000000000..80f4cc0c65dd14cb5b702ef4e962033445fe3672 GIT binary patch literal 14017 zcmeHu^;gtw^ew)q2!e#tB_Pru-69}0w9*PF-5mlFN+~HJ-Q7r+fYM#kDUH(IaL@R? z>;7{8gS)P4`TDMz&wS?jJkL4%?6c3F&q@kXSQsQ2C@3gcGSbgqprG71K>odR8(!%i zoeO|}&~2nO?NLzfwIKiA_{wyT6kgJ9xj>ZqAKqaHfD59Mh_`|?1r|d z@F&ssl}PYNSVmU#IN&%g%li`0-*QanmHeV{7r|NgCEyM-7d6ct4C?<<=~Fqz4TA_S ze-+$GeDgO=xvCr|(5(Pgc%1j)mg!aI;ZSa>_j; z>rqgicznEvf__H;<sL%fU|1bPMwI8pQj{ZYY9h#URj@EY4EH5vAE-Nb= z6dc_8`}Z46EUeZfVK==uZ&Eh!b6t7}|c9 z?K=*gVp2j1*8JQ}^51OCx(z})?uR2LR#p^a30GHF)ti-53*Bsu%qE;C<`e;_Cv2fY zd(z)8kERwwT%JFdl9D<&JZufXXTliAyhuhmWFgS@c*a?=W20`XmPyCsbQwJs z>*Kv0wwalk-Hoz-h4G7$k`j$t2h)S2BZYC|VKz~;PoH4@?5?h^k1rDD=jSy_4P@T$ z_wwHNAUKp5_)t4GFo1)GO%W8x*6{8{-};|FpX03?Twe60dAy^)m*aLkZQq~KDnz}I z6>k-=Ufk$0)R+GBj)2nfXyGe$LgVoGs_754qp-cY?{`}>k_9<9@Z{y?BRp7LYEn@h zH;<;Q*_NlZ3JJQSSeTYA?C=~?ioTxKSu{#zOMkpKTyb=CR4Ww!{w8^j`TlA@+vWzp z{Ys=0&nbLERc&o;-&t`EzA1+YqZB0SaHcG4&7)bD)x;OhF~V+6%-Xf(!{i;!?W10` zzu+k--4B#s!v-4`<25%omzWHu@!2g&Pvk4vTCF{snW(g!a>3pI^l4>fWxT>%eb}s` zR6TV8zL|+hy(p-{d@QQI&2w#IBPd$OHFtwMr#csR*JMH#Ma~bFFDxv)x@>upmtPbh z?tc#%HC;Ns0e0eOf7_y1UZoWl7H)7~jUH`I>2FQf7#534xWMM!m5pNltoZaaV}rXd zr?{BSs(Rk9bS&lL_vL%TzPxkqIa%uuhDyiy(qR|)Y!{xxnMKuO;4k{!%Wz&zbZ!eF z7wpnmEO2mgYE##BS3M$8`ILg1%gx2ra&>vmbX@-@+2hRA!O`(+{cZe(RKAB5TU%RQ ztwIaObEnqR)g|x@IJ^!I3;+DeZci2W*E>7-V_0mb;Bk3479-;6@&5Yq*sxgaR&^?> zsqn>4^VeVqI(>b8q1~4I$R~i;87e9(+ptA0l#WPzt5@R8^|oj04U2!e^kI=p=hoHL z4Y&w8Zv~;E-AmYAJv%#FxICU?JJ>Kza>*KSSz3a}_%%HIV9w**l8c)gpJTgU_o&on zzA1*+TIc^x#MNX^3aJpX&u}~^XY0l36%`d<_Gzf2*mNnj>yLHb?srHHd~g^o)}>Sw zxpbf^Q%DrRPfScKv7T!vbDb$Q?A9AA()QiJ!7cH;zS8*iM)U$=&$ssx;oJkXjD5Hx zp_AZTt>ZesJ45dWRJ648bQ%KI*BTuZoW^}YA3l6If%L(Mm3j)X!e~BPz_6hhMj`CV zwbB!NU*!5?pTFLtEr@t5V6B52a)?pr}D^qFgKot<%Q1vc@yY zcfUWJ{PxD~J3WN=L&L(ts+Xf)VN7J_<}xTG@F|~&J1_l)?J2Qa?s~UgScMVmxbyqx z+S=MD$X?stSOG_~jhQ;$BETH6BNAfb&&U9A+R&id{}=6CJQm|h;|22ZJi&r1xVUg; zwsY>s_}>P%%__8n;ER2GX|UnseI)`3TDNBE?#5QYE>$lCFk!?V`X>rHw;@3#b~&m~ z*H#?u#k;jse~kDF(_dLlMwh8|b%F{>LYf@~T7_zBjnQP&10TA~&CLU0i>iNryxS(6 z-`FU^+IX?Y=U#hqO;Tks@j~O1l%%8{1U@?#mr93FUOyIj&iC`}#>Ou(QqP6X*3$3e zLEh0NzvlqJiWV~(F{=g9NmE`(2SIp=VpqU-cm(TI93e|oNE3ZRJX;J;rq?jHB z?(W5YzapZChPu*vPG_8@zM_I#tyo99gE>zgR;pF!Wcju%$!)8q$tbaNZO!DZCl)KU z-eOxYyJ1&k(~7eEtQ{I-Zb=FIZ8WrWILGNS9k8?P>}vtX_M*pwkrQBh(m zGp_4}yIXbJ1RQ~803wX0BYCR6Es(iYKj^05))q6h72jOe$BNl32u2{0REF9qJ;}7S zwHK4h+>W<2zQ41*L7G?(zy!Bs-C($E4J0HyI;>LZ7rB9ga(%rqG-`@Bo}SefS#5aJV|8=KGv`;A+~(Z&w#A*bE=k8OTT*IkVs~cH zv9L0^>`~qUaMAPgE>73jOCu0z%e@Kw5mB@U|8tEC)Gl`SGlx2RGc&V+B5lFf-`|BP zjr8sw9ZAZ_pij@tZ1&aKEn{3}59Xd|A=xFK{*4pcrxL8QDP;rq+cx@KvysLx;taNhErW>b|ckL6;Xb>f{- zBQLW$IXU?~cYVccNGoVM^r%3iPku}oksUwTQ+_E{5g`@`{zUJ%sL|E?r;?wc1O{(vH1_0lna{oCGZ0b zQ=~E)zI*pBrM&!sj*gC#v8tL{Q-8l=(YKmA|2|^f@r5eV$f|5&=O-E^4&w_2OG}og z7dzsJQOl|sKjm~u0oVe=ing20DUtYxt#@GUML5De))%g zjf+Ec+CGTy^#cS{E)^0MW(V|yIAKM8Q?FiOUw3zRiT$bq+=`ZtF1@lcDxBM8&j1nf zzprpT`;*PUZ)$1^Wjot||Ao9fmZfp3aeq=Z;6A;kSp2^w~CWdJ#!(QHY)oG6(?IEky<4)2^d#;d3hwq6%QR98q^e@ zJfG1H4DCCq`~`*cYz-%3$Gv3L0uSg|Sc1dxadAHYeRxsoQ~B=*5CD^=zvhvl);ahQ zpGj??w8w~(Mb^aMq6RkC5H>XO<)6dD!=2q-QAbDaR7T5h8q8~>h4C}|@bw=7^EYo0 zrDBze!Fghs*SW9uB`S>c+?buOzDF*QqTA>Z$(%|)1j!mVzquKllS7Y);fA&?7_^>Gj}=k43x zKerMfR16FZa2SUkLm*_zM!zTp288PA>4}I^O8$50w@Oc5tLabwVoHrgw;{o4S?*pt zKX#2jtBO7s$zYYWZj9VxlxL7=0Rhnes^#O?IdA*5>M56q&C@qDG|;oKWEx0FN$JD( zMl!Q>cXc&+-9X*wW1y#hW@Gatl{&SOz>M(W>;9A7Mcn)My<=ixNUxj&0|LH8M0nTO zuU<`W`0f)6IMCB(*Vd9GyB`tL%C7%=R`KoO-1`*oe&5)bYfM)9suTg|=7Lu4L!Z|1hp?C$@%KM;>Eu+YjWuDxL&M7(eZ=OOiUrKEJlC)QP43_$w~%p9414+cwU{uR zXIhXXjh(%{DVjC>50B-f&-l0oB1uWt!GTMw!pzWF!NrB&X?s>aM_NR!=(S8IKzZAb z52y^9|30k;A1W;?^L%>H78w)s>Ez^{Ymtr6Xo#$qR$R9*PpS3X(+3Y8D3xl6yZgAp z;#%QRn1*_aV>yjOEE?AnfQ)Qz&jZh5;CF3~BjbI4VpCmL_p;PS04|njX>S+InCKGa zcMl8+$>Iu&iz9(1gwQA8z<9aqYh)t2v$M0%(YU@(fR7ejUz?KhuqT$Yol2zJgo~Pr z>L-`pL+a9ntq>95DbV`DE%4_1~sBcMAVq?N6lIfO(_u|KHVjENz7{`@)LficE8 zvTzgeSP;>g|H_h&B&*jG&If)I+B7v4A5KfA2p_<}z-WTgCcm;@Tv#Bx;`DXbn5qL* z8!ypEqm?bzP;9NVn7|7ax#FXh`wdJSvQ?BBP?2}ZH=id_wyr(^P^1$&88A~L`H7)E?ivPj^5s{ zshk2h_wS3x$~hfvXhvUqc*q+WJ0HHSp~itcLGh|Wjy+WL~gBodvPRaS}J_aaV(3oMI4&`NcL1E$E0*fF}n2|M}1!ytvTsc~v%P z$n}}a@vx+F3K|Tism(?jB*4;OY3sth9|Ij+ed4_J8kWs4G(7UF!QJg&394{CG(&`x z0cm8R&9-0dE8Q%j85)p?2%;3B2qa*6QHNRg+WaqvYF`OF<}L4^Z;+W()BW`8qy|CY zt<%%f$O5{gcOS!PBI&TSxwKSN9zfO)vwAm~aOpwl*(uI^fbx=?n;UuDm`H9;=zVxB zPv4L7?5Y!o_W>DMP;uiG36vDGXfeYQ4IBc3EGJ@x{<*niCy}$O^X>MZ-e?S(eFd;E zKGy?!S|%)YYU}JFmiF{Oo@)L8wA2;dN@>2gv~R83Byc&ne_?Un ztpiT(d+RPij<%n;T+EZ7rhRuzWd0A40>p&uq1P<(s@e4D7e4+CJw&zvx*-&~i>#d; zo1SD5-AxX%$5d3JMP&?c0Hq=mzJC`oU6GGWPF6fW>UE`3q=)dUE}F7#BnS4K{hCv6 zvfiyq57lyMNig~6n;$O~g(W(}>sERF52+Km95y5TSc}YiMN@9z6IB03m-h z=MDnNr=TFn`kQ$7@8c2^yS(J*#e4AJk+sErUw{8**vRk-vk^u_Nd8-QsYW0L12y)> zP*?o89Ck&F`Vu~ST%HZuA8*fvLV%!&ii*ZOdHWwUHy3sCr`gFKVlQ6cQPa@8<%oqs zu)nX{-PtMn{J9Uc{N*GYR+GoStT&!(aOZQ`dqmqkvb4I2MCx$bd2HlW0MQ`eEM`J0b21|Pho26h1KiVDk?r{X=#$nI_3wKljT$@r?Pg^eIBZ+ zsyjzVm4e1l2cd;vPo*Af5txpPj}L?<@jfFS0!XRHXsx69((>|P)d-Y48_)8Aio9NsFbO;NX~Y|0*+9ym|AcQt8cTE{6{w+T14>bjmP- zKYH*~!#!=%GBQ8AzB2u(;c&<@g_KNwzt?F^k?}x20%9_LoEIc0M9A-OzpVud*EK33 z(9?!{Xrw}N&Jueqc=V6AW`^ZXlV;z+U7x>u2Q|T{%DzPH55R@|(13PKd_3vXvo#vC z6(9>w3_5T|)K%Hp*~?$nj{z}(`uCDE5!c)ixwRG(rM}^`MOw(pkgZ;yBo7S=yos zqD8y&oV!$KxTW)EnBP{~*7tpdo+RP;xY)S304!1-CC<&a04s!qQvF{GkLO0~oUJEa zFo_TIf`UnTU)UL#B^*hMJ1fgZv--jluoPEU6aC6o%w8^`x0T+Sq+wm~EKyqpUfBd? zgI;qXTBFecc7oKy18C$=Dy*4XSmXi^LZ6<|v-BI4yoN*0~QQ zrQ@$||Mc|q6C|%!v$Nx%mAWYY{{6dTs9FQ=Xu*wtH>p40svG`3rt3+5e!QJ+#GzTJ z7Sn5VcI;5obtDT#z%M(Sj@BF$)<`m2_X0ZAWuec&mYvxF6*KSo@_AfTvnqHnoeFEe z=7zQp(FdTZtf3*@i8t1M7IL-IjNRPb9T-l#L5DTt3o-H=N=%j!bY!?t?uX?vGcq!i zDDIwGKaP+|(rO(+6V!0-fBEty1OGx5IiC$mW@e_-Di`P-;(nM^DvyXVQtQ6(&c5?@ z#bKqTm2gIj27-R+;c8*A!ItFdC;_0KzQo1F)v@7(_7*EP3{K|D>Pzhw%Ig!Uzs_4- zU5J}#Xuld|1;qfgfOF->N=QiDxqH`p#4K~=uV|T3uacUY9{}UbRzXjXoaQdSw1L4R zr_D)2=RV)Ngm1V=Z2t_=im5hHl!`gy!pUW>w6?YVErq^VLE+v?U!rU;CI*Jxg!%+X zXAID3)UMNz>GvlIM|%2!`pj+1%@v!FE8(*iC3iXd%dd&#Ob<&jxK6u#u&$ItPd?D4_I#C_)($LJYN zZf@@JN=wpIM%yw2->sHe*L9Y1i;3{4D_%7%ut4JQkC5o*u|&`M1Mfm2w^%}#2nKc1ECepO+H-*EPq zNh?W>Vb?3L%&H!`V*K0QAHtUr{&y+@4m0w&92`5N>LN@hN@+3f-ZkBRFg7}hq>miO zn%D;Gmu-;QHh+g1$}Oixw+bM%Pe5D-koDHRy9ii$uW=rtia_}~<1Ww}5kO6-BQ z&!m?OWu-rPn*$l0he?r<&wGPDeHv&DbO`1)>LEgKqIrP^BEvc6^)g#w9#SFGpp*2^ z-!S~z`@4I4Vz##IoBYkdN+FRJp(l?Nst2+Q1q>-%+c+yDMs z&WkKqj(*my*g`ufnX#xpjFa6T_r4a_(0`MjmIg$M2@z#N0^12X3^s_t<=;WB9a3~( zmw_a7U!O7H_~Wsj$RBqIQhT-``Z)lJ*WTt7%sX=Xg4RBBInc3tUcE23nu!Zn)zu9J zDc&zU(-;bcAn^wr zW1#I~+u$C|HvB$*{7)-MhoR!I0lFk;7+i~nK+BZuhFVF?BD?d=qtmWc9j)Toy;lAY z04z}AKZUERtNZ`>@hmbr`sH4N===9VAft=-${`R#GXt>!0T`2YtKHn~&xT?gTr zRn*nt37WSGfQKN7j?z~XX3f;~*H91(VUJ*bMb&$u9y#tB8XP<_vaWKUP9cMPAA|#0 z&aoVTs<+SqMKaekth_4~8>^YAb52)Gei~Vjm&b^N<%`q(NFigre_U&^)H<7z-|i+< zH(uKOS5;OW-QDR1=uhETYQn<)4-*QeWpW^QJDK-4g-~++rVw{}sL4za?Jigk!-aCA z2Ip-Z(-o2`$91)Fi=*QGrluyOuqY;x22I%dxOs8CWH%!N!_PE{KogffdUkePkPWho z+FDvnu3nu1#WdAKM@I*xF9@olJ`7bNnJ1i_K?W1xe)9w6;O|Ia6tCNnMKl@pFO{Mr zFWF+9`W@&p;m{C>Z?=n)Kr{)=J9@rQiPQ6^*}_*2i(H>7YK;!2OF_5o2 zkW3G|dWhK#(xtPOnwZ#sBqSszE@J!z=WCbe$Jq%ngu&3p_}_-XC-0FCQg#Iw1`W#10N}8Yhfea>m*@i4y<#+x;8~SpIUr$G6 z-C{=tccRNiN&6Ron{GFd8eyjMR4a*z9boAvF`)e0w{Phg8PisHRFj{&o1meW!=s~p+7PM`7v$1HrJ7nh?vG+OOf9?{?lGLQdTGu(atw4U?>IKKB>7xB)Y;)a9C5 z&>SQxyPBJt-jryp)ilC{fuY>Fi|uu_7l@n?C@Zk+(ozm0%-eN#7CfZi>+AnCo&@NI zh9vuHWzwk>SBBA^aiR@`vbwMFLr z(+h?Uum#8P3?FWw-X3T$<>BJ`J)*9gY4BM$ATTi9v#r`mx(|0dyAkHo$Zp9XQN%OJ zwf;qp{~>uIx2@6z53K5k#SaioO9j-Gn5Is`TIU~`IabF!j&vuZ8`D*7#GrI5u3nU4Sh&@atT7$>*7ZP!cX7Zwy?0xxNS zFfoZ0b8q&?ZinOD=hPfRFNh^!Cnm?2TbZ1qmU|2;Bz^!oz?170w0e*@iM zr04u>0j1{!E-Z(w=ygq+7M2)4j4X(ryz!dhkDyaTYSifXpLHXw*GTYz%L(G10U?v+ zRR0WO=+Z+{o5P(Mm@$7zP7Vd_4yH6W-T=!R>PaM8SCy=3$RdM-QF`;{A@H|>g4oMO zYnWoE0CIQq_tU97wo*eNFxo;Xi=BuAG)weuJ(iEla3U5H1(QT1C*Nv+vJ?}XRq zNBSa;%OQAoclT%V)d8K>?01)a6V0Zl(Ecc#KI{Wbep{h6!Ya;(V%`yCQO6`sQrp(j z);84O>#^5K$M^o^39amSzgY$29!Go}0F5tnC(@f7KHeQf8kWdiS=ibN2@emK)aEw} zLQZbLE0JY@P5}@KNFz~H#y>PsW;_TgNrI5ei_I54sK^jTPF+?{&d<{`GJKT6swLId zNcLb3JroC+<_V9M4%oG@urSQpYz37f+Gy(|vU%+c8yh>xNHu>BQILZc2$V;$8}B`$ z*U&k#H=eg!tuC;ut1E2@lR_vaoaRcra++K3;$#;Z)l`GcnL0vj;R6^*(97nYZXoh< za(>J>&jtVeYgQqP%lJlHw+_Zu5QE;pqw(_aydXgqGoy9V3_Asf&r;jJo>ki}X2jNg zgP2&T+ioZmZ13&GLJlJWTDXS>xZnK#@nLPUf{At=`gbI^1(8z{fe4^3E@OBLB%qu{ zJyo}0-CS8&8K~=5E(ff4^S*>8ns*6VeR?13Djz&%WmVW`Is~3Z1u_q8@a=B|SV0pz z3nD;syFk=4ZI%QAi!8UX*@gOAmsv@%v7f2L{XkM0_ynS0dTD96-C-%{qA=_N&Trsb z#Ie$OR5j}gwV+S?JgcZ;o^$U}-ib9p&3J>mAg!!l&yKXXx^kV<<`X1M9EF1_0VNWu ztUAOc02tTEFc6ADCv-9WN~;+}=byPo5n3tu%m|o#ya-sdluD6I3Cu$U~?;?ls6?_(-qE z&i;P7fuW({Je(LT#B#gwx}n+A2!=pBR?}-c$xH`tp*QDq-b$F^7j`}P(l2mxXh8Le z`6#p2C@?e8ZoJ7TI0A1pY=Hw~n25&PjlZ}k+Ssr_gkZ*&z@P5)SkgWR0gEVafyXI&J-3WVd}zyVo=oTqKkjQW#;fxe@uGbdn~PYE+J z281sLEJfC#TFf;h9$C^036be~oYF$li@+a{1%Ledb^m{AWjU91>L(BckaX8+6)I*b zuy3D$*P&bvzK(x~(Lr;{Ht3{;37#4;=56Q*(!t;2WDL#~3h2Xq@?Hm8)G!5|-suKl zRp`bOy8}}_Nw)%tthO0wKQU?#M_;jfT)ac5!9eQYm=i9c{g%~+MaK6fe9#*D^ytuVrXdy0SR66>RhSA? zgOs${S95)JPJUIJGTVuvP1Tcc_K#$MKjDX~yL?s~H)NDAQs66Rj-93T8Mq6158}W} zyVsv#=@0q%h>)_r^)r5ce$bX5snGi1bnPD;_>7prl$vFuD>pyiyQ+%!@87@DU-?Be zQ<;#Jxg3=okT`4U4wVm00x&L)H(4NN-oeJEQ(1x`SOhQtWTlNP05WJXT^$wL@Jq#?NTI6Y-L9U?{_8ubf&jpFPl`;JNChV5oBfeRsm>m%{(mqV zjr{r*HxIV1-4yf-a0z%L^@}1hh&J%gHJMd}Gum5~iqTkYc4clM`sGY3aCsQ4S6?EV8{Wq9!A(W zV&s7IzyqoTS6e>chhF=U%F=~_uL1`$y*SYfz69ZjT_aD%ML^);LzJICfBFO@080D^ z84-`EuBz%=Ue1Mx!V$~)gQVh19hGj27b4(GzP{d^d1VrPNcm&8Ur326odcW2Mme0E zLHfB`pG>UNI6YBe$6v`HM_iX^r3i)JhL56TW+J&Y@Ro8g)sr|#oKo(j-{pKYV8NUd z?7O~no%T^=P;}<_*v-Qud2D^Qe^oTYxqtusGO0L)?%Vs*y%X$p;ls$6BVNoI zXJj+BdF^e+Yv|w4{^r{P{ilm{?Bic;0pn@7CW=H}aWT>uhTcz1PA-4s5t>jVo}2=7 z?D?x#ufjEpzwZUapiU5xlLrF{LhsLot6^^Ps5SquNn9P z>0&FO&*yU;9wYYpjs$NZUW1V33(y|2=_8mC!9t#-* zJ+M6-QKzd;dyjsGUb_@78=g2)2PK<`f)o8Wc;U&TNkv6O zAvF|BH5)L|mMoxQ?=)i3`OXJ}!29*}^|qip(ZiqEwhWI5;%5=U$BfucL%=p3nB+`X~7rx{0;5;!(IaNF9$m$-J~GfzB^+_VXauoGA$gtX8L>(9rgU)Yy(|K_p5e=^gw7cOVu=!d$= zU;;Mjf!9UG$Q`ti-A=mXf8Y4er+C~S&s#ijDPcn}<7r}M765gG2K0vT9{W5JrQ1-1 z86B>nGrK#ZdsFlp4f+i00?o3=B&4JfeVbcb3If$NND6U<9&(Asy$^+Q{MC@_J|aA(#jh0D*+ z4`ap?!k^@>&l8*`O$VV8Sz21+Pa*xGNS7KT4`oW!d$20`Zn5bP%%rw&hc+=0 zgHaLcj;h1cXDke7V?q+!Y+`@BXGccxH#ax&=a4>9_4jDc3QtzztuX@s0{>C&m`(dC zum;*js1&7pIb&VYyM@nr8#i+BL3Cvrfj7^D4j_j$s%_qm9BJG4a)a@xFK-i-eh55r zi{O<|ojF|$6_JE9d=LIO)tOg!5pMp_^689#-LXKou_5mqCE%cyP*>$rbqr~DH0+^4 zy!UT_7%(w4%{`k%I+|euGjjaj1E2#`_b7yjvXflRTAi`L;0~RH?qqW@!o}YMOik?| zNnuQA5C0KIksu-?lXE&aXgoa})76J5NG2G7WxN|;kkm9wtum^A>9zM4ni`OLs?!9) z+(B#&y1az*aP5oRmjO&g^cKf3@X#5z@=8PUBBbYC-Qei&Nd6*xWpT$wgbaiCQ~Q-3 zvE%672M@i9ii(h+10DRMSYB|6gHKai=yWMUW+ib0L41&=IL~nANskf$PTr{MgCW_) ziZLC*d14@H!C+3QUP}u^T*q8qf8|&M1>)6UG>VcI(zae%S*cNJq4^yubNiw3F`x<9 z&r9@L1K{Zj2Jn*-5H5VOgZ{Tqr0(Dhj*StzySuYPJXIrI_LJtt!H|T4Mm;gO&|Zat zJ01`$1S$-4F0T#_4q8CN9E{d3L!1g8!20v*_YSv*Ar>l0y@bB*g`I;b^Y!@FqWkxo zDD7#HqH}=4Z|mm3UEkz{`la~AZFfkuS&#EgF{kK54G|Q^{7BKzPvh0L`XkQB!vHt2 z?qNO3QgNhi!1*sU%J(=BMa7d1q*m2GX`E3Q)5@LKaB)E?em3HSoMq|Vd)6u!^2tB2 z;ZxdsaMFT2uz_?sOB`cjW4FU8Qi^~%PvRIwNhi}|i2|41bSPsS#<}H{m1+i8Fk^iH zd$T(zMX74=6yOB6z1ajZ#2$sQXgGBG`T$t56pU2m5(T(n zNF3241T$YSZnreJpNIFLdU?J)6Fd+h2d6E_gFiLOO_af_bnUZ>1V}JiFO+t(2KI|w z3(e#I_d|r~(s=FK0I*|sKpa~_Uw@JPIu`tV8f8ZEWC9L3c7(T4JjDmDn^o1d@yW@_ zOOQTsZgaJs1b$8=mVtec9mpjrDk?IMfjJ(sIH6$Bz>jurB&VW2yM2=!g#-B$o*SZQ zUYPKE9)o8CHy)zGZ+VDu98fxtKkWJcm;Ar8FFPX3A9pBDjkm!ZfPx|;q42y&?9Ipj E1&xj>^Z)<= literal 0 HcmV?d00001 diff --git a/README.md b/README.md index 46fc5c1..5bf5703 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,8 @@ [![Test](https://github.com/Justus-e/DevOpsMetrics/actions/workflows/test.yml/badge.svg?branch=main)](https://github.com/Justus-e/DevOpsMetrics/actions/workflows/test.yml) # DevOpsMetrics +![](LOGO.png) + A tool to measure software delivery performance by calculating the four DORA Metrics ## Install on kubernetes @@ -11,27 +13,25 @@ A tool to measure software delivery performance by calculating the four DORA Met chart includes influxDB instance + grafana dashboard -## Start Container +### configuration -Build: `docker build . -t justusernst/devopsmetrics` +In default Configuration the API will be exposed: `:30303/api` -Run: `docker run --name devopsmetrics --env-file -p :8080 -d justus-e/devopsmetrics` +Swagger Documentation: `:30303/swagger` +Grafana instance: `:30304` -## Environment Variables +#### import grafana dashboard -| var | description | example | -|:------------------|:------------------------------------------------------------------------------------------------------------------------------------|:-----------------------------| -| **PORT** | _optional_ - Port on which the API should be listening (default: 8080) | 8080 | -| **API_KEY** | _required_ - Authorization Key for this Api required to access all Endpoints | 'SoMeRand0MS3curE5trinG' | -| **INFLUX_URL** | _required_ - URL of the InfluxDB instance that should be used | 'http://localhost:8086' | -| **INFLUX_TOKEN** | _required_ - Token to access InfluxDB (can be generated in the InfluxDB UI) | 'AmfWLq5PbC_89NkpO\[...]' | -| **INFLUX_ORG** | _required_ - Organization name of the InfluxDB instance | 'DevOpsMetrics' | -| **INFLUX_BUCKET** | _required_ - Name of the InfluxDB bucket where the events should be stored | 'events' | -| **GITHUB_URL** | _optional_ - GitHub URL of GitHub Server where the tracked Repo is stored (default: 'https://api.github.com') | 'https://api.github.com' | -| **GITHUB_USER** | _optional_ - Needed if Repository is private or on an Enterprise Server | 'justus-e' | -| **GITHUB_OAUTH** | _optional_ - Needed if Repository is private or on an Enterprise Server (can be generated in the GitHub UI) | 'ghp_bitz8n81coxxnYvZ\[...]' | -| **TEST_MODE** | _optional_ - If set to `true`, the app will start in Test mode, operating on a separate randomly generated Dataset (default: false) | true | +1. Open Grafana UI `:30304` +2. Login with `admin` as username and password +3. change credentials if needed +4. select Create (+) > import +5. put id `16645` in the "import from grafana.com" field OR import via JSON +6. click load +7. as datasource select "InfluxDB" + +You should now see the Dashboard without data. ## Setup on GitHub ### Create Personal access token @@ -52,8 +52,37 @@ _optional if the Repository is public and on the regular GitHub server_ 6. Select `Let me select individual events` 7. Check `Deployment statuses`, `Issues` and `Pushes` + +## Start Container + +Build: `docker build . -t justusernst/devopsmetrics` + +Run: `docker run --name devopsmetrics --env-file -p :8080 -d justus-e/devopsmetrics` + + +## Environment Variables + +| var | description | example | +|:------------------|:------------------------------------------------------------------------------------------------------------------------------------|:-----------------------------| +| **PORT** | _optional_ - Port on which the API should be listening (default: 8080) | 8080 | +| **API_KEY** | _required_ - Authorization Key for this Api required to access all Endpoints | 'SoMeRand0MS3curE5trinG' | +| **INFLUX_URL** | _required_ - URL of the InfluxDB instance that should be used | 'http://localhost:8086' | +| **INFLUX_TOKEN** | _required_ - Token to access InfluxDB (can be generated in the InfluxDB UI) | 'AmfWLq5PbC_89NkpO\[...]' | +| **INFLUX_ORG** | _required_ - Organization name of the InfluxDB instance | 'DevOpsMetrics' | +| **INFLUX_BUCKET** | _required_ - Name of the InfluxDB bucket where the events should be stored | 'events' | +| **GITHUB_URL** | _optional_ - GitHub URL of GitHub Server where the tracked Repo is stored (default: 'https://api.github.com') | 'https://api.github.com' | +| **GITHUB_USER** | _optional_ - Needed if Repository is private or on an Enterprise Server | 'justus-e' | +| **GITHUB_OAUTH** | _optional_ - Needed if Repository is private or on an Enterprise Server (can be generated in the GitHub UI) | 'ghp_bitz8n81coxxnYvZ\[...]' | +| **TEST_MODE** | _optional_ - If set to `true`, the app will start in Test mode, operating on a separate randomly generated Dataset (default: false) | true | + ## Local Dev Run locally: `npm run dev` Api Docs: `http:///swagger` + +## Links + +Docker Image: [https://hub.docker.com/r/justusernst/devopsmetrics]() + +Grafana Dashboard: [https://grafana.com/grafana/dashboards/16645]() diff --git a/deployment/devopsmetrics/templates/webapp-secret.yaml b/deployment/devopsmetrics/templates/webapp-secret.yaml index eb5a745..13129e9 100644 --- a/deployment/devopsmetrics/templates/webapp-secret.yaml +++ b/deployment/devopsmetrics/templates/webapp-secret.yaml @@ -5,3 +5,6 @@ metadata: type: Opaque data: api-key: {{ .Values.webapp.apiKey | b64enc }} + gh-user: {{ .Values.webapp.gitHubUser | b64enc }} + gh-oauth: {{ .Values.webapp.gitHubOauth | b64enc }} + gh-url: {{ .Values.webapp.gitHubUrl | b64enc }} diff --git a/deployment/devopsmetrics/templates/webapp.yaml b/deployment/devopsmetrics/templates/webapp.yaml index 6f56d5c..0673e57 100644 --- a/deployment/devopsmetrics/templates/webapp.yaml +++ b/deployment/devopsmetrics/templates/webapp.yaml @@ -25,6 +25,21 @@ spec: secretKeyRef: name: webapp-secret key: api-key + - name: GITHUB_USER + valueFrom: + secretKeyRef: + name: webapp-secret + key: gh-user + - name: GITHUB_URL + valueFrom: + secretKeyRef: + name: webapp-secret + key: gh-url + - name: GITHUB_OAUTH + valueFrom: + secretKeyRef: + name: webapp-secret + key: gh-oauth - name: INFLUX_ORG valueFrom: secretKeyRef: diff --git a/deployment/devopsmetrics/values.yaml b/deployment/devopsmetrics/values.yaml index b393274..75289ad 100644 --- a/deployment/devopsmetrics/values.yaml +++ b/deployment/devopsmetrics/values.yaml @@ -5,6 +5,9 @@ webapp: nodePort: 30303 apiKey: # testMode: # + gitHubUser: # + gitHubUrl: # + gitHubOauth: # influxdb: image: influxdb diff --git a/src/endpoints/githubHook.js b/src/endpoints/githubHook.js index eb1dde0..7ff0c3e 100644 --- a/src/endpoints/githubHook.js +++ b/src/endpoints/githubHook.js @@ -33,6 +33,8 @@ router.post("/github-hook", async (req, res) => { const evaluateEvent = async (eventType, payload) => { switch (eventType) { + case "ping": + return Promise.resolve(); case "push": return evaluatePushEvent(payload); case "deployment_status":