From 3be78f0312528b8479c643b16f35972c5673ced3 Mon Sep 17 00:00:00 2001 From: Matti Nannt Date: Fri, 8 Nov 2024 10:35:49 +0100 Subject: [PATCH] chore: v2.7 release preparation (#4249) --- .../images/individual-invite.webp | Bin 18416 -> 20238 bytes apps/docs/app/global/access-roles/page.mdx | 4 +- .../app/self-hosting/migration-guide/page.mdx | 95 ++++++++++++++++++ apps/docs/lib/navigation.ts | 2 +- apps/web/package.json | 2 +- packages/database/package.json | 3 +- 6 files changed, 101 insertions(+), 5 deletions(-) diff --git a/apps/docs/app/global/access-roles/images/individual-invite.webp b/apps/docs/app/global/access-roles/images/individual-invite.webp index 9c38703605990c29efcecff559c6aa2b69fe3f9e..fd9426ccc3f2cef0a832a0a866da0e9c1f5c9756 100644 GIT binary patch literal 20238 zcmd4319W9e*ESm4wryJ-+vwP~?WAKT9otUFw#|-hJ00hy&-dzlde1-ZKgPW^_E@#| zDy*tGpPKWTGiyXqLR1t?4gf$+L{MH;o`c|7762fY3OEyxiUB+kgfCM%Tc$9-jGiDN zbY=@V%-rS`wD9H}w72i{V@PTsCHB^+WYy#G4#6F6%+{O?As=()-~{;C09&{ln%izis>O zllr^w{$jV--sV)-!iURi(DngcL-F)7W zQv2V+7UzArW#37hjD_=|z z>s!&0Usq4Mx6}W)X0fy(dQoZj`?<_Jq`Hira^O6yL@UuPYnuXRttyNfuTocRIj&l8 zO1Bw1XTW({i%}+9Rn_@VS(ofHohSXY<2-M`DblWOodoA?%ugI^R8#LhZ2V)YlUKG0 zuJZ<%rPsTs#JQZ<}Cc41oLH$%Y3V31}L? z_4R1YjgAB~2jKE)ruj-s99jTy^ETZG`InaY)tW%{(C(w-J>dVc;eS;_+Vl{{m2}j= znfxVXSvIl~&!>w2;!wXjV3EO|Xw#@~7TLRQhZ>d);O1po4L+Cnl1I0$x2e#B;=0%t z>fu(S*h59t%972}5*^2b5Zm-wL-MjunoNKnIU}#%2(x|n#AQ9%jMjU);KJ^mNmdPVOBjW8Mg z`t`6-c`KA=_YQF86FM{&rcYBQbRdv4STyN|FT(ZtR-wAujn1y0l1N|$q9y4%uHNjjP-f9kN@1bEe}}mQvGDVQfcKCu{$*mpEy*2zR{Kw@78#8#QS6C-J@T z!jF`;Z+`AoU=D7sFnOz5PFwU{b9Ho~pzORN4@I3%QE2I5s>zfoz<)n`|3xtgqmG0; zw3;jyY$xiSzfsLUxE)D}R1c`6ZkV5AWyZmHimz9{72)pB>VXJaVZRf76P5pdz#nk9 zH0M)-`0@bXd#xAT!_?u{YWWnecsm$E#-jlkJ%?6>aFp?))4e7pt^j!zWD9ITFc7*7 zZ-n}JnE!lu{*I+aVD+`d>~7p*@2CqDiO}0qM904dB*`Bbw~xT}(}teGf5H0vT>^V9 zlSpZ$*Ub0(Cw+qY<&>t$JPw?QhQX-frKm&&%HeT}R3iT$d_{*K2~P9{aJfyzkm;xY zrvd!$W%f@)dt^a?Utjv@Pe`XxqCQWBaDocq3>Cx`EQl+Z3zsV&B3~j@qD=TdHZM=&bK}eHJC5$X%qrzT_DHVRrs*_cgx8#*IL004zi} zPS`Ve7&`Mb%*i|K8Q3&~72Pe7j%(ONt=38>P@0hlp9TEcW$5A)ce@DT@DDMQ{U^BK z@;j6Enj}udeM17%1Vz-^!bQt_omB3-kS3O1D3$~ zXJAVdZ457P?Oe0=Vj?ho0_`7;(6|XlkBGgnDea(vy=M$>fZi!b-&&8A4)CK z>hn`$#EO=Up@{<(GW9Z0iq9rPU#!X z>>YOhG7jul73?J+e4J52NRM*oI`ah&5++a=<(5~FzvFHDhEn$vBv4h`-<;IcFRtJ( zUFnn;cFH8ZNTz(f-wp55U--bhgK36l7(tSyUA_$G9<%u5{AJp)VqsP<&3bqAuY&pY* z(8xu_Z7-G+p1}iKWZIpj886x>QRG^WRG=N04(h>!_$S= z%F-KK-1%b3@pS1cI@^yLV85eFL{=TD86Va28MZ(jpJblGkf zZ71rqWO!wZPx>*4o|>}Se5})U%uk&8RSCM=Gx`W;QCzx5ZiXK9v@qh+^O|GP{D8X- zMR$Ab31|VpeJ7)a0(Jy60N_3{v135{{r*>00+@=aw2VwVEq2b@1|gA}*K|FOELUT~ z%mTHySNxli{r9Z$?`qg{>XPY*D|1Y;ZKr(K1E{FkOU47cbkIVXHS}Oe|81kZULsVnv4cRpniR zYFNQ8gcnyx?zk6?Yq6H3oSvS3{>XdYS3m0PR2SP)_I4XW%bec^wSL`0IeLmAE35)jma_+uBGDUl1c0rzHfFOIsdp-kmJ|c;nPtwrw3JF&T-jw{h+g77@h??9rPaT+ zF}G|!D;iw$sF;oY7%4;Nf`50!_>|Q}pxBS-jNyLX(d*gF$xfk$sRU&~H1S{n-@(h_ zO7~wUw{1&w^RdEaj*by1Ek=CB4pEL@)T&0mFu8fMA@}%bjQWb-gWd03w^~pzyF*G->Rna9Zd~DsDR?!f2Sklx*+toIfKh-{?-ljmrdNi z1YQU@pHAsMGW>@^{$Gx`K0|9Ikv#qC&uHrls2`vTcX3Zs_`i|nzhEXwTV3o5#CiJ0 z?1*3O_0-R8A?D1SBnOhFsuAv+&GC!RMP&pvDayas(BI}H_^qZ}`NIn@u(Xnzdj@rae zto1SBK3x?)vXa?qHz=q%u6^lNCvhu?Z&XL0R_RX}i~oYn|Jb>0PSENyR4d{18IHr+J4cT)2K@GqI0|Jjp2$!`6YzcGX5t5Z*4{n{vg z_n$fRe@_`z9i!MDL`xgAo?o5nZi@2e6#ez^^QD0>cNOF-NBSP<=Kfl8WS=|mw+c%v z0yxj05sLkPZid&aitFY&o03P`@~ved^0Ut7t3>hRDqeaehlS<9jhKxv{s1RYB>x)o zr*PxHBeZ`I)%C%@(bJ@__y}rY$F0BY{+hp3kmyhMB>tpf4}4sDJ^wR;|5LJUK{Qf% z5&kn#C}k*A!>Yyn3u%5`g~}7g@3@18)DriDdC1z{OU|9j8MjTKnuMXH{l}9WCJo+=1CBMPJCy-Ua_W(4XVX z|B{;g+h#1>AWoV(Z0z0wQ&PQI59b)igGhLpiI=AQ6H`C={J(WwpXPyF2+(}IGH+9lW)DW8t$_QkkXRXBOaUg}vST zKBsEZi(B&{$!)NkT<~uylLe7$iVIe$ic;A5wy@baokEg9+$f6kh-jUJw|`qDva(~| zNY*|p+?>bWttKy`;{I?%dCb`;#QkAEHtYLust6gRkmz0Im9mgpXbW_F;y<3Z^zTOf zZQ=+S$W@I0Ai56W(0?`EwPrFft~3n*@czD?yn%3z&R@c0w1YzyY4q>|g^ zrGKrarCtN@StJPvlabO|r;*$oFVp+7{SVrE6%ZvF7Sb+!_4uPG16YXHcl$i#*!yv0-4L_rBBJV-x7}ydJCQcBRdzlm3 zdSG^$R8mR_|Yh|4^5X(WAvRmbs`rSv@y?O1`3JlG{qj& zs~duxZ_UKYXN-$E(tO0;2nZpz;9=jnHs-_a734}Jz8J(y4TQI*)|K#KFP1PBF!Rzo zy{RmUEzXn;?y}Vzcb1YPS9SzoVZDb0>QE%-0>8=tQ|mgc?;<*ZqkZ4U08i-w`L3R# z%w7*YNTb=Q{c@*G+TxG1a$cwHbVo^VMlDpa6jg+te3WooB{i=g?dt$Wc8RSxLjWEl z#P8=&KHxW-XesLsAbOn}U+YxZzE_fGf}y*`hXs_%>XLyDQaAWOxs&=F45r+&Qfn@* z_9T5NYAk`A3QsulOATgR0Qbb^;Fit>0XPEPcyAO{r9P84KuWOyrHgCKjzzlN#4p1Y z5DNk8SpQukD5#3FB#b?KSr1Xk5CQa=61WSx;I(%y)!Df@~rW|+HQT1NV&*&dAd zMWed&RR|~u;LEa{k4)XW*Bn%9^?()*vS1^ilfK(4A{RMhZ0Eu=`aTZfSyt@0eqLf& zf2?Vi2=f=K6$AItNWwU90l4pc-?E>Lbz5HEd zE^jIbt#2hd(kty$nDqr*?&sc%;{r#(5JObFANRW4dARC*V(s?!y&-oFs#pO%FT`OMP{pO&WArMs!N~3cLLtK;h88dXr&D%khM`8*cAj3#c z=Hms@jaz5LPwejCo&bCX$`4zULygyS6E7iUI9cSpYU`;|&osZI=WwQ$h19XWjx~^x zQ!CnD3{NpxPj%xwZdTaS1AC>ut%=}WOPYvpElGS3PUx&qA+27~0^ooC(aQb}YpHb# z;R}Hj2=-}`P{CnB0T_#cobVBI*^<^>=NYQeeqwv#b7j|1|69qX?*|mMx~`56g}2$a zn1>I_gk~&7_ab(0=ff8TU{gBK=DFi>iG-qGC$?AkuB0By6Qw_9k$4>Xd-H>7YkkHN zeYBaOPqa5kFx3ddPmrbx+e(GfZRed%HExSnwaa+K0Q9MLZC;6yYr_%|R}GRmLQphb z<@zXF>F&t3sR-H_zDukiC4WHEe+3@R7RX((#XnW3hvQUK-~ zq^VyU!tF~=95?-gbFSpU2W#q!{pi5g6#75hBIjNd!=pE=!H9KsEmP35SP`@_5wbZa zph_okGV&$z=@?5})8joXk)UyYW<$(WiR8Z++H9PuI#@(2b2NcSS{e}eL;-juzKt+S z+Nxy+=?WMvyJ*lHUQP%7GCVZDCpm<9U|r!ix`^Zx76`vZqWwvYdruo2fS)RZB(}tq z#PI7)<;N+^y8KA}4XuQf0NYCei=9Bx7FwI&x5|x`@@kUZCXT>HK#RsGH@fQm=sK_y zS7y0&9DoL>43vPd)jPTUz|M4YpsE#7M%xAsslwv%qs2?i^Zm_lNmFi#yym?9yV&%P zE01!I*=7j6@(3Xfg1VU4IlA8-FO1?WU<)ls+YPI zg|3Kjy1nEO$Ir*jbh1+He%Uw8iJceol?g0%|J8~$g&I?2u@VUy_<$U*u5YzU(ZF{k znjmAFNj&q^Nxcw&Zjx*w;SO?*wQkkBZ~(#Tym7Zlo@q1$C^d^>d=qXo(2JL+lK z-3`cqMiCzyqeri~%UxY9Ad&7IU;pETA>%;F@1C28K#ZCy(h_v;dcvmQ!V-!B5D7?u zw$R556VGvET};hHZ^S-ZI<~i(z>+b{Uaw_wEn}n|qV1|&B0X0;q_mG59pji7g2O=X z4TzbU9Si+-C!$Z?)t?y=hp2ELHReKKLQCLwZ!ABZmUx&`;1U=ll!1le7Y2%X5$RX? za?)z^5thPVMDT4Z)#XeF>e$$gvm-P^8^x?%cvUrZ3(tkZ8cLiTeXb>HO` zF8hGMu~-iCR`e3t!kr=3+$AqDb1%(Tw+lr)GfYzLLC64KWV08oR~4unowvQP8#hP> zXdlB6J;^$tQ)U-d_zsQr&aHhZzd`s#4(O69E-Af}8Do%?C8Y`0??&tS;;0K9JifgqTyMwmdhEH9osuq$ zJ2f6!Sk)m6-)2k{kwvkbWv?IpjFK}JFSj?LGOZwZ+#wL%=K%i#y zBr;kH`^#3N@Wm~fW+7|lI$7s5bW7y3R!y+=qHA{^G&0i0&n zbMS10UXJld=_Oz-!2?St42W`WeTV1kaWnH~?1Ob+ZL+-K^Lr2SI~{I4>D$W)!SBlf zemD%(feG^ZNH#u zF;8x$n|`rzFa!w9^KckmBJ1?5*QcQZvYS20bpS z+(0iuGEu3-jOy&3HtaGIySMh_Kr^^mCOBRbN)ko&qq{h3hzmv&Wh$!q3il(^(TXH< zX23|px%m=KRP*bnTL5y>zzDc2j!zOn=xN3WInTxgilO6UnZ(we$t>N9NQz+b*ExEq5%|rY8g@xXF;N^Em2prB-*r z?pc81*pL@1TJzL0koogXxaG>xk@&hY363;@UmfgS_L;;)Gdl~Ti$ zp@OBL4F0h39-^JuXOCT`b5P&LL`IAZ4WS3@VB-R4e=% zg?s_lZyx4jsO}D4q4Xpm7<;)D>=|4?nPtNJcI99qrA4yO0W;fPjwxne(-n-5 zIc!U;>RK%KW$e4Yx+^iFWhe{&04|WzwW{ip6rR{z>@oiVnJMkUK_#J4ZcS6$qu0IQF`aWw0h5OFY zv!DH!DNF9pSniJkn7vO$Kzw|phMd-v*7{0ebgG|0E)p(DJ*}qg_yO$`pl%zcqQGSS z?wDLdl)wN|tD-EO=9{s922n5$NRy<3OqPAf=?O&13?N0SB0N(3G^x`aF5QhZ^8dp@ z(oKiUjYWLONF43ztH5i1e-i-!K>O*`H}b*jGYx98bfZ7+idLVT%X3C;qu$B`LKYuz zz0~LE*Kx>usS81wx}awyN6l^Sg?XKBBHiF!_mtVvP6RnpZY?@(cVYEXpyBI=bZBE( zD}f!nFg? ziXv>L-VXcwgU?S7R$A_DGHd3)^@e#V>mYJl8%;P5W*hiZXPj+ zx_5Ns-XFcTVzsq{A-Df4-j)IYun?}C7X$$GW{Q+oI=xe2fEeREBrq*Ca6i$VAEd$Zqx z9iG+R>A^bn(|s>WuN!oV9EXl(kb2)zKL?NR-hHox*znmH%8L}TyKQ<>^u`xQo0h2f z!)Q19=K)07;UZ2Uqw)sGGWb>d3w*s_1lv*@=Pl0Z4zM%`$W)p(9(F!{?0O*xhm`ev zrxAH@HV4CW@G_p0f*!iR>}}@Rs*tO2*NkLUu$kk}BI{LO3->f-?+N##@t8`F=P)zt zYH6tYp6|qGg{uqp4&Qb;=LD}Vs~1_OMMJXHGJRKm5rK!vMdOwIVqVrEdx76+`{6Lq*mpO|Ko$@zFwj9Icp<&ut1>_=YB_hAKRN$Ww_A49&(Rr< zLT+@v0TJxQ+qlf9Mzh^5fr5eZIH(Cl6+J}!}-dJdS3X$ z<^`%felY0Hjg+2`CECm1_V07u4J#fz>|s%yT41@W^}dCDzIlm{KE841^=r!GjI2`$ zw^F`NF{vZnP{aJzfk|pt6x&>Iak^)ryH#0Tc6PC_=gmGHEBQsL<4L;?@cu+MIb+8B zrGEv-Y%yM5u<-{AXoBrpb_t`1bdOkN`{l5?L{}Ymy8BwR0=!)446(ZbwmJ%?Uvv|l zS7T9B0yzH)KnA+}HO@GnEwL3)FFvBgow{N6?R?ALdMK;bba?3@kpEtJsSfnCjD zq%63=@?dq?gx0@ymoG1_oIRP)8DF7Xw9qyKxPE~b-jQ+H_r*>AV1Do+-MJjKbhJpM zU&5upIO($1SexrJez0Gf&q@3Ko-?7cC!J&vjx{jG(%$h%rX5&HFddQD+;CTpHN4Gp zCesC=nO5$xJh-f0(iGWDzKBM$rPmsKnf2;s10JH?$rfrFA>6y`T`LD(pa;d`3LJ&3 z@RMe=@kB)~7RQZF(GY@my>i}`GEA)o_6`*AAdVA!^n?mR4d-qWIaI35`5Iri3w&S2 zPCs)2^!5M}yBJD-+$hH&n}8|5lt@l&;!V|#JieDgKOsL5c>#=&iw64aK8mJ~r!Td2 z9?6*>bu|c>;N&CRZaMCu{>UhUpp@}OK^3Y_@{Q_J!cJB?ZDJ7_q z)&I6THG9F1BkEEN5AcEI%ua+k* zT?Okx-^}i5U4=CT|K~JqcI7>b={us+iD8S-NiNC(82|MaH zOYJyzS&JS?boZ>7C3}0i6#UL_J3_b42uVb;Jeh3u%=Jjyve0317qSjDhfmmKN2$~F zKU;+!VXzU%ZOQ7-`~dS&bb@K>789RhC;$q%OS&9of8|`^jzEnV<_i?p^;ch0KVeqg z#F!8s6uAr$v3A-xns|>!{K$m$jRyERAtrL#itoVp@yLGM1lSTSsQb*k;{)t4J_u?pn+Lui02w;`G!E;x8-q8_?d zm;sjmT0E6$Fc>QY6TWKUhn1=;ubYw-0jF<0`l$u7ANXJwM5Ii% zMn7Mgy0me2bdTtd8LzgvuC?3rBbWo^6D9R-m&XcvVS-UmlSGAn7SVr zUO;XYTVvgwt?=oa7UTq_`f=RypquD5+pVKjfUfOKZ>+BDB;n7_+|nFk+c9ZB9FddW zzmv1MoO+Z~o;1lQBu_5A<6Fv+?+SFFP6gN5PC~;`c#Z7r)wIQ0>ZeVdl0`Xi!#jbh%=dJlJOVhG+qRLY=eVJlOf ztYlcS>y|iSbn1ADPMHy4k+tlJ3?gn7U>QXB%MS1;25|<{Xq;Y~sr7*RB?${FtuvGQtSCP}9Itc3qfZ6#ufVT>DchQK~XR4KhjiLr2x*&-^SC+_MtU}={ zTc!X=5N6P*GS(&70>~w5e94-7S_rFacZzp3w0CK9IqzG2Io|DQi|ee~U4S)RlteSict!)I#fMN5DF%*-aSrqC^G#bj> zV(FWGAuH1nKe8{cJHZ|lGF19IuvGkp;zgy&~9nGWG+7? z?Af?Eih+5ICt|I3D7%AKr%c?IxpvrL7m&Cm2c`Nr0lhq(R$rRh-B3j=a45WU>50)%>dc^Ab6 zWv!vy;b7QNg+%!!pG-@u3fqZy{5-J_cY@wc_aIE4?#*EV?b!K~FLl88)*^#AIl@1B z^aAxeN~oX>+FG*&f`2IP@1$D}tHJShom|jfy0Dm-r4LhKPC7h}@FiE;9OV%91qD+M z-EiP-ZIEE49d?{Kze`y>&-JI&T*C*#P79ZUVDxC&D<2id@GVInmFlDN0<6ayCkP3v z5A%3l{nji{)SDtjhr4TGLs*_=z4i2ar$4COg`~%0VIGoc&~cK0w-je`Tw%f2Bfdql z;#HbGPtLb@x$4-%?Sni~*IT(PP+%X8{i@WaI|A#s1f*i-IH(n!v#mhEW|f<&qmP+~ zhBymJP2S}N>av3kMn%1_ah=^H00;j*0$4LmypTEp^Xl^;b_7ruN_WDpRH~m#(%V53 zbeDbGhy3b}7l_EjjoEB?dnU@94no>e*NNE$ev`I-k4vL+vjV2<-42oocd`$Ua1x3> zVH=x(BUExT+^buhq!Q2Mo?hT2rToH|wtjm_0dz@%^$frYhpBFE3 z{3BzdhL)+;EoHPf9swY3M%L50)ga(oq=Muu`3#emA-Vg!p2WmL30?OIZUe#uSR!O?%krRR(bqeVoS49q6ri;o0#EMu8hw|RDOU;XhuKme1hmd3hR;A_c5dAVwD85c#bUNw9d;i!RfA~S zM5Xm2+Df5>R8J6xYkEL^2CD@^^HxYY=42($jH+9K|p-V5soxeEc{tidj$G%wk8#eUk+EaC*R;Ev{|oFw$|UBDpsa}}aP55l; zGN)UOW_{Z`tbS~REmo9s)Dy(O*C*18=?-G!9uQY_^^oo>8BR%N3)Jt9`Y~vFsyz0O zC9tRDA z2GI2$v~s-?j+%gmbI!Xx<7gxk6T_7xY8MHo@B-D`Y&XH$%Wg@MoDR9B*lWNXci z;Ow^ms*}vi3E<(}kwlwUe&114`~5y=BK_7g%h$V+823u8B*zFOv|MrUQL3^(uwVd+ z{RKN@@Vpl3VJfNv#j&FY_u7vrnWAg2)KId%F-DGzb7L#|u^Uk;QTImqN1=wMSaAZ* zrJb0U9z@|N{S(#K*-F~{xshnsX5vl;5XF7;*Cg7+oo`g2RNea>7#(1xHvKl6vHs97 z`**B3i6(66Ich~fN2test)L!ybpARi(0{t&i8%YY-2YUVvcj$vdls4zL^q1zP>jp) z0l&*wg&Ck;`bVtE7c77)vd8z8`}tGGPE%flRyvqAk@)?d0lO1uv;ywIsMj!nU}1|S zRCR1t3N(QwBhB_Y+vCGV4-2Dc<6blx{HvBfZKzE3)%g&He_FmWqdm81HJnN!Q~Kjv zLDa899qa(J*PJ4m_Z1|=Th^>;xzFk+ z?LjSr?up4C^o;OVZEm>Ls zzONnihQc3r>@8s?q${mdveOIWd`CKd!|Yg}FA(jCnbPHwTAV3Aac#vHDL_~XLf#%= z1Z8(Nz>eRtF7^Ya?KFq5_3A-~rA?rR12mWslQI#i9)SE#(KF1M>y4}D;jK00dzezFb)uduyVNAt$HwKEBDg!K~OylXf?$*$u!4By6KF#A6#qO#yr_um z@i+nB=w_lO_cz~&?c)L7FM*>Q`+OOoNqHt}9aVquLuH3o`Zs2O7eKZ{05cMFcs@%6 z`}_!g4_SOkKhD&z(Tn-WU7~fuy3sa)oM{H1`LrzZA;TXd@6x?t4c;tCU4SbNP!Gb@ zM3#t=??CEutWk;Wm0jO$CaKkDLI&x&9$*4w)5ap%n(m*2tf-Uih68pX2Qy~D*t!w&; zU+K1YCmm-rO9-#yhabDvLSIIFwj-5s!j<~6A|7$Yyh@aFUsDOTkW0Leo}M($yq*Ox z#%Q^7Wx-(&FXZ!N2f`)AR6to;va@U(3#9yttov=&NcnX7K~APwB*l-nbR+-^Y*?i?Ka=7VWA^64 zcZYg4rqX4#6I(B_ziMGzL$eks8n?B_CyP?9zx=F0;DNHPb*Lm;t6)t=qtG1-+VFev z(*&PCspK2<$*uN@;f7CN2hM&LCAqEY%BK9exT9X_gmU<}H4;R_^ktckN1`Mv7H)Zv zIZMA)+=t9|Lv%x21WhL*?>c%cBaepFv%5w^y|sy7fgl2}q^Hm0sATg3x^T86cnh-k zwwW|QTVo06zVSuByApx;f5854*TEN@`t~lx)l(mRLMj>UKt1eu{Vz}os4fp{YSBMI zpmRGR1-E#9i1s`3v7RjllP#q@LWu%q*wmE$o`4qEn9?ZeiRm2b!E$&y-8QX8z5oSK zfOHTJR20wsQR z+jbwSuUt()U`xlNb}9R3yJ7OmYn=pt^oOA+7L!E%_y(sln ze}M9ioq^u^25NvIic$nQn^YdAZVhoVao(1Up$F0I*XxPd*O77yg;h>)V>+HtI9W*$ ziex#^H!F5o4k;$Aq=dy$jg2zWN5`e9fpFHAiVdf2ic#5=qRJ(ThjhrazHNN{bKJ=IdxvVFnc0 z#Wn_L@#*v|?n77K#W$^~q`0^-XsSBTqH3Fxml7!z#o^(ZcUUR#3`BddT#=y#G^AJa zz1h1Fg<{e&o}KE`{{vx4tMBQ>-bArU0(YynlEwa&$ueB$ldMlq+tt{E5^^ddG@30m z+|gWjOvHf~FC*^N$APnW=cpg?W{~7lXT1~!u_(YzE5c3`(mB6n4v7D>D~W60?PaEx zj|qM&t*QciP^JkO2nK_}px5(%r}Di)Q8&UAGAP_KK$`Rym>3>RO!Y-&;S>6PKKt^< zOCVOaby=ixdbB*1gDX#bi_z|XX~`4SiJW~P)D{gp$yPoVDxYLXhIItq8f|N58qm?s z-w9Op{X61SW^)y<5Dj}bDk zAN?+ODC@rPz*IP>M$u9(i_?DlmQlxd<+L}|{dNgalPc|4H>T&>JGLZ>V&i?7Xm4pc zvL@-(&|8-X>ou2`Xb{m_tFHn^vsbR~opSacmD0yrM`Xi-juA%du&lIU>`5iZj_Q|h zyg>PcnF?$@6Hx851kRjEPQu7FzJ#gY;vBH`uTJ&S)UQaPJP)8RF;n#B@A*93evW-G z^03(1pqYq^R@F+J?o{G=L%2lf_!85I-R0T7`QCIn!+H4%K}%G*tJGxzdbb&AH+DMd zk7xsHwxIxea`E-Vv*VW!XtYs&05;OqJiuJ9vX2|08JbwceS?8u)n#z}SQUsH0J5S6 z3c?$RJf_yP42%k`Fx%sekdmu^kf09%-O}1~amsO^bAflth|-zM+{)Lgv=Wt#pO71$&ml8C=E9-QNih02A%O6 zX9WJ=FN^^|Idn&+S>rwCz6J|ea@M{P&IWsV$iF=z01pyOj5xhAztN=e!$z97ZjDt7#9?7O#waj+-CzPd%*y?ZEOm z>dpvlS%ryLXaPD)bk@wzp-!Lws3aqW32+hU?lwq0W%k2~4xNPS<;G*4@ZH^{a2Biv zffNmH->oAjh{~w)fF6zkQ66R>=lA*nfGmbZ*IKS4p1^|?9W%woNp`+2o;q3c4tPCL z5U=R_ppR@cNH0#S=C03o>TTR6gd8@dfp0v?C{$0HAyH@ZLtV?H&#s_Ey;C?U^>%!T z1kTRr{JMG!)bAX+<|*}kUqC5oYD(qEa;~TrN}t7g z|Ms-wD+iWC?5%@Ia)HEhKdR+3hQlT2a(BJ)^xDumYOgvbqte$rK9(C;#mmUFGXb3E3qga zr4s&1*k4eWZ9t-dW49Rju8$)TyQR~q5{_RMn+Zt+_YRAKypqHH*Z{iYb_gq-dGbj<0@E!f)+C= zw+6`8mPELQM8h!)>~V@7XfE{Xs_OC8?A-fjRP<{fU%XR1o2o4Y7G664NRh-18I>uL z*5zbZis-)GJ8&2-M9+wZ6go+Kqw#{~Xmrg$e1qUTA-V$?ryA|o6?a64Mypg7r}+bt z+X2KH@P}C@p4wWlm(sYFWsK_AOypOL!xN4wJMpuGbJcQJ7nTLKdb&(JgYS**L?V<% zAlxy}c|1i5Ujc~%7_}Dp?{7@Oq?!6iEqWyi@37I9ojh!Z?CBC3@~N(gG9@`^F6sB# zX)PXKM$5S?-;!KcqAN*sV6UkM`B^$mNKS0Shhb`2Ra0;NK$2*U6*E>C^f?aSsb~bx zPbQKBZPIQsuQty{jri+VNU1|zLjrQKo%KL^|Jh;53)*2dM$@>&zNqfsqXEg;d1Hkq z|CoqtMYN%}mnmEGfZbTgXKn*SA}|?1YH3j78r=G1Nhl^H0R|I5x6DU2*^ut6!Hi|c z?zT{`<$^hnQ>cBT!gJf(X<8@CE`qd6MWvk(tZ9oK!gOlsj1uX~L>QksBQQEAomwA0 z=(Ahq5jr-nsNm|wy{BFP$A1jdL-r9=(viP&0xH(+bvE(TzLkjE7CaSo( zI-3;4Q<}c_iTh`1Iuy$-cWYZQz0ded#>1_^%O+(R8x$@~VDLdWtDEsEY`N}Y%K*>^ za&V{d4wuRrrI^d0> zy-&N}3_H}D!gWGgg9wE@izXdA{U$OnopF)LcU$g;FjR$R$nmBvnW)IQv6~kp{UK?mswvz$>fBt-rf+P%a5@wm zlmlV4>my=3&7lnOSd2*!UKN&W^kpP7WV_1Tr*@zUQDGj*8y3RvJcv8gypYRS_q+f!QUg3Jdjo260WTafC(bg5>QhvW7q0Z?1lky$nEkA|!`U*jZ zswz|jl=F`kLz26z-QQh4L7aEHz$LWIt}>-hueyrZLn3Drj|*u^r!{#k+Oc~(aN#PO z9UPQ#9M;|SKo#c=DfpP&^EH^+{>uGZy7~+IIxU%?DjbfBEW$J+gM&V2lV}aL-at3xR0#GNxzaEDA$KX8<$zAM&-{#6$TFcBI>yFNZ;kvRh^i+Ei`Z0LLv6UV5F|aN~+64~nmQUusg_Q_QxoUVY{A)g4Zqd@(Un z>&>3b%elH`OAOyxs7ElM;_O7)Lfpn=}^D{pl+c4+KhGcmv95u4Cgs%9M`xyp>-F-6K09dS|#=@ zhmIvPU!O@Xf0Znod5e*4t)I5Nd~9oVYq!^t-o-bsYsr1v`~0YO<-r|MC!SXE6i!h) z_wu=W#RvYsbzgUPZeB@w zKg0j)?*q-s{jIEzH`KrWzGAlZ^0~5)57>YGeZ_a~<#T->?|)}*DU&*OqTpRF)7A#} zXMXz1?3Yc?na(kPI$8XV+^qB?$F(`PGfmE8RlCFGyF+Alfu`AmpxgsXZZ~=oFWh(6 zOZN*KcjPVoRyECChkBO?Pg+0o>dVR#mcJW7p=89jtS8_H^V`2K8k#3t=lp(dWR)`c z>e~Y#Ij$d`8y3!cfVy!TkwvgZke4I`OVs~H#oPL}zN literal 18416 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 bqnxncRTC;R(B;4BbSRH-p!t4RKg$0B6O4-) diff --git a/apps/docs/app/global/access-roles/page.mdx b/apps/docs/app/global/access-roles/page.mdx index c2d3eaf764..ca9e9f4f5f 100644 --- a/apps/docs/app/global/access-roles/page.mdx +++ b/apps/docs/app/global/access-roles/page.mdx @@ -6,7 +6,7 @@ import IndvInvite from "./images/individual-invite.webp"; import MenuItem from "./images/organization-settings-menu.webp"; export const metadata = { - title: "Organization Access Roles", + title: "User Management", description: "Assign different roles to organization members to grant them specific rights like creating surveys, viewing responses, or managing organization members.", }; @@ -134,7 +134,7 @@ There are two ways to invite organization members: One by one or in bulk. Access Roles is a feature of the **Enterprise Edition**. In the **Community Edition** and on the **Free** - and **Startup** plan in the Cloud you can invite unlimited organization members as `Admins`. + and **Startup** plan in the Cloud you can invite unlimited organization members as `Owners`. Formbricks sends an email to the organization member with an invitation link. The organization member can accept the invitation or create a new account by clicking on the link. diff --git a/apps/docs/app/self-hosting/migration-guide/page.mdx b/apps/docs/app/self-hosting/migration-guide/page.mdx index 56a326156d..6e5e348612 100644 --- a/apps/docs/app/self-hosting/migration-guide/page.mdx +++ b/apps/docs/app/self-hosting/migration-guide/page.mdx @@ -8,6 +8,101 @@ export const metadata = { # Migration Guide +## v2.7 + +Formbricks v2.7 includes all the features and improvements developed by the community during hacktoberfest 2024. Additionally we introduce an advanced team-based access control system (requires Formbricks Enterprise Edition). + +### Additional Updates + +If you previously used organization-based access control (enterprise feature) as well as the `DEFAULT_ORGANIZATION_ROLE` environment variable, make sure to update the value to one of the following roles: `owner`, `manager`, `member`. Read more about the new roles in the [Docs](/global/access-roles). + +### Steps to Migrate + +This guide is for users who are self-hosting Formbricks using our one-click setup. If you are using a different setup, you might adjust the commands accordingly. + +To run all these steps, please navigate to the `formbricks` folder where your `docker-compose.yml` file is located. + +1. **Backup your Database**: This is a crucial step. Please make sure to backup your database before proceeding with the upgrade. You can use the following command to backup your database: + + + + +```bash +docker exec formbricks-postgres-1 pg_dump -Fc -U postgres -d formbricks > formbricks_pre_v2.7_$(date +%Y%m%d_%H%M%S).dump +``` + + + + + + If you run into “No such container”, use `docker ps` to find your container name, e.g. + `formbricks_postgres_1`. + + + + If you prefer storing the backup as an `*.sql` file remove the `-Fc` (custom format) option. In case of a + restore scenario you will need to use `psql` then with an empty `formbricks` database. + + +2. Pull the latest version of Formbricks: + + + + +```bash +docker compose pull +``` + + + + +3. Stop the running Formbricks instance & remove the related containers: + + + + +```bash +docker compose down +``` + + + + +4. Restarting the containers with the latest version of Formbricks: + + + + +```bash +docker compose up -d +``` + + + + +5. Now let's migrate the data to the latest schema: + +To find your Docker Network name for your Postgres Database, find it using `docker network ls` + + + + +```bash +docker pull ghcr.io/formbricks/data-migrations:latest && \ +docker run --rm \ + --network=formbricks_default \ + -e DATABASE_URL="postgresql://postgres:postgres@postgres:5432/formbricks?schema=public" \ + -e UPGRADE_TO_VERSION="v2.7" \ + ghcr.io/formbricks/data-migrations:v2.7.0 +``` + + + + +The above command will migrate your data to the latest schema. This is a crucial step to migrate your existing data to the new structure. Only if the script runs successful, changes are made to the database. The script can safely run multiple times. + +6. That's it! Once the migration is complete, you can **now access your Formbricks instance** at the same URL as before. + ## v2.6 Formbricks v2.6 introduces advanced logic jumps for surveys, allowing you to add more advanced branching logic to your surveys including variables, and/or conditions and many more. This release also includes a lot of bug fixes, big performance improvements to website and app surveys and a lot of stability improvements. diff --git a/apps/docs/lib/navigation.ts b/apps/docs/lib/navigation.ts index ab4e1376ae..37786b62f9 100644 --- a/apps/docs/lib/navigation.ts +++ b/apps/docs/lib/navigation.ts @@ -126,7 +126,7 @@ export const navigation: Array = [ { title: "Zapier", href: "/developer-docs/integrations/zapier" }, ], }, - { title: "Organization and User Management", href: "/global/access-roles" }, + { title: "User Management", href: "/global/access-roles" }, { title: "Styling Theme", href: "/global/styling-theme" }, ], }, diff --git a/apps/web/package.json b/apps/web/package.json index 5d3c2f94ce..19c390e592 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -1,6 +1,6 @@ { "name": "@formbricks/web", - "version": "2.6.0", + "version": "2.7.0", "private": true, "scripts": { "clean": "rimraf .turbo node_modules .next", diff --git a/packages/database/package.json b/packages/database/package.json index 95b7b201e2..e993e8066a 100644 --- a/packages/database/package.json +++ b/packages/database/package.json @@ -54,7 +54,8 @@ "data-migration:segments-actions-cleanup": "ts-node ./data-migrations/20240904091113_removed_actions_table/data-migration.ts", "data-migration:migrate-survey-types": "ts-node ./data-migrations/20241002123456_migrate_survey_types/data-migration.ts", "data-migration:v2.6": "pnpm data-migration:add-display-id-to-response && pnpm data-migration:address-question && pnpm data-migration:advanced-logic && pnpm data-migration:segments-actions-cleanup && pnpm data-migration:migrate-survey-types", - "data-migration:add-teams": "ts-node ./data-migrations/20241107161932_add_teams/data-migration.ts" + "data-migration:add-teams": "ts-node ./data-migrations/20241107161932_add_teams/data-migration.ts", + "data-migration:v2.7": "pnpm data-migration:add-teams" }, "dependencies": { "@prisma/client": "5.20.0",