From d839e0033244b63df16c8b548cc52106fc693629 Mon Sep 17 00:00:00 2001 From: Caesar Schinas Date: Sat, 17 Dec 2022 00:20:38 -1000 Subject: [PATCH 01/24] [BRANDING] add Forgejo logo (cherry picked from commit f42622c7d5a28859f535e0d86ece06101baad1ef) (cherry picked from commit a39e7f2a79f6527d45439f21bd88378264160c3a) (cherry picked from commit afa2a31bb99c0fd9cd25c3c0279e6c49695b1900) (cherry picked from commit 276e8856e594ad7e73414382d34fdf0278cbca6a) (cherry picked from commit 68e3bd469f2e8190db70d4e1564fb46d01feb5f4) (cherry picked from commit af124b9ccbb0b699ea5d1bf1530613cb9a96f205) (cherry picked from commit b89ab4874d403c784c92e579f4f6a854621c0078) (cherry picked from commit 0f2a2f0d0ff9851428d6899e307f3547d7651f87) (cherry picked from commit 80999363c73e4e01cbf9116491743c87baa952af) (cherry picked from commit f8880b5463aa1db047d89080d21e7a69979eb4a6) (cherry picked from commit 5f4cf4f6e143237c81da3e80875727cef4b76343) (cherry picked from commit b38e26bc1a8bb117f571672961a8445cfc02c953) --- README.md | 2 +- assets/favicon.svg | 56 +++++++++++++++----------------- assets/logo.svg | 56 +++++++++++++++----------------- public/img/apple-touch-icon.png | Bin 3162 -> 2709 bytes public/img/avatar_default.png | Bin 4889 -> 3189 bytes public/img/favicon.png | Bin 4351 -> 2968 bytes public/img/favicon.svg | 2 +- public/img/forgejo.svg | 1 + public/img/gitea-original.svg | 1 + public/img/gitea.svg | 2 +- public/img/logo.png | Bin 14354 -> 6747 bytes public/img/logo.svg | 2 +- 12 files changed, 58 insertions(+), 64 deletions(-) create mode 100644 public/img/forgejo.svg create mode 100644 public/img/gitea-original.svg diff --git a/README.md b/README.md index e223979d42..2c0a3ef3ea 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@
- +

Welcome to Forgejo

