From 79c6718837b7b2844b42386212dbe24193ab0c22 Mon Sep 17 00:00:00 2001 From: "branden.cobb" Date: Mon, 10 May 2021 20:31:01 +0000 Subject: [PATCH] Helm Tests --- CHANGELOG.md | 23 ++++++--- Dockerfile | 2 +- chart/Chart.yaml | 6 ++- chart/charts/bb-test-lib-0.4.0.tgz | Bin 0 -> 2366 bytes chart/charts/postgresql-8.6.4.tgz | Bin 0 -> 31450 bytes chart/{charts => deps}/postgresql/.helmignore | 0 chart/{charts => deps}/postgresql/Chart.yaml | 0 chart/{charts => deps}/postgresql/README.md | 0 .../postgresql/ci/default-values.yaml | 0 .../ci/shmvolume-disabled-values.yaml | 0 .../postgresql/files/README.md | 0 .../postgresql/files/conf.d/README.md | 0 .../docker-entrypoint-initdb.d/README.md | 0 .../postgresql/templates/NOTES.txt | 0 .../postgresql/templates/_helpers.tpl | 0 .../postgresql/templates/configmap.yaml | 0 .../templates/extended-config-configmap.yaml | 0 .../templates/initialization-configmap.yaml | 0 .../templates/metrics-configmap.yaml | 0 .../postgresql/templates/metrics-svc.yaml | 0 .../postgresql/templates/networkpolicy.yaml | 0 .../postgresql/templates/prometheusrule.yaml | 0 .../postgresql/templates/secrets.yaml | 0 .../postgresql/templates/serviceaccount.yaml | 0 .../postgresql/templates/servicemonitor.yaml | 0 .../templates/statefulset-slaves.yaml | 0 .../postgresql/templates/statefulset.yaml | 0 .../postgresql/templates/svc-headless.yaml | 0 .../postgresql/templates/svc-read.yaml | 0 .../postgresql/templates/svc.yaml | 0 .../postgresql/values-production.yaml | 0 .../postgresql/values.schema.json | 0 chart/{charts => deps}/postgresql/values.yaml | 0 chart/requirements.lock | 6 +++ chart/requirements.yaml | 2 +- .../tests/sonarqube-cypress-test.yaml | 19 +++++++ chart/templates/tests/sonarqube-test.yaml | 47 ------------------ chart/tests/cypress/cypress.json | 5 ++ chart/tests/cypress/sonarqube-health.spec.js | 20 ++++++++ chart/values.yaml | 3 +- tests/cy-run.sh | 16 ------ tests/cypress.json | 11 ---- .../integration/sonarqube-health.spec.js | 10 ---- tests/main-test-gateway.yaml | 36 -------------- tests/test-values.yml | 13 +++-- 45 files changed, 82 insertions(+), 137 deletions(-) create mode 100644 chart/charts/bb-test-lib-0.4.0.tgz create mode 100644 chart/charts/postgresql-8.6.4.tgz rename chart/{charts => deps}/postgresql/.helmignore (100%) rename chart/{charts => deps}/postgresql/Chart.yaml (100%) rename chart/{charts => deps}/postgresql/README.md (100%) rename chart/{charts => deps}/postgresql/ci/default-values.yaml (100%) rename chart/{charts => deps}/postgresql/ci/shmvolume-disabled-values.yaml (100%) rename chart/{charts => deps}/postgresql/files/README.md (100%) rename chart/{charts => deps}/postgresql/files/conf.d/README.md (100%) rename chart/{charts => deps}/postgresql/files/docker-entrypoint-initdb.d/README.md (100%) rename chart/{charts => deps}/postgresql/templates/NOTES.txt (100%) rename chart/{charts => deps}/postgresql/templates/_helpers.tpl (100%) rename chart/{charts => deps}/postgresql/templates/configmap.yaml (100%) rename chart/{charts => deps}/postgresql/templates/extended-config-configmap.yaml (100%) rename chart/{charts => deps}/postgresql/templates/initialization-configmap.yaml (100%) rename chart/{charts => deps}/postgresql/templates/metrics-configmap.yaml (100%) rename chart/{charts => deps}/postgresql/templates/metrics-svc.yaml (100%) rename chart/{charts => deps}/postgresql/templates/networkpolicy.yaml (100%) rename chart/{charts => deps}/postgresql/templates/prometheusrule.yaml (100%) rename chart/{charts => deps}/postgresql/templates/secrets.yaml (100%) rename chart/{charts => deps}/postgresql/templates/serviceaccount.yaml (100%) rename chart/{charts => deps}/postgresql/templates/servicemonitor.yaml (100%) rename chart/{charts => deps}/postgresql/templates/statefulset-slaves.yaml (100%) rename chart/{charts => deps}/postgresql/templates/statefulset.yaml (100%) rename chart/{charts => deps}/postgresql/templates/svc-headless.yaml (100%) rename chart/{charts => deps}/postgresql/templates/svc-read.yaml (100%) rename chart/{charts => deps}/postgresql/templates/svc.yaml (100%) rename chart/{charts => deps}/postgresql/values-production.yaml (100%) rename chart/{charts => deps}/postgresql/values.schema.json (100%) rename chart/{charts => deps}/postgresql/values.yaml (100%) create mode 100644 chart/requirements.lock create mode 100644 chart/templates/tests/sonarqube-cypress-test.yaml delete mode 100644 chart/templates/tests/sonarqube-test.yaml create mode 100644 chart/tests/cypress/cypress.json create mode 100644 chart/tests/cypress/sonarqube-health.spec.js delete mode 100644 tests/cy-run.sh delete mode 100644 tests/cypress.json delete mode 100644 tests/cypress/integration/sonarqube-health.spec.js delete mode 100644 tests/main-test-gateway.yaml diff --git a/CHANGELOG.md b/CHANGELOG.md index b4357cb..4cd7390 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,26 +1,33 @@ # Changelog -## 9.2.6-bb.8 - 2021-04-06 +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -Updated sonarqube image version to 8.7.1-community +--- +## [9.2.6-bb.9] - 2021-05-10 +### Changed +- Moved cypress testing to the new helm test structure. -## 9.2.6-bb.7 - 2021-03-31 +## [9.2.6-bb.8] - 2021-04-06 +### Update +- Updated sonarqube image version to 8.7.1-community -Adding Affinity documentation +## [9.2.6-bb.7] - 2021-03-31 +### Added +- Adding Affinity documentation -## 9.2.6-bb.6 - 2021-03-30 +## [9.2.6-bb.6] - 2021-03-30 Modified initContainer logic -## 9.2.6-bb.5 - 2021-03-22 +## [9.2.6-bb.5] - 2021-03-22 Fixed initContainer logic -## 9.2.6-bb.4 - 2021-03-22 +## [9.2.6-bb.4] - 2021-03-22 Adding ability to specify istio gateways and hosts in values file -## 9.2.6-bb.3 - 2021-03-16 +## [9.2.6-bb.3] - 2021-03-16 Plugins have been preinstalled into the container and made available at registry.dso.mil. InitContainers have also been pushed into registry.dso.mil until ironbank equivalents can be found. diff --git a/Dockerfile b/Dockerfile index 4ece7bf..671cc39 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ # Start with the IronBank Image FROM registry1.dso.mil/ironbank/sonarsource/sonarqube/sonarqube8-community:8.7.1-community # Add needed Plugins -ADD https://github.com/dependency-check/dependency-check-sonar-plugin/releases/download/1.2.6/sonar-dependency-check-plugin-1.2.6.jar /opt/sonarqube/extensions/plugins/ +ADD https://github.com/dependency-check/dependency-check-sonar-plugin/releases/download/2.0.7/sonar-dependency-check-plugin-2.0.7.jar /opt/sonarqube/extensions/plugins/ ADD https://github.com/SonarOpenCommunity/sonar-cxx/releases/download/cxx-1.3.2/sonar-c-plugin-1.3.2.1853.jar /opt/sonarqube/extensions/plugins/ ADD https://github.com/SonarOpenCommunity/sonar-cxx/releases/download/cxx-1.3.2/sonar-cxx-plugin-1.3.2.1853.jar /opt/sonarqube/extensions/plugins/ ADD https://github.com/dmeiners88/sonarqube-prometheus-exporter/releases/download/v1.0.0-SNAPSHOT-2018-07-04/sonar-prometheus-exporter-1.0.0-SNAPSHOT.jar /opt/sonarqube/extensions/plugins/ diff --git a/chart/Chart.yaml b/chart/Chart.yaml index 07f6ffb..592e434 100644 --- a/chart/Chart.yaml +++ b/chart/Chart.yaml @@ -2,7 +2,7 @@ apiVersion: v1 appVersion: 8.7.1-community name: sonarqube description: SonarQube is an open sourced code quality scanning tool -version: 9.2.6-bb.8 +version: 9.2.6-bb.9 keywords: - coverage - security @@ -17,3 +17,7 @@ maintainers: email: rjkernick@gmail.com - name: tsiddique email: tsiddique@live.com +dependencies: + - name: bb-test-lib + version: "0.4.0" + repository: "oci://registry.dso.mil/platform-one/big-bang/pipeline-templates/pipeline-templates" diff --git a/chart/charts/bb-test-lib-0.4.0.tgz b/chart/charts/bb-test-lib-0.4.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..75be43576bcc47b2ea027059ec8ce1b94b9f5dcf GIT binary patch literal 2366 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 literal 0 HcmV?d00001 diff --git a/chart/charts/postgresql-8.6.4.tgz b/chart/charts/postgresql-8.6.4.tgz new file mode 100644 index 0000000000000000000000000000000000000000..026c6f5b4623da542858aab28e99f84620abf758 GIT binary patch literal 31450 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�_F!5u%>+Vvhq*Z~@G zaGV)u*PnqMCdXP~{raFjd|V$3k?>x(TU0j#>T~B+H$(z+(Jch%?xGMgLE_PcYO1?o z_wpKvo8XVJ|H)(!)Cu8Yz@Jf+gp0*@TFs?3gB}v05$-TNB3!V#TS$fYriZcy*c!`& zaZArN^aJXD!mLB+(%aB7b`r{^)T+i$1$I>0@Q3(ZL%$r*%CmdGMoyB`*b!(ndy_te z9f2M~!jXzcvgPyL*B8gTM+eKW=L+m3X&7pcgQm12Ye4bgm*;)G$2`)K@nTA_X2yhb82@aH#zVXB> zV8>6npwW^3Rqx*9C_K7GX1sW4&x*Ga4IG#29hP1D*TZ;LY{F>ZnmfxS_o3luB`&!Z zJB{3&{&wz7)!3;yG5*^f6<1@Y=EV4KcT`-BothKlzui%BHFj!FjQ_Sr#f{vY{&wz7 zHQ1>ZTHlt;S|Q(Q{(pXF>;P6uNgMnGaNP#E?*@C#+uTE5w8_4|EEL^Q;$@4zhy(Zpjo#E4_~ zy#=8Ao6hwAvo^=r6#kpj+3tUiCSI1wUN!|VoeMw$(rTTLF`xmxl$0GsDp88E^c1t6 zW(iIE+0{kcy&7;4qJGCQ?}QT|HghWnlxNtFQG^5NJD~PEt=4X+E`73z+~S)$Wf1aLK$O&CnuDfP#QiKXVp8=Ag56BLED*!>55 z|NS{hzW=@l|Dve^D&;!cr9A@v;I#8`-TAT6YOSq7Ax*4GWMiPwF9IwO3Arq~1|JOV z!}~KhjG|O1Ba%QP=Wr;XKJOTCJ3fuNc~pt+m|l5;cGEb(j0+S89@7navJKBExzTDJ zs^e-d7>!5a1Q?d|lOs7#7wrNO}DMqD~$ksfNJLyL5#07P3RURDv983 z;0-b~#V#@9aug=bg-RfumD>bPMll%@AH^1Gz6q3p&xnE>F4Hi^3=K#~grsJ5MYyBq z@gzr*KQ;Yh%E+IxqY$`{5wjrZemkW#K)8lP5;R7EMWtOBG?p{vSz9Q> zNl0`W_?}!`a#CBK``YfkdY~+ltskmC%FT^logN&g(Eu~qvx?HfZ4F-6g(`Mx3&D1& zlhWrM+s_#mz$dXkW;CWLSG<-8h-iRod&-ONsnR`Y)8VjP?y;&^+@2nw9hqjMitxus zsyhx?4R9Q%(OF(2AL>>KuDWvD8A|GXr`^6w9@+WaPJPJd^_)7ZB%G*qVhBzxlFf|l zEi>+Wp2bfeh9Mg1gf)Rw2;}!TLt{+k;v%tTQjUns`BevYLr$mrn7JG&bNh1^As^GL zSc_=G9`-aBbaQ`bW~4^$v@%^ndy0l{>xtPFU|Jso+Y1ir{>sp&Hp+!eqU$EC!Zm`$rv<$12n*6t9WGl{h+ z?Q>mO<^2kXFE&j@A4NFaLmY1c?u*!VcYp2yZjI&@@ z1`!+sRsNVfhh9%77TN?lKuq|&4=-fMz(5KEZ6WUK<~EkVq7hGer#(sGH84H+M5E3Rar2!;&vvEG!#KGqw`4_3d<2``r+BO;_2 zk@CYz5A(05MT?iCal;59Gcgi-W^>^(<}B4YHJ0K^&^mA!17!g=K`^kN3O!0wUwP?H zAWFH=)9&ktM9Sck?-yZ6L)l1QlevKz$AV1~N@C&Z%;=q<51i^I&1O_?E7Qm(NX({W zKC3Q`vp~&m7WN`9mYn!j_-ck^O^XJsIn-E}Oa8{J6*LoMHDJxjea};WtXK`h0gh#T zx$nuW8@xhStjx`y55w40OpFw@2vtT^mE*YI;p6_M{O6CbuQ;#zvord$Zx+{?2^5(z z_ZZ^<>f=DNG*+`i;(QydgNM6pe_hF66ua$MM+wRxq@$6XDXW2R4Myt5tu>`3mJ}SFw4kN` z>9qhXO!99}*_C>#cTX`7Prgt#F!j^@l)pX6eBFAm8(yIaSKpM<*i(PnhUKfQ#T@bz zb*pQ8=jpR*pzZderM8F<5Nfq^k_2d6w=@}Rjz^QsmZ#W~*}6^L#FLuohkQd<Z(JoJ-a*up1=|AIvtz^{h8HHwsd@QpP#1*Uq1VkPf<J%=Vg)iyxj}$W^RfsdJ5ws^~`Ux+Z zY)Zb~Y95pn3x&muhCwoYXB3r~xMDQLJjP+Rb-J+C*R(e0#rVoIP#QT9e59iR{{5hG|2Vy;A=D(+JW{b%4lju9i2Z^9LZ2u-vJM2=)g zB@z{TVpug7;6$oVu}@@Ea(Pr99sJ-Go*$}9U6;=rDy#nhpyxp!_WV%U?)9v8EBh!E z${NhOoKs`Q%ZFa$vZ_YK%gfde6=?Zk8dp=VT2(VphUvQEm8|H#{!9IkK}7S(s9l~lE7+xisKtFjDsbi7Te)JQc|i#Eks zv;|MuE$l5K{VH3NN((M>i+qpV(@etI16CZ}3CxB3f6GF?-C3~0PSXmN#j+E^V6Z(8 zhRU)v-51I#aycB9ET@*A3OQ?@nKlwjk;O6JtUR037@s=U^J#=_Ricic0x}#DKMh3( zcI9R!+fEtBD}8>?u@+mdvagkavh0vlrzhFYt1i(L`Ljw-<4SFuuFzz23OZ{PL6?Yx z>Kuf`Y9D3}OR@!^L?N8yiIZ<>C(Z?BcbSw2tFWNQnC0j9jToF5)y_GD*`L; zVT*x!a$FTb}TgmA74cz^yqN{ZwTxQjTF}(} zZ;4Yyvd^DA-7%A(_9F?yKH(M_n^m(|h=BaFzG7o|S{_AR719{YRFe^oF;j-iLR92B z^{S(Vk1pigCr?5&$#=js6-g>oGA-Bb&8!!_==P15g^#6bD6TM$VOsiFgKiwahkeC< z;H^X;L1FDN<3%Pmj1+3MJY_;CH89;x<~d>x01HRdmK!CAb3pOL{pfn9WLm+dp=Ya6 zkWow-4zxK#O-NNOZadev^F;;R1}6-|$=kE@*QW<(7w^svPB-(P`>&iIC%b27zr8)( zcU~PHAD-{Oy4XE^eK!5}x7|1Uho=hXC$IN+&v!epYfQNeM~KAA^j8VGgvq#E`POh( zH>n*nE47oZj5@I=1%cdXfMEQ-W00tW}@Jm)!StkK*`ngu0bLIZY&)?1g|>N;c-_Cc)JRAgcv z7x+-Dn-~{enVU>&NHeVB^QOWqb;V}|kafXsrOh%o=b^}&X=Uci;3(FGil-%NO3=O~ zS5YnKPZx^EX0w5yfzw=M7t45Fn2|QZ#9ipaS;m~DL=3(uvcbYDwn22zEXoB^nPZa` z0Fw%}!k(jjWo6#rj7~>m8pN||bT^0Uz3lR`klp@R7Uk*(W-NR zXD`BIftG&9dOt$B@Pm@p@oymyd*Lt~_Q`yhOReK6`tcnK$vbMatZtcTW+&zqX!56j#sKt=0wjHbinxXTOLIHjnF$U(+kiFs>A#nXo1sJ{1NWUr0 z1n+4o-aH!@Y{{*!(}?$}=b(iRum*y(qL^@{?t^I6ChNe4=^$1w z2d006d;#5Tf5y|kq1R`;SkiONCpKX>dp-6xUnm}lPUooD(kv5Z-{WSXNavbE2Q8)d za9$&Vn^LTX`H5$&#L~d~2uMdf!BK3rk+kMr)v$|khEN>Evq+}N%G=#tT_HOcsen`V zrgjlbmL%f!`oWc4QU31ez`XwP`*ta8KWgW6)Yqn5FD+))cGknpY5;?J<4kX2BhLA~ z-N^p$vD@>0sXf%z;Fs^u56_N|_9vG|r*Ep~EFc#ZQ~wmA%c(Bn!g_=AgwMnhe7u@n zwYK33mG7(enyxBQVh4T-+fC(_C{#(=DM-PpfqFA(bXS;x-x}f7>6|GskAJh9oKa*z z0d^I|iseccawajACm6g}`16r2Vo?5WL}tM#7B^D2-BsmU$c7e0nfF=BKM001R?-A@ zr!ytykVC>s(rke^HTEJLnWj&o$Z0^J_8%Wi&g%QCy&t;zqnSOla5UpAk@7>CJBYWO z{%UHQaxI|YaiQ4)cC>At=X$5_~~;w)m@2hKRKLkK;z3~&vFz_$1fpZzJ$ zBG?sQzxydfyq%ryuiyQ|P(QF?ARO_pMGRQp6`Lx-%@zRfy4vrzNbt%zyNSgu7$C{V zYLCbE}P<0l-{0!M4S4k|C?Jlft7`vw|iX#vueyA7?<4h`)`^0Hy zB)^WcnP5|+ubW8*Ya->v45u)8WREh|Vo)$keSik2L0%@wVDw`5+Yw3`p2swt*Unm1 zr6hKoO`6^E3bAd@tmZuqZbsLzHp)y?%Zcal7FcGP zr5i3bEz{hhv|(K}X7BUxS@;6F4L{Li{hDbqNkE72HeT0KxCZV@a{pUkHk}q~cuaWe ztP+d%$I-CQMrha`?V4F)T$XS`7G9mc<|ww|X%8_Pf17b=rKu%{zEtz4wW^ z;6-W9RE3Ivdq@@a2X?HH0H!MKo4P)3ecCSwq60dRE~GLCEQGZ{TtORMcX-ZE)+twwW#%P>fPE5v&&nkL=Wp*yizFAVJ%3O$O%4Z); zp%pmi|9DY0ozBslA5Iy2`SN@Ao>%@4N#?uWr_QRh%aPGFI0JYkC z1TC&VweJC+eS1x%qM-xFi$dmky{+|Po;+E9nbs)% zH}hKWp8-#vbQpU-`i1>4xttu2SrsZrIClk3FWTf1+7}V-O-~*iUQUk8qnFk*QXM1B zHe10XktuRLK)~!dl>Uoit{V0E(w~h+;nNT_Yr8MZ0PSt$32`x|@j{Wlh%ExW2voTw zqOH_Za*zSt3LBm=p65#P+0vnO;AURbVLI=ja`MmIDR;s8J}Z?HSut=&nQ&R8N$>61 z>+{LM(VN%7yQ4{P_WI!M$=T%ic*kqAH44<=F152bVQ{=i$H?d!){<&F-Dj!1!R<{6 z@T!4&YD z+_fi?5S1PRV-(?_9DdYSoT~nB0u^7#pXlh+?rf zSS%KT?~eMeTssAWl%wQ@kEV(Z1+i0~hBB15) z+G^+pWL=sUD|6@}(&CUPdqw*bljGylpRW#2&MyD%%6_?`T<+kPsI{ByOE3qmo;po< z_Q5w~SeLCIObT{&glF7{MCPUy6Y>BUOh|CKgql#XQ*(Ht=bbi_;@%klLQmSE=7`?ArWbwfHzAP zOil%ChW4&g0zRV*=&@JkI0Ks*D#4vjz^!`U1a@EuguyHBno%kDa45ZyVjhHz8;4E6aLRNn<}0mZTs~I zuGID=++^SZ1TyJDA<1$?&?>5jzP~xWJiG{t--unj)=&yKaCWEZim5WoAXu2S zdRC1D(Kj>r)l97;GWTwyO%jH9$L&on;BY-yUWwe=i0+7=-(++RjDlyql(x29Mr_+2 zQM?g>u2x-R*M4Wr620Ep)5Gh^&YxHn$x4%b}EzwOXg2Q7QC&D@&}X4$*ai){qj8< z6lp#%XOl7y-5^f@L7~d5!TjK@4x~;<^Mc|Hxto6E1g&PHuJ;1ByN!#2{LRSej?v_% zz5;ecI6cOxAe#jqH=X7P1FYkJVpur5C(~jF;l*ykE2>Vko^C~K0JgX8YzxsUMg*)4 zxOo+uNB6(mM|WKl2Au+&=3e+iB4<4D-g%#*g{q;eUWKn5Z`VThQDtl)NSV$$Qq!v~M0i|9^ixv(qdd&^a&g;xoQL9mC;p_96d9)v*8!0``%A!jtk!m|8QN+&i#jcdhA%> z=4ROg@Qmg=ka@xOkIY`K*|dz4NHf0RM&V+cqoL!>Coc*g1lw>++nOifb&R)<7X0goJamTcBT_B4Q6xcs2(;VKNzmM&x@<;)jEu92KNi&we`Q5Yv{9O!hP$1 zZ@Amg|3{-2&mY(S*ZBOseSs31rA{RzRmCKPGQg5gaV0FkL&-d ze0n|h8hHsQs)$nZRZzEHkDY--wGTl9caoVg+i533po+1S8e!{gj#a?*d0sg!(sL{H@dp)Mae9S(XD%bQGIlel~<)$6G zzrsk%FpU%V(F(>f%M)JArAh;tiNQ2p1XG?Z1^}HWpo~yKA!VWmT4r4Rqn!GoHyy?b zz8JI72p~rk#6KDaYWI1Ev0l%mujEatG5nb#r9lhZLhi9G7SAivU>0k(g~^7u`b;ER zApM49TYf6eEiBFrU3;{Asf7v_WgLkCRGUkuJ>bc#y=f+O#!PnL+#KOAUwQ~+0iX0Ij} zKf-E$GdVe8k(ic9CKzWxt`Ui;Hx_rHuIcUoD%OLZDL#-{Fy(p~xN#&wkv+^zq zMXvRnE2CK?t4jEJdcOr%RnV(#5R@s8GY2cN7!`Blj#-^O<^!_EjT%jv53CIfYa+a$ zzz*@M`s|KAw@|OQ9)vr#RN#PO0536Va)h9+g^gnPQ6bs64b>e}FtDk9z3_FLv*jX$ z0K7XT)fbReG#SQIpv7oR5vT$L82$|3?-5#GTx@+w!9|O?F1$QS$Ila7pD()peBtGK zye7cz6JaQQYHP)G5`*R`+#GMRBqV~(fJNVCm;e|$viMrMT9A1gLfWw~3Pkb{gP#x; zk3~SLvML@Q5bK3Qr&{HTQ3O4puDw2jq$&`FGh5ywG71a!dsIkBkP;cekplY9Ov3+y zAW28eju1Mpx}uGoza+Y@EWlDS-`> zS)a-IyiXxiS3J*?mHUR)UqD>S8BbdD;!ROH--XWys?3Tw6_y9~mM0jh^ZM<6@blz2 zI6i!Lcx;-zArB7J_JalNR&0dVwSHa`VM>IE*uG;5tRBFy?1v@Kp$Tz%c{ny|a>c^& zeSLU4jBU=717)0hA#VFbUu=fgUNi3>!dt8;hJKitWo1A;O3r8&F=!lKDIg12y1MeN z(L$?OIE}pVV7(Z)Z1ywHu5Q*TMmUgkukyz2tgX;b=cOaQWM}H`;aUI_qQy=IpmBkX zUFjlFWyZG6VJ4G>_}fm$&nROft}WlhxY=jGk8ZAo%&<#Rk(?V`im!6jaq1KwwF**9NS;a zPbVNaYvGyZH*{JxQ;?aOHt}I~dghJWM*a{d!as!WHv|8^)|9_%L@n9q+KAfd&_AJ( zrVVSXJ!95p0W+-747{Gr>A&<;U+s~ z-6>aH9Hifw4-t$dnP&95}^lG1oqk}-WQ#$3!?!xR3K1)nxj`s$+b3o z&ZECJjuUMao@rSyv;V`5S2jq+rnPK5b2 zbt*&D*hUUh$V%g`dnccV{km)7v3&94l-Fko`&R(24-7=&3I4xOr7qz5QtHB8hMV9@ z%NsT4%XL52h8d4>m}_0^^jLdB zxA8p<+O%L;Yf3FFjiftqO!%|Fh@V(yT!Ed=OI9@%7=%}NzW9f{b(aUK@y0j9LuzZT zV;f5;jL<`tuCC10D=a+J%Q5>Gxz1ScZ-Z%^4fN7p5VNIZ-2+)AQ3<=XU8b?0I6b)* zFxyDO)f_>(0Ed6~t*#+9Uf~1AcH`8l4M}r|8t)o)%m>xUwv7bk2*)H9LbvCl+G(`U zymMfy=7|J%iq{|})rJ-}n@;*LwA-4HS>%O+Xfcynq#e0wCPak1V_-itQfZ<1On{%` zK^Cf+%w{4l^uV;ym>E78n;8?!eu6K(*W?LFP?)ZM*c^pKG_ld2%Yl+_Q9C68Y5gl9A2LU?2E^P8X_ z==pS$gdWyGMY(RT4SJ@;z_iCSxN>>g7LKX)X9SAm*~(9JR1uPEvP`FZ1lhv}QJN!D4A04fC>0AKcSwi%Z2>ex<%ew!tv{NW z(~!8nWM&rN7aUz%GU!ghlp0VCbK*7Y=*$kbX)LQ+i!6Tl)BR>^2!jqhLsN_SdX~sC z3JB<`%-L4l@+2Abl+cBWXGK88%%y^++m>6?ZF>(cprz-)o`H_?fQ^PB{?Di?@10zuX$w3E#S+X7@2N6iB54KZk&=+aQ^nQFoyCdR zY_K zy#i8HbzFn9h`o66f>rO!XsE14JnjTfY!g`mH*~g;N5^9%x=(ad!*a7v|`T9Vf})z z&P@;FY(Zri#TL!++a7{@$H-HvCM%Pq&oa4I6}VDatkLYFMbT%orIfmvAK29@RLI!& zBHuM{39`aK&K0hVD92J>|AYx+*ngp?v*5E201WYHrrX>uMwPGJ?J3XrLPRaYZRF+xvhxau{BXiHTMsn6#U!fazqqqb%3rmGu zZ>7uf43-&iUm&@(#uU-S(&V(A8t6{DCF#h$Tg{7JJA7L6Mrr^j84Bsz5}S_S`1VI# zp#Wqi*x5T|hO%B3yU)6o>2iwg>UNfE!!^ASFb@}wP%>Z#_HDV z+IB9ZWB-m^Mw9iMs5P~nizInwBH!=ZxJAAbQ4lx^t43TrE-UV_UY?3kov zj1Gv6m&8Tr&;vaDjAu zHR<3oEI$f|N8#`lgaa(lBVW7MW6D9>b8|kDfwPr5j3X_tX{lFJ`J1~;=)5s|zZJ=? zKHG9nZrv$Aa4~!tS>%`XD2iG|k>jEkE}4PHFAfZIY247Q?nMdDWSW-%l_kRp0O#B{ zj1j>)P-8@!!_Ht$iRVoGmM8Hn2BzVWIo z&_xud0+X&Iuov#JDW{Mbk$8Hs7c|J&5Z71;S@X#iZ}Es~LBeF7G%a#t2DolYP$RUc z73PP`-7!X%h!MDcr^3CV1Z>ULh)l=eO)t*^+hK%huc16tJ>Vf6n=WUCfU~>1^YFLa ztUVi$VfU2ZKZw;B9_tg8rr8RQvOW=ejoEu!+Akj)vI@Z{XmmnFCy8%FCbT9pavsI- zEmv|X9&|K(D6-a86u3$PtYpyh9)>GB9eeYc`QBz;p&;S|k?@u8CSokFyN*WYnwf&K zEZoIs9R}HUOC>IsO6a9bqA`08CwG{U-qlg3<68V_&3X3cw5Ik#Q&FgRrp@G&st^iJ z$at;QDpd)1QfxfeQk(y%t}xLo%oXS)qJ&wXXNsH0x~7h9>n-GR`)>5@3%sG}TyX6; zky-3k%$i4!c@CbM&Sv4zm_U}LSW2aCfwSYr2;8Sb3aVk)?n`_b=GBl4*++=fnd`xM ziQ)-z!h>z@>v@ju0AJ0d5>gMUkq)dh=po9>zG{R8V^$0Q&6s|D`apZb-0f1xL*i6I ziXK9~5VHwEB3$ab##>#kXCCpqO7#rz25>-!RY50y_OU7{CdTTOM0f-{FGVDKq#ZP+ zLQi(`M3|ZQW4RC>y84(e+&xCo&DEIYiz^R2eUF@)Wgn7=Ly*~gCo zt;6m|HegSm4~Oh~Kz7@D=04Cys%g)0KJN48i}xN&N9+*WA67rP|gzVZHHXnsTF{dS&^o`LuGsVgRBY zmB7hW7j!rbzpV#N@9nMy?=>QiA4B-oLii3aN3G|tCuAxun!82ct&*kCnMmA=y0R~- zXNt@gKr2FJ1vfDdxQ!y2#|iF)Sm8;vS(;|&i>t_?rtLKTM=8uq>RuckAMRhWD2zB9 z9NFXohP}`BCl`n8=N}K>m;z?J;E7y>ORimES1xv7+dbZATl=SP-W={hFg8+zKqNl zJFHtfT{jA8eWbjTw0FgPN)4y=?(yW+;c>U|V@)!3E!NuSBk$HKFul8)t_q%nk$g%7su#LXzUFVLpX)XGsk`s~95V{2;t zx`uj(F5Rw8x9iiJH0ljHHDl{K{=Z4v{%Rtc$Is*E@$>k3{Cw5V{|f*B|Nl-kD^dXP F0szhBp@{$h literal 0 HcmV?d00001 diff --git a/chart/charts/postgresql/.helmignore b/chart/deps/postgresql/.helmignore similarity index 100% rename from chart/charts/postgresql/.helmignore rename to chart/deps/postgresql/.helmignore diff --git a/chart/charts/postgresql/Chart.yaml b/chart/deps/postgresql/Chart.yaml similarity index 100% rename from chart/charts/postgresql/Chart.yaml rename to chart/deps/postgresql/Chart.yaml diff --git a/chart/charts/postgresql/README.md b/chart/deps/postgresql/README.md similarity index 100% rename from chart/charts/postgresql/README.md rename to chart/deps/postgresql/README.md diff --git a/chart/charts/postgresql/ci/default-values.yaml b/chart/deps/postgresql/ci/default-values.yaml similarity index 100% rename from chart/charts/postgresql/ci/default-values.yaml rename to chart/deps/postgresql/ci/default-values.yaml diff --git a/chart/charts/postgresql/ci/shmvolume-disabled-values.yaml b/chart/deps/postgresql/ci/shmvolume-disabled-values.yaml similarity index 100% rename from chart/charts/postgresql/ci/shmvolume-disabled-values.yaml rename to chart/deps/postgresql/ci/shmvolume-disabled-values.yaml diff --git a/chart/charts/postgresql/files/README.md b/chart/deps/postgresql/files/README.md similarity index 100% rename from chart/charts/postgresql/files/README.md rename to chart/deps/postgresql/files/README.md diff --git a/chart/charts/postgresql/files/conf.d/README.md b/chart/deps/postgresql/files/conf.d/README.md similarity index 100% rename from chart/charts/postgresql/files/conf.d/README.md rename to chart/deps/postgresql/files/conf.d/README.md diff --git a/chart/charts/postgresql/files/docker-entrypoint-initdb.d/README.md b/chart/deps/postgresql/files/docker-entrypoint-initdb.d/README.md similarity index 100% rename from chart/charts/postgresql/files/docker-entrypoint-initdb.d/README.md rename to chart/deps/postgresql/files/docker-entrypoint-initdb.d/README.md diff --git a/chart/charts/postgresql/templates/NOTES.txt b/chart/deps/postgresql/templates/NOTES.txt similarity index 100% rename from chart/charts/postgresql/templates/NOTES.txt rename to chart/deps/postgresql/templates/NOTES.txt diff --git a/chart/charts/postgresql/templates/_helpers.tpl b/chart/deps/postgresql/templates/_helpers.tpl similarity index 100% rename from chart/charts/postgresql/templates/_helpers.tpl rename to chart/deps/postgresql/templates/_helpers.tpl diff --git a/chart/charts/postgresql/templates/configmap.yaml b/chart/deps/postgresql/templates/configmap.yaml similarity index 100% rename from chart/charts/postgresql/templates/configmap.yaml rename to chart/deps/postgresql/templates/configmap.yaml diff --git a/chart/charts/postgresql/templates/extended-config-configmap.yaml b/chart/deps/postgresql/templates/extended-config-configmap.yaml similarity index 100% rename from chart/charts/postgresql/templates/extended-config-configmap.yaml rename to chart/deps/postgresql/templates/extended-config-configmap.yaml diff --git a/chart/charts/postgresql/templates/initialization-configmap.yaml b/chart/deps/postgresql/templates/initialization-configmap.yaml similarity index 100% rename from chart/charts/postgresql/templates/initialization-configmap.yaml rename to chart/deps/postgresql/templates/initialization-configmap.yaml diff --git a/chart/charts/postgresql/templates/metrics-configmap.yaml b/chart/deps/postgresql/templates/metrics-configmap.yaml similarity index 100% rename from chart/charts/postgresql/templates/metrics-configmap.yaml rename to chart/deps/postgresql/templates/metrics-configmap.yaml diff --git a/chart/charts/postgresql/templates/metrics-svc.yaml b/chart/deps/postgresql/templates/metrics-svc.yaml similarity index 100% rename from chart/charts/postgresql/templates/metrics-svc.yaml rename to chart/deps/postgresql/templates/metrics-svc.yaml diff --git a/chart/charts/postgresql/templates/networkpolicy.yaml b/chart/deps/postgresql/templates/networkpolicy.yaml similarity index 100% rename from chart/charts/postgresql/templates/networkpolicy.yaml rename to chart/deps/postgresql/templates/networkpolicy.yaml diff --git a/chart/charts/postgresql/templates/prometheusrule.yaml b/chart/deps/postgresql/templates/prometheusrule.yaml similarity index 100% rename from chart/charts/postgresql/templates/prometheusrule.yaml rename to chart/deps/postgresql/templates/prometheusrule.yaml diff --git a/chart/charts/postgresql/templates/secrets.yaml b/chart/deps/postgresql/templates/secrets.yaml similarity index 100% rename from chart/charts/postgresql/templates/secrets.yaml rename to chart/deps/postgresql/templates/secrets.yaml diff --git a/chart/charts/postgresql/templates/serviceaccount.yaml b/chart/deps/postgresql/templates/serviceaccount.yaml similarity index 100% rename from chart/charts/postgresql/templates/serviceaccount.yaml rename to chart/deps/postgresql/templates/serviceaccount.yaml diff --git a/chart/charts/postgresql/templates/servicemonitor.yaml b/chart/deps/postgresql/templates/servicemonitor.yaml similarity index 100% rename from chart/charts/postgresql/templates/servicemonitor.yaml rename to chart/deps/postgresql/templates/servicemonitor.yaml diff --git a/chart/charts/postgresql/templates/statefulset-slaves.yaml b/chart/deps/postgresql/templates/statefulset-slaves.yaml similarity index 100% rename from chart/charts/postgresql/templates/statefulset-slaves.yaml rename to chart/deps/postgresql/templates/statefulset-slaves.yaml diff --git a/chart/charts/postgresql/templates/statefulset.yaml b/chart/deps/postgresql/templates/statefulset.yaml similarity index 100% rename from chart/charts/postgresql/templates/statefulset.yaml rename to chart/deps/postgresql/templates/statefulset.yaml diff --git a/chart/charts/postgresql/templates/svc-headless.yaml b/chart/deps/postgresql/templates/svc-headless.yaml similarity index 100% rename from chart/charts/postgresql/templates/svc-headless.yaml rename to chart/deps/postgresql/templates/svc-headless.yaml diff --git a/chart/charts/postgresql/templates/svc-read.yaml b/chart/deps/postgresql/templates/svc-read.yaml similarity index 100% rename from chart/charts/postgresql/templates/svc-read.yaml rename to chart/deps/postgresql/templates/svc-read.yaml diff --git a/chart/charts/postgresql/templates/svc.yaml b/chart/deps/postgresql/templates/svc.yaml similarity index 100% rename from chart/charts/postgresql/templates/svc.yaml rename to chart/deps/postgresql/templates/svc.yaml diff --git a/chart/charts/postgresql/values-production.yaml b/chart/deps/postgresql/values-production.yaml similarity index 100% rename from chart/charts/postgresql/values-production.yaml rename to chart/deps/postgresql/values-production.yaml diff --git a/chart/charts/postgresql/values.schema.json b/chart/deps/postgresql/values.schema.json similarity index 100% rename from chart/charts/postgresql/values.schema.json rename to chart/deps/postgresql/values.schema.json diff --git a/chart/charts/postgresql/values.yaml b/chart/deps/postgresql/values.yaml similarity index 100% rename from chart/charts/postgresql/values.yaml rename to chart/deps/postgresql/values.yaml diff --git a/chart/requirements.lock b/chart/requirements.lock new file mode 100644 index 0000000..df6e03a --- /dev/null +++ b/chart/requirements.lock @@ -0,0 +1,6 @@ +dependencies: +- name: postgresql + repository: file://./deps/postgresql + version: 8.6.4 +digest: sha256:ee20a56a481163f172694703dccf40e88ca9f8a5a4b1637f8dce3361f592aed2 +generated: "2021-05-07T13:46:34.5689816-06:00" diff --git a/chart/requirements.yaml b/chart/requirements.yaml index 8eea6bb..db53d78 100644 --- a/chart/requirements.yaml +++ b/chart/requirements.yaml @@ -1,5 +1,5 @@ dependencies: - name: postgresql version: 8.6.4 - repository: file://charts/postgresql + repository: file://./deps/postgresql condition: postgresql.enabled diff --git a/chart/templates/tests/sonarqube-cypress-test.yaml b/chart/templates/tests/sonarqube-cypress-test.yaml new file mode 100644 index 0000000..cdc9635 --- /dev/null +++ b/chart/templates/tests/sonarqube-cypress-test.yaml @@ -0,0 +1,19 @@ +{{- include "bb-test-lib.cypress-configmap.overrides" (list . "sonarqube-test.cypress-configmap") }} +{{- define "sonarqube-test.cypress-configmap" }} +metadata: + labels: + helm.sh/chart: {{ include "sonarqube.chart" . }} + app.kubernetes.io/instance: {{ .Release.Name }} + app.kubernetes.io/managed-by: {{ .Release.Service }} + app.kubernetes.io/part-of: sonarqube +{{- end }} +--- +{{- include "bb-test-lib.cypress-runner.overrides" (list . "sonarqube-test.cypress-runner") -}} +{{- define "sonarqube-test.cypress-runner" -}} +metadata: + labels: + helm.sh/chart: {{ include "sonarqube.chart" . }} + app.kubernetes.io/instance: {{ .Release.Name }} + app.kubernetes.io/managed-by: {{ .Release.Service }} + app.kubernetes.io/part-of: sonarqube +{{- end }} diff --git a/chart/templates/tests/sonarqube-test.yaml b/chart/templates/tests/sonarqube-test.yaml deleted file mode 100644 index 3f5b5eb..0000000 --- a/chart/templates/tests/sonarqube-test.yaml +++ /dev/null @@ -1,47 +0,0 @@ -{{- if .Values.tests.enabled -}} -apiVersion: v1 -kind: Pod -metadata: - name: "{{ .Release.Name }}-ui-test" - annotations: - "helm.sh/hook": test-success - labels: - app: {{ template "sonarqube.name" . }} - chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} - release: {{ .Release.Name }} - heritage: {{ .Release.Service }} -spec: - initContainers: - - name: "bats" - image: "registry.dso.mil/platform-one/big-bang/apps/developer-tools/sonarqube/bats:1.2.1" - imagePullPolicy: {{ .Values.image.pullPolicy }} - command: ["bash", "-c"] - args: - - |- - set -ex - cp -R /opt/bats /tools/bats/ - volumeMounts: - - mountPath: /tools - name: tools - containers: - - name: {{ .Release.Name }}-ui-test - image: {{ default "registry.dso.mil/platform-one/big-bang/apps/developer-tools/sonarqube/minideb-extras:latest" .Values.tests.image }} - imagePullPolicy: {{ .Values.image.pullPolicy }} - command: [ - "/tools/bats/bin/bats", - "--tap", - "/tests/run.sh"] - volumeMounts: - - mountPath: /tests - name: tests - readOnly: true - - mountPath: /tools - name: tools - volumes: - - name: tests - configMap: - name: {{ template "sonarqube.fullname" . }}-tests - - name: tools - emptyDir: {{ toYaml .Values.emptyDir | nindent 6 }} - restartPolicy: Never -{{- end -}} diff --git a/chart/tests/cypress/cypress.json b/chart/tests/cypress/cypress.json new file mode 100644 index 0000000..e36f984 --- /dev/null +++ b/chart/tests/cypress/cypress.json @@ -0,0 +1,5 @@ +{ + "pluginsFile": false, + "supportFile": false, + "fixturesFolder": false +} diff --git a/chart/tests/cypress/sonarqube-health.spec.js b/chart/tests/cypress/sonarqube-health.spec.js new file mode 100644 index 0000000..91dcead --- /dev/null +++ b/chart/tests/cypress/sonarqube-health.spec.js @@ -0,0 +1,20 @@ +// needs to be fixed +describe('Basic Sonarqube', function() { + it('Check Sonarqube is accessible', function() { + cy.visit(Cypress.env('url')) + cy.get('input[name="login"]').type(Cypress.env('user')) + cy.get('input[name="password"]').type(Cypress.env('password')) + cy.contains("Log in").click() + cy.contains('Update your password') + cy.get('input[name="old_password"]').type(Cypress.env('password')) + cy.get('input[name="password"]').type(Cypress.env('newpassword')) + cy.get('input[name="password_confirmation"]').type(Cypress.env('newpassword')) + cy.get('button[id="change-password"]').click() + cy.scrollTo('topRight') + cy.get('a[class="dropdown-toggle navbar-avatar"]').click() + cy.contains("My Account").click() + cy.contains("Security").click() + cy.get('input[class="input-large spacer-right"]').type('Test Token') + cy.get('button[class="button js-generate-token"]').click() + }) +}) diff --git a/chart/values.yaml b/chart/values.yaml index b04d80d..83a686e 100644 --- a/chart/values.yaml +++ b/chart/values.yaml @@ -23,7 +23,8 @@ image: tag: 8.7.1-community-bb pullPolicy: IfNotPresent # If using a private repository, the name of the imagePullSecret to use - pullSecret: [] + pullSecret: private-registry + # Set security context for sonarqube pod securityContext: diff --git a/tests/cy-run.sh b/tests/cy-run.sh deleted file mode 100644 index 2df7a77..0000000 --- a/tests/cy-run.sh +++ /dev/null @@ -1,16 +0,0 @@ - -#!/usr/bin/env bash -echo "Running Cypress e2e tests headlessly without copying files" - -# explanation of the "docker run" command line arguments -# -# -it = interactive terminal -# -v $PWD:/e2e = map current folder to /e2e inside the container -# -w /e2e = set working directy to /e2e -# $@ = pass any arguments to this script to the Cypress command -# like "./cy-run.sh --record" -# -# Docker image "cypress/included:3.2.0" has its entrypoint -# set to "cypress run" by default - -docker run -it -v $PWD:/e2e -w /e2e cypress/included:5.0.0 $@ diff --git a/tests/cypress.json b/tests/cypress.json deleted file mode 100644 index 9408b4c..0000000 --- a/tests/cypress.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - - "pluginsFile": false, - "supportFile": false, - "fixturesFolder": false, - "env": { - "sonarqube_url": "sonarqube.bigbang.dev", - "sonarqube_password": "admin", - "sonarqube_user": "admin" - } -} diff --git a/tests/cypress/integration/sonarqube-health.spec.js b/tests/cypress/integration/sonarqube-health.spec.js deleted file mode 100644 index 7e1c62e..0000000 --- a/tests/cypress/integration/sonarqube-health.spec.js +++ /dev/null @@ -1,10 +0,0 @@ -// needs to be fixed -describe('Basic Sonarqube', function() { - it('Check Sonarqube is accessible', function() { - cy.visit(Cypress.env('sonarqube_url')) - cy.get('input[name="login"]').type(Cypress.env('sonarqube_user')) - cy.get('input[name="password"]').type(Cypress.env('sonarqube_password')) - cy.contains("Log in").click() - cy.contains('Update your password') - }) -}) diff --git a/tests/main-test-gateway.yaml b/tests/main-test-gateway.yaml deleted file mode 100644 index 298b582..0000000 --- a/tests/main-test-gateway.yaml +++ /dev/null @@ -1,36 +0,0 @@ -apiVersion: networking.istio.io/v1beta1 -kind: Gateway -metadata: - annotations: - meta.helm.sh/release-name: istio-system-istio - meta.helm.sh/release-namespace: istio-system - creationTimestamp: "2020-12-08T01:19:38Z" - generation: 1 - labels: - app.kubernetes.io/managed-by: Helm - name: main - namespace: istio-system - resourceVersion: "1661" - selfLink: /apis/networking.istio.io/v1beta1/namespaces/istio-system/gateways/main - uid: 9cfaa8c6-744a-49b3-abc0-b3960153c9b2 -spec: - selector: - istio: ingressgateway - servers: - - hosts: - - '*' - port: - name: http - number: 80 - protocol: HTTP - tls: - httpsRedirect: true - - hosts: - - '*.bigbang.dev' - port: - name: https - number: 443 - protocol: HTTPS - tls: - credentialName: wildcard-cert - mode: SIMPLE diff --git a/tests/test-values.yml b/tests/test-values.yml index aaddc0c..ef111d1 100644 --- a/tests/test-values.yml +++ b/tests/test-values.yml @@ -1,5 +1,8 @@ -image: - pullSecret: private-registry-mil - -istio: - enabled: true +bbtests: + cypress: + artifacts: true + envs: + cypress_url: "http://sonarqube-sonarqube:9000" + cypress_user: "admin" + cypress_password: "admin" + cypress_newpassword: "new_admin_password" -- GitLab