diff options
-rw-r--r-- | CREDITS.md | 560 | ||||
-rwxr-xr-x | scripts/generate-code-contributors.ts | 199 | ||||
-rw-r--r-- | shared/extra-utils/cli/cli.ts | 2 |
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() | |||
5 | import { doRequest } from '../server/helpers/requests' | 5 | import { doRequest } from '../server/helpers/requests' |
6 | import { readFileSync } from 'fs-extra' | 6 | import { readFileSync } from 'fs-extra' |
7 | import { uniqBy } from 'lodash' | 7 | import { uniqBy } from 'lodash' |
8 | import { execCLI } from '@shared/extra-utils' | ||
8 | 9 | ||
9 | run() | 10 | run() |
10 | .then(() => process.exit(0)) | 11 | .then(() => process.exit(0)) |
@@ -14,33 +15,20 @@ run() | |||
14 | }) | 15 | }) |
15 | 16 | ||
16 | async function run () { | 17 | async 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 | ||
52 | function get (url: string, headers: any = {}) { | 40 | async 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 | |||
62 | async 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 | ||
80 | async 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] | 49 | function 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 = { | 170 | function 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 | ||
9 | async function execCLI (command: string) { | 9 | async 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) |