diff --git a/assets/favicon.svg b/assets/favicon.svg index 9df6b83b56..bcacdc0200 100644 --- a/assets/favicon.svg +++ b/assets/favicon.svg @@ -1,31 +1,27 @@ - - - - - - - - - - - + + + + + + + + + diff --git a/assets/logo.svg b/assets/logo.svg index 9df6b83b56..bcacdc0200 100644 --- a/assets/logo.svg +++ b/assets/logo.svg @@ -1,31 +1,27 @@ - - - - - - - - - - - + + + + + + + + + diff --git a/public/img/apple-touch-icon.png b/public/img/apple-touch-icon.png index 0c803d35dc34c01281a52c460cee9e65e29ad60f..1f6c1544f80bcd94adfa05ef4683537266de020c 100644 GIT binary patch delta 2702 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 diff --git a/public/img/avatar_default.png b/public/img/avatar_default.png index 129967112d13ef602f6ec42f28b264c4666be2e0..f335e51dad13df7ceb19701a71f8efe192173286 100644 GIT binary patch literal 3189 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 diff --git a/public/img/favicon.png b/public/img/favicon.png index dcd4edb1a30bf93049fd24c31317e3344e08d95b..eda0347effabb1b681c3816cfd3580b82227c063 100644 GIT binary patch literal 2968 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 diff --git a/public/img/favicon.svg b/public/img/favicon.svg index afeeacb77c..804b05e284 100644 --- a/public/img/favicon.svg +++ b/public/img/favicon.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/public/img/forgejo.svg b/public/img/forgejo.svg new file mode 100644 index 0000000000..804b05e284 --- /dev/null +++ b/public/img/forgejo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/img/gitea-original.svg b/public/img/gitea-original.svg new file mode 100644 index 0000000000..dca9b4f4db --- /dev/null +++ b/public/img/gitea-original.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/img/gitea.svg b/public/img/gitea.svg index dca9b4f4db..804b05e284 100644 --- a/public/img/gitea.svg +++ b/public/img/gitea.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/public/img/logo.png b/public/img/logo.png index c7971f91835e889ed15a0e5252734400c5c65cae..1b2d9b4023427395448912e39a9883c279dc1618 100644 GIT binary patch literal 6747 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 literal 14354 zcmdtJRZv~e6D>Rk3GVI=K>{HJ*C4?mIKc_-4#7_nB)Ge~TX2`)5Flu9_u#JQR(}77 z@A-SWRd=fP)9k70>fOD1tyOzMJ}60Jppv2j05D`_Bvk=`1OFc67XX0E&(rq+@XpIh zzEl4U`P&VF0Du6f)r4JUFpB@Z_y6)T!UAB>`uZ0{$DJPe=f}l{*aMH|20Ia($!6`v zhNJz1kBbdi)7Gzgh7a4o&EBR_;J!*~Vb_zR!anmY8KjvoyYL$0l z;VX(v9=hrr{4(S0R0}J(r1f8=jmN!qw|vLLCiYJIxR&ad=+Gk*TLH|>Tl*>b~|wYH*oEBKi)o2@D#gF^Z*2P{wr zrgcco1(!tG7Ro=(_R!i3ThugF{20{Jy=a?y&ypa=4Jp~(KMOx4V_5xSbfP0v5vTQC z_$o*^Kwp7^A|hZ!Kw$Mp^NVY>N>Qs60|F7;4l+#dM@(Ga$E+CZtpHrl5`~d<$j3sh z>G>%4=U0Re4?Xfdd9w^2gV!vFgSyI0IrU#l1FGF#opY1ro7Fm(d`gwD*_@D=OBVW< zCY*`cwmpU7W1T|G6%scerW^fGL@yoeRsw@fCMN^w4*q3y-<9d2jd9^)rWX`?=3ljzV=n?@bA+yf^MGR`BY8yW_YHZv|VCk-e zaLZ-#^tQ&1lQf$aMeAGGDoM;>K?Kv2^*XVR`g%SF|F{+XdAh<9Nl7J%oqgb|a^YIS zRlz*4P4{XU^=hGs?+HuXZw<_Q z)?dA=2`_4G*eNLbE_rY}686iApMU9%Z(f)QoLKN{7(4pWZci&S69=8H_^dkdR$0JE z*zCZ*C-d}F_v?*4E80Ps_We)#KQ!$B>i-}O_cu@#P9yv^7PbpDA+G(Fsx!NiYURG< z58cK2VJ<{hS9VT9tmL(Jhgd`&G#nZ_o$`4HneBnuQ&i7%(%}V?KKhwv0!n5c%pn{%!0 z1tp#M-PL*5>nwYL27+r6@;OnLdv|z&DUsI{v9QrE6UycrVs@cvm2k$d%aOZ|yM0jx zn;RdREer{7a2`tz#!PXv1lkDWIwv=HTtOto9Of0 z+i=OP5E%uj7sN(r$-WssTSF29FR7@{S6Iv{x1Q!JzY&zLbYmF^cU{}e;Q%OIh^wk+ z=X#XeX(q+&RUN|>o*XzmEv!8$( z)Dcb)+;KQKwr(3(*nR85CbEz^1!I!@PpRek29hp16FW>0>o0m z+Eek-$z#OK>bVIpLIivKIU0*A%g?sA@L~XX8EidiEocn2_x_^525?<+a3FeYl1KPa zc>%1lg=?NeqAmj&N(=e5PUTlSe|V7XV^J38AK-4)<=C)6swTw{u*( zy(j@50{x|h1190%biH-MlAf>5`VTNuF`xkO(VvSw zesd~k-MyO^3O1Oae_Vget;-d0`v@B#F4I!4E}1*-n4f^vgjkkFyPn*w z2VZ8Hl;Xy@(KC1isKc)c%g!#wE?%u`Lo4F_69GSwHDlFm(ocquP~jWIX$UqrhZD$K zU`;z)hIOLyoO-+88~kvlK`f^`sRz~1!+kC&U>{^iJV7R95F4)BOm}@^FfUPP{j>3# z!mnThTZq~aK>FJ)MWpe!{{Ak$b*-VgcU6=A-N{Fw4WS14h=P0G9wdkU z>T(~x%s9O9gusD`?;LsyH|w#DvC7D(7h|Hcm`*>=ZzuqSnrSUF$i9ku7H0CUQbgEPwYcCfC;JVsSuTiyi7IgPxe>#87X*XbFc!lS^nbHLy)I`*?%={iO z(W{*Pd)`)|rU@?#xe(TBfy-(qcm(K21VBB*b?y*b)HCScx%o{uEdZa{iGhiPQpgQiV1WTw_#<;r&DU@pTx#$5#Lc6!@(m!g`iyro}NirT7pjod2loH`rb5g#MEF5 z5)gAkH>6Y8I#-)PIsE~qsQTrA^jLIbtp;AZ)db=VCc&pC@l3Tnk)z}6$7a=>H<})= zV<2!K`eS+4pv%>X)G@o&EmaJvhLPJFynp5N(M<;y;Yle_t1mqBvN>IbMV)chIN}PO z8uV^<2zP#Mhx0NMe!l7MKRB|->=%?}(d_qH6)8pn5F0$7)?0qrAnwweXaOJ?q;$4Cl0z%A9OL@^)#^IWn{i@5o zq1mBY(v|<{iXT9LHgh3^t{OM=tE@O~@Ho@`g$+k8eC9~OI89yZH>Us zZec?c{)rKT(@bN`^W46FU z!D-fGI|4EgBcLC+xA1N9>FWNnL_OVsN(=k@zYWBt*t;kfV$UpBM{3=`4J9Z%U~L#r zeGfn+TlLBYITlgpNOyNRzO|v7)U$l@T5-#^t_3cD=7n5Ud3JEYa=!_ZB%#z-1^p=! znbvL>^jC(!fe+?GWg9|}wY1|Z@S*=8_3`On3?))4yZx>S;Jk%I=0B!op-siGYEbR z4$VvQNBf#ijFr>UhEnGa8DY!P&u>}25l5zvuRZ9z5*^`ru}Es=(cpdk;CbS*E>-F+ zKQ%R_pWsLIbhC{4*6pW}PL0i*iWRPm#3O~GdENJF8^c7FYkxac$~!f_6M?jH4xriD zLWjG9)WZjx>9kg&f*Rl+gLLdQ+P1<&=EuRDjO%1qEHisjrQmayl8&6nj_}e{=LJvN zw8>e_HN%eW+Q8Yt4)S~z4c#2D6Oo>-%&L*lx`zV zZfavXK{rAIJrf;oEqE^?n`fnlvsJ6^8*bV7kfN!EIfET1+AK<{|Dq$teT|Ka&lHAk z#8x`|?zF=q1lR@!S>^(z%eJ;Z9#A17t-7`J>YEtG!>JwWx`q-tUx^6Sc+qojx6)D@ z;T;7mSpS{4KJan)O)gZ}T9N)vYL&Xn!owyg=uvtQs9Iv6D zU0z{QVzY3R_}pHlyqkC{;l(RfVije z$Fo$u+YG)EOR2n-ab;9X(W>44>WcUIw>np8QjHl+BMA0T&!=}AthxN3BZ_qyFs!2i zQFlhBP>?2R_*r1J%YmJ1$K~50IMKnRW0?X2k{jJhm99p@;j*wA@LedUqyq0(pNXVC ztCi7IF9XQ@YZT5AU~}_}mSmkGB%!rvB23NC!Reg~>)HI*jZio?Kr8DCNq?CtpM+A; z$+2I`C=DH1ULc;EtO<1NrR6yD@J}fzt157NsNJh4iP9o5I0Ljt~J;3WYekynKbo2cs-vb+<`lWO^>J_r7r-FKIh)1um;wclU@B1|8G`Gb{s z`ib0><%z(Bei{(PrQVJeSu{BQef8${guQdz(Z)#gD<-KMWOcnt0>DG+jpZ3HDbui zwO`M~NZ75QXoyWqOlfm)xB;42180r?GknpFM?cQQke8nVHSjG_mi9hEzG}9iXplWqvQPceFgD^ov*YNdVHIyD{!YJ9`_UEL> zj05xBN0_DM%y}c-7F31h{%JPUe5M98uF5#w;u~dVo=H3cpk>_)69uGg1Z)e-NcFQF z*)oqcFZNF*b(?){)^qeZR}39z4LCNyQ8DR|_*8b-Ck2E#?^)=9ZKyP=dyF-?Xye@E zqUa6eWf@Chp{lB9rY??)1ii*C!6%E86>81oDb)gu=?Sl}kuT$bDH{1SjJ!P`uVnDn zZ246mzs-e=HD*DA)LV-Y%Y#_2);BJwG*ocAKiA&rfhNO*&ydqfkVs^Qea`GP!>93i zVsif}a)|egOt?NE^Z+-t)0cLY_Jgqj%_zoo$$6(7xh(;eIzADkO~gZxzGoNZ?zt_L zzH-lwd2F97Shc#iv?AL~aH`~H3yD5c7kOC(M`7VXzk(ilw8u>hd$;pm%ZCVm2ypCn zOr^nc%(BJ&chTwNF{ zf1e@2_j$!7pH{D`OUL0GFLV5q)!S& zt$X33oLQ}>eT2~y$aMEkOo$I5Ixw)&I16T1>8M~rt_xBzo$SBI7z zt}e@U^Tt)83{!?J;1Q~d;TN}SAE+1+GmdiV`Ni?a!!G3hI7jad42Kqf&+iB_ zeJdkYVsOfy2S)&>pytCZU*TjV(A2v9b z?Ffhi=HYxA*s4RezU$p(dinZh;9@-pT&YdmAaAWhE9o!EmC#$w zJ`2tB6~_lZ4D{I#+ywCWOrl%9(Id`28`|+gxpt9y_MjV1CIj zt2W!Y+_VYFF%zWMCo>x;ImaT{3)&*0f?o)4I~QzOXP1tZ%;Zq;{7&_Qo=!K4Esv<^ zQRJmlqz`XoI-v5}3Ka7>kI>u*KCM&iGh1RtMSrjHZ-$+5LR%SWWogF=S{dVPr)M?d z{IAO1MO>_<9Bt9F#}hfy(H)!riNB>uXZ$P1tKUK@9HWnicst!@r5{ZnV>TY{UDDDJ zYnoeHm>%@Xl4_bSc+^2!si5x1_a6doFIc?$~j~Pnt38F5HxK2Rabq z?i-1imoeKLSh2E@8H_N zj8ksGz!w%aX$oiDklTx28Dq*X{_tP%Y`ii_Swr>BiA<}SAkf19K;O+PGwRDK(s7J{k$}f0;z2XkEuw@vJ14o<&r??*=22-gHQ5#k13g2 zc(~)p27+F`mD#;QsqlXV#uq>DGQ$5&cIG-8atc}d`MsfUmG?q6)buk=w2LLqRo30x zbDB47ax&P41nxgqXJ<%X-uOTy%S)c-n}+}wF9y?mbuAj@4g6YcPYhP1 zx3*|8luR4TH=9?@&vdlupEnyE_JTC`nk1om!b-yqYr>4nHivwUSbnD{ZP&!XF;O2XpVuxb74(M~6f0F&mc>Fz=7H z_^0Y(p*}2{e8Gut|bZAAoU$SM^jtpRuDC5{kKTCR2emK~r+2+-w}XAPep= z*sJy=VpB@UUdUGKlPcmR-el7uw(foE%Ds6SWazsjU2qR+h|6>M&=`^1prYJzJqKf(DoA_iz26-CLdc&+ZSh> zX>*hm^KfqF`4fI`B}6GG+)Q+5(D?J&v7>I2&nHJo8qHlT|Kho3W{{Pe?NEg0KzEWm z^^CYO!g6xR6hhtl^?)rg#`CxxdZ5D{gZA@s}}a%XuzqT&13 zRwqygRuei)oGzDZAzV3O*n>S1L)b(wgFeSYj@&aPWz7>pgHIE}UEp=+t5PoiX~?&9 zLS_rNHfEL14<}qeD7rC1eRD14XgHi>j(u>H1jh+6u+)aNIgj31!9Fjr-0{S>$n~Q& z*ZJ^?q>M^7feecqc|*2v$>4XXmFy^~s_+L1f!Tjh*wk)M&*_tc)?B@>VR+&&wu1ewAiF83pepthQZ!@q?Kkf$!+)OA=-dqltV-= zrt307BF5sJQu79Fe!Za;lk{>bQ}V{Qr`u7gL@eD+=JlPg_i?AJ)caS*#C1Ogo@c5) zyc?3eXVb$>3Bz<#YUidmf%!~gy!ANbE3GJFWUBQVf4h~M?@Y%_Bj}T%#9Mbm@%D7) z(F#5b((~$Z?T>dpsZZaSO_OfjFHv(@CY@T|I62m^RM#Tk=j)JZ;iu#1(Qcb5svLMv z-Jud&kv8IH#-fBHrsZ2<4V^KOIv#xrFCRbmrj*>bM^49K(=q{0&O45FDo>1KAcv!DYsfj;&H{cb*8qd zFOqR{71D_@*6Bk2U6YHV{)?i9Ua4PEIA}FbQj|E9?tCY9>CF@k?W@8lpwVb|<%yp# zEGi==F)D^bbU7gpr(dLleP3vQmyDb0;L1`zKl0xQHAvi0&=rJ=OX>T*Iup;<>i6wF z8mK-;+z^+>{4yZZK@P=mdM;)qDCe!ha6iredrDf_8X$3czjPFB>D;ov2B(TqS!%Iu z>W2h#>qWW~$M7fBPCm@5v}#1M^LsPfE~{j0J|=j+4U}LGI4qN9;)f^R=tlwHn2MBc ztjyD42ZktpA&TxWYHVdhTqX9qiI2V#6eTaRW*c!WCcUfTGEPb0{r>bZtrEw34zGx& zkpo`YSPrZ;vB1SKYh_9CZ$VI$QX;JL1qJvgXHfo7hj zm0l_1EOkv@)C1XX+9v+SdbOJJ0~6dldzGh$^L*r#^1PP)NsU(wf3KQhApvm%Nrlf} zI`vuq75d1~4?!Er2;_0Rk{J=w| z!6YQhXD$^!NaZK|FL<8=!jS8SY@ZZ!kSQfb#5MvAJ31>r%{0r-qx>UGZ9i1>RK!e@ z+^uHYFj8;WO60OgqT~~iqHPY4i?Sc;rjauSg{qXj^D=%P@QOSCQ||NzxB3lS8S38_ z_jLHx2UeG(vR0*Id;0uRxjm%O{&9T%R<#bHu5162ywGtcW{IktqmVV(3Y26L8*Bf> z)|@zZOcY`fPqfskvXU2b8;!V3on|9rxi?RVyABKeH2K6n*s3i;(BqFiR=u~&ya##; zNO7%-y!E^AtZh{CwvMAE^fEd*!qTo$JC96?;9%!?1z0~)pM)=Dr`1m zqy!Yo6DdjZ*0WO~p_Dyq@ysv3PppNb%(^Z*4M+T&>W-u_8y{nBYENpXSlVu!p2VtfzS+wq0=?l@n z0)$TxWTkG(XjuR%twV#E!J8)YzTRr=|^wymi2;TSd zNC=rTimyVH_ZDaH1p0~GqS`roQutvEGcT*yG1>I&Yw`b6AyQrnEpuL0CL!xeK^)3Y zbk52hQ?UAf!-0_&5+!=iv+S6}>kB>IobcT3oeny;`})BE?>ELA#Czkb545srgS@1_ z%?^*PkKfc!P?eza*Tgj60LP)yk2n|0nD}O}EH6dB&be&Yyq$CPzOihIT(^o4r zr-hPFwBOO7yhkArrRCSj>ff+f-Q_!{&KsSiYVZ%gOBuvw1n~POy(Xew#l(vVvTu4o zvIFZh%e$%NX~&rcTn9OyH&dy&FS5P#tfJF2+f2R!FH zJw&SS1k)yy!igLIAux+xO|*&QFcZ`mZDAw@%Q5h~`t6tARnb$r>iRe9B2~(1d1MRN zQOaSz6^|ktO!E9*iuBl6wsR`w{4*IgUI>)dxJs86@F9&ovpUsMXbi3Jj;OZn&%?`T zVs7sar(#X)9?;X0_}%UWC6Zl-KrP_yCl&2T`e|JmFRYyU))=KUF?(wkqsplR*F87* z$el18FJqOQci_vzE)1VoarRGnv6m;@`8l>Sm8({u)&EhbyHHF^XU@I9D{XB*JO!7|le0*8zL5(oOlxqul zPL4b3KvR0VBe0d})#ncyM={VRyp>XHk)!bc(#~i%`bQQJ-*pd#y$D?Y(Kp)wd#czI z_k_s4fTcC91mxd=yBCSKK4LdDDyx$ib}a{Z7&KWuni2Ow0$z6gd5IfaWiF+0KMJD? zk|Pp0V#5_y`P5g^p$UpFXJ0f)RSxV@=A4^K3|2U5m`rseCVtvtXp#OG-9=o`~ioau&&&Sjr)vFpm6|C(hMVEs<|B#%N~#oUh}`b6#gYQaja9&+H3M zE#z8^mqgH$5zG`!b04{Ty1)^h@7ftt{3n)ftjIKyEs-_sg5q93I3#Z9)v$iU4{jyY z;c%xnF4??WWExJ#nZ)|(fmRS669&BuVgAQqrvn6~>L*uGT zTrMj#^K1Ia1|&D~>3Go&bs=lt%D%R&9}`sT1<3|g!^$o4{U53-E9m{!E_~0{(S&jW8BO_|36n_rYD$!>dwDtG*rTc=`Pj48_2o{|s`LLuqh3UU zDSEnNOQN_ud19*)u0M60J)HVRm7+{*r=R1bQtT%qN}!(we@f-kt0D)F+trl^kHPKWD)E8GNxUPqal9Cds=-+eKPyN(cypg-=3 zekA#liKM4lcOb?#zjB`_R=cR&KTX|yWSxQVkYZ_kb)i7Fw@u(lo`@5>!2ey^=5OyYufaII*_B#m@jwE!=1m4;O?Y6Tuy7yo1668NeW(mU$zWZmbRy{0L z9Rz9Om&*oKuZ|YUFgATq91r)FAmQ==Ta+O3x=q{idRwD{ah$QGTs z&*iwQ1R3rroL~Ng@gnT8-&%fY#6yX8hPXXHu7G%|7HRl%9=vC8E9@0wFJr5JcG_{K zUg7V11c{fsSJhgDPxB4211wIZr_?uR4qhkjKNX9@Fyka0W0)yDwkVFDk46csE zet67c%t2V=(2dhOxt+{}Kl15RkIdd)u#?khoL2b!R<+F|9EdY@OtC^dhx0<$!pfm+ z;>NbI_MgRg#brd{H(1SFVQlv43`w@3Kdaq=utd!7jMM(!q-Gb!7#qR6^C~=t8BtnN{6}G^AuaPZBEMVsMp-8F7@#K;-qSI5^+} zczwFmXvtxCn@Iq5RCR|N>a9lPZ0Hwt@>Gt^C?R{H+q%Jbq}&_mZu)7wB*JQwju*P6bT>bb?E++o< zwltIY$vY}10{t^K3iiiH-Gu~GT48T!#o73ZP$+%SB9(4v(Lla;e#=bvDYqKKIYcw> zOgR8gP^C4<2F=ISJo|<0x~*Z_*~_8c1K}y#2+`dM+Sr891J#36_tx`@$kmVdW$#70 z6wa&w3#OOvvAaPQj|6YsC;IOfTV-Z?URs1rOkaG1GjjKR_N`(Qq?!v0J_{5svFXpR z{=B0qjzyc;_0smC1Q;RzATetFpp5LefKq~0YLf3~2Gb8&MqJxc`~f6Pvp`*%o8hK$ zRiPAqI`x zWb}PswZFZ>8YX&6+Sw*}E)VhKlLpcx4#fv-HMS_axkp*FX4Gx+*$<#z{2vi6?A7X`3*M8vqd&z|{fwWRow zuS)Nlv;Ts}k5AwF=0%f6)geqhLemw`?HkP%I#{pM3j;t4&rM!) z_Xnvq3Gw2xx#D|01apQgWNi2YAQbeFz@bd8j=tq}VWvT}Hv;jLqFPWvO{&5RdU$QL z>84oxe!J853r!BK^7>ze@OPOc3caOC_?55Us{ZopR^t&0ILx*7#^M%ap>o19IGR{JK{0Jk()MlR5vEO z*U=fLB-oYji$@*sv|t8AhUfrFhJ(noUyV&%-$X~j{6{M0g%)+4cbhT+CB0xu+w&_o zzo=?H$K|_$jS&D^fr{2akS0a6kt56OnK<Y6%az)?-DyT=fj$DnhDcT|vhu1by4E%JfZ@kuBQwFg83)NJ06vEo+Xx3~ zlBEU&{3POW*sSJRRz?QSKO*g=A+L2J(Y#s#^)H2N<+7*cCOWvK!V#LzT53gFJ|D;0&fdqh%s?X?lVLq~0cMq=S zW5_IJEn+NPtH&N$ddhf7H;+AyHY@uwx{IQE8hD<;hz>B+ea<>`2tdX#;5wkWgJB!d zO#C4;Oz7)ML6Z&y1FVzbp=D8NEc>4? z1-c5dC0`T5G27g~ZMLRdd6qA+S)e!=<@`$r!1d`;FPUF1*}^1Kx`Qq$1wZp6Y*k>9&&Zi53x zuzIoOiCH9iv%YR-($+dOLb$9?#+5l^!RYm@wmV-f()(a@F`%HUI(j;%nL#PsZKi)Hi!_p^}8{Ct4PjYxEF+%wae1{^$aydQ`!Iip#aFDlv#w|MCHcnVC5D~;#r$SaABe{nx;zGbFS_5 z0H{(R>)}Obb5XoLOfAbTIT{G`dwR`r ztN%L3&`?^*ct28Iqo3-2DGCKZefEM5%^qVy(G4^2rF9y(GOQ0vWzDP)N{hAnpRB_L z(_aDL+~eWwCb5VgO)GIbIW0PIAUqYXk9;Rnq910cHiD6Fqy)AOTq@?9;ZbwXr_=B#^lyGhXOF5elJb|BM=&FA?H+)fRdVA?%i%T#WS02E7jca{-|Aa*G+H-7kE z(Nh1e@09D9E$+H~7nKu%2f)?oz21{Z#wa%0myJ*teEY{TLk*LqHQCCyEC7VApq^T> zlHrl|+-{{=9t6EpSI>+xfEm6F=dABU0nnD-@Tlh$drN7Nj6c}_UoD0@cP8Pn;{$MY zMq1hGDpA&=mn*@BpgMb*^SEJx&(h>`_V-mD=gPrnnlUQ30>>8sEbks%dZJ(%mv<7J zMRt|sO5iJm4v$X`_Kll_6HFeucm{3)AoX>!!~;%>Xvj^hr~^o*m&@kf^hBE6LTKC~yV z-?_gpTSW#?wbmEbb9+IW#L?x*PMXxl*Q=I~=g0BQR(wem&woh1z(oB%dU!bvpCm-$ zv}EE%B7tyUOqA0JP*VtYI07A+OJ0hs-^z0zmsM0O3qyd4ll$ zC6x%W@lTk^38m3nK2ko+@tYZQ?Z(F1`lJ4mqm{AQ2D>yt2fNmHc8m7fiw(bihV9Dw z)wtaF3#&DT_DMKEW`%0VS+{SqapKdjR!yMwO3CIw;y2}mdHrH3pLUYoLH6`*c((sC zC!O4kp32@^{$d=%2M3Im@y?IANI}Y~YPPt*??e4Y<+89(>;a@(LHh2z;53@tJ9-#M~&Ki+|>k=zYYYH~Dd&uWdWv#>kFI0!O zzr1LOh)ZoU1H|ZVkw|0<*Yc%lpLW6PWa$@0j1B1a5A+&}OS}NRFAge@Bu%`su6)1a z&k4}aw%-MluB|JuD7m&$y=GHoJ$48P7AYCyJn8Vh^#{c48tm@Q+7r=?SkFk_+gNph z0s}1Dw;@iHTltzxqM&YZ8N!@&Lbm@-_P%`BDGy9U9?VW(6p|Zq&BCW%uJ9^X!;1;( zUi{%R8$QFy6Q-8ssGN_l4ORlx3o*VXMdVelS70I~V`m-zeXI#tpvlJ({(*b@UC`qy zJpof;91|6{D+{!RIZ2McFSQNiCoJj!5m{5!6@*e zkc@wOqk5H`lzzWffC$O;O7|JeIBokd6DgDU?k{GRq<-q2Km$BN<}I9RkLIPNC5GIA@*fsVI*@Bt9tVi z5BIh^eAa=U{fF%)`zp=dCU@&lvxl?}&)Hv2JrgVcS8u?rm0hoC|BJvVy7P+OUGx8E aFyzSH&MYj4=hGek4$4X?Nmhy*ef>Wah!K+j diff --git a/public/img/logo.svg b/public/img/logo.svg index afeeacb77c..804b05e284 100644 --- a/public/img/logo.svg +++ b/public/img/logo.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file From c309b1a1f4fa2942218352a6ec3edbf39efb9a11 Mon Sep 17 00:00:00 2001 From: Gusted Date: Sun, 18 Dec 2022 19:03:34 +0000 Subject: [PATCH 02/24] [BRANDING] Rebrand systemd service (#137) - We can rebrand this quite safely, as only new installations would likely look into this file and configure the correct folders(to use forgejo instead of gitea). Co-authored-by: Gusted Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/137 (cherry picked from commit fa78e52b5d25556b4a4313c4ac78edf6306c5bbe) (cherry picked from commit e36d649989a69a1761c3d7cc709f97f80c8d378a) (cherry picked from commit 37e15a2f4108c4b7e082a69fb8cb77068fa6dc15) (cherry picked from commit a09a4b3ce0b6f63ac44bf4ea0f4ba275a9915598) (cherry picked from commit 3096b37c950db77296f22d16d64efe3737246a4b) (cherry picked from commit 187ad96c94b7fbc261c88a4ff513066acc562642) (cherry picked from commit e15eb31c6e6310d14175cc270707d7cbfb95b819) (cherry picked from commit e276abe3410cef5fe63bf05c6f089ed4a3da49dc) (cherry picked from commit 31223db5e3290ccf67a504db1937e5adb903b204) (cherry picked from commit 8ebffe0b71db27b40f2049ca77878748e6756ec1) (cherry picked from commit 1d198363469814584c50e4717a7f96cafb06aa46) (cherry picked from commit baaf749ce07f978466d6c397c1ed6bb6a1c75330) Conflicts: contrib/systemd/forgejo.service --- .../{gitea.service => forgejo.service} | 36 +++++++++---------- 1 file changed, 18 insertions(+), 18 deletions(-) rename contrib/systemd/{gitea.service => forgejo.service} (59%) diff --git a/contrib/systemd/gitea.service b/contrib/systemd/forgejo.service similarity index 59% rename from contrib/systemd/gitea.service rename to contrib/systemd/forgejo.service index c097fb0d17..0b8c8cccbf 100644 --- a/contrib/systemd/gitea.service +++ b/contrib/systemd/forgejo.service @@ -1,5 +1,5 @@ [Unit] -Description=Gitea (Git with a cup of tea) +Description=Forgejo (Beyond coding. We forge.) After=syslog.target After=network.target ### @@ -25,21 +25,21 @@ After=network.target # If using socket activation for main http/s ### # -#After=gitea.main.socket -#Requires=gitea.main.socket +#After=forgejo.main.socket +#Requires=forgejo.main.socket # ### -# (You can also provide gitea an http fallback and/or ssh socket too) +# (You can also provide forgejo an http fallback and/or ssh socket too) # -# An example of /etc/systemd/system/gitea.main.socket +# An example of /etc/systemd/system/forgejo.main.socket ### ## ## [Unit] -## Description=Gitea Web Socket -## PartOf=gitea.service +## Description=Forgejo Web Socket +## PartOf=forgejo.service ## ## [Socket] -## Service=gitea.service +## Service=forgejo.service ## ListenStream= ## NoDelay=true ## @@ -55,13 +55,13 @@ RestartSec=2s Type=notify User=git Group=git -WorkingDirectory=/var/lib/gitea/ -# If using Unix socket: tells systemd to create the /run/gitea folder, which will contain the gitea.sock file -# (manually creating /run/gitea doesn't work, because it would not persist across reboots) -#RuntimeDirectory=gitea -ExecStart=/usr/local/bin/gitea web --config /etc/gitea/app.ini +WorkingDirectory=/var/lib/forgejo/ +# If using Unix socket: tells systemd to create the /run/forgejo folder, which will contain the forgejo.sock file +# (manually creating /run/forgejo doesn't work, because it would not persist across reboots) +#RuntimeDirectory=forgejo +ExecStart=/usr/local/bin/forgejo web --config /etc/forgejo/app.ini Restart=always -Environment=USER=git HOME=/home/git GITEA_WORK_DIR=/var/lib/gitea +Environment=USER=git HOME=/home/git GITEA_WORK_DIR=/var/lib/forgejo WatchdogSec=30s # If you install Git to directory prefix other than default PATH (which happens # for example if you install other versions of Git side-to-side with @@ -69,15 +69,15 @@ WatchdogSec=30s # Don't forget to place git-lfs binary on the PATH below if you want to enable # Git LFS support #Environment=PATH=/path/to/git/bin:/bin:/sbin:/usr/bin:/usr/sbin -# If you want to bind Gitea to a port below 1024, uncomment -# the two values below, or use socket activation to pass Gitea its ports as above +# If you want to bind Forgejo to a port below 1024, uncomment +# the two values below, or use socket activation to pass Forgejo its ports as above ### #CapabilityBoundingSet=CAP_NET_BIND_SERVICE #AmbientCapabilities=CAP_NET_BIND_SERVICE ### # In some cases, when using CapabilityBoundingSet and AmbientCapabilities option, you may want to -# set the following value to false to allow capabilities to be applied on gitea process. The following -# value if set to true sandboxes gitea service and prevent any processes from running with privileges +# set the following value to false to allow capabilities to be applied on Forgejo process. The following +# value if set to true sandboxes Forgejo service and prevent any processes from running with privileges # in the host user namespace. ### #PrivateUsers=false From c9f6b6c8a18b39e804e8464dfc80178af3efdada Mon Sep 17 00:00:00 2001 From: Caesar Schinas Date: Sun, 18 Dec 2022 23:03:28 -1000 Subject: [PATCH 03/24] [BRANDING] Rebrand footer "powered by" links (cherry picked from commit 8b9237e47e067db4cb8b1d477865d75b258bee1e) (cherry picked from commit 47e5543f33a9dafac5517cb5cb29d0fe6d266e2a) (cherry picked from commit 456abff8c0567168b1a6c0d02d6830404d1b0dd3) (cherry picked from commit 2d2588187ec20cb2f552cd3ee2b04a541909dc5c) (cherry picked from commit a81e4e2588af2d1e9db253ca51649451d8dd94cf) (cherry picked from commit 70c4ee8fbad69efcc02493ab8e1c692573ac0409) (cherry picked from commit f12b0577e89ae223dc239c7ace5c692d30cd0e9b) (cherry picked from commit 025e6e1974c8066c27e918020a6094fc8372f521) (cherry picked from commit e051684c83e369177d22a77bff46e82998495267) (cherry picked from commit ee370f3f3cf5ec81e170fc16c8ef982b47c99797) (cherry picked from commit a1b53a8b883559a31b16a15a383ac5fe25a62189) (cherry picked from commit e01158af9b037cff4248b0b577505023c9564b7e) --- templates/base/footer_content.tmpl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/base/footer_content.tmpl b/templates/base/footer_content.tmpl index f527274484..6cc4e851db 100644 --- a/templates/base/footer_content.tmpl +++ b/templates/base/footer_content.tmpl @@ -1,6 +1,6 @@
- + {{template "base/footer" .}} diff --git a/templates/post-install.tmpl b/templates/post-install.tmpl index 7f74a4d0d2..179c741315 100644 --- a/templates/post-install.tmpl +++ b/templates/post-install.tmpl @@ -7,7 +7,7 @@
- +
diff --git a/templates/repo/migrate/migrating.tmpl b/templates/repo/migrate/migrating.tmpl index 58c453fe54..82ed660d92 100644 --- a/templates/repo/migrate/migrating.tmpl +++ b/templates/repo/migrate/migrating.tmpl @@ -9,12 +9,12 @@
- +
- + {{svg "octicon-git-pull-request-closed" 256 "ui red icon"}}
From abbed33d1699daa99620acdec5322846f562cb8d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Dachary?= Date: Sun, 25 Dec 2022 16:25:25 +0100 Subject: [PATCH 07/24] [BRANDING] container images: set APP_NAME (cherry picked from commit 12d7bc447edb272327200389c73bb04bb5fccc14) (cherry picked from commit 1335b17fc35b8b873b94435fddcc23c5cdf0117e) (cherry picked from commit 0d7da06c47ac3a7278602871b95234f823e11f1d) (cherry picked from commit 095c1ab679bce39dbaa89e8a86eaeab8a9b823ad) (cherry picked from commit 2220f00d09e2692d10e0d07f1e8ae2232a636a7d) (cherry picked from commit f0be8bbdbfb758fd13f2f9325358ad292f6c030c) (cherry picked from commit 15188180a15adb58bbde418018612561b68b6927) (cherry picked from commit 96c471d7d36a24824835b254bf785689f898d715) (cherry picked from commit 709052f1e79bbb0ee417f8001c9c0dbd03e78791) (cherry picked from commit 98cd2f5deee05ae9be67250c85fc17e31eaaf28a) (cherry picked from commit a1014654b13e338eaf35cd96d6115fe88459480f) (cherry picked from commit a16f4dc51dce3f9d22cf899186fc61931a82f35e) --- docker/root/etc/s6/gitea/setup | 2 +- docker/rootless/usr/local/bin/docker-setup.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docker/root/etc/s6/gitea/setup b/docker/root/etc/s6/gitea/setup index d8f6a3b319..958d50a798 100755 --- a/docker/root/etc/s6/gitea/setup +++ b/docker/root/etc/s6/gitea/setup @@ -24,7 +24,7 @@ if [ ! -f ${GITEA_CUSTOM}/conf/app.ini ]; then fi # Substitute the environment variables in the template - APP_NAME=${APP_NAME:-"Gitea: Git with a cup of tea"} \ + APP_NAME=${APP_NAME:-"Forgejo: Beyond coding. We forge."} \ RUN_MODE=${RUN_MODE:-"prod"} \ DOMAIN=${DOMAIN:-"localhost"} \ SSH_DOMAIN=${SSH_DOMAIN:-"localhost"} \ diff --git a/docker/rootless/usr/local/bin/docker-setup.sh b/docker/rootless/usr/local/bin/docker-setup.sh index feab02a379..b480685863 100755 --- a/docker/rootless/usr/local/bin/docker-setup.sh +++ b/docker/rootless/usr/local/bin/docker-setup.sh @@ -26,7 +26,7 @@ if [ ! -f ${GITEA_APP_INI} ]; then fi # Substitute the environment variables in the template - APP_NAME=${APP_NAME:-"Gitea: Git with a cup of tea"} \ + APP_NAME=${APP_NAME:-"Forgejo: Beyond coding. We forge."} \ RUN_MODE=${RUN_MODE:-"prod"} \ RUN_USER=${USER:-"git"} \ SSH_DOMAIN=${SSH_DOMAIN:-"localhost"} \ From 0704c410b4e8a0b610e82f6ebe9209fb485ee722 Mon Sep 17 00:00:00 2001 From: Caesar Schinas Date: Sun, 25 Dec 2022 01:44:04 -1000 Subject: [PATCH 08/24] [BRANDING] Add Forgejo light, dark, and auto themes (cherry picked from commit faab0c670e22588bc643d71b650560c2ccca2c8e) (cherry picked from commit b6d59493c7fa0bfa62095abb99c5c5a29bcf1659) (cherry picked from commit 837da0c1f41b40853eb4aebc40af16433cf7a9c2) (cherry picked from commit 71ad245e1d6f7f5b002c1c5e9831e872d157f906) (cherry picked from commit 85a7032f1b1c0d80e3d3960e9d902e9e66e687a5) Conflicts: web_src/css/themes/theme-forgejo-auto.less web_src/css/themes/theme-forgejo-dark.less web_src/css/themes/theme-forgejo-light.less web_src/less/_home.less see https://codeberg.org/forgejo/forgejo/pulls/552 (cherry picked from commit 0c2c131bb06024fca7d5c8ef6a2696d5f6aa4a1b) [BRANDING] Add Forgejo light, dark, and auto themes: fix import Closes: https://codeberg.org/forgejo/forgejo/issues/562 (cherry picked from commit 2b0dc1f80ff18d1c94df74c77a80e3651e7cb2ed) (cherry picked from commit 494ad6a3b7cd3328c835e6c7c76a55a77d47a60d) (cherry picked from commit 6940fc22c4917e86b25cf3c6c2ead9057ae726d4) (cherry picked from commit bd6f00656c457339ef3d08612911594358a15f14) (cherry picked from commit ebb506a1247751b1182348b281089dc00a65c741) (cherry picked from commit 43d72d37811c8b9d00b1d046341401643f66b289) (cherry picked from commit 1a87adca018545f6d2db0dad9e5d7cb59f6a97b8) --- modules/setting/ui.go | 4 +- web_src/css/home.css | 4 +- web_src/css/themes/theme-forgejo-auto.css | 2 + web_src/css/themes/theme-forgejo-dark.css | 279 +++++++++++++++++++++ web_src/css/themes/theme-forgejo-light.css | 251 ++++++++++++++++++ 5 files changed, 536 insertions(+), 4 deletions(-) create mode 100644 web_src/css/themes/theme-forgejo-auto.css create mode 100644 web_src/css/themes/theme-forgejo-dark.css create mode 100644 web_src/css/themes/theme-forgejo-light.css diff --git a/modules/setting/ui.go b/modules/setting/ui.go index c98acc1663..c108ff85f6 100644 --- a/modules/setting/ui.go +++ b/modules/setting/ui.go @@ -79,8 +79,8 @@ var UI = struct { ReactionMaxUserNum: 10, ThemeColorMetaTag: ``, MaxDisplayFileSize: 8388608, - DefaultTheme: `auto`, - Themes: []string{`auto`, `gitea`, `arc-green`}, + DefaultTheme: `forgejo-auto`, + Themes: []string{`forgejo-auto`, `forgejo-light`, `forgejo-dark`, `auto`, `gitea`, `arc-green`}, Reactions: []string{`+1`, `-1`, `laugh`, `hooray`, `confused`, `heart`, `rocket`, `eyes`}, CustomEmojis: []string{`git`, `gitea`, `codeberg`, `gitlab`, `github`, `gogs`, `forgejo`}, CustomEmojisMap: map[string]string{"git": ":git:", "gitea": ":gitea:", "codeberg": ":codeberg:", "gitlab": ":gitlab:", "github": ":github:", "gogs": ":gogs:", "forgejo": ":forgejo:"}, diff --git a/web_src/css/home.css b/web_src/css/home.css index 0094acc75f..2f3082055e 100644 --- a/web_src/css/home.css +++ b/web_src/css/home.css @@ -21,7 +21,7 @@ } .home .hero .svg { - color: var(--color-green); + color: var(--color-primary); height: 40px; width: 50px; vertical-align: bottom; @@ -40,7 +40,7 @@ } .home a { - color: var(--color-green); + color: var(--color-primary); } .page-footer { diff --git a/web_src/css/themes/theme-forgejo-auto.css b/web_src/css/themes/theme-forgejo-auto.css new file mode 100644 index 0000000000..ebf59942ea --- /dev/null +++ b/web_src/css/themes/theme-forgejo-auto.css @@ -0,0 +1,2 @@ +@import "theme-forgejo-light.css"; +@import "theme-forgejo-dark.css" (prefers-color-scheme: dark); diff --git a/web_src/css/themes/theme-forgejo-dark.css b/web_src/css/themes/theme-forgejo-dark.css new file mode 100644 index 0000000000..727c9fe9b4 --- /dev/null +++ b/web_src/css/themes/theme-forgejo-dark.css @@ -0,0 +1,279 @@ +@import "../chroma/dark.css"; +@import "../codemirror/dark.css"; +:root { + --steel-900: #10161D; + --steel-850: #131A21; + --steel-800: #171E26; + --steel-750: #1D262F; + --steel-700: #242D38; + --steel-650: #2B3642; + --steel-600: #374351; + --steel-550: #445161; + --steel-500: #515F70; + --steel-450: #5F6E80; + --steel-400: #6D7D8F; + --steel-350: #7C8C9F; + --steel-300: #8C9CAF; + --steel-250: #9DADC0; + --steel-200: #AEBED0; + --steel-150: #C0CFE0; + --steel-100: #D2E0F0; + --is-dark-theme: true; + --color-primary: #fb923c; + --color-primary-contrast: #000; + --color-primary-dark-1: #fdba74; + --color-primary-dark-2: #fdba74; + --color-primary-dark-3: #fed7aa; + --color-primary-dark-4: #fed7aa; + --color-primary-dark-5: #ffedd5; + --color-primary-dark-6: #ffedd5; + --color-primary-dark-7: #fff7ed; + --color-primary-light-1: #f97316; + --color-primary-light-2: #ea580c; + --color-primary-light-3: #c2410c; + --color-primary-light-4: #9a3412; + --color-primary-light-5: #9a3412; + --color-primary-light-6: #7c2d12; + --color-primary-light-7: #7c2d12; + --color-primary-alpha-10: #ea580c19; + --color-primary-alpha-20: #ea580c33; + --color-primary-alpha-30: #ea580c4b; + --color-primary-alpha-40: #ea580c66; + --color-primary-alpha-50: #ea580c80; + --color-primary-alpha-60: #ea580c99; + --color-primary-alpha-70: #ea580cb3; + --color-primary-alpha-80: #ea580ccc; + --color-primary-alpha-90: #ea580ce1; + --color-secondary: var(--steel-700); + --color-secondary-dark-1: var(--steel-550); + --color-secondary-dark-2: var(--steel-500); + --color-secondary-dark-3: var(--steel-450); + --color-secondary-dark-4: var(--steel-400); + --color-secondary-dark-5: var(--steel-350); + --color-secondary-dark-6: var(--steel-300); + --color-secondary-dark-7: var(--steel-250); + --color-secondary-dark-8: var(--steel-200); + --color-secondary-dark-9: var(--steel-150); + --color-secondary-dark-10: var(--steel-100); + --color-secondary-dark-11: var(--steel-100); + --color-secondary-dark-12: var(--steel-100); + --color-secondary-dark-13: var(--steel-100); + --color-secondary-light-1: var(--steel-650); + --color-secondary-light-2: var(--steel-700); + --color-secondary-light-3: var(--steel-750); + --color-secondary-light-4: var(--steel-800); + --color-secondary-alpha-10: #2B364219; + --color-secondary-alpha-20: #2B364233; + --color-secondary-alpha-30: #2B36424b; + --color-secondary-alpha-40: #2B364266; + --color-secondary-alpha-50: #2B364280; + --color-secondary-alpha-60: #2B364299; + --color-secondary-alpha-70: #2B3642b3; + --color-secondary-alpha-80: #2B3642cc; + --color-secondary-alpha-90: #2B3642e1; + /* colors */ + --color-red: #b91c1c; + --color-orange: #ea580c; + --color-yellow: #ca8a04; + --color-olive: #91a313; + --color-green: #15803d; + --color-teal: #0d9488; + --color-blue: #2563eb; + --color-violet: #7c3aed; + --color-purple: #9333ea; + --color-pink: #db2777; + --color-brown: #a47252; + --color-grey: var(--steel-500); + --color-black: #111827; + /* light variants */ + --color-red-light: #dc2626; + --color-orange-light: #f97316; + --color-yellow-light: #eab308; + --color-olive-light: #839311; + --color-green-light: #16a34a; + --color-teal-light: #14b8a6; + --color-blue-light: #3b82f6; + --color-violet-light: #8b5cf6; + --color-purple-light: #a855f7; + --color-pink-light: #ec4899; + --color-brown-light: #94674a; + --color-grey-light: var(--steel-300); + --color-black-light: #1f2937; + /* other colors */ + --color-gold: #b1983b; + --color-white: #ffffff; + --color-diff-removed-word-bg: #783030; + --color-diff-added-word-bg: #255C39; + --color-diff-removed-row-bg: #432121; + --color-diff-moved-row-bg: #825718; + --color-diff-added-row-bg: #1B3625; + --color-diff-removed-row-border: #783030; + --color-diff-moved-row-border: #A67A1D; + --color-diff-added-row-border: #255C39; + --color-diff-inactive: var(--steel-650); + --color-error-border: #783030; + --color-error-bg: #5F2525; + --color-error-bg-active: #783030; + --color-error-bg-hover: #783030; + --color-error-text: #fef2f2; + --color-success-border: #1F6E3C; + --color-success-bg: #1D462C; + --color-success-text: #f0fdf4; + --color-warning-border: #A67A1D; + --color-warning-bg: #644821; + --color-warning-text: #fefce8; + --color-info-border: #2E50B0; + --color-info-bg: #2A396B; + --color-info-text: var(--steel-100); + --color-red-badge: #B91C1C; + --color-red-badge-bg: #B91C1C22; + --color-red-badge-hover-bg: #B91C1C44; + --color-green-badge: #16a34a; + --color-green-badge-bg: #16a34a22; + --color-green-badge-hover-bg: #16a34a44; + --color-yellow-badge: #ca8a04; + --color-yellow-badge-bg: #ca8a0422; + --color-yellow-badge-hover-bg: #ca8a0444; + --color-orange-badge: #ea580c; + --color-orange-badge-bg: #ea580c22; + --color-orange-badge-hover-bg: #ea580c44; + --color-git: #f05133; + /* target-based colors */ + --color-body: var(--steel-800); + --color-box-header: var(--steel-700); + --color-box-body: var(--steel-750); + --color-box-body-highlight: var(--steel-650); + --color-text-dark: #fff; + --color-text: var(--steel-100); + --color-text-light: var(--steel-150); + --color-text-light-1: var(--steel-150); + --color-text-light-2: var(--steel-200); + --color-text-light-3: var(--steel-200); + --color-footer: var(--steel-900); + --color-timeline: var(--steel-650); + --color-input-text: var(--steel-100); + --color-input-background: var(--steel-650); + --color-input-toggle-background: var(--steel-650); + --color-input-border: var(--steel-550); + --color-input-border-hover: var(--steel-450); + --color-navbar: var(--steel-850); + --color-navbar-transparent: #242D3800; + --color-light: #00000028; + --color-light-mimic-enabled: rgba(0, 0, 0, calc(40 / 255 * 222 / 255 / var(--opacity-disabled))); + --color-light-border: #ffffff28; + --color-hover: var(--steel-600); + --color-active: var(--steel-650); + --color-menu: var(--steel-700); + --color-card: var(--steel-700); + --color-markup-table-row: #ffffff06; + --color-markup-code-block: var(--steel-800); + --color-button: var(--steel-600); + --color-code-bg: var(--steel-750); + --color-code-sidebar-bg: var(--steel-600); + --color-shadow: #00000060; + --color-secondary-bg: var(--steel-700); + --color-text-focus: #fff; + --color-expand-button: #3c404d; + --color-placeholder-text: var(--steel-450); + --color-editor-line-highlight: var(--steel-700); + --color-project-board-bg: var(--color-secondary-light-3); + --color-project-board-dark-label: var(--color-text-light-3); + --color-caret: var(--color-text); + /* should ideally be --color-text-dark, see #15651 */ + --color-reaction-bg: #ffffff12; + --color-reaction-active-bg: var(--color-primary-alpha-30); + --color-header-bar: var(--steel-900); + --color-label-active-bg: #4c525e; + --color-accent: var(--color-primary-light-1); + --color-small-accent: var(--color-primary-light-5); + --color-active-line: #534d1b; + accent-color: var(--color-accent); + color-scheme: dark; +} +/* invert emojis that are hard to read otherwise */ +.emoji[aria-label="check mark"], +.emoji[aria-label="currency exchange"], +.emoji[aria-label="TOP arrow"], +.emoji[aria-label="END arrow"], +.emoji[aria-label="ON! arrow"], +.emoji[aria-label="SOON arrow"], +.emoji[aria-label="heavy dollar sign"], +.emoji[aria-label="copyright"], +.emoji[aria-label="registered"], +.emoji[aria-label="trade mark"], +.emoji[aria-label="multiply"], +.emoji[aria-label="plus"], +.emoji[aria-label="minus"], +.emoji[aria-label="divide"], +.emoji[aria-label="curly loop"], +.emoji[aria-label="double curly loop"], +.emoji[aria-label="wavy dash"], +.emoji[aria-label="paw prints"], +.emoji[aria-label="musical note"], +.emoji[aria-label="musical notes"] { + filter: invert(100%) hue-rotate(180deg); +} +.following.bar.light { + border-bottom-color: #ffffff11 !important; +} +.text.green.svg { + color: #16a34a !important; +} +i.grey.icon.icon.icon.icon { + color: var(--steel-350) !important; +} +.ui.red.button, +.ui.negative.button { + background-color: #7f1d1d !important; + color: #fff !important; + border-color: var(--color-light-border) !important; +} +.ui.red.button:hover, +.ui.negative.button:hover { + background-color: #991b1b !important; +} +.ui.secondary.vertical.menu { + border-radius: 0.28571429rem !important; + overflow: hidden; +} +.ui.secondary.vertical.menu > .item { + border-radius: 0 !important; +} +.ui.basic.primary.button.item { + background-color: var(--color-active) !important; + color: var(--color-text) !important; + box-shadow: none !important; +} +.ui.red.label.notification_count, +.ui.primary.label, +.ui.primary.labels .label { + background-color: var(--color-primary-light-3) !important; +} +.repository.view.issue .comment-list .code-comment + .code-comment { + margin: 1.25rem 0 !important; + padding-top: 1.25rem !important; + border-top-color: var(--steel-650) !important; +} +.ui.labeled.icon.buttons > .button > .icon, +.ui.labeled.icon.button > .icon { + background-color: rgba(0, 0, 0, 0.05) !important; +} +#review-box .review-comments-counter { + background-color: #00000088 !important; + color: #fff !important; + margin-left: 0.5em; +} +.ui.tabs .ui.primary.label, +.ui.menu .ui.primary.label { + background-color: rgba(192, 192, 255, 0.2) !important; + color: var(--color-text-dark) !important; +} +.ui.basic.yellow.label.pending-label { + background: var(--color-light) !important; +} +.ui.tertiary.button { + color: #fff9; +} +.ui.tertiary.button:hover { + color: #ccc; +} diff --git a/web_src/css/themes/theme-forgejo-light.css b/web_src/css/themes/theme-forgejo-light.css new file mode 100644 index 0000000000..664dadfdfd --- /dev/null +++ b/web_src/css/themes/theme-forgejo-light.css @@ -0,0 +1,251 @@ +:root { + --steel-900: #10161D; + --steel-850: #131A21; + --steel-800: #171E26; + --steel-750: #1D262F; + --steel-700: #242D38; + --steel-650: #2B3642; + --steel-600: #374351; + --steel-550: #445161; + --steel-500: #515F70; + --steel-450: #5F6E80; + --steel-400: #6D7D8F; + --steel-350: #7C8C9F; + --steel-300: #8C9CAF; + --steel-250: #9DADC0; + --steel-200: #AEBED0; + --steel-150: #C0CFE0; + --steel-100: #D2E0F0; + --zinc-50: #FAFAFA; + --zinc-100: #F4F4F5; + --zinc-150: #ECECEE; + --zinc-200: #E4E4E7; + --zinc-250: #DCDCE0; + --zinc-300: #D4D4D8; + --zinc-350: #BABAC1; + --zinc-400: #A1A1AA; + --zinc-450: #898992; + --zinc-500: #71717A; + --zinc-550: #61616A; + --zinc-600: #52525B; + --zinc-650: #484850; + --zinc-700: #3F3F46; + --zinc-750: #333338; + --zinc-800: #27272A; + --zinc-850: #1F1F23; + --zinc-900: #18181B; + --color-primary: #c2410c; + --color-primary-contrast: #ffffff; + --color-primary-dark-1: #c2410c; + --color-primary-dark-2: #9a3412; + --color-primary-dark-3: #9a3412; + --color-primary-dark-4: #7c2d12; + --color-primary-dark-5: #7c2d12; + --color-primary-dark-6: #7c2d12; + --color-primary-dark-7: #7c2d12; + --color-primary-light-1: #ea580c; + --color-primary-light-2: #f97316; + --color-primary-light-3: #fb923c; + --color-primary-light-4: #fdba74; + --color-primary-light-5: #fed7aa; + --color-primary-light-6: #ffedd5; + --color-primary-light-7: #fff7ed; + --color-primary-alpha-10: #c2410c19; + --color-primary-alpha-20: #c2410c33; + --color-primary-alpha-30: #c2410c4b; + --color-primary-alpha-40: #c2410c66; + --color-primary-alpha-50: #c2410c80; + --color-primary-alpha-60: #c2410c99; + --color-primary-alpha-70: #c2410cb3; + --color-primary-alpha-80: #c2410ccc; + --color-primary-alpha-90: #c2410ce1; + --color-secondary: var(--zinc-200); + --color-secondary-dark-1: var(--zinc-200); + --color-secondary-dark-2: var(--zinc-300); + --color-secondary-dark-3: var(--zinc-300); + --color-secondary-dark-4: var(--zinc-400); + --color-secondary-dark-5: var(--zinc-400); + --color-secondary-dark-6: var(--zinc-500); + --color-secondary-dark-7: var(--zinc-500); + --color-secondary-dark-8: var(--zinc-600); + --color-secondary-dark-9: var(--zinc-600); + --color-secondary-dark-10: var(--zinc-700); + --color-secondary-dark-11: var(--zinc-700); + --color-secondary-dark-12: var(--zinc-800); + --color-secondary-dark-13: var(--zinc-800); + --color-secondary-light-1: var(--zinc-200); + --color-secondary-light-2: var(--zinc-100); + --color-secondary-light-3: var(--zinc-100); + --color-secondary-light-4: var(--zinc-50); + --color-secondary-alpha-10: #d4d4d819; + --color-secondary-alpha-20: #d4d4d833; + --color-secondary-alpha-30: #d4d4d84b; + --color-secondary-alpha-40: #d4d4d866; + --color-secondary-alpha-50: #d4d4d880; + --color-secondary-alpha-60: #d4d4d899; + --color-secondary-alpha-70: #d4d4d8b3; + --color-secondary-alpha-80: #d4d4d8cc; + --color-secondary-alpha-90: #d4d4d8e1; + /* colors */ + --color-red: #dc2626; + --color-orange: #ea580c; + --color-yellow: #ca8a04; + --color-olive: #91a313; + --color-green: #15803d; + --color-teal: #0d9488; + --color-blue: #2563eb; + --color-violet: #7c3aed; + --color-purple: #9333ea; + --color-pink: #db2777; + --color-brown: #a47252; + --color-grey: #4b5563; + --color-black: #000000; + /* light variants */ + --color-red-light: #ef4444; + --color-orange-light: #f97316; + --color-yellow-light: #eab308; + --color-olive-light: #839311; + --color-green-light: #16a34a; + --color-teal-light: #14b8a6; + --color-blue-light: #3b82f6; + --color-violet-light: #8b5cf6; + --color-purple-light: #a855f7; + --color-pink-light: #ec4899; + --color-brown-light: #94674a; + --color-grey-light: #6b7280; + --color-black-light: #181818; + /* other colors */ + --color-gold: #b1983b; + --color-white: #ffffff; + --color-diff-removed-word-bg: #fca5a5; + --color-diff-added-word-bg: #86efac; + --color-diff-removed-row-bg: #fee2e2; + --color-diff-moved-row-bg: #fef9c3; + --color-diff-added-row-bg: #dcfce7; + --color-diff-removed-row-border: #fca5a5; + --color-diff-moved-row-border: #fde047; + --color-diff-added-row-border: #86efac; + --color-diff-inactive: var(--zinc-100); + --color-error-border: #fecaca; + --color-error-bg: #fee2e2; + --color-error-bg-active: #fca5a5; + --color-error-bg-hover: #fecaca; + --color-error-text: #7f1d1d; + --color-success-border: #bbf7d0; + --color-success-bg: #dcfce7; + --color-success-text: #14532d; + --color-warning-border: #fde047; + --color-warning-bg: #fef3c7; + --color-warning-text: #78350f; + --color-info-border: #bae6fd; + --color-info-bg: #e0f2fe; + --color-info-text: #0c4a6e; + --color-red-badge: #B91C1C; + --color-red-badge-bg: #B91C1C22; + --color-red-badge-hover-bg: #B91C1C44; + --color-green-badge: #16a34a; + --color-green-badge-bg: #16a34a22; + --color-green-badge-hover-bg: #16a34a44; + --color-yellow-badge: #ca8a04; + --color-yellow-badge-bg: #ca8a0422; + --color-yellow-badge-hover-bg: #ca8a0444; + --color-orange-badge: #ea580c; + --color-orange-badge-bg: #ea580c22; + --color-orange-badge-hover-bg: #ea580c44; + --color-git: #f05133; + /* target-based colors */ + --color-body: #fff; + --color-box-header: var(--zinc-100); + --color-box-body: var(--zinc-50); + --color-box-body-highlight: var(--zinc-200); + --color-text-dark: #000; + --color-text: var(--zinc-900); + --color-text-light: var(--zinc-700); + --color-text-light-1: var(--zinc-650); + --color-text-light-2: var(--zinc-600); + --color-text-light-3: var(--zinc-550); + --color-footer: var(--zinc-100); + --color-timeline: var(--zinc-200); + --color-input-text: var(--zinc-800); + --color-input-background: #fff; + --color-input-toggle-background: #fff; + --color-input-border: var(--zinc-300); + --color-input-border-hover: var(--zinc-400); + --color-navbar: var(--zinc-50); + --color-navbar-transparent: #D2E0F000; + --color-light: #ffffffcc; + --color-light-mimic-enabled: rgba(0, 0, 0, calc(6 / 255 * 222 / 255 / var(--opacity-disabled))); + --color-light-border: #0000001d; + --color-hover: #e4e4e4aa; + --color-active: #d4d4d8aa; + --color-menu: var(--zinc-100); + --color-card: var(--zinc-50); + --color-markup-table-row: #ffffff06; + --color-markup-code-block: var(--zinc-150); + --color-button: var(--zinc-150); + --color-code-bg: var(--zinc-50); + --color-code-sidebar-bg: var(--zinc-100); + --color-shadow: #00000060; + --color-secondary-bg: var(--zinc-100); + --color-text-focus: #fff; + --color-expand-button: var(--zinc-200); + --color-placeholder-text: var(--zinc-400); + --color-editor-line-highlight: var(--zinc-100); + --color-project-board-bg: var(--color-secondary-light-2); + --color-project-board-dark-label: var(--color-text-light-3); + --color-caret: var(--color-text); + /* should ideally be --color-text-dark, see #15651 */ + --color-reaction-bg: #0000000a; + --color-reaction-active-bg: var(--color-primary-alpha-20); + --color-header-bar: var(--zinc-100); + --color-label-active-bg: #4c525e; + --color-accent: var(--color-primary-light-1); + --color-small-accent: var(--color-primary-light-5); + --color-active-line: #534d1b; + accent-color: var(--color-accent); + color-scheme: light; +} +.text.green.svg { + color: #16a34a !important; +} +.ui.secondary.vertical.menu { + border-radius: 0.28571429rem !important; + overflow: hidden; +} +.ui.secondary.vertical.menu > .item { + border-radius: 0 !important; +} +.ui.basic.primary.button.item { + background-color: var(--color-active) !important; + color: var(--color-text) !important; + box-shadow: none !important; +} +.ui.red.label.notification_count, +.ui.primary.label, +.ui.primary.labels .label { + background-color: var(--color-primary-dark-1) !important; +} +.repository.view.issue .comment-list .code-comment + .code-comment { + margin: 1.25rem 0 !important; + padding-top: 1.25rem !important; + border-top-color: var(--zinc-250) !important; +} +.ui.labeled.icon.buttons > .button > .icon, +.ui.labeled.icon.button > .icon { + background-color: rgba(0, 0, 0, 0.05) !important; +} +#review-box .review-comments-counter { + background-color: #ffffffaa !important; + color: #000 !important; + margin-left: 0.5em; +} +.ui.tabs .ui.primary.label, +.ui.menu .ui.primary.label { + background-color: rgba(0, 0, 0, 0.15) !important; + color: var(--color-text-dark) !important; +} +.ui.basic.yellow.label.pending-label { + background: var(--color-warning-bg) !important; + color: var(--color-warning-text) !important; + border-color: #eab308 !important; +} From b95f9b3142089d90df93708638b2ae6c857dbc87 Mon Sep 17 00:00:00 2001 From: Caesar Schinas Date: Wed, 28 Dec 2022 00:28:39 -1000 Subject: [PATCH 09/24] [BRANDING] Rebrand default meta tags (cherry picked from commit b1a792b63547df1471a125c2384a9623ffae409e) (cherry picked from commit ba71acccdb8eb4d1c87b50708fe3b03a3324dd9c) (cherry picked from commit ef58efb8e0c48a782e01aac8d754e70b7611a2c8) (cherry picked from commit 6a1b08241ebb862bdd39c708852e3e23c4d96c9d) (cherry picked from commit 132c7a3a07d5a11b9b165295ef12111ce74aea70) (cherry picked from commit a1f07975d67ceccedc808ddaf657f8e7e0da74b1) (cherry picked from commit f3793598b24d00ca3ae80dbde4ef9909b298ca03) (cherry picked from commit 60f38116afc60b055c6b40be8a1e94f646252bf6) (cherry picked from commit 88884cf2833429749b9a6ec6110b4c4727304903) (cherry picked from commit 520de41aefa6c1f5c939b2345878697094962812) (cherry picked from commit cfd5e5b95ab081d10d4f5d6022d09db4877f51fc) (cherry picked from commit 5cf1738f0a08d99aba2016100f3f0083b51efcf4) --- modules/setting/ui.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/setting/ui.go b/modules/setting/ui.go index c108ff85f6..294fc96452 100644 --- a/modules/setting/ui.go +++ b/modules/setting/ui.go @@ -126,9 +126,9 @@ var UI = struct { Description string Keywords string }{ - Author: "Gitea - Git with a cup of tea", - Description: "Gitea (Git with a cup of tea) is a painless self-hosted Git service written in Go", - Keywords: "go,git,self-hosted,gitea", + Author: "Forgejo – Beyond coding. We forge.", + Description: "Forgejo is a self-hosted lightweight software forge. Easy to install and low maintenance, it just does the job.", + Keywords: "git,forge,forgejo", }, } From 7af742a28469d6725248d5519e69217b844ed792 Mon Sep 17 00:00:00 2001 From: TomZ Date: Mon, 9 Jan 2023 14:01:00 +0100 Subject: [PATCH 10/24] [BRANDING] cosmetic s/Gitea/Forgejo/ in logs, messages, etc. As the docs of codeberg refer to the strings printed by the Forgejo ssh servers, this is user-facing and is nice to update to the new product name. (cherry picked from commit 103991d73f0f78f31a5f1dae47824c2fe481bcc6) (cherry picked from commit 2a0d3f85f199d28a4180becdebcb90af0d6f3504) (cherry picked from commit eb2b4ce388810dc145dd90d3358d4d4373e31b80) (cherry picked from commit 0998b51716ef5d3c25e139886aa8b7bfde703b20) [BRANDING] forgejo log message (cherry picked from commit d51a046ebe774236f8b902c45486dc8cbd041e0e) (cherry picked from commit d66e1c7b6e2fbfefb976103805b18eb29b6406af) (cherry picked from commit b5bffe4ce8a8353c9e5529350a7932d4a2d9e53e) (cherry picked from commit 3fa776d8566c42ce31540024ce5bf5a6cb5cd4e4) (cherry picked from commit 18d064f47214327dc5b6c55c2d02a3da53358dbc) (cherry picked from commit c95094e355212d4baf607f3778152ceb455d4f82) (cherry picked from commit 5784290bc46afffca9b93e0faa3bd88944e54919) (cherry picked from commit aee336886b2606beaf8c27a2992c21aa2a574966) (cherry picked from commit ec2f60b516b1ee11b5e7c52ecb02fdf8e5bbcaec) --- cmd/serv.go | 8 ++++---- modules/setting/log.go | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/cmd/serv.go b/cmd/serv.go index a79f314d00..0f5a51f8e6 100644 --- a/cmd/serv.go +++ b/cmd/serv.go @@ -171,13 +171,13 @@ func runServ(c *cli.Context) error { } switch key.Type { case asymkey_model.KeyTypeDeploy: - println("Hi there! You've successfully authenticated with the deploy key named " + key.Name + ", but Gitea does not provide shell access.") + println("Hi there! You've successfully authenticated with the deploy key named " + key.Name + ", but Forgejo does not provide shell access.") case asymkey_model.KeyTypePrincipal: - println("Hi there! You've successfully authenticated with the principal " + key.Content + ", but Gitea does not provide shell access.") + println("Hi there! You've successfully authenticated with the principal " + key.Content + ", but Forgejo does not provide shell access.") default: - println("Hi there, " + user.Name + "! You've successfully authenticated with the key named " + key.Name + ", but Gitea does not provide shell access.") + println("Hi there, " + user.Name + "! You've successfully authenticated with the key named " + key.Name + ", but Forgejo does not provide shell access.") } - println("If this is unexpected, please log in with password and setup Gitea under another user.") + println("If this is unexpected, please log in with password and setup Forgejo under another user.") return nil } else if c.Bool("debug") { log.Debug("SSH_ORIGINAL_COMMAND: %s", os.Getenv("SSH_ORIGINAL_COMMAND")) diff --git a/modules/setting/log.go b/modules/setting/log.go index d9a9e5af8f..fc076bbf29 100644 --- a/modules/setting/log.go +++ b/modules/setting/log.go @@ -238,7 +238,7 @@ func generateLogConfig(sec ConfigSection, name string, defaults defaultLogOption sendTos[i] = strings.TrimSpace(address) } logConfig["sendTos"] = sendTos - logConfig["subject"] = sec.Key("SUBJECT").MustString("Diagnostic message from Gitea") + logConfig["subject"] = sec.Key("SUBJECT").MustString("Diagnostic message from Forgejo") } logConfig["colorize"] = sec.Key("COLORIZE").MustBool(false) @@ -328,7 +328,7 @@ func initLogFrom(rootCfg ConfigProvider) { Provider: provider, Config: config, }) - log.Info("Gitea Log Mode: %s(%s:%s)", util.ToTitleCase(name), util.ToTitleCase(provider), levelName) + log.Info("Forgejo Log Mode: %s(%s:%s)", util.ToTitleCase(name), util.ToTitleCase(provider), levelName) } AddLogDescription(log.DEFAULT, &description) From 8e57e688637b9fbd3c33d3e38aed8768a2c07208 Mon Sep 17 00:00:00 2001 From: Gusted Date: Mon, 9 Jan 2023 22:28:04 +0100 Subject: [PATCH 11/24] [BRANDING] Replace branding in Swagger - "Gitea" is automatically being determined in Swagger and cannot be overridden, therefor we override it after `swagger generate spec` is run. - Resolves https://codeberg.org/forgejo/forgejo/issues/226 (cherry picked from commit 0b453807656b6fbe54284d865e59880460f3d253) [BRANDING] Change Swagger title to Forgejo API (cherry picked from commit 79f6a70b53421be9984a9ad96ebd0d06ab5af02e) (cherry picked from commit 6cd47afe3366a615d40655a435275d5543910065) (cherry picked from commit a7ae2e4c09431cd7a1f18c5b87b9dd87981b538d) (cherry picked from commit 59f837e4661233dafc202ded9ad907dbdf7e3e69) (cherry picked from commit c1c3d1f0e63b880baa32d285d3eba6034137b45a) (cherry picked from commit 4b088713fb0a55c2c37f734ce82f13190ca412dd) (cherry picked from commit 3df1d2137112a95279a8c84a8601e4c137d75d4f) (cherry picked from commit a4a5fdbde4f9ebbf5ba6ba66c8f20a89e54860de) (cherry picked from commit 57aa9ed710a95aa51ae3824873c3766b38da7850) (cherry picked from commit 948b49bf9449af744a1f2e1324187897ed1c0809) (cherry picked from commit be4929ab6a802d7d748f537ab8b798e30588c1d4) (cherry picked from commit 9ecb507457d8a6aa60713762a1a5d2995ed986e5) Conflicts: templates/swagger/ui.tmpl --- Makefile | 2 ++ templates/swagger/ui.tmpl | 2 +- templates/swagger/v1_json.tmpl | 4 ++-- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index 1111022e3c..6e8b2eba9f 100644 --- a/Makefile +++ b/Makefile @@ -163,6 +163,7 @@ SWAGGER_SPEC_S_TMPL := s|"basePath": *"/api/v1"|"basePath": "{{AppSubUrl \| JSEs SWAGGER_SPEC_S_JSON := s|"basePath": *"{{AppSubUrl \| JSEscape \| Safe}}/api/v1"|"basePath": "/api/v1"|g SWAGGER_EXCLUDE := code.gitea.io/sdk SWAGGER_NEWLINE_COMMAND := -e '$$a\' +SWAGGER_SPEC_BRANDING := s|Gitea API|Forgejo API|g TEST_MYSQL_HOST ?= mysql:3306 TEST_MYSQL_DBNAME ?= testgitea @@ -347,6 +348,7 @@ $(SWAGGER_SPEC): $(GO_SOURCES_NO_BINDATA) $(GO) run $(SWAGGER_PACKAGE) generate spec -x "$(SWAGGER_EXCLUDE)" -o './$(SWAGGER_SPEC)' $(SED_INPLACE) '$(SWAGGER_SPEC_S_TMPL)' './$(SWAGGER_SPEC)' $(SED_INPLACE) $(SWAGGER_NEWLINE_COMMAND) './$(SWAGGER_SPEC)' + $(SED_INPLACE) '$(SWAGGER_SPEC_BRANDING)' './$(SWAGGER_SPEC)' .PHONY: swagger-check swagger-check: generate-swagger diff --git a/templates/swagger/ui.tmpl b/templates/swagger/ui.tmpl index e2324f9b5b..355169f007 100644 --- a/templates/swagger/ui.tmpl +++ b/templates/swagger/ui.tmpl @@ -1,7 +1,7 @@ - Gitea API + Forgejo API diff --git a/templates/swagger/v1_json.tmpl b/templates/swagger/v1_json.tmpl index 3859eb5567..4536b62a14 100644 --- a/templates/swagger/v1_json.tmpl +++ b/templates/swagger/v1_json.tmpl @@ -13,8 +13,8 @@ ], "swagger": "2.0", "info": { - "description": "This documentation describes the Gitea API.", - "title": "Gitea API.", + "description": "This documentation describes the Forgejo API.", + "title": "Forgejo API.", "license": { "name": "MIT", "url": "http://opensource.org/licenses/MIT" From f4b6fa7a937cb4bfcb3623d4e13fce76e76c069e Mon Sep 17 00:00:00 2001 From: Earl Warren Date: Thu, 12 Jan 2023 22:56:56 +0100 Subject: [PATCH 12/24] [BRANDING] parse FORGEJO__* in the container environment Add the FORGEJO__ prefix as equivalent to GITEA__ when interpreted by environment-to-ini. It is used when running the Forgejo container like so: docker run --name forgejo -e FORGEJO__security__INSTALL_LOCK=true \ -d codeberg.org/forgejo/forgejo:1.18 Signed-off-by: Earl Warren (cherry picked from commit 6cd61e2ab701ae9236ff9a68520ee1e2d03e6193) (cherry picked from commit 62cae8cc6a6ddc9e5bb066c81834b75cef3be29f) (cherry picked from commit aee1afc5097531b2740b2aa8ef4aef745e7a1be0) (cherry picked from commit 6ba563cd9b09d012a804f3f438c5ae4e38ca6ced) (cherry picked from commit 6429b20f4a1561480a4a0c214cc571f79c313be0) (cherry picked from commit dd545aa077e21616b406d765b19a75df643a9695) (cherry picked from commit 63a00e573e2d6b6bfb75d28a816327435bace02d) (cherry picked from commit 8e35a50b91fcec0b27b6b5458facb12e9bda8505) (cherry picked from commit 26e8fb6cd953a6c9dfae89b430856895c7253a7c) (cherry picked from commit 56bbf644beb25f62964b2c0c847d7b9d711ed56e) (cherry picked from commit 4d0a8c8640fee94ddffad2250ce5619d4894d3d3) (cherry picked from commit b58f775fa22116334d5e0d7114c5d37d96693471) --- .woodpecker/testing-amd64.yml | 8 ++++ .../environment-to-ini/environment-to-ini.go | 48 ++++++++++--------- .../environment-to-ini_test.go | 21 ++++++++ 3 files changed, 55 insertions(+), 22 deletions(-) create mode 100644 contrib/environment-to-ini/environment-to-ini_test.go diff --git a/.woodpecker/testing-amd64.yml b/.woodpecker/testing-amd64.yml index 340ee55736..94fd9e1844 100644 --- a/.woodpecker/testing-amd64.yml +++ b/.woodpecker/testing-amd64.yml @@ -75,6 +75,14 @@ pipeline: commands: - ./build/test-env-prepare.sh + environment-to-ini: + image: *golang_image + environment: + GOPROXY_OVERRIDE: *goproxy_override + commands: + - *goproxy_setup + - go test contrib/environment-to-ini/environment-to-ini.go contrib/environment-to-ini/environment-to-ini_test.go + build: image: *test_image environment: diff --git a/contrib/environment-to-ini/environment-to-ini.go b/contrib/environment-to-ini/environment-to-ini.go index b502c15cec..1b8b63faaa 100644 --- a/contrib/environment-to-ini/environment-to-ini.go +++ b/contrib/environment-to-ini/environment-to-ini.go @@ -1,3 +1,4 @@ +// Copyright 2023 The Forgejo Authors. All rights reserved. // Copyright 2019 The Gitea Authors. All rights reserved. // SPDX-License-Identifier: MIT @@ -18,17 +19,17 @@ import ( ) // EnvironmentPrefix environment variables prefixed with this represent ini values to write -const EnvironmentPrefix = "GITEA" +const prefixRegexpString = "^(FORGEJO|GITEA)" func main() { app := cli.NewApp() app.Name = "environment-to-ini" app.Usage = "Use provided environment to update configuration ini" - app.Description = `As a helper to allow docker users to update the gitea configuration + app.Description = `As a helper to allow docker users to update the forgejo configuration through the environment, this command allows environment variables to be mapped to values in the ini. - Environment variables of the form "GITEA__SECTION_NAME__KEY_NAME" + Environment variables of the form "FORGEJO__SECTION_NAME__KEY_NAME" will be mapped to the ini section "[section_name]" and the key "KEY_NAME" with the value as provided. @@ -46,9 +47,8 @@ func main() { ... """ - You would set the environment variables: "GITEA__LOG_0x2E_CONSOLE__COLORIZE=false" - and "GITEA__LOG_0x2E_CONSOLE__STDERR=false". Other examples can be found - on the configuration cheat sheet.` + You would set the environment variables: "FORGEJO__LOG_0x2E_CONSOLE__COLORIZE=false" + and "FORGEJO__LOG_0x2E_CONSOLE__STDERR=false".` app.Flags = []cli.Flag{ cli.StringFlag{ Name: "custom-path, C", @@ -76,7 +76,7 @@ func main() { }, cli.StringFlag{ Name: "prefix, p", - Value: EnvironmentPrefix, + Value: prefixRegexpString, Usage: "Environment prefix to look for - will be suffixed by __ (2 underscores)", }, } @@ -89,6 +89,19 @@ func main() { } } +func splitEnvironmentVariable(prefixRegexp *regexp.Regexp, kv string) (string, string) { + idx := strings.IndexByte(kv, '=') + if idx < 0 { + return "", "" + } + k := kv[:idx] + loc := prefixRegexp.FindStringIndex(k) + if loc == nil { + return "", "" + } + return k[loc[1]:], kv[idx+1:] +} + func runEnvironmentToIni(c *cli.Context) error { providedCustom := c.String("custom-path") providedConf := c.String("config") @@ -111,19 +124,13 @@ func runEnvironmentToIni(c *cli.Context) error { changed := false - prefix := c.String("prefix") + "__" + prefixRegexp := regexp.MustCompile(c.String("prefix") + "__") for _, kv := range os.Environ() { - idx := strings.IndexByte(kv, '=') - if idx < 0 { + eKey, value := splitEnvironmentVariable(prefixRegexp, kv) + if eKey == "" { continue } - eKey := kv[:idx] - value := kv[idx+1:] - if !strings.HasPrefix(eKey, prefix) { - continue - } - eKey = eKey[len(prefix):] sectionName, keyName := DecodeSectionKey(eKey) if len(keyName) == 0 { continue @@ -163,14 +170,11 @@ func runEnvironmentToIni(c *cli.Context) error { } if c.Bool("clear") { for _, kv := range os.Environ() { - idx := strings.IndexByte(kv, '=') - if idx < 0 { + eKey, _ := splitEnvironmentVariable(prefixRegexp, kv) + if eKey == "" { continue } - eKey := kv[:idx] - if strings.HasPrefix(eKey, prefix) { - _ = os.Unsetenv(eKey) - } + _ = os.Unsetenv(eKey) } } return nil diff --git a/contrib/environment-to-ini/environment-to-ini_test.go b/contrib/environment-to-ini/environment-to-ini_test.go new file mode 100644 index 0000000000..6abbb67eff --- /dev/null +++ b/contrib/environment-to-ini/environment-to-ini_test.go @@ -0,0 +1,21 @@ +// Copyright 2023 The Forgejo Authors. All rights reserved. +// SPDX-License-Identifier: MIT + +package main + +import ( + "regexp" + "testing" + + "github.com/stretchr/testify/assert" +) + +func Test_splitEnvironmentVariable(t *testing.T) { + prefixRegexp := regexp.MustCompile(prefixRegexpString + "__") + k, v := splitEnvironmentVariable(prefixRegexp, "FORGEJO__KEY=VALUE") + assert.Equal(t, k, "KEY") + assert.Equal(t, v, "VALUE") + k, v = splitEnvironmentVariable(prefixRegexp, "nothing=interesting") + assert.Equal(t, k, "") + assert.Equal(t, v, "") +} From a55a9567d36f6b60557df3df3a0801c0fccec963 Mon Sep 17 00:00:00 2001 From: Earl Warren Date: Sat, 14 Jan 2023 08:16:30 +0100 Subject: [PATCH 13/24] [BRANDING] add X-Forgejo-* headers (cherry picked from commit 0a3388f93f53f53cce79ebcc194d67979cbe61cc) (cherry picked from commit 7eba0a440a3138443d0b7461560f9f6f1c46b256) (cherry picked from commit eb9646c7ef0b1a9e73bf22806acbc2caeaee7ff3) (cherry picked from commit f1972578f5cb72ad9e1ef1ded9aa324b1d669864) Conflicts: (cherry picked from commit 7f96222fb4b4a773193a11d4ba76f449013c30ef) (cherry picked from commit e3c7c9fe7b5809cdb75f1eb629c82b27986f7e98) (cherry picked from commit 84fdead90242e68493efb96a7fee1e3b5fd417e9) (cherry picked from commit 85148e11961b86269b7cda30294a4cdc817787d0) (cherry picked from commit c0086bd70d39d9a1075fa624cdbfdf5ef26f7a2c) (cherry picked from commit d1e31ef31817e5e811f6bea7aee5582383d53b12) (cherry picked from commit 681d3ed5c43d45f802dc13c58c5b821da938374d) (cherry picked from commit 76a3001f5bc5a064054514c179ba14008952e914) --- modules/httpcache/httpcache.go | 1 + modules/httpcache/httpcache_test.go | 3 +++ routers/api/v1/api.go | 2 +- routers/api/v1/repo/file.go | 7 ++++++- services/mailer/mail.go | 10 ++++++++++ services/webhook/deliver.go | 4 ++++ 6 files changed, 25 insertions(+), 2 deletions(-) diff --git a/modules/httpcache/httpcache.go b/modules/httpcache/httpcache.go index 001ac06415..79facbc15e 100644 --- a/modules/httpcache/httpcache.go +++ b/modules/httpcache/httpcache.go @@ -30,6 +30,7 @@ func SetCacheControlInHeader(h http.Header, maxAge time.Duration, additionalDire // to remind users they are using non-prod setting. h.Set("X-Gitea-Debug", "RUN_MODE="+setting.RunMode) + h.Set("X-Forgejo-Debug", "RUN_MODE="+setting.RunMode) } h.Set("Cache-Control", strings.Join(append(directives, additionalDirectives...), ", ")) diff --git a/modules/httpcache/httpcache_test.go b/modules/httpcache/httpcache_test.go index d81f06097c..65a8a9b8fb 100644 --- a/modules/httpcache/httpcache_test.go +++ b/modules/httpcache/httpcache_test.go @@ -18,6 +18,9 @@ func countFormalHeaders(h http.Header) (c int) { if strings.HasPrefix(k, "X-Gitea-") { continue } + if strings.HasPrefix(k, "X-Forgejo-") { + continue + } c++ } return c diff --git a/routers/api/v1/api.go b/routers/api/v1/api.go index a67a5420ac..0f7a5e7eb3 100644 --- a/routers/api/v1/api.go +++ b/routers/api/v1/api.go @@ -675,7 +675,7 @@ func Routes(ctx gocontext.Context) *web.Route { // setting.CORSConfig.AllowSubdomain // FIXME: the cors middleware needs allowSubdomain option AllowedMethods: setting.CORSConfig.Methods, AllowCredentials: setting.CORSConfig.AllowCredentials, - AllowedHeaders: append([]string{"Authorization", "X-Gitea-OTP"}, setting.CORSConfig.Headers...), + AllowedHeaders: append([]string{"Authorization", "X-Gitea-OTP", "X-Forgejo-OTP"}, setting.CORSConfig.Headers...), MaxAge: int(setting.CORSConfig.MaxAge.Seconds()), })) } diff --git a/routers/api/v1/repo/file.go b/routers/api/v1/repo/file.go index eb63dda590..ed73cb6024 100644 --- a/routers/api/v1/repo/file.go +++ b/routers/api/v1/repo/file.go @@ -32,7 +32,10 @@ import ( files_service "code.gitea.io/gitea/services/repository/files" ) -const giteaObjectTypeHeader = "X-Gitea-Object-Type" +const ( + giteaObjectTypeHeader = "X-Gitea-Object-Type" + forgejoObjectTypeHeader = "X-Forgejo-Object-Type" +) // GetRawFile get a file by path on a repository func GetRawFile(ctx *context.APIContext) { @@ -79,6 +82,7 @@ func GetRawFile(ctx *context.APIContext) { } ctx.RespHeader().Set(giteaObjectTypeHeader, string(files_service.GetObjectTypeFromTreeEntry(entry))) + ctx.RespHeader().Set(forgejoObjectTypeHeader, string(files_service.GetObjectTypeFromTreeEntry(entry))) if err := common.ServeBlob(ctx.Context, blob, lastModified); err != nil { ctx.Error(http.StatusInternalServerError, "ServeBlob", err) @@ -128,6 +132,7 @@ func GetRawFileOrLFS(ctx *context.APIContext) { } ctx.RespHeader().Set(giteaObjectTypeHeader, string(files_service.GetObjectTypeFromTreeEntry(entry))) + ctx.RespHeader().Set(forgejoObjectTypeHeader, string(files_service.GetObjectTypeFromTreeEntry(entry))) // LFS Pointer files are at most 1024 bytes - so any blob greater than 1024 bytes cannot be an LFS file if blob.Size() > 1024 { diff --git a/services/mailer/mail.go b/services/mailer/mail.go index 351b79b5df..030491a467 100644 --- a/services/mailer/mail.go +++ b/services/mailer/mail.go @@ -415,6 +415,16 @@ func generateAdditionalHeaders(ctx *mailCommentContext, reason string, recipient "X-Gitea-Issue-ID": strconv.FormatInt(ctx.Issue.Index, 10), "X-Gitea-Issue-Link": ctx.Issue.HTMLURL(), + "X-Forgejo-Reason": reason, + "X-Forgejo-Sender": ctx.Doer.DisplayName(), + "X-Forgejo-Recipient": recipient.DisplayName(), + "X-Forgejo-Recipient-Address": recipient.Email, + "X-Forgejo-Repository": repo.Name, + "X-Forgejo-Repository-Path": repo.FullName(), + "X-Forgejo-Repository-Link": repo.HTMLURL(), + "X-Forgejo-Issue-ID": strconv.FormatInt(ctx.Issue.Index, 10), + "X-Forgejo-Issue-Link": ctx.Issue.HTMLURL(), + "X-GitHub-Reason": reason, "X-GitHub-Sender": ctx.Doer.DisplayName(), "X-GitHub-Recipient": recipient.DisplayName(), diff --git a/services/webhook/deliver.go b/services/webhook/deliver.go index e817783e55..0c045e7eca 100644 --- a/services/webhook/deliver.go +++ b/services/webhook/deliver.go @@ -123,6 +123,10 @@ func Deliver(ctx context.Context, t *webhook_model.HookTask) error { event := t.EventType.Event() eventType := string(t.EventType) + req.Header.Add("X-Forgejo-Delivery", t.UUID) + req.Header.Add("X-Forgejo-Event", event) + req.Header.Add("X-Forgejo-Event-Type", eventType) + req.Header.Add("X-Forgejo-Signature", signatureSHA256) req.Header.Add("X-Gitea-Delivery", t.UUID) req.Header.Add("X-Gitea-Event", event) req.Header.Add("X-Gitea-Event-Type", eventType) From 9394e55fdf80bf3d7bf8b2aba561ad44a84e3913 Mon Sep 17 00:00:00 2001 From: Earl Warren Date: Sat, 14 Jan 2023 10:07:01 +0100 Subject: [PATCH 14/24] [BRANDING] define the forgejo webhook type templates/swagger/v1_json.tmpl updated with `make generate-swagger` (cherry picked from commit 88899c492efeedd138ba088a36b9c0bc733ead7b) (cherry picked from commit 7171bd9617c32c4911e3bdbc23c02a19e80d2465) (cherry picked from commit 1a742446c17aef9ca62fe75bfc0a388d40138154) (cherry picked from commit d7c189d7b2f9fea299a31adf068db969920ae39d) Conflicts: routers/web/web.go (cherry picked from commit cbdea868e41fb38ca491f8b449c3e525ec82d6b9) (cherry picked from commit 6cd150483b06e17aee023c0afd01a3f2460b3415) (cherry picked from commit 47246da8d3f50a02d11b77b3d402618b144aa720) (cherry picked from commit f2aa0e6b769d432e627798bcf294b04b7d253213) (cherry picked from commit 5a4fc69a16de8d6199ea24198299297ef7a3587b) (cherry picked from commit 48e444ca09c22f930514a01846b0c8bc3cef35ab) (cherry picked from commit 888e53781175d8d977f66d78991bd66563fcddfb) (cherry picked from commit 5121f493c99f19d8050aa09224ac3532b4100ec7) --- modules/setting/webhook.go | 2 +- modules/structs/hook.go | 2 +- modules/webhook/type.go | 1 + routers/web/repo/webhook.go | 28 +++++++++++++ routers/web/web.go | 2 + services/webhook/webhook.go | 4 +- templates/admin/hook_new.tmpl | 7 +++- templates/org/settings/hook_new.tmpl | 6 ++- .../repo/settings/webhook/base_list.tmpl | 5 ++- templates/repo/settings/webhook/forgejo.tmpl | 40 +++++++++++++++++++ templates/repo/settings/webhook/new.tmpl | 7 +++- templates/swagger/v1_json.tmpl | 1 + templates/user/settings/hook_new.tmpl | 4 +- tests/integration/links_test.go | 30 ++++++++++++++ 14 files changed, 127 insertions(+), 12 deletions(-) create mode 100644 templates/repo/settings/webhook/forgejo.tmpl diff --git a/modules/setting/webhook.go b/modules/setting/webhook.go index c01261dbbd..b56c55c439 100644 --- a/modules/setting/webhook.go +++ b/modules/setting/webhook.go @@ -35,7 +35,7 @@ func loadWebhookFrom(rootCfg ConfigProvider) { Webhook.DeliverTimeout = sec.Key("DELIVER_TIMEOUT").MustInt(5) Webhook.SkipTLSVerify = sec.Key("SKIP_TLS_VERIFY").MustBool() Webhook.AllowedHostList = sec.Key("ALLOWED_HOST_LIST").MustString("") - Webhook.Types = []string{"gitea", "gogs", "slack", "discord", "dingtalk", "telegram", "msteams", "feishu", "matrix", "wechatwork", "packagist"} + Webhook.Types = []string{"forgejo", "gitea", "gogs", "slack", "discord", "dingtalk", "telegram", "msteams", "feishu", "matrix", "wechatwork", "packagist"} Webhook.PagingNum = sec.Key("PAGING_NUM").MustInt(10) Webhook.ProxyURL = sec.Key("PROXY_URL").MustString("") if Webhook.ProxyURL != "" { diff --git a/modules/structs/hook.go b/modules/structs/hook.go index df5da6790f..5055561a4b 100644 --- a/modules/structs/hook.go +++ b/modules/structs/hook.go @@ -40,7 +40,7 @@ type CreateHookOptionConfig map[string]string // CreateHookOption options when create a hook type CreateHookOption struct { // required: true - // enum: dingtalk,discord,gitea,gogs,msteams,slack,telegram,feishu,wechatwork,packagist + // enum: forgejo,dingtalk,discord,gitea,gogs,msteams,slack,telegram,feishu,wechatwork,packagist Type string `json:"type" binding:"Required"` // required: true Config CreateHookOptionConfig `json:"config" binding:"Required"` diff --git a/modules/webhook/type.go b/modules/webhook/type.go index db4ab17931..fac5590e21 100644 --- a/modules/webhook/type.go +++ b/modules/webhook/type.go @@ -71,6 +71,7 @@ type HookType = string // Types of webhooks const ( + FORGEJO HookType = "forgejo" GITEA HookType = "gitea" GOGS HookType = "gogs" SLACK HookType = "slack" diff --git a/routers/web/repo/webhook.go b/routers/web/repo/webhook.go index 46b0f49108..4d1337a535 100644 --- a/routers/web/repo/webhook.go +++ b/routers/web/repo/webhook.go @@ -307,6 +307,34 @@ func editWebhook(ctx *context.Context, params webhookParams) { ctx.Redirect(fmt.Sprintf("%s/%d", orCtx.Link, w.ID)) } +// ForgejoHooksNewPost response for creating Forgejo webhook +func ForgejoHooksNewPost(ctx *context.Context) { + createWebhook(ctx, forgejoHookParams(ctx)) +} + +// ForgejoHooksEditPost response for editing Forgejo webhook +func ForgejoHooksEditPost(ctx *context.Context) { + editWebhook(ctx, forgejoHookParams(ctx)) +} + +func forgejoHookParams(ctx *context.Context) webhookParams { + form := web.GetForm(ctx).(*forms.NewWebhookForm) + + contentType := webhook.ContentTypeJSON + if webhook.HookContentType(form.ContentType) == webhook.ContentTypeForm { + contentType = webhook.ContentTypeForm + } + + return webhookParams{ + Type: webhook_module.FORGEJO, + URL: form.PayloadURL, + ContentType: contentType, + Secret: form.Secret, + HTTPMethod: form.HTTPMethod, + WebhookForm: form.WebhookForm, + } +} + // GiteaHooksNewPost response for creating Gitea webhook func GiteaHooksNewPost(ctx *context.Context) { createWebhook(ctx, giteaHookParams(ctx)) diff --git a/routers/web/web.go b/routers/web/web.go index a5c57b02d5..391dbd6201 100644 --- a/routers/web/web.go +++ b/routers/web/web.go @@ -286,6 +286,7 @@ func registerRoutes(m *web.Route) { addWebhookAddRoutes := func() { m.Get("/{type}/new", repo.WebhooksNew) + m.Post("/forgejo/new", web.Bind(forms.NewWebhookForm{}), repo.ForgejoHooksNewPost) m.Post("/gitea/new", web.Bind(forms.NewWebhookForm{}), repo.GiteaHooksNewPost) m.Post("/gogs/new", web.Bind(forms.NewGogshookForm{}), repo.GogsHooksNewPost) m.Post("/slack/new", web.Bind(forms.NewSlackHookForm{}), repo.SlackHooksNewPost) @@ -300,6 +301,7 @@ func registerRoutes(m *web.Route) { } addWebhookEditRoutes := func() { + m.Post("/forgejo/{id}", web.Bind(forms.NewWebhookForm{}), repo.ForgejoHooksEditPost) m.Post("/gitea/{id}", web.Bind(forms.NewWebhookForm{}), repo.GiteaHooksEditPost) m.Post("/gogs/{id}", web.Bind(forms.NewGogshookForm{}), repo.GogsHooksEditPost) m.Post("/slack/{id}", web.Bind(forms.NewSlackHookForm{}), repo.SlackHooksEditPost) diff --git a/services/webhook/webhook.go b/services/webhook/webhook.go index 3cd9deafd8..4f77e23efc 100644 --- a/services/webhook/webhook.go +++ b/services/webhook/webhook.go @@ -69,7 +69,7 @@ var webhooks = map[webhook_module.HookType]*webhook{ // IsValidHookTaskType returns true if a webhook registered func IsValidHookTaskType(name string) bool { - if name == webhook_module.GITEA || name == webhook_module.GOGS { + if name == webhook_module.FORGEJO || name == webhook_module.GITEA || name == webhook_module.GOGS { return true } _, ok := webhooks[name] @@ -172,7 +172,7 @@ func PrepareWebhook(ctx context.Context, w *webhook_model.Webhook, event webhook // Avoid sending "0 new commits" to non-integration relevant webhooks (e.g. slack, discord, etc.). // Integration webhooks (e.g. drone) still receive the required data. if pushEvent, ok := p.(*api.PushPayload); ok && - w.Type != webhook_module.GITEA && w.Type != webhook_module.GOGS && + w.Type != webhook_module.FORGEJO && w.Type != webhook_module.GITEA && w.Type != webhook_module.GOGS && len(pushEvent.Commits) == 0 { return nil } diff --git a/templates/admin/hook_new.tmpl b/templates/admin/hook_new.tmpl index 1abdd4c813..f1ec14f68c 100644 --- a/templates/admin/hook_new.tmpl +++ b/templates/admin/hook_new.tmpl @@ -11,8 +11,10 @@ {{.locale.Tr "admin.defaulthooks.update_webhook"}} {{end}}
- {{if eq .HookType "gitea"}} - + {{if eq .HookType "forgejo"}} + + {{else if eq .HookType "gitea"}} + {{else if eq .HookType "gogs"}} {{else if eq .HookType "slack"}} @@ -37,6 +39,7 @@
+ {{template "repo/settings/webhook/forgejo" .}} {{template "repo/settings/webhook/gitea" .}} {{template "repo/settings/webhook/gogs" .}} {{template "repo/settings/webhook/slack" .}} diff --git a/templates/org/settings/hook_new.tmpl b/templates/org/settings/hook_new.tmpl index 1bf74fb7ba..da1813b001 100644 --- a/templates/org/settings/hook_new.tmpl +++ b/templates/org/settings/hook_new.tmpl @@ -3,8 +3,10 @@

{{if .PageIsSettingsHooksNew}}{{.locale.Tr "repo.settings.add_webhook"}}{{else}}{{.locale.Tr "repo.settings.update_webhook"}}{{end}}
- {{if eq .HookType "gitea"}} - + {{if eq .HookType "forgejo"}} + + {{else if eq .HookType "gitea"}} + {{else if eq .HookType "gogs"}} {{else if eq .HookType "slack"}} diff --git a/templates/repo/settings/webhook/base_list.tmpl b/templates/repo/settings/webhook/base_list.tmpl index 663fde1528..1dff04c7d0 100644 --- a/templates/repo/settings/webhook/base_list.tmpl +++ b/templates/repo/settings/webhook/base_list.tmpl @@ -4,8 +4,11 @@