aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--CREDITS.md560
-rwxr-xr-xscripts/generate-code-contributors.ts199
-rw-r--r--shared/extra-utils/cli/cli.ts2
3 files changed, 447 insertions, 314 deletions
diff --git a/CREDITS.md b/CREDITS.md
index 5e14bcc4e..30105c2fa 100644
--- a/CREDITS.md
+++ b/CREDITS.md
@@ -1,262 +1,314 @@
1# Code contributors 1# Code & Translators contributors
2 2
3 * [Chocobozzz](https://github.com/Chocobozzz) 3 * Chocobozzz
4 * [rigelk](https://github.com/rigelk) 4 * Rigel Kent
5 * [Nutomic](https://github.com/Nutomic) 5 * Bigard Florian
6 * [gegeweb](https://github.com/gegeweb) 6 * Felix Ableitner
7 * [joshmorel](https://github.com/joshmorel) 7 * Gérald Niel
8 * [Jorropo](https://github.com/Jorropo) 8 * Jorropo
9 * [frankstrater](https://github.com/frankstrater) 9 * Josh Morel
10 * [buoyantair](https://github.com/buoyantair) 10 * BO41
11 * [fflorent](https://github.com/fflorent) 11 * Julien Maulny
12 * [bnjbvr](https://github.com/bnjbvr) 12 * Filip Bengtsson
13 * [alcalyn](https://github.com/alcalyn) 13 * Frank Sträter
14 * [jankeromnes](https://github.com/jankeromnes) 14 * buoyantair
15 * [lucas-dclrcq](https://github.com/lucas-dclrcq) 15 * Attila F
16 * [JohnXLivingston](https://github.com/JohnXLivingston) 16 * Benjamin Bouvier
17 * [DavidLibeau](https://github.com/DavidLibeau) 17 * Jan Keromnes
18 * [kaiyou](https://github.com/kaiyou) 18 * John Livingston
19 * [ldidry](https://github.com/ldidry) 19 * Lucas Declercq
20 * [McFlat](https://github.com/McFlat) 20 * David Libeau
21 * [DimitriGilbert](https://github.com/DimitriGilbert) 21 * Florent F
22 * [floSoX](https://github.com/floSoX) 22 * Francesc
23 * [Green-Star](https://github.com/Green-Star) 23 * Luc Didry
24 * [NassimBounouas](https://github.com/NassimBounouas) 24 * Nassim Bounouas
25 * [thomaskuntzz](https://github.com/thomaskuntzz) 25 * BRAINS YUM
26 * [rezonant](https://github.com/rezonant) 26 * Dimitri Gilbert
27 * [Wirebrass](https://github.com/Wirebrass) 27 * Florent Poinsaut
28 * [clementbrizard](https://github.com/clementbrizard) 28 * Green-Star
29 * [LecygneNoir](https://github.com/LecygneNoir) 29 * Micah Elizabeth Scott
30 * [angristan](https://github.com/angristan) 30 * Phongpanot
31 * [okhin](https://github.com/okhin) 31 * SVNET Libre
32 * [daftaupe](https://github.com/daftaupe) 32 * Thomas Kuntz
33 * [tcitworld](https://github.com/tcitworld) 33 * William Lahti
34 * [dedesite](https://github.com/dedesite) 34 * Wirebrass
35 * [Nautigsam](https://github.com/Nautigsam) 35 * Angristan
36 * [scanlime](https://github.com/scanlime) 36 * GunChleoc
37 * [am97](https://github.com/am97) 37 * Okhin
38 * [dadall](https://github.com/dadall) 38 * Pierre-Alain TORET
39 * [jonathanraes](https://github.com/jonathanraes) 39 * Thomas Citharel
40 * [yohanboniface](https://github.com/yohanboniface) 40 * clementbrizard
41 * [anoadragon453](https://github.com/anoadragon453) 41 * kaiyou
42 * [auberanger](https://github.com/auberanger) 42 * Andréas Livet
43 * [darnuria](https://github.com/darnuria) 43 * Andrés Maldonado
44 * [rhaamo](https://github.com/rhaamo) 44 * Aurélien Bertron
45 * [mrflos](https://github.com/mrflos) 45 * Hans Meiser
46 * [Yetangitu](https://github.com/Yetangitu) 46 * Jefferson Hernandez
47 * [jocelynj](https://github.com/jocelynj) 47 * Kemal Oktay Aktoğan
48 * [lucaspontoexe](https://github.com/lucaspontoexe) 48 * LecygneNoir
49 * [Findus23](https://github.com/Findus23) 49 * Leopere
50 * [flyingrub](https://github.com/flyingrub) 50 * Marcin Mikołajczak
51 * [valvin1](https://github.com/valvin1) 51 * Yohan Boniface
52 * [taziden](https://github.com/taziden) 52 * am97
53 * [AutomCoding](https://github.com/AutomCoding) 53 * anotheranonymoususer
54 * [sticmac](https://github.com/sticmac) 54 * dada
55 * [barbeque](https://github.com/barbeque) 55 * frankdelange
56 * [luzpaz](https://github.com/luzpaz) 56 * jonathanraes
57 * [acid-chicken](https://github.com/acid-chicken) 57 * Andrew Morgan
58 * [louistio](https://github.com/louistio) 58 * Aurélien Béranger
59 * [qsypoq](https://github.com/qsypoq) 59 * Axel Viala
60 * [daker](https://github.com/daker) 60 * ButterflyOfFire
61 * [xyproto](https://github.com/xyproto) 61 * Dashie
62 * [NaPs](https://github.com/NaPs) 62 * Dirk Kelly
63 * [Anton-Latukha](https://github.com/Anton-Latukha) 63 * Florent Fayolle
64 * [noplanman](https://github.com/noplanman) 64 * Florian
65 * [austinheap](https://github.com/austinheap) 65 * Frank de Lange
66 * [BO41](https://github.com/BO41) 66 * Gaëtan Rizio
67 * [benabbottnz](https://github.com/benabbottnz) 67 * Jocelyn Jaubert
68 * [ewft](https://github.com/ewft) 68 * Julien Lemaire
69 * [bradsk88](https://github.com/bradsk88) 69 * Lucas Teixeira
70 * [trosel](https://github.com/trosel) 70 * Lukas Winkler
71 * [Ealhad](https://github.com/Ealhad) 71 * Millicent Billette
72 * [claudehohl](https://github.com/claudehohl) 72 * NorbiPeti
73 * [DeeJayBro](https://github.com/DeeJayBro) 73 * Pierre Jaury
74 * [dirkkelly](https://github.com/dirkkelly) 74 * Quentin
75 * [Edznux](https://github.com/Edznux) 75 * Ronan
76 * [ebrehault](https://github.com/ebrehault) 76 * SerCom_KC
77 * [DatBewar](https://github.com/DatBewar) 77 * Valvin
78 * [ReK2Fernandez](https://github.com/ReK2Fernandez) 78 * ahmadsharifian
79 * [grizio](https://github.com/grizio) 79 * taziden
80 * [Glandos](https://github.com/Glandos) 80 * victor héry
81 * [lanodan](https://github.com/lanodan) 81 * Acid Chicken (硫酸鶏)
82 * [HesioZ](https://github.com/HesioZ) 82 * Adam Gauthier
83 * [jacen92](https://github.com/jacen92) 83 * Adam Magnier
84 * [realityfabric](https://github.com/realityfabric) 84 * Adnane Belmadiaf
85 * [jlebras](https://github.com/jlebras) 85 * Alexander F. Rødseth
86 * [Knackie](https://github.com/Knackie) 86 * Antoine Millet
87 * [mkody](https://github.com/mkody) 87 * Anton Latukha
88 * [pichouk](https://github.com/pichouk) 88 * Armando Lüscher
89 * [LeoMouyna](https://github.com/LeoMouyna) 89 * Artem Prosvetov
90 * [Leopere](https://github.com/Leopere) 90 * Asier Iturralde Sarasola
91 * [LiPeK](https://github.com/LiPeK) 91 * Austin Heap
92 * [radiantly](https://github.com/radiantly) 92 * Autom
93 * [LoveIsGrief](https://github.com/LoveIsGrief) 93 * Ben Abbott
94 * [zapashcanon](https://github.com/zapashcanon) 94 * Ben Lubar
95 * [mart-e](https://github.com/mart-e) 95 * Benjamin EWFT
96 * [0mp](https://github.com/0mp) 96 * Brad Johnson
97 * [magopian](https://github.com/magopian) 97 * Cale
98 * [mkoppmann](https://github.com/mkoppmann) 98 * Ch
99 * [1000i100](https://github.com/1000i100) 99 * Charles de Lacombe
100 * [roipoussiere](https://github.com/roipoussiere) 100 * Claude
101 * [zallek](https://github.com/zallek) 101 * Clément Brizard
102 * [zeograd](https://github.com/zeograd) 102 * DeeJayBro
103 * [pjoubert-](https://github.com/pjoubert-) 103 * DontUseGithub
104 * [gbip](https://github.com/gbip) 104 * Edouard SCHWEISGUTH
105 * [PhieF](https://github.com/PhieF) 105 * Edwin Alberto Amado Baron
106 * [pdurbin](https://github.com/pdurbin) 106 * Eric Brehault
107 * [quentinDupont](https://github.com/quentinDupont) 107 * Erwan Croze
108 * [Quenty31](https://github.com/Quenty31) 108 * Fabio Agreles Bezerra
109 * [sundowndev](https://github.com/sundowndev) 109 * Fernandez, ReK2
110 * [robinkooli](https://github.com/robinkooli) 110 * Glandos
111 * [sesn](https://github.com/sesn) 111 * Haelwenn (lanodan) Monnier
112 * [ALSai](https://github.com/ALSai) 112 * HesioZ
113 * [Simounet](https://github.com/Simounet) 113 * Jacen
114 * [sschueller](https://github.com/sschueller) 114 * Jacob
115 * [TrashMacNugget](https://github.com/TrashMacNugget) 115 * Jacques Foucry
116 * [FrozenDroid](https://github.com/FrozenDroid) 116 * Jagannath Bhat
117 * [fallen](https://github.com/fallen) 117 * Jarosław Maciejewski
118 * [melongbob](https://github.com/melongbob) 118 * Jeff Huang
119 * [anmol26s](https://github.com/anmol26s) 119 * Jessica Fairchild
120 * [imbsky](https://github.com/imbsky) 120 * Julien Le Bras
121 * [ctlaltdefeat](https://github.com/ctlaltdefeat) 121 * Knackie
122 * [jomo](https://github.com/jomo) 122 * Kody
123 * [libertysoft3](https://github.com/libertysoft3) 123 * Kyâne Pichou
124 * [lsde](https://github.com/lsde) 124 * Leo Mouyna
125 * [brain-zhang](https://github.com/brain-zhang) 125 * Lesterpig
126 * [norrist](https://github.com/norrist) 126 * LiPeK
127 * [osauzet](https://github.com/osauzet) 127 * Lint
128 * [SansPseudoFix](https://github.com/SansPseudoFix) 128 * LoveIsGrief
129 * [tomamplius](https://github.com/tomamplius) 129 * Léo Andrès
130 * [tuxayo](https://github.com/tuxayo) 130 * ManMade-cube42
131 * [victor-long](https://github.com/victor-long) 131 * Manuel Viens
132 * [zacharystenger](https://github.com/zacharystenger) 132 * Marco Zehe
133 * [ewasion](https://github.com/ewasion) 133 * Markus Richter
134 134 * Martin Trigaux
135 135 * Mateusz Piotrowski
136# Translation contributors 136 * Mathieu Agopian
137 137 * Matthieu De Beule
138 * [abdhessuk](https://trad.framasoft.org/zanata/profile/view/abdhessuk) 138 * Michael Koppmann
139 * [abidin24](https://trad.framasoft.org/zanata/profile/view/abidin24) 139 * Mike
140 * [aditoo](https://trad.framasoft.org/zanata/profile/view/aditoo) 140 * MrGiga
141 * [alice](https://trad.framasoft.org/zanata/profile/view/alice) 141 * Mélanie Pin
142 * [anastasia](https://trad.framasoft.org/zanata/profile/view/anastasia) 142 * Nathanaël J
143 * [autom](https://trad.framasoft.org/zanata/profile/view/autom) 143 * Nicolas Fortin
144 * [balaji](https://trad.framasoft.org/zanata/profile/view/balaji) 144 * Niklas Reimer
145 * [bristow](https://trad.framasoft.org/zanata/profile/view/bristow) 145 * Nitesh Sawant
146 * [butterflyoffire](https://trad.framasoft.org/zanata/profile/view/butterflyoffire) 146 * Olivier Jolly
147 * [chocobozzz](https://trad.framasoft.org/zanata/profile/view/chocobozzz) 147 * Pablo Joubert
148 * [claichou](https://trad.framasoft.org/zanata/profile/view/claichou) 148 * Paul FLORENCE
149 * [degrange](https://trad.framasoft.org/zanata/profile/view/degrange) 149 * PhieF
150 * [dibek](https://trad.framasoft.org/zanata/profile/view/dibek) 150 * Philip Durbin
151 * [edu](https://trad.framasoft.org/zanata/profile/view/edu) 151 * Predatorix Phoenix
152 * [ehsaan](https://trad.framasoft.org/zanata/profile/view/ehsaan) 152 * Quentin Dupont
153 * [esoforte](https://trad.framasoft.org/zanata/profile/view/esoforte) 153 * Quentí
154 * [fkohrt](https://trad.framasoft.org/zanata/profile/view/fkohrt) 154 * Raphael
155 * [giqtaqisi](https://trad.framasoft.org/zanata/profile/view/giqtaqisi) 155 * Robin
156 * [goofy](https://trad.framasoft.org/zanata/profile/view/goofy) 156 * Sankar
157 * [gorkaazk](https://trad.framasoft.org/zanata/profile/view/gorkaazk) 157 * Simon Gilliot
158 * [gwendald](https://trad.framasoft.org/zanata/profile/view/gwendald) 158 * Simounet
159 * [h3zjp](https://trad.framasoft.org/zanata/profile/view/h3zjp) 159 * Stefan Schüller
160 * [jfblanc](https://trad.framasoft.org/zanata/profile/view/jfblanc) 160 * Tomás Sebastián Romero
161 * [jhertel](https://trad.framasoft.org/zanata/profile/view/jhertel) 161 * TrashMacNugget
162 * [jmf](https://trad.framasoft.org/zanata/profile/view/jmf) 162 * Vincent Stakenburg
163 * [jorropo](https://trad.framasoft.org/zanata/profile/view/jorropo) 163 * Yann Sionneau
164 * [kairozen](https://trad.framasoft.org/zanata/profile/view/kairozen) 164 * Yorwba
165 * [kedemferre](https://trad.framasoft.org/zanata/profile/view/kedemferre) 165 * Yun
166 * [kousha](https://trad.framasoft.org/zanata/profile/view/kousha) 166 * Zig-03
167 * [krkk](https://trad.framasoft.org/zanata/profile/view/krkk) 167 * anmol26s
168 * [landrok](https://trad.framasoft.org/zanata/profile/view/landrok) 168 * augier
169 * [leeroyepold48](https://trad.framasoft.org/zanata/profile/view/leeroyepold48) 169 * bikepunk
170 * [m4sk1n](https://trad.framasoft.org/zanata/profile/view/m4sk1n) 170 * bsky
171 * [matograine](https://trad.framasoft.org/zanata/profile/view/matograine) 171 * ctlaltdefeat
172 * [medow](https://trad.framasoft.org/zanata/profile/view/medow) 172 * jomo
173 * [mhu](https://trad.framasoft.org/zanata/profile/view/mhu) 173 * libertysoft3
174 * [midgard](https://trad.framasoft.org/zanata/profile/view/midgard) 174 * lsde
175 * [nbrucy](https://trad.framasoft.org/zanata/profile/view/nbrucy) 175 * luz.paz
176 * [nitai](https://trad.framasoft.org/zanata/profile/view/nitai) 176 * luzpaz
177 * [noncommutativegeo](https://trad.framasoft.org/zanata/profile/view/noncommutativegeo) 177 * memorybox
178 * [nopsidy](https://trad.framasoft.org/zanata/profile/view/nopsidy) 178 * mike stedman
179 * [nvivant](https://trad.framasoft.org/zanata/profile/view/nvivant) 179 * morteza
180 * [osoitz](https://trad.framasoft.org/zanata/profile/view/osoitz) 180 * norrist
181 * [outloudvi](https://trad.framasoft.org/zanata/profile/view/outloudvi) 181 * numéro6
182 * [quentin](https://trad.framasoft.org/zanata/profile/view/quentin) 182 * osauzet
183 * [quentind](https://trad.framasoft.org/zanata/profile/view/quentind) 183 * potedeo
184 * [rafaelff](https://trad.framasoft.org/zanata/profile/view/rafaelff) 184 * spf
185 * [rigelk](https://trad.framasoft.org/zanata/profile/view/rigelk) 185 * tilllt
186 * [s8321414](https://trad.framasoft.org/zanata/profile/view/s8321414) 186 * tomamplius
187 * [sato_ss](https://trad.framasoft.org/zanata/profile/view/sato_ss) 187 * tuxayo
188 * [sercom_kc](https://trad.framasoft.org/zanata/profile/view/sercom_kc) 188 * victor-long
189 * [severo](https://trad.framasoft.org/zanata/profile/view/severo) 189 * zacharystenger
190 * [silkevicious](https://trad.framasoft.org/zanata/profile/view/silkevicious) 190 * ‮noisawe
191 * [sosha](https://trad.framasoft.org/zanata/profile/view/sosha) 191 * abdhessuk
192 * [spla](https://trad.framasoft.org/zanata/profile/view/spla) 192 * abidin24
193 * [strubbl](https://trad.framasoft.org/zanata/profile/view/strubbl) 193 * aditoo
194 * [swedneck](https://trad.framasoft.org/zanata/profile/view/swedneck) 194 * alice
195 * [tagomago](https://trad.framasoft.org/zanata/profile/view/tagomago) 195 * anastasia
196 * [talone](https://trad.framasoft.org/zanata/profile/view/talone) 196 * autom
197 * [thibaultmartin](https://trad.framasoft.org/zanata/profile/view/thibaultmartin) 197 * balaji
198 * [tirifto](https://trad.framasoft.org/zanata/profile/view/tirifto) 198 * bristow
199 * [tuxayo](https://trad.framasoft.org/zanata/profile/view/tuxayo) 199 * butterflyoffire
200 * [unextro](https://trad.framasoft.org/zanata/profile/view/unextro) 200 * claichou
201 * [unzarida](https://trad.framasoft.org/zanata/profile/view/unzarida) 201 * degrange
202 * [vincent](https://trad.framasoft.org/zanata/profile/view/vincent) 202 * dibek
203 * [wanhua](https://trad.framasoft.org/zanata/profile/view/wanhua) 203 * edu
204 * [xinayder](https://trad.framasoft.org/zanata/profile/view/xinayder) 204 * ehsaan
205 * [xosem](https://trad.framasoft.org/zanata/profile/view/xosem) 205 * esoforte
206 * [zveryok](https://trad.framasoft.org/zanata/profile/view/zveryok) 206 * fkohrt
207 * [6543](https://trad.framasoft.org/zanata/profile/view/6543) 207 * giqtaqisi
208 * [aasami](https://trad.framasoft.org/zanata/profile/view/aasami) 208 * goofy
209 * [alidemirtas](https://trad.framasoft.org/zanata/profile/view/alidemirtas) 209 * gorkaazk
210 * [alpha](https://trad.framasoft.org/zanata/profile/view/alpha) 210 * gwendald
211 * [ariasuni](https://trad.framasoft.org/zanata/profile/view/ariasuni) 211 * h3zjp
212 * [bfonton](https://trad.framasoft.org/zanata/profile/view/bfonton) 212 * jfblanc
213 * [c0dr](https://trad.framasoft.org/zanata/profile/view/c0dr) 213 * jhertel
214 * [canony](https://trad.framasoft.org/zanata/profile/view/canony) 214 * jmf
215 * [cat](https://trad.framasoft.org/zanata/profile/view/cat) 215 * jorropo
216 * [clerie](https://trad.framasoft.org/zanata/profile/view/clerie) 216 * kairozen
217 * [curupira](https://trad.framasoft.org/zanata/profile/view/curupira) 217 * kedemferre
218 * [dhsets](https://trad.framasoft.org/zanata/profile/view/dhsets) 218 * kousha
219 * [digitalkiller](https://trad.framasoft.org/zanata/profile/view/digitalkiller) 219 * krkk
220 * [dwsage](https://trad.framasoft.org/zanata/profile/view/dwsage) 220 * landrok
221 * [flauta](https://trad.framasoft.org/zanata/profile/view/flauta) 221 * leeroyepold48
222 * [frankstrater](https://trad.framasoft.org/zanata/profile/view/frankstrater) 222 * m4sk1n
223 * [gillux](https://trad.framasoft.org/zanata/profile/view/gillux) 223 * matograine
224 * [gunchleoc](https://trad.framasoft.org/zanata/profile/view/gunchleoc) 224 * medow
225 * [jaidedtd](https://trad.framasoft.org/zanata/profile/view/jaidedtd) 225 * mhu
226 * [joss2lyon](https://trad.framasoft.org/zanata/profile/view/joss2lyon) 226 * midgard
227 * [kekkotranslates](https://trad.framasoft.org/zanata/profile/view/kekkotranslates) 227 * nbrucy
228 * [kingu](https://trad.framasoft.org/zanata/profile/view/kingu) 228 * nitai
229 * [kittybecca](https://trad.framasoft.org/zanata/profile/view/kittybecca) 229 * noncommutativegeo
230 * [knuxify](https://trad.framasoft.org/zanata/profile/view/knuxify) 230 * nopsidy
231 * [lapor](https://trad.framasoft.org/zanata/profile/view/lapor) 231 * nvivant
232 * [laufor](https://trad.framasoft.org/zanata/profile/view/laufor) 232 * osoitz
233 * [lstamellos](https://trad.framasoft.org/zanata/profile/view/lstamellos) 233 * outloudvi
234 * [lw1](https://trad.framasoft.org/zanata/profile/view/lw1) 234 * quentin
235 * [mablr](https://trad.framasoft.org/zanata/profile/view/mablr) 235 * quentind
236 * [marcinmalecki](https://trad.framasoft.org/zanata/profile/view/marcinmalecki) 236 * rafaelff
237 * [mayana](https://trad.framasoft.org/zanata/profile/view/mayana) 237 * rigelk
238 * [mikeorlov](https://trad.framasoft.org/zanata/profile/view/mikeorlov) 238 * s8321414
239 * [nin](https://trad.framasoft.org/zanata/profile/view/nin) 239 * sato_ss
240 * [norbipeti](https://trad.framasoft.org/zanata/profile/view/norbipeti) 240 * sercom_kc
241 * [ppnplus](https://trad.framasoft.org/zanata/profile/view/ppnplus) 241 * severo
242 * [predatorix](https://trad.framasoft.org/zanata/profile/view/predatorix) 242 * silkevicious
243 * [robin](https://trad.framasoft.org/zanata/profile/view/robin) 243 * sosha
244 * [rond](https://trad.framasoft.org/zanata/profile/view/rond) 244 * spla
245 * [secreet](https://trad.framasoft.org/zanata/profile/view/secreet) 245 * strubbl
246 * [sftblw](https://trad.framasoft.org/zanata/profile/view/sftblw) 246 * swedneck
247 * [sporiff](https://trad.framasoft.org/zanata/profile/view/sporiff) 247 * tagomago
248 * [tekuteku](https://trad.framasoft.org/zanata/profile/view/tekuteku) 248 * talone
249 * [thecatjustmeow](https://trad.framasoft.org/zanata/profile/view/thecatjustmeow) 249 * thibaultmartin
250 * [tmota](https://trad.framasoft.org/zanata/profile/view/tmota) 250 * tirifto
251 * [uranix](https://trad.framasoft.org/zanata/profile/view/uranix) 251 * tuxayo
252 * [wakutiteo](https://trad.framasoft.org/zanata/profile/view/wakutiteo) 252 * unextro
253 * [wonderingdane](https://trad.framasoft.org/zanata/profile/view/wonderingdane) 253 * unzarida
254 * [zeynepeliacik](https://trad.framasoft.org/zanata/profile/view/zeynepeliacik) 254 * vincent
255 * wanhua
256 * xinayder
257 * xosem
258 * zveryok
259 * 6543
260 * aasami
261 * alidemirtas
262 * alpha
263 * ariasuni
264 * bfonton
265 * c0dr
266 * canony
267 * cat
268 * clerie
269 * curupira
270 * dhsets
271 * digitalkiller
272 * dwsage
273 * flauta
274 * frankstrater
275 * gillux
276 * gunchleoc
277 * jaidedtd
278 * joss2lyon
279 * kekkotranslates
280 * kingu
281 * kittybecca
282 * knuxify
283 * lapor
284 * laufor
285 * lstamellos
286 * lw1
287 * mablr
288 * marcinmalecki
289 * mayana
290 * mikeorlov
291 * nin
292 * norbipeti
293 * ppnplus
294 * predatorix
295 * robin
296 * rond
297 * secreet
298 * sftblw
299 * sporiff
300 * tekuteku
301 * thecatjustmeow
302 * tmota
303 * uranix
304 * wakutiteo
305 * wonderingdane
306 * zeynepeliacik
255 307
256 308
257# Design 309# Design
258 310
259 * [Olivier Massain](https://twitter.com/omassain) 311 * [Olivier Massain](https://dribbble.com/omassain)
260 312
261 313
262# Icons 314# Icons
diff --git a/scripts/generate-code-contributors.ts b/scripts/generate-code-contributors.ts
index 5635d9889..5c6620f7d 100755
--- a/scripts/generate-code-contributors.ts
+++ b/scripts/generate-code-contributors.ts
@@ -5,6 +5,7 @@ registerTSPaths()
5import { doRequest } from '../server/helpers/requests' 5import { doRequest } from '../server/helpers/requests'
6import { readFileSync } from 'fs-extra' 6import { readFileSync } from 'fs-extra'
7import { uniqBy } from 'lodash' 7import { uniqBy } from 'lodash'
8import { execCLI } from '@shared/extra-utils'
8 9
9run() 10run()
10 .then(() => process.exit(0)) 11 .then(() => process.exit(0))
@@ -14,33 +15,20 @@ run()
14 }) 15 })
15 16
16async function run () { 17async function run () {
18 const blacklist = getContributorsBlacklist()
17 19
18 { 20 let contributors = await getGitContributors()
19 const contributors = await fetchGithub('https://api.github.com/repos/chocobozzz/peertube/contributors') 21 contributors = contributors.concat(getZanataContributors())
22 contributors = contributors.filter(c => blacklist[c.username] !== true)
20 23
21 console.log('# Code contributors\n') 24 console.log('# Code & Translators contributors\n')
22 for (const contributor of contributors) { 25 for (const contributor of contributors) {
23 const contributorUrl = contributor.url.replace('api.github.com/users', 'github.com') 26 console.log(` * ${contributor.username}`)
24 console.log(` * [${contributor.login}](${contributorUrl})`)
25 }
26 }
27
28 {
29 const zanataConfig = readFileSync(require('os').homedir() + '/.config/zanata.ini').toString()
30 const zanataUsername = zanataConfig.match('.username=([^\n]+)')[1]
31 const zanataToken = zanataConfig.match('.key=([^\n]+)')[1]
32
33 const translators = await fetchZanata(zanataUsername, zanataToken)
34
35 console.log('\n\n# Translation contributors\n')
36 for (const translator of translators) {
37 console.log(` * [${translator.username}](https://trad.framasoft.org/zanata/profile/view/${translator.username})`)
38 }
39 } 27 }
40 28
41 { 29 {
42 console.log('\n\n# Design\n') 30 console.log('\n\n# Design\n')
43 console.log(' * [Olivier Massain](https://twitter.com/omassain)') 31 console.log(' * [Olivier Massain](https://dribbble.com/omassain)')
44 32
45 console.log('\n\n# Icons\n') 33 console.log('\n\n# Icons\n')
46 console.log(' * [Robbie Pearce](https://robbiepearce.com/softies/)') 34 console.log(' * [Robbie Pearce](https://robbiepearce.com/softies/)')
@@ -49,47 +37,140 @@ async function run () {
49 } 37 }
50} 38}
51 39
52function get (url: string, headers: any = {}) { 40async function getGitContributors () {
53 return doRequest<any>({ 41 const output = await execCLI(`git --no-pager shortlog -sn < /dev/tty | sed 's/^\\s\\+[0-9]\\+\\s\\+//g'`)
54 uri: url,
55 json: true,
56 headers: Object.assign(headers, {
57 'User-Agent': 'PeerTube-App'
58 })
59 }).then(res => res.body)
60}
61
62async function fetchGithub (url: string) {
63 let next = url
64 let allResult = []
65
66 let i = 1
67 42
68 // Hard limit 43 return output.split('\n')
69 while (i < 20) { 44 .filter(l => !!l)
70 const result = await get(next + '?page=' + i) 45 .map(l => ({ username: l }))
71 if (result.length === 0) break
72
73 allResult = allResult.concat(result)
74 i++
75 }
76
77 return allResult
78} 46}
79 47
80async function fetchZanata (zanataUsername: string, zanataPassword: string) { 48// Zanata is dead, don't loose the contributors name
81 const today = new Date().toISOString().split('T')[0] 49function getZanataContributors () {
82 const year2018 = `https://trad.framasoft.org/zanata/rest/project/peertube/version/develop/contributors/2018-01-01..2019-01-01` 50 return [ { 'username': 'abdhessuk', 'name': 'Abd Hessuk' }, { 'username': 'abidin24', 'name': 'abidin toumi' }, {
83 const year2019 = `https://trad.framasoft.org/zanata/rest/project/peertube/version/develop/contributors/2019-01-01..${today}` 51 'username': 'aditoo',
52 'name': 'Lorem Ipsum'
53 }, { 'username': 'alice', 'name': 'Alice' }, { 'username': 'anastasia', 'name': 'Anastasia' }, {
54 'username': 'autom',
55 'name': 'Filip Bengtsson'
56 }, { 'username': 'balaji', 'name': 'Balaji' }, { 'username': 'bristow', 'name': 'Cédric F.' }, {
57 'username': 'butterflyoffire',
58 'name': 'ButterflyOfFire'
59 }, { 'username': 'chocobozzz', 'name': 'Chocobozzz' }, { 'username': 'claichou', 'name': 'Claire Mohin' }, {
60 'username': 'degrange',
61 'name': 'Degrange Mathieu'
62 }, { 'username': 'dibek', 'name': 'Giuseppe Di Bella' }, { 'username': 'edu', 'name': 'eduardo' }, {
63 'username': 'ehsaan',
64 'name': 'ehsaan'
65 }, { 'username': 'esoforte', 'name': 'Ondřej Kotas' }, { 'username': 'fkohrt', 'name': 'Florian Kohrt' }, {
66 'username': 'giqtaqisi',
67 'name': 'Ian Townsend'
68 }, { 'username': 'goofy', 'name': 'goofy' }, { 'username': 'gorkaazk', 'name': 'Gorka Azkarate Zubiaur' }, {
69 'username': 'gwendald',
70 'name': 'GwendalD'
71 }, { 'username': 'h3zjp', 'name': 'h3zjp' }, { 'username': 'jfblanc', 'name': 'Joan Francés Blanc' }, {
72 'username': 'jhertel',
73 'name': 'Jean Hertel'
74 }, { 'username': 'jmf', 'name': 'Jan-Michael Franz' }, { 'username': 'jorropo', 'name': 'Jorropo' }, {
75 'username': 'kairozen',
76 'name': 'Geoffrey Baudelet'
77 }, { 'username': 'kedemferre', 'name': 'Kédem Ferré' }, { 'username': 'kousha', 'name': 'Kousha Zanjani' }, {
78 'username': 'krkk',
79 'name': 'Karol Kosek'
80 }, { 'username': 'landrok', 'name': 'Landrok' }, { 'username': 'leeroyepold48', 'name': 'Leeroy Epold' }, {
81 'username': 'm4sk1n',
82 'name': 'marcin mikołajczak'
83 }, { 'username': 'matograine', 'name': 'tom ngr' }, { 'username': 'medow', 'name': 'Mahir Ahmed' }, {
84 'username': 'mhu',
85 'name': 'Max Hübner'
86 }, { 'username': 'midgard', 'name': 'Midgard' }, { 'username': 'nbrucy', 'name': 'N. B.' }, {
87 'username': 'nitai',
88 'name': 'nitai bezerra'
89 }, { 'username': 'noncommutativegeo', 'name': 'Andrea Panontin' }, { 'username': 'nopsidy', 'name': 'McFlat' }, {
90 'username': 'nvivant',
91 'name': 'Nicolas Vivant'
92 }, { 'username': 'osoitz', 'name': 'Osoitz' }, { 'username': 'outloudvi', 'name': 'Outvi V' }, {
93 'username': 'quentin',
94 'name': 'Quentí'
95 }, { 'username': 'quentind', 'name': 'Quentin Dupont' }, { 'username': 'rafaelff', 'name': 'Rafael Fontenelle' }, {
96 'username': 'rigelk',
97 'name': 'Rigel Kent'
98 }, { 'username': 's8321414', 'name': 'Jeff Huang' }, { 'username': 'sato_ss', 'name': 'Satoshi Shirosaka' }, {
99 'username': 'sercom_kc',
100 'name': 'SerCom_KC'
101 }, { 'username': 'severo', 'name': 'Sylvain Lesage' }, { 'username': 'silkevicious', 'name': 'Sylke Vicious' }, {
102 'username': 'sosha',
103 'name': 'Sosha'
104 }, { 'username': 'spla', 'name': 'spla' }, { 'username': 'strubbl', 'name': 'Sven' }, {
105 'username': 'swedneck',
106 'name': 'Tim Stahel'
107 }, { 'username': 'tagomago', 'name': 'Tagomago' }, { 'username': 'talone', 'name': 'TitiAlone' }, {
108 'username': 'thibaultmartin',
109 'name': 'Thibault Martin'
110 }, { 'username': 'tirifto', 'name': 'Tirifto' }, { 'username': 'tuxayo', 'name': 'Victor Grousset/tuxayo' }, {
111 'username': 'unextro',
112 'name': 'Ondřej Pokorný'
113 }, { 'username': 'unzarida', 'name': 'unzarida' }, { 'username': 'vincent', 'name': 'Vincent Laporte' }, {
114 'username': 'wanhua',
115 'name': 'wanhua'
116 }, { 'username': 'xinayder', 'name': 'Alexandre' }, { 'username': 'xosem', 'name': 'Xosé M.' }, {
117 'username': 'zveryok',
118 'name': 'Nikitin Stanislav'
119 }, { 'username': '6543', 'name': '6543' }, { 'username': 'aasami', 'name': 'Miroslav Ďurian' }, {
120 'username': 'alidemirtas',
121 'name': 'Ali Demirtas'
122 }, { 'username': 'alpha', 'name': 'Alpha' }, { 'username': 'ariasuni', 'name': 'Mélanie Chauvel' }, {
123 'username': 'bfonton',
124 'name': 'Baptiste Fonton'
125 }, { 'username': 'c0dr', 'name': 'c0dr lnx' }, { 'username': 'canony', 'name': 'canony' }, {
126 'username': 'cat',
127 'name': 'Cat'
128 }, { 'username': 'clerie', 'name': 'Clemens Riese' }, { 'username': 'curupira', 'name': 'Curupira' }, {
129 'username': 'dhsets',
130 'name': 'djsets'
131 }, { 'username': 'digitalkiller', 'name': 'Digital Killer' }, { 'username': 'dwsage', 'name': 'd.w. sage' }, {
132 'username': 'flauta',
133 'name': 'Andrea Primiani'
134 }, { 'username': 'frankstrater', 'name': 'Frank Sträter' }, { 'username': 'gillux', 'name': 'gillux' }, {
135 'username': 'gunchleoc',
136 'name': 'GunChleoc'
137 }, { 'username': 'jaidedtd', 'name': 'Jenga Phoenix' }, { 'username': 'joss2lyon', 'name': 'Josselin' }, {
138 'username': 'kekkotranslates',
139 'name': 'Francesco'
140 }, { 'username': 'kingu', 'name': 'Allan Nordhøy' }, { 'username': 'kittybecca', 'name': 'Rivka bat Tsvi' }, {
141 'username': 'knuxify',
142 'name': 'knuxify'
143 }, { 'username': 'lapor', 'name': 'Kristijan Tkalec' }, { 'username': 'laufor', 'name': 'Lau For' }, {
144 'username': 'lstamellos',
145 'name': 'Loukas Stamellos'
146 }, { 'username': 'lw1', 'name': 'Lukas Winkler' }, { 'username': 'mablr', 'name': 'Mablr' }, {
147 'username': 'marcinmalecki',
148 'name': 'Marcin Małecki'
149 }, { 'username': 'mayana', 'name': 'Mayana' }, { 'username': 'mikeorlov', 'name': 'Michael Orlov' }, {
150 'username': 'nin',
151 'name': 'nz'
152 }, { 'username': 'norbipeti', 'name': 'NorbiPeti' }, { 'username': 'ppnplus', 'name': 'Phongpanot Phairat' }, {
153 'username': 'predatorix',
154 'name': 'Predatorix'
155 }, { 'username': 'robin', 'name': 'Robin Lahtinen' }, { 'username': 'rond', 'name': 'rondnelly nunes' }, {
156 'username': 'secreet',
157 'name': 'Secreet'
158 }, { 'username': 'sftblw', 'name': 'sftblw' }, { 'username': 'sporiff', 'name': 'Ciarán Ainsworth' }, {
159 'username': 'tekuteku',
160 'name': 'tekuteku'
161 }, { 'username': 'thecatjustmeow', 'name': 'Nguyen Huynh Hung' }, { 'username': 'tmota', 'name': 'Tiago Mota' }, {
162 'username': 'uranix',
163 'name': 'Michal Mauser'
164 }, { 'username': 'wakutiteo', 'name': 'Markel' }, {
165 'username': 'wonderingdane',
166 'name': 'Nicolai Ireneo-Larsen'
167 }, { 'username': 'zeynepeliacik', 'name': 'Zeynep Can' } ]
168}
84 169
85 const headers = { 170function getContributorsBlacklist () {
86 'X-Auth-User': zanataUsername, 171 return {
87 'X-Auth-Token': zanataPassword 172 'Florian Bigard': true,
173 'chocobozzz': true,
174 'Rigel': true
88 } 175 }
89 const [ results2018, results2019 ] = await Promise.all([
90 get(year2018, headers),
91 get(year2019, headers)
92 ])
93
94 return uniqBy(results2018.concat(results2019) as { username: string }[], 'username')
95} 176}
diff --git a/shared/extra-utils/cli/cli.ts b/shared/extra-utils/cli/cli.ts
index 54d05e9c6..d532b62b0 100644
--- a/shared/extra-utils/cli/cli.ts
+++ b/shared/extra-utils/cli/cli.ts
@@ -6,7 +6,7 @@ function getEnvCli (server?: ServerInfo) {
6 return `NODE_ENV=test NODE_APP_INSTANCE=${server.serverNumber}` 6 return `NODE_ENV=test NODE_APP_INSTANCE=${server.serverNumber}`
7} 7}
8 8
9async function execCLI (command: string) { 9async function execCLI (command: string,) {
10 return new Promise<string>((res, rej) => { 10 return new Promise<string>((res, rej) => {
11 exec(command, (err, stdout, stderr) => { 11 exec(command, (err, stdout, stderr) => {
12 if (err) return rej(err) 12 if (err) return rej(err)