From e4f1afca0fdf4af184f4e287f1317ed57d229013 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thorsten=20Ro=C3=9Fner?= Date: Fri, 6 Jun 2025 07:55:19 +0200 Subject: [PATCH] fix(nubus): Replace openDesk portal fork with upstream `portal-frontend` image --- docs/theming.md | 5 + helmfile/apps/nubus/values-nubus.yaml.gotmpl | 26 ++- .../environments/default/images.yaml.gotmpl | 8 +- .../environments/default/theme.yaml.gotmpl | 12 +- .../theme/link_documentation/favicon.svg | 1 + .../files/theme/link_feedback/favicon.svg | 1 + helmfile/files/theme/link_support/favicon.svg | 1 + helmfile/files/theme/portal/favicon.ico | Bin 51122 -> 0 bytes helmfile/files/theme/portal/favicon.png | Bin 1916 -> 0 bytes helmfile/files/theme/portal/favicon.svg | 5 - .../theme/portal/favicon/apple-touch-icon.png | Bin 0 -> 4872 bytes .../theme/portal/favicon/favicon-96x96.png | Bin 0 -> 2531 bytes .../files/theme/portal/favicon/favicon.ico | Bin 0 -> 15086 bytes .../files/theme/portal/favicon/favicon.svg | 1 + .../favicon/web-app-manifest-192x192.png | Bin 0 -> 5200 bytes .../favicon/web-app-manifest-512x512.png | Bin 0 -> 16869 bytes helmfile/files/theme/portal/stylesheet.css | 175 ++++++++++++++++++ 17 files changed, 224 insertions(+), 11 deletions(-) create mode 100644 helmfile/files/theme/link_documentation/favicon.svg create mode 100644 helmfile/files/theme/link_feedback/favicon.svg create mode 100644 helmfile/files/theme/link_support/favicon.svg delete mode 100644 helmfile/files/theme/portal/favicon.ico delete mode 100644 helmfile/files/theme/portal/favicon.png delete mode 100644 helmfile/files/theme/portal/favicon.svg create mode 100644 helmfile/files/theme/portal/favicon/apple-touch-icon.png create mode 100644 helmfile/files/theme/portal/favicon/favicon-96x96.png create mode 100644 helmfile/files/theme/portal/favicon/favicon.ico create mode 100644 helmfile/files/theme/portal/favicon/favicon.svg create mode 100644 helmfile/files/theme/portal/favicon/web-app-manifest-192x192.png create mode 100644 helmfile/files/theme/portal/favicon/web-app-manifest-512x512.png diff --git a/docs/theming.md b/docs/theming.md index 088c855b..f39af540 100644 --- a/docs/theming.md +++ b/docs/theming.md @@ -20,6 +20,11 @@ Please review the default configuration that is applied to understand your custo You can just update the files in [helmfile/files/theme](../helmfile/files/theme) to change logos, favicons etc. Note that the `.svg` versions of the favicons are also used for the portal tiles. +> **Note**
+> Theming focusses on colors, iconography and imagery. If you like to adapt the default links in the portal pointing to external +> resources (like "Support", "Legal Notice") please check the `functional.portal` section +> in [`functional.yaml.gotmpl`](../helmfile/environments/default/functional.yaml.gotmpl) + # Known limitations - Portal and Keycloak screen styles, especially colors, must be applied in the [`portalStylesheets.css`](../helmfile/files/theme/portalStylesheet.css), diff --git a/helmfile/apps/nubus/values-nubus.yaml.gotmpl b/helmfile/apps/nubus/values-nubus.yaml.gotmpl index cc135925..7e82bda5 100644 --- a/helmfile/apps/nubus/values-nubus.yaml.gotmpl +++ b/helmfile/apps/nubus/values-nubus.yaml.gotmpl @@ -409,8 +409,12 @@ nubusPortalFrontend: portalFrontend: branding: css: {{ .Values.theme.styles.portal.main | toJson }} - # Requires .ico, .svg does not work. favicon: {{ .Values.theme.imagery.portal.faviconIco | toJson }} + faviconSvg: {{ .Values.theme.imagery.portal.faviconSvg | toJson }} + favicon96Png: {{ .Values.theme.imagery.portal.favicon96Png | toJson }} + appleTouchIcon: {{ .Values.theme.imagery.portal.appleTouchIcon | toJson }} + webManifestIcon192: {{ .Values.theme.imagery.portal.webManifestIcon192 | toJson }} + webManifestIcon512: {{ .Values.theme.imagery.portal.webManifestIcon512 | toJson }} # The actual `logo` is set in customizing image, the logo down here is for waiting spinner. logo: {{ .Values.theme.imagery.portal.waitingSpinnerSvg | toJson }} backgroundImage: {{ .Values.theme.imagery.portal.backgroundSvg | toJson }} @@ -680,7 +684,6 @@ nubusPortalServer: {{- with .Values.annotations.nubusPortalServer.ingress }} {{ . | toYaml | nindent 8 }} {{- end }} - certManager: enabled: false tls: @@ -704,6 +707,25 @@ nubusPortalServer: sharedSecret: {{ .Values.secrets.centralnavigation.apiKey | quote }} featureToggles: notifications_api: false + centered_layout: true + newsfeed: {{ .Values.apps.xwiki.enabled }} + umc_session_refresh: true + welcome_message: true + newsfeed: + feedType: "xwiki" + feedUrl: + en_US: {{ printf "https://%s.%s/wiki/bin/get/Blog/BlogRss?xpage=plain&blog=openDesk.Newsfeed.WebHome" .Values.global.hosts.intercomService .Values.global.domain }} + de_DE: {{ printf "https://%s.%s/wiki/bin/get/Blog/BlogRss?xpage=plain&blog=openDesk.Newsfeed.WebHome" .Values.global.hosts.intercomService .Values.global.domain }} + homeUrl: + en_US: {{ printf "https://%s.%s/bin/view/openDesk/Newsfeed/" .Values.global.hosts.xwiki .Values.global.domain }} + de_DE: {{ printf "https://%s.%s/bin/view/openDesk/Newsfeed/" .Values.global.hosts.xwiki .Values.global.domain }} + icsSilentLoginUrl: {{ printf "https://%s.%s/silent" .Values.global.hosts.intercomService .Values.global.domain }} + objectStorageEndpoint: {{ printf "https://%s" (.Values.objectstores.nubus.endpoint | default (printf "%s.%s" .Values.global.hosts.minioApi .Values.global.domain)) | quote }} + objectStorageBucket: {{ .Values.objectstores.nubus.bucket | quote }} + objectStorageCredentialSecret: + name: "ums-portal-server-minio-opendesk-credentials" + accessKeyKey: "access-key-id" + secretKeyKey: "secret-key-id" replicaCount: {{ .Values.replicas.umsPortalServer }} resources: {{ .Values.resources.umsPortalServer | toYaml | nindent 4 }} diff --git a/helmfile/environments/default/images.yaml.gotmpl b/helmfile/environments/default/images.yaml.gotmpl index c015d6f6..e816b61a 100644 --- a/helmfile/environments/default/images.yaml.gotmpl +++ b/helmfile/environments/default/images.yaml.gotmpl @@ -550,7 +550,7 @@ images: # upstreamRepository: "bmi/opendesk/components/platform-development/images/opendesk-nubus" registry: "registry.opencode.de" repository: "bmi/opendesk/components/platform-development/images/opendesk-nubus" - tag: "1.14.4@sha256:cf0e22c1eef138a413a90a60c5405126dc769195dd4dd37229a27afaa82ef3b3" + tag: "1.14.7@sha256:e00b6829b765dc1319593c1a1f8369950fc179308d65b79838539ca2967eb5ac" nubusOpendeskExtensionA2gMapper: # providerCategory: "Platform" # providerResponsible: "openDesk" @@ -604,9 +604,11 @@ images: # providerResponsible: "Univention" # upstreamRegistry: "https://artifacts.software-univention.de" # upstreamRepository: "nubus/images/portal-frontend" + # upstreamMirrorTagFilterRegEx: '^(\d+)\.(\d+)\.(\d+)$' + # upstreamMirrorStartFrom: ["0", "67", "0"] registry: "registry.opencode.de" - repository: "bmi/opendesk/components/platform-development/images/opendesk-nubus-portal-update" - tag: "1.10.14@sha256:fbdec057958fd7e728431cf96896b8453c2f5b390ce3d2f169a7766f49926b1b" + repository: "bmi/opendesk/components/supplier/univention/images-mirror/portal-frontend" + tag: "0.70.0@sha256:9e0826c954e99b36b3c7b9ce6dfa1f567a3432158fb78af13337760197f94997" nubusPortalServer: # providerCategory: "Supplier" # providerResponsible: "Univention" diff --git a/helmfile/environments/default/theme.yaml.gotmpl b/helmfile/environments/default/theme.yaml.gotmpl index 3c53520a..55e0a52a 100644 --- a/helmfile/environments/default/theme.yaml.gotmpl +++ b/helmfile/environments/default/theme.yaml.gotmpl @@ -66,7 +66,13 @@ theme: faviconIco: {{ readFile "./../../files/theme/notes/favicon.ico" | b64enc | quote }} portal: - faviconIco: {{ readFile "./../../files/theme/portal/favicon.ico" | b64enc | quote }} + faviconIco: {{ readFile "./../../files/theme/portal/favicon/favicon.ico" | b64enc | quote }} + faviconSvg: {{ readFile "./../../files/theme/portal/favicon/favicon.svg" | b64enc | quote }} + favicon96Png: {{ readFile "./../../files/theme/portal/favicon/favicon-96x96.png" | b64enc | quote }} + appleTouchIcon: {{ readFile "./../../files/theme/portal/favicon/apple-touch-icon.png" | b64enc | quote }} + webManifestIcon192: {{ readFile "./../../files/theme/portal/favicon/web-app-manifest-192x192.png" | b64enc | quote }} + webManifestIcon512: {{ readFile "./../../files/theme/portal/favicon/web-app-manifest-512x512.png" | b64enc | quote }} + waitingSpinnerSvg: {{ readFile "./../../files/theme/portal/waiting-spinner.svg" | b64enc }} backgroundSvg: {{ readFile "./../../files/theme/portal/background.svg" | b64enc | quote }} portalTiles: @@ -89,6 +95,10 @@ theme: notes: {{ readFile "./../../files/theme/notes/favicon.svg" | b64enc | quote }} realtimeCollaboration: {{ readFile "./../../files/theme/chat/favicon.svg" | b64enc | quote }} realtimeVideoconference: {{ readFile "./../../files/theme/videoconference/favicon.svg" | b64enc | quote }} + # links + documentation: {{ readFile "./../../files/theme/link_documentation/favicon.svg" | b64enc | quote }} + feedback: {{ readFile "./../../files/theme/link_feedback/favicon.svg" | b64enc | quote }} + support: {{ readFile "./../../files/theme/link_support/favicon.svg" | b64enc | quote }} # empty.svg empty: {{ readFile "./../../files/theme/_dev/empty.svg" | b64enc | quote }} fileshareActivity: {{ readFile "./../../files/theme/_dev/empty.svg" | b64enc | quote }} diff --git a/helmfile/files/theme/link_documentation/favicon.svg b/helmfile/files/theme/link_documentation/favicon.svg new file mode 100644 index 00000000..2f5af092 --- /dev/null +++ b/helmfile/files/theme/link_documentation/favicon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/helmfile/files/theme/link_feedback/favicon.svg b/helmfile/files/theme/link_feedback/favicon.svg new file mode 100644 index 00000000..70242620 --- /dev/null +++ b/helmfile/files/theme/link_feedback/favicon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/helmfile/files/theme/link_support/favicon.svg b/helmfile/files/theme/link_support/favicon.svg new file mode 100644 index 00000000..5992ecbd --- /dev/null +++ b/helmfile/files/theme/link_support/favicon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/helmfile/files/theme/portal/favicon.ico b/helmfile/files/theme/portal/favicon.ico deleted file mode 100644 index 90f0b212cc80cc11e8f357f2709d517554b37f54..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 51122 zcmeI5zi%8x6vxLPQNmS}5hX?#Gw z&~TziBrFt5#1)7;MWO%+$pr#*zn1qM-`)+I-MiV@H@h>Z_maup%+AideV=`AW`9Ph zHTtu)rRd+M)c#$io>WRbO^J%suar;@dAF+EMt!s?^(l$)TL5-#JHsj1klI|QBtFK^E3d^a>|KDO zR57*F$?HJMyjx(q6sSyP((cf^hSI?z3mj&USY@d}iIIz}THm@eD`3+~q?Y(weQa!c zI<(OEFAwx9n2?1!nHu*{F79cF)mzg(5#ymJE^=Kw%VfI)B^1+KPvBw zb)v99-(*J`%QzPWwwaQ%agR#&W~K5Y1`F(^zDLSRyo`a^T*ou8qikzlB)=lE0Jv?| zrSJHc2MN;X+dK89?|;<&PJa8nu3fF8A8_0D*%9nD{Nf}Tyz^l)cyqV;^xnQcZYF>K z<8!y`XdB!*K01PJG_w$R<>^4j(un*qVgWaHcJQ^q?&r<>SRS)X8IG?=g`FMzEtvS2 z;Zzi}Bjv}=E*5{wa*Qy3va%bW-j5|MYXz zKBxK7+%qC!V;A)KfaRP8{BR6LB7E#VK8oM(h#ju^L?UeL(lI0U<>>Zzk)YG(<=|IY zVrQ1>Kcx5(iHP52#zJ9dcg-316hxdY(5T-DJ7;d#P}o&6U!xlfyGG4lsdHgh$$X7& zEbJOJf2GcaT_y81y0Nfp)cln?7j~7**XYKPyM+^^cPAo%0-1)?Os+%CIx*KJ!{KKI+yE%;-?qnLHeRBd#_S zPlcTWue|Yhw0ms0L@hss9TPk7)INCeS1sVE6Jf{5PWvOxQ785A6L#F}&|W?Kgq;s| z)aLM&_kG7sVdse*;-}~Ni?H*^4*WcxKL|U|>@fHAB*M-!JNTZb>n|(GZg`EZA>TT# zmTrEQ3|@Gf=NdR&Kl30f$&Pc5FnREYJ_hu;TLm8-pZvg$PuN*n6myO$eu(=I%p&Yc z7!=n_s_-k(l}%M)XJaL!4r1uw>dQ{!AoG1cK6doolJtEH+ojEO(U@bG9cwtpI|JM7 zC)zKo6Y4YT#l{ZrVAwKC>&40r5M6wa`8pXJJA5Z0Wn#OGnH}aHWqptNJe`dlzL8+d zEUgzaJDhKqWrzBV!p06dm3`+tYIgLz(JHaizIVg^n{UFdk{7c29W*KPtqx%q7CX() z^7}@@E-ZRli`;q$?%h-S+e;C zaERAcuwS^owMz5MlojVv*cDoneV$p^lj90uS70 zB_3cKMp;dE^uD7{(f9Bio_}DzcOE=Dr+a1eOu0|Ny`0kVl2|i8FSeTOU?)%Srn=rg z0BiUwqXf^+^*qYQ`y5rc4W4Cx&M$a&`uQG*u|>x;ruT86gH!A_^k#nE0qz?-J1AM@ z*{lJ*-w%IriC1{858rt}8!qFUxs6Nz*!Kkz1-nYI$~g8-Th{rTd48GVjDnqxn~u-b z)yb%+FAqKkeo?T4qE*M6BD?x7N6hsk(Xfls_h@bjy*)`Z?6Ch%*AN>V?>xRY33Ein z4hj!n{h;!k&v%?e`CI{c?>A2o4{mfehB zNd8CXFdp8I#I6=elzx})4E%5SM)~&w%KFl>`glj$(>Ywat9i?)*`+&#;~m#}m)V$o zJ@q+0?xt$gy<7=)FdBRi-v@Acx2iPLW|^hO$jY!wcL>YzH>a1el+zb!Y#q_JA3UG4 znY*#yU#DO@DQ?yR+gVn5c~bG9 zSv95ij0FzzI2D!Awlel*4A@Y%aEvQrhjP;Opdo#w+e-_S^0zEYYGOwW*@y*pvMgNk zq&eoF5<}}j2sH~gwi&Br0h`R-Pv?=V!?q@bU zsoxf*4N6;-b|fve0qnFvsbyo|MRk&7wstL<(A@IhSzc`*-=F87K)y52KZ^W3tJWw_ zf9FD((LATr4W*3cm3mI83v>MyrTS+6@rUzWbNypVW%C_#{Ub^(%bV5Zw^%?dAQo6< z3v|q#vxtvfvwlvz?VIa!;&nE@XXAf%e4rs?E|kfRFAt4B{dsjgJ{cY8@oV0I9^d{0 DwkA%{ diff --git a/helmfile/files/theme/portal/favicon.png b/helmfile/files/theme/portal/favicon.png deleted file mode 100644 index bf4be2575219a5627c7dbf8995de81768135a03c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1916 zcmV-?2ZQ*DP)Dg|00009a7bBm000XU z000XU0RWnu7ytkO0drDELIAGL9O(c600d`2O+f$vv5yPJtl#<*E4G}z~P_(8u zNuX&D5lkT~MG|PBxnxf*PC)D-U`!;bq3%xqe|I+Bth?Erx9`oofA|03Ih(jkcJ|x< zfA9To-Z)Svp6BhwLlPSu6ChN>_1nDTIM1LC98ds-CGqefwhJJ_>cPd9!ZwN`QxK3q z@=#h29xg#X(geM@*alGIomyW|lRQ7tz6OyN1}?Tvl;~D_VyxN|P#j5{1`!t)32cx2 z&wX1eMxH+q8OGKFLR3s(>#a1fDJ#zxN6~f^gs7Q^d>Va4V5PMA1Bf_VAP>Xk{^J#S zey+U$f=%?4>jSr>O?*NE505~wmCoY%U}@w{gJ3gTqHj~4KLJmGU^7YIQ;yBFiNBiaWQ(SP2R$&Y|TQ~ z)fk-Wj#i=-U!i)LyPt(G-hT<>H?l^=l|rd_*J=Re+vt(@@Q}(eO!2GlSfh4 zOruJbvfXaYWjk&1{#t0RboskN_n>>FLz}!mn@pa{^3E<>BX8+R^YnFe@vlmqQuk7o zHhCK_ped;5;$PZXs}m_q2Y@by8oI2$$%Xc|>qO+$NMT!<>IG4>mtA+C*D!n1O`&VA zd$PMpFS-p1UFTWv9)b1e0PcdPe9dSvG(}KZd9Oyp%G2?o>q7N{rD{l@XBdh)Q@8vO zd4{2je@!9s4ARvXGj{PWA@U4C)s(KQ=Aw=ec?O_pyZ*gdafHazjPBh@+adBaLaFkb zdvT-vTrpB%(FAS6{IuVEsw_t2)k$t((ib&D|={t zx5x41Ti)V1aH03kZP2Ctt9HJJ-)$J%Fy)^(%`aKt0P~1nQzpNyWsxH+3 z9R(q3=7CCK`C`fz%9j28CsKZu`Cqiq44|wyqT-qjy}%Du=>wyI`naA-;)t3`?3hLq zkWZrt5KNPTytq`gC)TuDN~0Wqe$fk3#5P3=TQ7djowbM~loq!z5|eo7!FCEH8tcJ@ z{Gz}_t-^|_du7renbN2<0V1*%Tx`^jrMBzOYT-Y*W=Yx~efsYJ0000 - - - - diff --git a/helmfile/files/theme/portal/favicon/apple-touch-icon.png b/helmfile/files/theme/portal/favicon/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..a3a11701cab5b0118fcc47effcc0936c38266c4a GIT binary patch literal 4872 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 b#>&CZYMvwmNFXb*wFS`8FjTKob&mZXrr#*7 literal 0 HcmV?d00001 diff --git a/helmfile/files/theme/portal/favicon/favicon-96x96.png b/helmfile/files/theme/portal/favicon/favicon-96x96.png new file mode 100644 index 0000000000000000000000000000000000000000..1a1d5860f45465ae2b6640b5ea9695b2ade5f398 GIT binary patch literal 2531 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 literal 0 HcmV?d00001 diff --git a/helmfile/files/theme/portal/favicon/favicon.ico b/helmfile/files/theme/portal/favicon/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..182400de4311ed42a7ecccce8141a2056648934b GIT binary patch literal 15086 zcmeHO>ys756(7q~<%=Kq3*s6jYF^?qN%=*MspLaGU{Z+>5b!}Hg;rFkR74&Nt{`YM zC;?fJbp-@OjPg>6j}-(2MdW2bv#>#V2`kTKm+t94`Tb^g?wxyg_TIU3=U#S8yXx%R zd32v&pYA?=`kb?lbB=Sa)32X{YmKw8uj5?fI8IGX=Y1c?*^Os?aOL}9-*KFY_}~(J zgDTDt5TC~>B61$+AmXAMl)W zrZ>nvzYD}1%=i3vz2!bwtGxwpKF*$|XY%nCyN{Mb*v__0(KX2I5w!53Vcjx-Fs} znJMbwr$vn_lOBEsa%d3qzx}DoxVy&e$u`kX%}WP+(D%{PM8B|1EM!yZ!uhVoKU==s z1MIHRUH4;&-^(b@a2_rU@Yb{=TuUfI9tpY2SsdUdtg4<>0=G!2X;MgxwvaS zPEPM{7JKYuWx=EMNc_+v=7TL2=bZ+FZw!9!NgDb@l}N0^y})20RA4Q{lE1ZL-r6L3 zT!ZM*&&8*)bHtsxMBEi0h&^;v>=}hVq}z#D_#u1u$(Ka+9VqI8TT7?!-zMs^yG0M0 zgmv|)*!DANOntA7*!Z7VB#Jn`cXKj2{}#XgPwo`AZmu^TX^chH@CW^7KYnn#==-OM zJb@EffuJE@fehaAF_2{d>ea$ z_V)(r`h0?}vHK2-9)WWO=6#oOxO$k_7T8G%i`nttuJ&8L{XqR0rGG9ODDI+nVvWB& z*edGAk-qK?<`A!#W87Pk7JJ~Zs7Ghz+RqihPhIIgw^9_=ZO#~6I6%w`tCGSO+i^zp z>{mqL%#k^JRRTW{nx;=gLI3CA$A0L}TAmm`^W>JbMT1hMQ`|L__}&A8@FX;lEVD=*i;ICfE2pJo^BVOi3Rg2Q_{k}8h(OG$Ug%V zKWHBY6g=-1KlJCqc>0G;xpPiIe9iUo+FIBGu%E-S?h5;gFrT_dT=>DVqc~g^T z2jO1dJVE4CdsNR;eP*$?^)TeuG222Zsk1BCqD0s z_go9V8!KkrcKAh4RBg^j;^#x^%j0cgoA--ZyIss;=pO7(U5NUKn49;(pNQB7&j+QK zcrlpL+pR{8Ag)~vUX|bx#N;c{b~V~${IplcubD@HKJ?oBfglf}vk$!?kAN6+@;5?# z2=WPfT3kEOGv0g;@bcQiKi_qnCSK2VoLXMb;h%3yni8mGV~}eTuaI*KuaG93^y?~V|xNnS8IpuE}34mBqZnu=?0-2XmC(UoWA8+~- zJijXati=e!%I`}rk#o(<4S8oH{A2S)A*Nl7^xqrBUAac=sdP*>ckSk`{@rk_JL)(5 zczW4;5JMt4WF-f`fttBE>(`9p)!j4X(RhBWY-^?e!nsyG{(P1{{F1uWZP+@2`camCO&6X`Mc$%$nlb`uT7%AMVV& z_kLjhn7xNY{pPPZ-|AscCez2E)-8N^j2+})KrDbcHu{dqJ`Jc7h4^;PHyC>tas4!k zL0*!V;}GbU7*|cdE&Xt56zCUs@&fqo2j})N3J2oOoFi%byY0!-;=;$M@0={^7sLJd z9%FnY`b_am51u6M{I}xpjq zKk|N};@dg(5l2;wkKua_TZJ~FzG;jo*b3C|cIVzM5X^sed;hmU{HC+M{zI*Jv7XlB zVzKw?ztwwqqH?4xa#mDbz2wxttxml7Rwp;}l5c02*XeG}E3}IawR-{WAi5R{0bDi=`%mhb`|z;esLxaCV`+QK&GdR^K<( zmtlDS<5>J^WKN&DZKtinkEJmm5d6*3wO-DXJ#sw1N@fk@zld>P&KmUULOqmK{twjj Bm2Ch3 literal 0 HcmV?d00001 diff --git a/helmfile/files/theme/portal/favicon/favicon.svg b/helmfile/files/theme/portal/favicon/favicon.svg new file mode 100644 index 00000000..20af59cf --- /dev/null +++ b/helmfile/files/theme/portal/favicon/favicon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/helmfile/files/theme/portal/favicon/web-app-manifest-192x192.png b/helmfile/files/theme/portal/favicon/web-app-manifest-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..7a190519ac6341d287af8049ebd1ad76155709a3 GIT binary patch literal 5200 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 qVW$;>U}2>H7vR6v`~R|!9&oRgHu|=|