From df297ed134297117b58682a7a336d19d169b77f6 Mon Sep 17 00:00:00 2001 From: Rizky Maulana Nugraha Date: Tue, 23 Feb 2021 10:44:22 +0700 Subject: [PATCH 1/3] [django] Add helm test Add helm test definition in templates/tests Add option to override django helm test --- .../common/v1.0.0/templates/_common.pod.yaml | 9 ++++++ charts/django/v0.2.1/.envrc | 1 + charts/django/v0.2.1/charts/common-1.0.0.tgz | Bin 3494 -> 3541 bytes charts/django/v0.2.1/charts/postgis-0.2.1.tgz | Bin 7294 -> 7292 bytes charts/django/v0.2.1/ci/wagtail-values.yaml | 21 +++++++++++++ charts/django/v0.2.1/templates/secrets.yaml | 4 ++- .../v0.2.1/templates/tests/test-django.yaml | 23 ++++++++++++++ .../tests/test-postgres-connection.yaml | 29 ++++++++++++++++++ charts/django/v0.2.1/values.yaml | 15 +++++++++ 9 files changed, 101 insertions(+), 1 deletion(-) create mode 100644 charts/common/v1.0.0/templates/_common.pod.yaml create mode 100644 charts/django/v0.2.1/.envrc create mode 100644 charts/django/v0.2.1/templates/tests/test-django.yaml create mode 100644 charts/django/v0.2.1/templates/tests/test-postgres-connection.yaml diff --git a/charts/common/v1.0.0/templates/_common.pod.yaml b/charts/common/v1.0.0/templates/_common.pod.yaml new file mode 100644 index 0000000..cafad73 --- /dev/null +++ b/charts/common/v1.0.0/templates/_common.pod.yaml @@ -0,0 +1,9 @@ +{{- define "common.pod.tpl" -}} +apiVersion: v1 +kind: Pod +{{ include "common.metadata.tpl" . }} +{{- end -}} + +{{- define "common.pod" -}} +{{ include "common.util.merge" (append . "common.pod.tpl") }} +{{- end -}} diff --git a/charts/django/v0.2.1/.envrc b/charts/django/v0.2.1/.envrc new file mode 100644 index 0000000..99e9ccc --- /dev/null +++ b/charts/django/v0.2.1/.envrc @@ -0,0 +1 @@ +source_env_if_exists ../../../.envrc diff --git a/charts/django/v0.2.1/charts/common-1.0.0.tgz b/charts/django/v0.2.1/charts/common-1.0.0.tgz index bfc170584a19b3d120e7b32556ed69a4a06a2cbe..da993d96dfc7cb45d7f6dcbc0676d1045a7e72a8 100644 GIT binary patch delta 3508 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 diff --git a/charts/django/v0.2.1/charts/postgis-0.2.1.tgz b/charts/django/v0.2.1/charts/postgis-0.2.1.tgz index b8e4c14b548be0ad627cc4d4f3fb88a42d891630..8342b9c07c8fa1713951c469c73ddc7f1af78c3f 100644 GIT binary patch delta 7065 zcmV;K8)oGGIQ%$}t$%ts{Cal1NJYd~!(TmCb8>%>i{$J_ zDkS6C7_N2$lIP{0qupo}z6cU3W5IHT_mE9s#syf$2^M@w$FNW;m*c^}-iuAo@qL>zvikN4LW-5yLa&Sq6;{PRsSOb@XC6S7X0e_K_Dmh5`oR?tpY#vJLoPR9X&pmQdbSdGE( zX2dw&&ADWX>-&y(9n%6RG9N=v>xo_fkQZrs##0ur#&9xw&DEKpl4dFhD&c%9wajRF zF{1>*7QB@d)PhN)Rs@}~G^GjTL`p5_Uhgw|YwUwOvVX!p291;tkIi7k3s{gVs^KPd z#xk0Kq_Ln%2J|D7ie>W&{yl~p-T4R`Rrt`4N)UKO`GkrqDu8BJOz><;GX+;fFfvW4 z2Bic!P$rQvJ=gjP#@fBf^ik-hN zQlPp8QGYZ6A|dAq$ehL{3X`118|PxD4~lDGEQ`}3p^52VkzxzrlCIv3#s;5vqxAq| zp3T@CmLxYo4)O0FNN(WFSV}b<-3+YSUk~hxr^S-Ok{6khz%oz^swZhc|A{O?1bf`{$o^TrQXS+u64{?lN~%rZTc*?%&WidnmkvY09V0;-4QM9Q|+{Et6ntt0CY= zOn;1Fz;iWdXrX~dqe)>a_}3&;u;hXw+XLm?^5NDg8R9}rg<>=9V^B>|+i(n{;Rs->^hjW?Z|fGK$PT2|jJnNm zs2hnQ)6y+CS7nP5OuI>-QmK{r793|l>z zB?yM3k^?oc8svx?Ge;_0qNr4x1=BAX!;GYoB0Qs5G?fV)dc$6_ECID33Z&wiC=I-@ zvti@cnk&uU#WW{s;nvJ@IY3O_X=O8pm_)I_J5(rpPo>h{)OxMDcS%>8eR9F46o2V7 zrNFPK5G+Y(7T|rOPix$-MT5oEN>3q-Luv0Kn%G<~wBKBQ~=2mcLaO~SV0*Ws4lqedxu~IUn zDVl=-e0chfAskh0>i7iF?8`ExU6T}emaaZ4fgI#8zU|Vij62 zGcIsaZcd?{bNAdPIEQnR&8byZA&iER`ENMb-9s5moF1pB63CoFoDwO~Dg|3GPx+Lj zk$rZkAB~~c>$Fa1dRry6iGKuRJz-)&Vn5yGWM)T9`ryMvZ3BPxZ~e`-mlX9~FYI-7 z>Gk@SkrO7-JA`DVjb98%QN7P&+1$b^GUt_U>lr6>Mv7GJ02gkUtVq*7WV|&LDs*5t z3(&3m5HC2FESrM|s~VMx2w;1j?*h-@;HQbko@5CT3GmE7dG-BqUw=P>{{wGwnoSgm zFL%%yJ4zbmR%&?kZ;(?A~GHI1U`YtuO^Qf-+tC~yH2Hk(nQ zJ!NM}9Ao2#O_s{f_gUAwMn)LQy#T z5ed31QpIxg6^tS*@hiRMp2no7QIYJwbPRua#R6l^>yjMmt$(D^FF)|aXbSDWo>P+i zB$%RaGE^`%MgQqG2(0S0J5YnB^@fn27|-;KU;E8K&{DH%haFBbZLuXNL1r_i#Y^vB z6cseViDvw|oLa-psfcW0FL^>!O;)XKR}uWAm)A-)cIl(7L7%hoOk*ze`WR?&%Cz*L zg)^LkE~uTVC4Un-d+56gRpS&1DT<#~Hwcbr77H!5eZMWj*5GobU7C!>#w5=KU!uu2 zWHMm3o5(^!wFnp*YczIBB9S!Z*T)}?1$6r%gu-S(KWa0?(6y5}iK(2>6q!>azhn|+ zq0)t)ZY{|yUCuP+(0e3;y3JyZ51t#lfxs)y#V$*t;(rBjwV(oG%~*mFqY-#UEm-65 zFDT48Ps}p(QCA2`Vnc$XZ>{b9wooAXk}9^OvJcnPddAqs?zYW>G3%k5Sy&<)L`r03 z-^_2#EYonwJ8{Du?g2t$%nc^Vvw;oi|8nBEjYUZ?&Mj#iwNE74#PieVADLQR5 zDc4mCmw(ZsR@Bz7rELI);-|)2bN2uQ*RJ?XU}PYvwLSirYiUFoFFS5{I-*sl*f zr-JA~;3VrC6ClU%PY3Sbx2U1lqNX*+mkz;w(aYHhXC&p|^_z?1Nu)li&o;&#?|)wG zjrJSy-@O<6Uq8ivALF{<&WgCW#5f2>5xk;G>wg-vi_ELID*(KI|9(p3LjR;6jnR4a zc5;0F&9iO2?}$|jbE@pN9Kx_tE}uS?u2obDBi!EV2aW-u=U(>AiZs=Idl2b1A&37+ zo@syTo9CY*?M_5hkSNs1-adyLm=a0%_aF=t8uNti)bKnzm`r|pbAI$?adq^(eGY37 zet-Y|eGq*56lyEEO+P@dj1}}C`q8|rvA$NMcd$EfdmHRVaA<6|HU$g zr#4p7QGo}!y0+3-;m1>DTE7*FQp4E6@+i$nc*1-)7o^k1Acp3 zpSr(ofAH*a>UtLnZj%ZpXU)kw4D~b{;D76zb6nfJs~z%}e!6i!u9r$>WZg&o_(fEO z7v1fP(}}sOt-f{1^jg|5o_35TlhYsG938I}O8fj98%ik=1Aq$-3BS&eFkZN=Uq%ZP zj&4Rv;(vwI_>-?fdRAO|rMwt%`R8+$%76VUx}>Y;|Gw?D#RUFVhVQ-rTCq?Y(SI_L z#z#aeCU;w4Ie+u!;_&$V;+ryNT6>I-yb1ZwzCZr?8*d35Yn|AzFp~={h*ykW zH>0{0o5c$nU)nt{&uJ!Q`p&q;EzYx#LD~ioYRj!uTA3~gouK?xk9cyXomSk>aRJ}` z6f;~kAJoOzkhcNn&wo5-~P+dZo~h3xw}7n^8X&= zI>b;LkTP7TJ((4JC`ig?j3z+x9Jhy2@DtVB_YB|L5C!`$AYKq5VM=47x21aX3*VQK zXA@YPF`6b4_va~FGDQ;;u3!?jr{-P8(d&tBt5twDZaY!%=fUkQilq$(cYnB9p>6RD zM;U)p;&0-0s7^~As@uFV?{sL@(*g5)Z|8z#Y6iVO$?#9IS69zwu$>aD1JD9p0qJ?e z+!*p{!s(xEIVol{_7QqvH65*oLgO$D{v6oF!E;fDoZ1_=hlPMh?V%@N$!J<(jA8=? zu~n}FQ!`zkc;>e~4hA=Pa(_zOr{4eVLGNAfVe>H)I;W}-)&~`O>)wiNnlS%b^s$Y% z`tH=qYrBqaX|P@7p8DDIz*HY3hieKMHKN9rc}j6$`)WL-sictdIg6vfAo>+%bJ$kNAqD{${V63b^~Oy*liDQOQLi`lX_~LFB@X zGUv~~B@S-W9kztc@3vFx*IeWFOVNMz{?+TX#=_Y=2u_C%*nc=1$2J=^fJY(kHRpQ3 z8;P|JLYrd0jBcB$_fQ%>aK1h{*OGXXI(#Upe>IUGpDph_uZ@JeQ}ua%Q+ZH!lhSjI zI(2{hgl!G8JDPQ_v>;h>kmd{Wx>&+!xOry&#AZxL)jY|8hxs>64|}UwS9^%dYnR-<$(llKiuM3~B{0 z?f+js?f)O=YI%YF0dC~$+808j;F4v@7|JHWk}9G_bXV-B(-x z+wVg@HpE!d#(8I*Q1kZ4|soTlklYfAK~&fILUK4sMNUSgUS7M`ID3XNKU@Y zX{@PgPanO$?~;TIN|KaHX+G^vSxn>@Mgc&PCq&VS5=7DY%B+|%Xy-glSvG%*4RFlr zSa0i0?}Hcm0n6u(3Y)J*11JZun0P!2@Gw5rS6Z9IgQxK@o_*lNAH=(zw5osNjx~17 zd2;G;cGaqF%Ky@AQZhMG%VT4YA~e2~#nQ%zQMET!hOQ_Es^w$s0H*IF{s`S zii2E`-Ix2aSk{Sdhp^k0`;X!8b2g38MYDsZ6jx2RE#-FZNjfLW_`C7paj*u1M!O37 zoh#Q`x0qLXPaKBfgJnlwCX;_ecPIPWzN^QXmo>t3dd*w*Dy2ldXCrD=e#KL7Ro))g zRCcRVMXAwldz>1%^hL9)aqHzkXEgmJV=9>*h`DUOPjDnYdo#Isb$&c~ck=q=;^^CV z2j{OQjTbLAA4KPdz#E`L1+1OH#+NbW7iDX4esy$kaqs{v?Fal1M6rKGqPLUd^9PLT zZI(KRZNYa3mb=FIPVnWp^{UONknid0oX*-$AG+;rUig(u$DVHUERMc?eelEa16OBC z1x~7#Z7+=vt}qfe=zQxl#27PO2Ok_r7l0KQU`cb_H(D)R~g)~()e|0 z9SQG)RG;1MqhP$RMb~t-&wrVcy9eiLc33~3^$gdIxowHbCfajtB#HSo=rp-^JvwDV zjNc5O4q@7W4tY2-4-!p3k4{&QE^qCgBHEN1OdxU>QfpgvXo`Q~z0qi&SV-9w&8U=T zn7*V2g?_9YPItw8xg=TAwqYT-dp zwQu^h{p{7y$*EvGnb4SLi5$cJu=Z3I_{H1BLQuKjX<~N3)ion5Ed=$RzoR~fWzB9ykNyU!TD}^O4xRrqJFI#el)8ijY}P!&WTlB>d1vCkzJeA4l%1DKQ$Bap`fz4`LSm-*Kax4 ze>=CvYuboAZ&D<1Q73>SxItrv<9TJ(D@q;G%V@10QMH{$ek`o!bE2OjrX05e3H z1Z5{@cj4f*{3VlZ78zg?zBegEpG)@$&Pf(ynnWzn5(Mr(lRz?5o|&}iH9J1sGKv(_ z2bO;yyUw_PNlp|aDID1h?tkakpg6phGzh-q0v0q~j)TCZfYE;f%cLS{>U0a{(rFc@ zz^pD?aFQv(?X*mCgem7rDnW7}>k%y{XNEGL^)e-4Nmy34je-*eQ@S8mR6@!wX*b9| zObb`lb%PF)7O8Ip^#KIr*Do`xFp17E++~zo~HboW%F?m zgz$=HRA?10i<}Bf^(J^qC15Ug3}XAOGJ0LnscNEqDw{tRgDQR(o?!xAOu&B!iGvUh zO!85Tk(xXgF;7!#?Il%;Wpi03I`=C499f!NoK9TwERDs{!6_UGc11;Pn2BXTUZ{VN z&%$I10*^?^AavPc%Vf6YN?}=%Ga|^6V$b}>s%s@xTz!J7p1`*ua2ae?x!V{ay$3$?1C{k+?n(4l4=%KW91imXlvz0|6n+d;?;3YvLXu)GpzYVVT9-syk zGh(-)Vn&**6g3MMg~=8uNLqiRR0m9Msub*%kTnvq`|{s}6V0)VM>^O*KRxgi;ORC<+&jhC@`kz)dcdV$=rNvrc{Gj^{T4E_N zeR&;d1h2VRVnY5}Huf@2P(As$`;Y{O^P?-4ocNQ^pej~T73JVw8GwHXPSIj8tPP+^ z^LHCBEZh4dH1^LoCb2ta%JORUbkzc}$a%2*-Tn=@H0GfHbY+07L(+u_IvQR#{M+;! z(2qH{*2#Zwc>`|>VJk~nLrv0avcgnf#>Kg!nVX2D=pj1kfo-SUyj+Vrk;}+fwKnPB zO%`-YGTEx*v*LyDfkb~LqTYK@vx?RVq|Tgbj?rYSmmpE8gl!)yE04{AygEeHnC_I2 z84xRbT+*_9!Qnw2KxTm2d`R$Cni3MR@wCnHqzZI-9;zF74YHCno!vEnJ&#q6P#yql z4B!|i7wifvA*~to?$LBllxRF#bOQ&OD_}%zdM;a9k0++hU_pOLsuni+CYFjjtD?pjyz(jn?d~!5Uk_lyN0V$&R?W zwlxD5B+qH)YPH~mDu8awcaY~%5ZD@x6e@q;>XGRRW(^xs$r@(RTo_6=&uA@Q zaujGD%ed+r3c6MNj~<83Gj3guYa%k1%_I0bzt$TYlPj~_#@K|mxDrMvjbiKDnlwm_ z46ZREV3>d0x6W0;j(*^6`=@m5Y7q5J9gcokRjUtIRIu49j7j-(R-~z6?&FU%F3{aF z8(Rrvrlrx}d7B7;41$TPc~K)DMG%IO^ww+xASUtj)+#c#&-c%(@C8w@tr>C2tL#8F z)Pc#4v2G8a%~;GxS~l2;Ox$Fux&NB1;2Jq~YRZ3axYVarQVf(h-Tn6Przrkqf{QmtZ^kxCG}ZR$+OI-wRTmPVbeXlU zhC8y~`lX1A|C2lqwG=Mt=YI!q$N7)p?x=qm|9`Q&|KchB{}|WrCjS4W3Gu)5a`GRu zvIP8RuK<6S{O|9*Y|8(OmrwQIALR?< zNQGoP8^hIZK=Qo&bF>?c!WTh8Wh_{(@E)=W%(wu{IKhH1=@=GD<#Ie2*t=0i)gWN8 z?&2N^avjZ?S`^blQW5h^(M&}#Uk)ybQ2f7S5NqIauq0AZF@GRZQY8l|pYsxIp3Q?x zy1M2fk>emNk+8o6l^@a|goG$EC6apggAmL!LGzTwL{BFOAx;ZDSg<54Q-ozyAY8g6 zEFD8iG7{zSOwj)~*LO6w0YFCdl+z-nA|o^~e>zkoFGNfcikrEab#1B%k1weRU8gHY z^I^0bjeyE&Ikaed$Mu47sNMdoAZX+6;k0P-SD&v?q>)fi4@uemxCRMJcZK_#4TrIr~j zFJ_b=*n+o`f?6$Don&;jtO4cmWG?MK#=n z&R9khkTe!l$$)-jQn744!N13FqdOmAqY5ATQ3(RCD4$SqMFr68iV2=AX{O+c2u7wU z)u5ChXFNI1t~8u2fY54*?~i|eH_|r%P{hX2`|;rP?eV)&ui0$3tJ!W(V|Ag?xn^k! zQwmhKAb*M`KqTZm0h!adL}8NCc;j5`^g(eAjAe0JBs4MoD^hF$T+-FM(b(YgZnPd? z%(EGr!;<6%$RYmy1IZ1X8B3{#qnm+M`|E*S@w8Y{Sn?uM5?BUmLG>gJ=pXUv5BShP z|CtxCBrC|dhRaBru1sg}5gV9E`xK80srWK9ZGQ~qvELa{i!nF_O*17{IcJ%QW8RUcsxMpert%>gVbN~Faj?3jTe>?j&r(7b>yVk+h z7MvNeoBZPxjVvTg=-YzM#$D!a%2Y;{%>5hsW)FpTFirW?S^V?kgQFjgqh%6oZ8Ze^ zh<}MO40x^v4J|a#Xf!Eo1^=343YJ_@WIMrALtxEOlE#H#YGoMmqXIs2oF)VJ@X$P~ zNRFCBaVR8(nS3R9k-M?zYkwq-q-H&bT}(365^T1D>jf1QC+i^!OhU@_ zuLQx6RC1sOR)ZW-W9CR@OB9uAvtarqW0;XtQiNv|i>5MxLvPqimL;GTM1fRX6QzL{ zb~bGMT63lOyO`!gE!>(}E(eIoJFRTS5R)htc!vsQ@2OPUn_90`_b%y5vrjJglz$?f zrWE)U6@n!R%>uk{^l6RzwP>)ITInf-aVYIwL=&6qh4!1PRj%ix{~5!faXwGZG^XzN z7+&*Cx5>FsV|cmuVmC10CUyb!oHL%#GcJ_T&ZtuK?Nd&YZ%InBm=9|0K| zfHkSTET&XsR8bi*uGOC$#5{{>u7Bjfc9vmA)ioEFEStM~gDnj))c9zG5il;2!*Fb| zKNI|lB@{@u0+J+5(~G1)vWzPvo`mZKix;TZrW6GIP%uH02#$SwM?leKo)SePH&#lf zG(~d|fDcdKF@&S4O&y;gntfTOv}=+A&(hUrC6I$0rko_<)FMz(D)rDhIe&BX(#S%E zt=U!FL5xkfDk3lCfW$GCG9-Dq2?{Oe4IC%aFiv@qgt=KT5zd&P*Cb5`TY^d@Sgb+| zX2u0h%FQXXbMBto1m|#0vN^TNDumH6GXD(+yL%{OiPPg0RRWn)h*KgZTBTqM<|&_& zG_ubQ^`kNLdY#tkOmC~CHh+;|tS3w?NbIM(oXqTqNgsTesBPe{{;j{+_L8E$>xI3p zF1=pgGIGKsdWVp#wDF4pDXRB*ESp9Q-uV*pnFaT>^@yQWc8eQi2tMXD`x1_dr)!e%on zw5RMWiDPWsu*p*S`9AA<_o&217Sn_Y8tWaMv!50*#jOjec!?3yRJrmuJ<`A;NGJ+t zKO#YwMXFeizJgJNC4Qy1+|!u!G%Aw)myY2tuUKHLd0mo2y?>Q7`sD|n7)_!5*Ks2wG}Z?Xbg1rY*JvCCF^Xw0Pms4xFITevD>?KcVs>!Og?J9zw^zvG%#x8xdHRy9zo@va5ULON3PMMY- zv~Y%V&;_+qwSQznXAgZ>p=z8WAw}`i>IT8_%wnO%w(qw^*cx1}v`drG*qG#*;7c^w zhD-*`b`x1hs1^Z3V~xg6NhFe{{QCH#v4CzrgizQF=tpga7`k>cCoz>1nj&**y^S_77GMa`Tx(g@^&7inVr|0yk3C`G4@ zCgr+n;eRq()QZ~rwX_YuQ2f+*YwjL^;Mx_R35*ORwYJ9}b1jW1<7I~sK3&q)82j~s z=Ts0q2%KbnV*=zD{^`K|`xZ6yTGX`W_|hS`FM2sU;f$mlynb_WJc-mt_1VU_)ogL?_*pS+*uJ9mly}ZD1uj1X@6Z~c9D4%cLjj=@83^}T z!hi4IzYl^>pF(XVx9JDym9c^zL_eB$HP+XP^bU3hZf}F#2o8FxqH) z@zlmjI%?35G=`9ATHJ>ic93ugVOS$?^&4{eA%$>(@uhUZrGoG+JTp84VOpE6cEE3M z>r?l)?GK(kPF?Rp!EI9Er2<62=R+^~-2s z!qLrWN&K&n8h`RtNY9E(uap-fF8_S4Qu(icMVEB-{NJ~|wwS=*%JAJ6Kr0q%BY#>Z z()fsI#pDjGY)rJtAm?x1TpS*sUwl)>OlyzvkvAd#+4sjkf8#BIW33Y#7G`px1@Vf} z>tJd-Qw9|_FIWFM4 ze;mF3+xV|;r}VcjIsMYs`0=l{|9|&xLDQTH8L9j;9R;|<|J#2#+HLrMFL(D}Jo$f* zaUEi)4M-U-)Sk==J`^NnGe#32d5+t|DENu$?R$prZHR*X7Z5LqkT9h&(c4nJ`GxPx z$g>Ho%@|D+iTm@EEt#T;30E))+f(x{gj;_y|;70GBtzVpJeza*{iE(GuTcE)&XdNu7LEs zVQvihG~x75wwx5R8T$ymu$qq6L!ogP27eCh;^4U`Lr(3D+rvUYr1sDguw*o?Fh;R~ zg4n9pfvK6UPdxM69tVRPJbyW*?Njgn_MrE!_ptex37u0_2)LzHcgm+E&ABT zTYYzG<+WW$w=~!;a!>vC?mWx79`1S7N0E8Ep}u(oicgf#jB6SX{v7gK43_0)PJ>WP{ykG=zjx znLSr-Fkq?=lEXEHj2cm6%RHqxuzfWi(o|AN`JBa3aF9ywVoT3)#|H$oHBRx}u@mi- z{CDNT>Y5ptgp4a78E`xpSS^_69&&Az1$%Al@nRXkGCN8(@<+B z(SvQ3r|bGW+qn-Rda!K|9d&M>ckYH-x3G6=?+`M=6Bnv^=qzi`=#i=djIP6T4UjC9t5XD2Y+mwjbodQ8o;BF_nLD( z;Elvu2cb=|Uq-jh)O#omA2?s1oNGzENgY0v)W4d@kI$C(p4Udg-KqLKzo|SZyGiM} zMxDC9eZsbe*&WR~S6YxPIY{#bd0i}FG~7Hhe_}Hxq-vhzz{C8TriZ=UN#MGTdzMU3 znN-?^lX=P%{(sTy_k3T!*D*&2tujakH3zRbi!Z&C`(;;q|8LF#ElK{_J_fjB|34b; zxAy-ppZ5QcbG5uc{{T1gb?pnGQE-NQax1sXR=Ho zf*Z(KmT3QNuX<`DjU90OqmbC5e#GU|{Q$eQXn}7mZH2CO=;4_MbhicckFV#RuI{U? z|Lyl7pYc<$yY&C)>%CU|_v^irXb*UQkG_8T{{K-fUxSl8mxD@;TRxcFUza~Q`H$q} z%bdoVs`m8J>-#QAxS%9Ssg&l^?v%wuj$sr46nR1vohU&Rov+M_8H0At)0AcNx7Yy3 ztd8}z&h$Qbp&zh(?x?W&S~P%i0E>yoqW}-%Q+=hiNj!KO598SfPW(Z<+exc`D(+Zg z$DAjp9%omr+NS(3%_b$2Begs>_9#N*OIa*!OsVFKnCKfki!R(JY~K<|&xl$;uMval z?Vvcw1=)SMFN4BKb=KBOk;qI#j^g8EkwRQ+`pl7Ux$-2Nwqqz|wxe|3DOfTO@irIX-{D zsNQC&bJ!MqcVM||jPC?rj$5zVj0*XluFmPK{q&*R-sXj0xpeI5HqYYd+t&v_96xY% zrbMo#)8?bgUARmpr|%Ar&oAD6cXGN0lR->{8h8gwJAr(E{PVqF*b}JTh#cGrqB{Co zoAes7X>Wr~;+L+rZC%`d)G%v?!t)2?&Pk~_533YB{#EMovnq9fH)TI}%6*l=9V?Ar zm)4Q+K1lW1?LG>|`&x8OSNr^zDY<)au4aez^I6Yu-I&{!m~5gw*G7_8slfyycOkX5Rfnd37~UI=_KAg*UD1q6 zd4}mrYEbCM%HecZ%$G}&C2boPf;)cSxE;nFH+!`&fSPs{^7%U^^~$a~J_quxJcLPy z)m;0gU)#@K4V|0{#*+z+d6vjA>CWr1J3T`UBZ3!Wxs2V7kA#g{_@^**VAK99Pdc;^3fQ+rIgnCNRyn#cWqVoH*8gn1LOHF z_p|S7jF)l1>+A0&n%ejYR;`o$bl?Y`&@l}6_J-?&B%7_&uZbjBQjjd!=*D$E^YfQ< z5w79nm3@^#+a^M3o4Wgqp|4oqtU{QUC+e??N-NiRmv)DLuexRmbeXFarj+|s2Yna) zw%3mBPjJVea8;4V#h=P-Ce2_av=QA%&{i1PT%A!kdmL|0;n^i!_2HR0!aV+_x$*q; z30uJJEv|%Zw<+q^y5UE&I?}k*(dnF6)uoPHh!WYgN$n7`D)Lh^5g!UFo0}hdMsxj^ zgZ;O2YrN)vy=wh%dGxz~vG3$A#~(=l8ep0!>mK4{VJwUEAlfxmY`iQkCR)9DkB{~mbUX93I* zWfGK~oZW?k*YcN4wvp@eUKvLoCWh;Cll*>#^XX*q7rUJQSLWXS4aT_R{MYXO-l$ps zWq0?<|9h0n<`!i#2(ZWilkmMsA^KdpM{rKE7}F$TftDa}_n8Eeq4Lb6O|RMU;g(UP zm_D$7{MdEI1x#|H7)jyCW^n&IzXrwOt)xNl9T%{m>2e$dE(MJK6Idn{NmHj=FqclN zFa>6H*@BZy32vulk|RtxS5gU*16hw~IXN?w`K*^I2}{DVvTYQcD45a(xuOzMc1gQI z_F-D6I^2p}tr05V!4~|qAPShW*_iY^s+_)mjtqsQvN?TotimNBE^|3inDI2_*DRZl zgCK-gG^0YRa9QM3V5&F4Qz`*-v11V1ZEmsQ5ikuNamK2)?H`QNo14mVbB)AD~!Z5`DgBxh1p}2t~ zEP!BBT~znIre*$#R^#eP+1zBIsI|jeWdrX3O{1ND0=az@+(75S2|wX|$tLDmtxNem z=$bC>=t2Z1Ge{}sIn(UY*9`75B9lUY@wsK51n3nND|;+4Y7FNcS#Yb5!r3L$?Vjc+ z$|;X+E{ifJp41AgDv#hn)7{{xOq|Rlf^8h+zkz>hH&9|mkbjp6?`_^Mq?+d5JOx_j zHARN5hO})<_|@TpHNZ_B5x*!6=6H1^)pSSof*J7=8ENf0D^i=wII9#2a!WOT>gFl= zg=Fdjx^gl;Rqs8hUpQvdz*U8l&p3GPP4ULz>m_Ou8mGjRe|P{kjoKL|@wNf47FyG_ zFl*v;=og;YR6ZtxBSeu}i_lE>T|*D0r6cfN37V}e64^}nl>{#d8bJ#lgZgc7wf6uu zpqLT64HYxeWTmKCxF}4vKta-f8l^g5a#N*XuY|0Th~1a}CM0*>#Dl{!saZjH=}w-$ zZjA*sxtl3SjlJ!t-2>axq-V!LG_!hnL|jt!Hhv~JJ<$K8h{IGi6{vE;;`duvD+=*O9#;UbR z|8BCNQleRCA0bW4#24N+oRjSXp^&4&>D#s>XDu zgv@|g+2fLyHsnW)aFBix6+i5h>fRhjwe;1%kxm(z-y3|r0MLg0ql9Ka)j~# zSYrUkIJsa~SP5y(pm&d^d!j_+*`gab$Xo#a73$v3f7+#z2s zxyddcYqvVs+Jd*3m6It`MPt#Bxghv<<&3GxAZCkpkd}BxZGqL>63paZCdH?TpP|?m zrLi=R0Czveg__mm%~ote@g^o?(}GKd84DfbyL?Jk=G218Dg)`P5T*nGkugb7%b0Ye zH4VW^Xb z{Ei8!`qjip229Grrs~GT{Y@saZ$5!f|3hOH1&98~Xb07TW^S}*Zw=Pi5~hqRNlJFa z&9$u=upoI(GgqqxCsYA+TfT!lkAlF~Xrxg2`&N%kS1@CL_`#9hqQQHW%JUvj)ZG2F0o$V>5IW0oRSq4{l*A~2W5d7Q|ZFwPDJr~GijP@mr2$zgXY3evUx^p z`I4hR^H|1J-%!x4;(zowY@TuJa$FOUv1}f}-}$xP*qB_I4ZZ`(hmV^@QyZ|ZRL%c@#^xT1p1R$)xapR*!O4RarVq;Y}n zmf6@!ATuqE{?6M(0AvtMT+NFb`6z-gjHI__8vrqhr?*y-v3JVD@x{oDU0tl> zVofME@{*m}mu69LPSIBh=orW#jOax3RaSRUVQ-!~sa;aoE3wyUb{OX4yp7XsdU z8-VvHyYE|D0w+xlEHhZZQ*51vaCu;YW7&T0+t_= ziV*~VH5Nb{N3Z@(6?B33k^GR_IYe^tJ_>>(UmgsmHCC|hU8UYpANmxl${$rbf@)?K zy{gu#Lz~1g7dWu8>}UoobM%==RTQ8AomWMsWe{AvIeIg;QKG4~PuG4GYOA`C0Hw>U zeKp*X{njrPKpd8nmuNk9KPfIH5A40lI=&G`R|-TnQi`2S;Eznl2~mnOvj(#y$z z%*qn*pS=S7UGl%b_p&MfFZQ46zdy(t2+jI&m$9Kcwy@2c2sn(7iKOiC^suM zTlz=BU9lTe<@lFZ8*Y|r2P~F5shzaI^E9^j`jc*ax}L75>$kZ6e*gdg|NkJJ8+ibV F000SP`xO8H diff --git a/charts/django/v0.2.1/ci/wagtail-values.yaml b/charts/django/v0.2.1/ci/wagtail-values.yaml index a48b995..760fe25 100644 --- a/charts/django/v0.2.1/ci/wagtail-values.yaml +++ b/charts/django/v0.2.1/ci/wagtail-values.yaml @@ -121,6 +121,8 @@ extraConfigMap: | # We do manual copy because they put /code/bakerydemo/media/images as volumes # So it overshadows our volumes cp -rf /code/bakerydemo/media/* {{ .Values.global.mediaRoot }} + cp -rf {{ .Values.global.mediaRoot }}/original_images/* {{ .Values.global.mediaRoot }}/images + chown -R 1000:2000 {{ .Values.global.mediaRoot }} fi # Doing collectstatic @@ -179,3 +181,22 @@ extraPodSpec: | - name: static-dir mountPath: {{ .Values.global.staticRoot }} subPath: {{ .Values.persistence.staticDir.subPath }} + +test: + django: + containers: | + - name: {{ .Release.Name }}-test + image: curlimages/curl + command: + - /bin/sh + - -ec + - | + set -eux + # check basic url + curl -v -H 'Host: {{ .Values.global.siteName }}' {{ template "common.fullname" . }} + # check about page + curl -v -H 'Host: {{ .Values.global.siteName }}' {{ template "common.fullname" . }}/about/ + # check breads page + curl -v -H 'Host: {{ .Values.global.siteName }}' {{ template "common.fullname" . }}/breads/ + # check admin page + curl -v -H 'Host: {{ .Values.global.siteName }}' {{ template "common.fullname" . }}/admin/ diff --git a/charts/django/v0.2.1/templates/secrets.yaml b/charts/django/v0.2.1/templates/secrets.yaml index 0ccd825..9bff564 100644 --- a/charts/django/v0.2.1/templates/secrets.yaml +++ b/charts/django/v0.2.1/templates/secrets.yaml @@ -21,12 +21,14 @@ data: {{- end }} # Django database connection URL - {{- if not .Values.global.databasePassword.valueFrom.secretKeyRef.name }} + {{- if (and (not .Values.global.databasePassword.valueFrom.secretKeyRef.name) (not .Values.global.databaseURL.value) ) }} {{- $databasePassword := include "common.secretValue" .Values.global.databasePassword }} {{ .Values.global.databasePassword.valueFrom.secretKeyRef.key }}: {{ $databasePassword | b64enc | quote }} postgresql-password: {{ $databasePassword | b64enc | quote }} {{- $databaseHost := (default .Values.global.databaseHost (printf "%s-postgis-headless" .Release.Name) ) }} database-url: {{ printf "postgres://%s:%s@%s:%d/%s" .Values.global.databaseUsername $databasePassword $databaseHost (int .Values.global.databasePort) .Values.global.databaseName | b64enc | quote }} + {{- else if .Values.global.databaseURL.value }} + database-url: {{ .Values.global.databaseURL.value | b64enc | quote }} {{- end }} {{- end}} diff --git a/charts/django/v0.2.1/templates/tests/test-django.yaml b/charts/django/v0.2.1/templates/tests/test-django.yaml new file mode 100644 index 0000000..d053e2a --- /dev/null +++ b/charts/django/v0.2.1/templates/tests/test-django.yaml @@ -0,0 +1,23 @@ +{{- include "common.pod" (list . "django.test.pod") -}} +{{- define "django.test.pod" -}} +metadata: + name: {{ template "common.fullname" . }}-test + annotations: + helm.sh/hook: test +spec: + restartPolicy: Never + containers: + {{- if not .Values.test.django.containers }} + - name: {{ .Release.Name }}-test + image: curlimages/curl + command: + - /bin/sh + - -ec + - | + curl -v -H 'Host: {{ .Values.global.siteName }}' {{ template "common.fullname" . }} + {{- else }} + {{- with .Values.test.django.containers }} + {{- tpl . $ | nindent 4 }} + {{- end }} + {{- end }} +{{- end -}} diff --git a/charts/django/v0.2.1/templates/tests/test-postgres-connection.yaml b/charts/django/v0.2.1/templates/tests/test-postgres-connection.yaml new file mode 100644 index 0000000..cdbdf2c --- /dev/null +++ b/charts/django/v0.2.1/templates/tests/test-postgres-connection.yaml @@ -0,0 +1,29 @@ +{{- define "django.test.postgres.pod" -}} +metadata: + name: {{ template "common.fullname" . }}-postgres-test + annotations: + helm.sh/hook: test +spec: + restartPolicy: Never + containers: + - name: {{ .Release.Name }}-postgres-test + # The Django image itself must contains binaries that can connect + # to the said database + image: {{ template "common.image" . }} + env: + - name: DATABASE_URL + {{- $param := dict "Value" .Values.global.databaseURL "Context" . -}} + {{ include "common.secretFrom" $param | nindent 10 }} + command: + - /bin/sh + - -ec + - | + psql ${DATABASE_URL} -c "\dt+" > /tmp/test-output.txt + cat /tmp/test-output.txt +{{- end -}} + +{{- if .Values.postgis.enabled -}} + +{{- include "common.pod" (list . "django.test.postgres.pod") -}} + +{{- end -}} diff --git a/charts/django/v0.2.1/values.yaml b/charts/django/v0.2.1/values.yaml index 5c1e6a3..4eece43 100644 --- a/charts/django/v0.2.1/values.yaml +++ b/charts/django/v0.2.1/values.yaml @@ -90,6 +90,15 @@ global: # -- (string) Storage class name used to provision PV storageClassName: + # -- (string) Use this if you want to specify the full + # Database URL connection + databaseURL: + value: + valueFrom: + secretKeyRef: + name: + key: database-url + # -- (tpl/array) Define this for extra Django environment variables # @notationType -- tpl extraPodEnv: | @@ -255,3 +264,9 @@ persistence: accessModes: - ReadWriteOnce annotations: {} + +test: + django: + # -- (tpl/array) List of containers override for testing + # @notationType -- (tpl) + containers: | From d7d30120675705fcdfbbaa085ff579f891d2973e Mon Sep 17 00:00:00 2001 From: Rizky Maulana Nugraha Date: Tue, 23 Feb 2021 10:43:22 +0700 Subject: [PATCH 2/3] Add local environment setup and CI - Add local environment setup using direnv and Nix - Add default.nix derivation (build description) - Use .envrc to setup local environment - Add development README.md - Add local dependencies for ct - Add local dependencies for helm-docs - Add new action in chart-lint GitHub workflow (install KinD and test chart) --- .envrc | 3 ++ .github/workflows/chart-lint.yaml | 73 ++++++++++++++++++++++++++----- .gitignore | 3 ++ DEVELOPMENT-README.md | 21 ++++++++- chart_schema.yaml | 37 ++++++++++++++++ ct.yaml | 3 +- default.nix | 59 +++++++++++++++++++++++++ lintconf.yaml | 42 ++++++++++++++++++ nix/chart-testing.nix | 37 ++++++++++++++++ nix/helm-docs.nix | 20 +++++++++ nix/python.nix | 8 ++++ scripts/ct.sh | 10 +++-- shell.nix | 45 ------------------- 13 files changed, 296 insertions(+), 65 deletions(-) create mode 100644 chart_schema.yaml create mode 100644 default.nix create mode 100644 lintconf.yaml create mode 100644 nix/chart-testing.nix create mode 100644 nix/helm-docs.nix create mode 100644 nix/python.nix delete mode 100644 shell.nix diff --git a/.envrc b/.envrc index 0bb5eba..9ca7d23 100644 --- a/.envrc +++ b/.envrc @@ -1,5 +1,8 @@ use_nix +export KUBECONFIG=`pwd`/kubeconfig.yaml +export PROJECT_ROOT=`pwd` + source_env_if_exists .local.envrc dotenv_if_exists .local.env diff --git a/.github/workflows/chart-lint.yaml b/.github/workflows/chart-lint.yaml index c6fe74f..74a6ca5 100644 --- a/.github/workflows/chart-lint.yaml +++ b/.github/workflows/chart-lint.yaml @@ -24,16 +24,65 @@ jobs: - name: Set up chart-testing uses: helm/chart-testing-action@v2.0.1 + - name: Set up nix + uses: cachix/install-nix-action@v12 + with: + nix_path: nixpkgs=channel:nixos-unstable + + - name: Set up nix store cache + uses: actions/cache@v2 + with: + path: /tmp/nix-closure + # Build inputs are: + # - shell.nix + # - nix/ directory + key: nix-store-${{ hashFiles('default.nix', 'nix') }} + restore-keys: | + nix-store-${{ hashFiles('default.nix', 'nix') }}- + nix-store- + + - name: Loads nix derivation cache + id: load-cache + run: | + if [[ -f /tmp/nix-closure/nix-shell.closure ]]; then + nix-store --import --option require-sigs false < /tmp/nix-closure/nix-shell.closure + echo "::set-output name=use-cache::true" + fi + - run: | + nix-env -f '' -iA pkgs.direnv + nix-build + nix-shell --run "direnv allow" + - name: Store nix derivation cache + run: | + DERIVATION=$(readlink result) + echo $DERIVATION + mkdir -p /tmp/nix-closure + nix-store --export $(nix-store -qR ${DERIVATION}) > /tmp/nix-closure/nix-shell.closure + + - name: Run chart-testing (list-changed) + id: list-changed + shell: direnv exec . bash -eo pipefail {0} + run: | + changed=$(ct list-changed) + if [[ -n "$changed" ]]; then + echo "::set-output name=changed::true" + fi + - name: Run chart-testing (lint) - run: ct lint --config ct.yaml - -# Disable this actions until we have a good alternative to check helm install -# - name: Create kind cluster -# uses: helm/kind-action@v1.0.0 -# # Only build a kind cluster if there are chart changes to test. -# if: steps.lint.outputs.changed == 'true' -# -# - name: Run chart-testing (install) -# uses: helm/chart-testing-action@v1.0.0 -# with: -# command: install + id: lint + shell: direnv exec . bash -eo pipefail {0} + run: ct lint + + - name: Create kind cluster + uses: helm/kind-action@v1.0.0 + with: + node_image: "kindest/node:v1.19.1" + # Only build a kind cluster if there are chart changes to test. + if: steps.list-changed.outputs.changed == 'true' + + - name: Run chart-testing (install) + if: steps.list-changed.outputs.changed == 'true' + shell: direnv exec . bash -eo pipefail {0} + run: | + unset KUBECONFIG + ct install diff --git a/.gitignore b/.gitignore index 3661a72..5f0a2c5 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,6 @@ Chart.lock .local.envrc .local.env +result + +kubeconfig.yaml diff --git a/DEVELOPMENT-README.md b/DEVELOPMENT-README.md index 970f7ee..5cf2d2e 100644 --- a/DEVELOPMENT-README.md +++ b/DEVELOPMENT-README.md @@ -9,9 +9,16 @@ same, we use Nix to pin the exact dependencies. We use Direnv to provide the local settings hooks - Install [Docker](https://docs.docker.com/get-docker/) -- Install [Direnv](https://direnv.net/) - Install [Nix](https://nixos.org/manual/nix/stable/#sect-multi-user-installation) using multi-user installation if possible -- Install nix-direnv +- Install [Direnv](https://direnv.net/) + +Or use Nix to install direnv + +```bash +nix-env -f '' -iA direnv +``` + +- Install nix-direnv (Nix optimized plugin for direnv) ```bash nix-env -f '' -iA nix-direnv @@ -64,3 +71,13 @@ ct lint Will do a lint by comparing the current branch with the current `main` branch in local repo. To override this behaviour, refer to the chart-testing docs and do override necessary in the `.envrc` or `.env` directory + +# Generating chart documentations + +Chart is autodocumented using default `values.yaml` and helm-docs. + +Execute `helm-docs` in chart subdirectory to generate the docs. + +Modification can be done in respective `README.md.gotmpl` file. + +# Chart testing diff --git a/chart_schema.yaml b/chart_schema.yaml new file mode 100644 index 0000000..61fc3e1 --- /dev/null +++ b/chart_schema.yaml @@ -0,0 +1,37 @@ +name: str() +home: str(required=False) +version: str() +apiVersion: str() +appVersion: any(str(), num(), required=False) +description: str() +keywords: list(str(), required=False) +sources: list(str(), required=False) +maintainers: list(include('maintainer'), required=False) +dependencies: list(include('dependency'), required=False) +icon: str(required=False) +engine: str(required=False) +condition: str(required=False) +tags: str(required=False) +deprecated: bool(required=False) +kubeVersion: str(required=False) +annotations: map(str(), str(), required=False) +type: str(required=False) +--- +maintainer: + name: str() + email: str(required=False) + url: str(required=False) +--- +dependency: + name: str() + version: str() + repository: str() + condition: str(required=False) + tags: list(str(), required=False) + enabled: bool(required=False) + import-values: any(list(str()), list(include('import-value')), required=False) + alias: str(required=False) +--- +import-value: + child: str() + parent: str() diff --git a/ct.yaml b/ct.yaml index 58c650f..8bbbefa 100644 --- a/ct.yaml +++ b/ct.yaml @@ -1,5 +1,4 @@ chart-dirs: - - charts/common - charts/django - charts/geoserver - charts/postgis @@ -10,4 +9,4 @@ target-branch: main chart-repos: - bitnami=https://charts.bitnami.com/bitnami check-version-increment: no -helm-extra-args: --timeout 600s +helm-extra-args: --timeout 3600s diff --git a/default.nix b/default.nix new file mode 100644 index 0000000..5bfbc5b --- /dev/null +++ b/default.nix @@ -0,0 +1,59 @@ +let + bootstrap = import {}; + pinned-pkgs = import (bootstrap.fetchFromGitHub { + owner = "NixOS"; + repo = "nixpkgs"; + # branch@date: master@2021-02-23 + rev = "11cd34cd592f917bab5f42e2b378ab329dee3bcf"; + sha256 = "sha256:1mgga54np22csagzaxfjq5hrgyv8y4igrl3f6z24fb39rvvx236w"; + }) {}; +in +{ + pkgs ? pinned-pkgs }: +let + # helm-docs generator + helm-docs = import ./nix/helm-docs.nix { + inherit pkgs; + }; + # chart-testing tools in a container + ct-in-container = pkgs.stdenv.mkDerivation rec { + name = "ct"; + version = "latest"; + nativeBuildInputs = [ pkgs.makeWrapper ]; + src = ./scripts; + installPhase = '' + mkdir -p $out/bin + cp -f $src/ct.sh $out/bin/.ct.sh + chmod +x $out/bin/.ct.sh + makeWrapper $out/bin/.ct.sh $out/bin/ct + ''; + }; + # chart-testing tools as binary + ct-bin = import ./nix/chart-testing.nix { + inherit pkgs; + }; + # python-packages + python = import ./nix/python.nix { + inherit pkgs; + }; +in +pkgs.stdenv.mkDerivation rec { + pname = "charts-devenv"; + version = "1.0"; + src = ./nix; + propagatedBuildInputs = [ + pkgs.direnv + pkgs.nix-direnv + pkgs.makeWrapper + pkgs.kubectl + pkgs.kubernetes-helm + helm-docs + ct-bin + python + ]; + dontInstall = true; + meta = { + description = "Development environment for Rancher/Helm chart in this repo"; + maintainers = [ "Rizky Maulana Nugraha " ]; + }; +} diff --git a/lintconf.yaml b/lintconf.yaml new file mode 100644 index 0000000..90f48c8 --- /dev/null +++ b/lintconf.yaml @@ -0,0 +1,42 @@ +--- +rules: + braces: + min-spaces-inside: 0 + max-spaces-inside: 0 + min-spaces-inside-empty: -1 + max-spaces-inside-empty: -1 + brackets: + min-spaces-inside: 0 + max-spaces-inside: 0 + min-spaces-inside-empty: -1 + max-spaces-inside-empty: -1 + colons: + max-spaces-before: 0 + max-spaces-after: 1 + commas: + max-spaces-before: 0 + min-spaces-after: 1 + max-spaces-after: 1 + comments: + require-starting-space: true + min-spaces-from-content: 2 + document-end: disable + document-start: disable # No --- to start a file + empty-lines: + max: 2 + max-start: 0 + max-end: 0 + hyphens: + max-spaces-after: 1 + indentation: + spaces: consistent + indent-sequences: whatever # - list indentation will handle both indentation and without + check-multi-line-strings: false + key-duplicates: enable + line-length: disable # Lines can be any length + new-line-at-end-of-file: enable + new-lines: + type: unix + trailing-spaces: enable + truthy: + level: warning diff --git a/nix/chart-testing.nix b/nix/chart-testing.nix new file mode 100644 index 0000000..2963e9b --- /dev/null +++ b/nix/chart-testing.nix @@ -0,0 +1,37 @@ +{ pkgs ? import {} }: +pkgs.buildGoModule rec { + pname = "chart-testing"; + name = "ct"; + version = "3.3.1"; + platform = if pkgs.stdenv.isLinux then "linux" else (if pkgs.stdenv.isDarwin then "darwin" else ""); + arch = if pkgs.stdenv.is64bit then "amd64" else ""; + nativeBuildInputs = [ pkgs.makeWrapper pkgs.installShellFiles ]; + src = pkgs.fetchFromGitHub { + owner = "lucernae"; + repo = "chart-testing"; + rev = "8c0d4d040350522d99a0a487cdfba6d0b7a19a2b"; + sha256 = "sha256:0siig6svlj78qx63w6fibnxv3091k2jj7gjbf67dkc9z7y2wg9p0"; + }; + runVend = true; + vendorSha256 = "sha256:1m3sqpmqgglr9blpgvgzg4bysvxdzsqp9znlgn12x48cc7a7n492"; + postFixup = '' + wrapProgram $out/bin/ct --add-flags '--config $PROJECT_ROOT/ct.yaml' + ''; + /* + # This part is when you need to install chart-testing binary from official + # helm source + src = pkgs.fetchurl { + url = "https://github.com/helm/${pname}/releases/download/v${version}/${pname}_${version}_${platform}_${arch}.tar.gz"; + sha256 = "sha256:1v2f59yjydy5d6ri2fy7xqxh07vr3f2ffc8qfa51i62wyvvpq2ah"; + }; + installPhase = '' + mkdir -p $out/bin + cp -f $TMPDIR/ct $out/bin/ct + chmod +x $out/bin/ct + ''; + dontPatchELF = true; + postFixup = '' + wrapProgram $out/bin/ct --add-flags '--config $PROJECT_ROOT/ct.yaml' + ''; + */ +} diff --git a/nix/helm-docs.nix b/nix/helm-docs.nix new file mode 100644 index 0000000..7352cad --- /dev/null +++ b/nix/helm-docs.nix @@ -0,0 +1,20 @@ +{ pkgs ? import {} }: +pkgs.buildGoModule { + pname = "helm-docs"; + version = "v1.5.0-notationtype"; + src = pkgs.fetchFromGitHub { + owner = "lucernae"; + repo = "helm-docs"; + # github.com/lucernae/helm-docs@notation-type + rev = "0c63790cb525f306ff81631d36c39889d75c7020"; + sha256 = "sha256:154rznqqw68d83j8p98l7n4n3fb3bp0q3nafbc0n09jv5rggr93i"; + }; + runVend = true; + vendorSha256 = "sha256:0wqs35r570icja95g4qf4kzh1wlm4smfiq5flmg4cn4xqv4r1161"; + nativeBuildInputs = [ pkgs.makeWrapper ]; + postFixup = '' + wrapProgram $out/bin/helm-docs \ + --add-flags -t=_templates.gotmpl \ + --add-flags -t=README.md.gotmpl + ''; +} diff --git a/nix/python.nix b/nix/python.nix new file mode 100644 index 0000000..3746907 --- /dev/null +++ b/nix/python.nix @@ -0,0 +1,8 @@ +{ pkgs ? import {} }: +let + python-packages = ps: with ps; [ + yamale + yamllint + ]; +in + pkgs.python38.withPackages(python-packages) diff --git a/scripts/ct.sh b/scripts/ct.sh index 9c73767..bacfa33 100755 --- a/scripts/ct.sh +++ b/scripts/ct.sh @@ -3,13 +3,15 @@ set -eux # Make sure environment are set -[ -d "${ROOT_DIR}" ] +[ -d "${PROJECT_ROOT}" ] -docker run --rm -it -v "${ROOT_DIR}":/charts --workdir=/charts --entrypoint=ct \ - quay.io/helmpack/chart-testing "$@" +docker run --rm -it -v "${PROJECT_ROOT}":"${PROJECT_ROOT}" --workdir="${PWD}" --entrypoint=ct \ + -e KUBECONFIG="${KUBECONFIG}" \ + quay.io/helmpack/chart-testing --config "${PROJECT_ROOT}/ct.yaml" "$@" # The docker based chart-testing tend to write files as root. # We don't want that USER_GROUP="$(id -u):$(id -g)" -docker run --rm -it -v "${ROOT_DIR}":/charts --workdir=/charts --entrypoint=/bin/sh \ +docker run --rm -it -v "${PROJECT_ROOT}":"${PROJECT_ROOT}" --workdir="${PWD}" --entrypoint=/bin/sh \ + -e KUBECONFIG="${KUBECONFIG}" \ quay.io/helmpack/chart-testing -c "chown -R ${USER_GROUP} ." diff --git a/shell.nix b/shell.nix deleted file mode 100644 index 0fa1d83..0000000 --- a/shell.nix +++ /dev/null @@ -1,45 +0,0 @@ -{ pkgs ? import {} - , projectPath ? toString ./. }: -let - # helm-docs generator - helm-docs = pkgs.buildGoModule { - pname = "helm-docs"; - version = "v1.5.0-notationtype"; - src = pkgs.fetchFromGitHub { - owner = "lucernae"; - repo = "helm-docs"; - # github.com/lucernae/helm-docs@notation-type - rev = "0c63790cb525f306ff81631d36c39889d75c7020"; - sha256 = "sha256:154rznqqw68d83j8p98l7n4n3fb3bp0q3nafbc0n09jv5rggr93i"; - }; - runVend = true; - vendorSha256 = "sha256:0wqs35r570icja95g4qf4kzh1wlm4smfiq5flmg4cn4xqv4r1161"; - nativeBuildInputs = [ pkgs.makeWrapper ]; - postFixup = '' - wrapProgram $out/bin/helm-docs \ - --add-flags -t=_templates.gotmpl \ - --add-flags -t=README.gotmpl - ''; - }; - # chart-testing tools in a container - ct-in-container = pkgs.stdenv.mkDerivation rec { - name = "ct"; - version = "latest"; - nativeBuildInputs = [ pkgs.makeWrapper ]; - src = ./scripts; - installPhase = '' - mkdir -p $out/bin - cp -f $src/ct.sh $out/bin/.ct.sh - chmod +x $out/bin/.ct.sh - echo ${projectPath} - makeWrapper $out/bin/.ct.sh $out/bin/ct --set ROOT_DIR ${projectPath} - ''; - }; -in -pkgs.mkShell { - nativeBuildInputs = [ - pkgs.makeWrapper - helm-docs - ct-in-container - ]; -} From 1654273763086220664ba3bbb590bf8a852e0e94 Mon Sep 17 00:00:00 2001 From: Rizky Maulana Nugraha Date: Wed, 24 Feb 2021 10:19:06 +0700 Subject: [PATCH 3/3] Improve Development Readme --- .envrc | 5 ++++- .gitignore | 12 ++++++++-- DEVELOPMENT-README.md | 51 ++++++++++++++++++++++++++++++++++++++----- kind.config.yaml | 5 +++++ nix/chart-testing.nix | 2 +- shell.nix | 19 ++++++++++++++++ 6 files changed, 84 insertions(+), 10 deletions(-) create mode 100644 kind.config.yaml create mode 100644 shell.nix diff --git a/.envrc b/.envrc index 9ca7d23..f1e9efe 100644 --- a/.envrc +++ b/.envrc @@ -2,10 +2,13 @@ use_nix export KUBECONFIG=`pwd`/kubeconfig.yaml export PROJECT_ROOT=`pwd` +export CT_CONFIG=`pwd`/ct.yaml source_env_if_exists .local.envrc -dotenv_if_exists .local.env +dotenv_if_exists .env .local.env + +watch_file .local.envrc .local.env if [[ -z "$(which docker)" ]]; then echo "You need to install docker" diff --git a/.gitignore b/.gitignore index 5f0a2c5..b9dcdc3 100644 --- a/.gitignore +++ b/.gitignore @@ -2,10 +2,18 @@ .idea .python-version Chart.lock -.direnv +# direnv related +.direnv .local.envrc .local.env -result +# k8s related kubeconfig.yaml + +# nix related +result +local-shell.nix + +# chart-testing related +ct.override.yaml diff --git a/DEVELOPMENT-README.md b/DEVELOPMENT-README.md index 5cf2d2e..f53b848 100644 --- a/DEVELOPMENT-README.md +++ b/DEVELOPMENT-README.md @@ -42,13 +42,13 @@ Direnv files, `.envrc` works cascadingly. In the root directory, there is a If you need to override these values, create extra file called `.local.envrc` or `.env`. This will be executed to override `.envrc` in that directory. -Nix-shell function `shell.nix` is used to express the dependencies we need to +Nix function/derivation `default.nix` is used to express the dependencies we need to setup our tools. It is also called by Direnv when we enter root directory of -this project. +this project. You can customize your own Nix shell by creating a `local-shell.nix` To setup the environment at first time, run this in the root project directory: -``` +```bash direnv allow ``` @@ -62,15 +62,21 @@ Chart testing works by comparing diff changes in the repo. So we need to provide which branch we are working on against. Normally you have `origin` and `upstream` in a git based workflow. If not, then you need to set your `upstream` remote accordingly. +Overriding any Chart testing option can be done by setting environment variable +via your `.local.env` file. To see which option are available, check: +https://github.com/helm/chart-testing. If that is not enough, +set `CT_CONFIG=/ct.override.yaml` and then +set chart testing config file in `ct.override.yaml`. Example use case is when +you want to repeatedly test specific chart in local. + Running -``` +```bash ct lint ``` Will do a lint by comparing the current branch with the current `main` branch -in local repo. To override this behaviour, refer to the chart-testing docs and -do override necessary in the `.envrc` or `.env` directory +in local repo. # Generating chart documentations @@ -81,3 +87,36 @@ Execute `helm-docs` in chart subdirectory to generate the docs. Modification can be done in respective `README.md.gotmpl` file. # Chart testing + +In order to test the chart, you need a k8s distro running. + +If you already have a sandbox k8s cluster, put the kubeconfig file in `kubeconfig.yaml` +in the project root directory. Alternatively, specify `KUBECONFIG` environment +in your `.local.env` file in the project directory + +If you don't have a sandbox k8s cluster, create one in your local machine. +It's recommended to use [KIND](https://kind.sigs.k8s.io/) because it's lightweight. + +Create cluster by running + +```bash +kind create cluster --config=kind.config.yaml +``` + +You can replace `kind.config.yaml` file with any valid kind config file. +Once KIND is running, you can extract the kube config file like this: + +```bash +kind export kubeconfig --kubeconfig kubeconfig.yaml +``` + +Once you got that set up, + +Running + +```bash +ct install +``` + +Will install changed charts into your target cluster. +`ct` will also run `helm test` if the chart have test hook. diff --git a/kind.config.yaml b/kind.config.yaml new file mode 100644 index 0000000..eac295a --- /dev/null +++ b/kind.config.yaml @@ -0,0 +1,5 @@ +kind: Cluster +apiVersion: kind.x-k8s.io/v1alpha4 +nodes: +- role: control-plane + image: kindest/node:v1.19.1 diff --git a/nix/chart-testing.nix b/nix/chart-testing.nix index 2963e9b..66fc902 100644 --- a/nix/chart-testing.nix +++ b/nix/chart-testing.nix @@ -15,7 +15,7 @@ pkgs.buildGoModule rec { runVend = true; vendorSha256 = "sha256:1m3sqpmqgglr9blpgvgzg4bysvxdzsqp9znlgn12x48cc7a7n492"; postFixup = '' - wrapProgram $out/bin/ct --add-flags '--config $PROJECT_ROOT/ct.yaml' + wrapProgram $out/bin/ct --add-flags '--config $CT_CONFIG' ''; /* # This part is when you need to install chart-testing binary from official diff --git a/shell.nix b/shell.nix new file mode 100644 index 0000000..8eb959f --- /dev/null +++ b/shell.nix @@ -0,0 +1,19 @@ +{ pkgs ? import {} }: +let + local-shell = if builtins.pathExists ./local-shell.nix then (import ./local-shell.nix { + inherit pkgs; + }) else null; +in +with pkgs; +mkShell { + inputsFrom = [ (import ./default.nix {}) ] ++ lib.optionals (! isNull local-shell) [ local-shell ]; + shellHook = '' + echo "" + echo "---------------------------------------------------------------" + echo "You are using default Nix-shell in this project." + echo "Use: \"direnv status\" to check if you are using correct direnv" + echo "Use: \"printenv\" to print current environment variable" + echo "---------------------------------------------------------------" + echo "" + ''; +}