Browse Source

Rebuild credits

Had to update the script now we use weblate
Chocobozzz 4 years ago
parent
commit
41ee83423c
3 changed files with 447 additions and 314 deletions
  1. 306 254
      CREDITS.md
  2. 140 59
      scripts/generate-code-contributors.ts
  3. 1 1
      shared/extra-utils/cli/cli.ts

+ 306 - 254
CREDITS.md

@@ -1,262 +1,314 @@
-# Code contributors
+# Code & Translators contributors
 
- * [Chocobozzz](https://github.com/Chocobozzz)
- * [rigelk](https://github.com/rigelk)
- * [Nutomic](https://github.com/Nutomic)
- * [gegeweb](https://github.com/gegeweb)
- * [joshmorel](https://github.com/joshmorel)
- * [Jorropo](https://github.com/Jorropo)
- * [frankstrater](https://github.com/frankstrater)
- * [buoyantair](https://github.com/buoyantair)
- * [fflorent](https://github.com/fflorent)
- * [bnjbvr](https://github.com/bnjbvr)
- * [alcalyn](https://github.com/alcalyn)
- * [jankeromnes](https://github.com/jankeromnes)
- * [lucas-dclrcq](https://github.com/lucas-dclrcq)
- * [JohnXLivingston](https://github.com/JohnXLivingston)
- * [DavidLibeau](https://github.com/DavidLibeau)
- * [kaiyou](https://github.com/kaiyou)
- * [ldidry](https://github.com/ldidry)
- * [McFlat](https://github.com/McFlat)
- * [DimitriGilbert](https://github.com/DimitriGilbert)
- * [floSoX](https://github.com/floSoX)
- * [Green-Star](https://github.com/Green-Star)
- * [NassimBounouas](https://github.com/NassimBounouas)
- * [thomaskuntzz](https://github.com/thomaskuntzz)
- * [rezonant](https://github.com/rezonant)
- * [Wirebrass](https://github.com/Wirebrass)
- * [clementbrizard](https://github.com/clementbrizard)
- * [LecygneNoir](https://github.com/LecygneNoir)
- * [angristan](https://github.com/angristan)
- * [okhin](https://github.com/okhin)
- * [daftaupe](https://github.com/daftaupe)
- * [tcitworld](https://github.com/tcitworld)
- * [dedesite](https://github.com/dedesite)
- * [Nautigsam](https://github.com/Nautigsam)
- * [scanlime](https://github.com/scanlime)
- * [am97](https://github.com/am97)
- * [dadall](https://github.com/dadall)
- * [jonathanraes](https://github.com/jonathanraes)
- * [yohanboniface](https://github.com/yohanboniface)
- * [anoadragon453](https://github.com/anoadragon453)
- * [auberanger](https://github.com/auberanger)
- * [darnuria](https://github.com/darnuria)
- * [rhaamo](https://github.com/rhaamo)
- * [mrflos](https://github.com/mrflos)
- * [Yetangitu](https://github.com/Yetangitu)
- * [jocelynj](https://github.com/jocelynj)
- * [lucaspontoexe](https://github.com/lucaspontoexe)
- * [Findus23](https://github.com/Findus23)
- * [flyingrub](https://github.com/flyingrub)
- * [valvin1](https://github.com/valvin1)
- * [taziden](https://github.com/taziden)
- * [AutomCoding](https://github.com/AutomCoding)
- * [sticmac](https://github.com/sticmac)
- * [barbeque](https://github.com/barbeque)
- * [luzpaz](https://github.com/luzpaz)
- * [acid-chicken](https://github.com/acid-chicken)
- * [louistio](https://github.com/louistio)
- * [qsypoq](https://github.com/qsypoq)
- * [daker](https://github.com/daker)
- * [xyproto](https://github.com/xyproto)
- * [NaPs](https://github.com/NaPs)
- * [Anton-Latukha](https://github.com/Anton-Latukha)
- * [noplanman](https://github.com/noplanman)
- * [austinheap](https://github.com/austinheap)
- * [BO41](https://github.com/BO41)
- * [benabbottnz](https://github.com/benabbottnz)
- * [ewft](https://github.com/ewft)
- * [bradsk88](https://github.com/bradsk88)
- * [trosel](https://github.com/trosel)
- * [Ealhad](https://github.com/Ealhad)
- * [claudehohl](https://github.com/claudehohl)
- * [DeeJayBro](https://github.com/DeeJayBro)
- * [dirkkelly](https://github.com/dirkkelly)
- * [Edznux](https://github.com/Edznux)
- * [ebrehault](https://github.com/ebrehault)
- * [DatBewar](https://github.com/DatBewar)
- * [ReK2Fernandez](https://github.com/ReK2Fernandez)
- * [grizio](https://github.com/grizio)
- * [Glandos](https://github.com/Glandos)
- * [lanodan](https://github.com/lanodan)
- * [HesioZ](https://github.com/HesioZ)
- * [jacen92](https://github.com/jacen92)
- * [realityfabric](https://github.com/realityfabric)
- * [jlebras](https://github.com/jlebras)
- * [Knackie](https://github.com/Knackie)
- * [mkody](https://github.com/mkody)
- * [pichouk](https://github.com/pichouk)
- * [LeoMouyna](https://github.com/LeoMouyna)
- * [Leopere](https://github.com/Leopere)
- * [LiPeK](https://github.com/LiPeK)
- * [radiantly](https://github.com/radiantly)
- * [LoveIsGrief](https://github.com/LoveIsGrief)
- * [zapashcanon](https://github.com/zapashcanon)
- * [mart-e](https://github.com/mart-e)
- * [0mp](https://github.com/0mp)
- * [magopian](https://github.com/magopian)
- * [mkoppmann](https://github.com/mkoppmann)
- * [1000i100](https://github.com/1000i100)
- * [roipoussiere](https://github.com/roipoussiere)
- * [zallek](https://github.com/zallek)
- * [zeograd](https://github.com/zeograd)
- * [pjoubert-](https://github.com/pjoubert-)
- * [gbip](https://github.com/gbip)
- * [PhieF](https://github.com/PhieF)
- * [pdurbin](https://github.com/pdurbin)
- * [quentinDupont](https://github.com/quentinDupont)
- * [Quenty31](https://github.com/Quenty31)
- * [sundowndev](https://github.com/sundowndev)
- * [robinkooli](https://github.com/robinkooli)
- * [sesn](https://github.com/sesn)
- * [ALSai](https://github.com/ALSai)
- * [Simounet](https://github.com/Simounet)
- * [sschueller](https://github.com/sschueller)
- * [TrashMacNugget](https://github.com/TrashMacNugget)
- * [FrozenDroid](https://github.com/FrozenDroid)
- * [fallen](https://github.com/fallen)
- * [melongbob](https://github.com/melongbob)
- * [anmol26s](https://github.com/anmol26s)
- * [imbsky](https://github.com/imbsky)
- * [ctlaltdefeat](https://github.com/ctlaltdefeat)
- * [jomo](https://github.com/jomo)
- * [libertysoft3](https://github.com/libertysoft3)
- * [lsde](https://github.com/lsde)
- * [brain-zhang](https://github.com/brain-zhang)
- * [norrist](https://github.com/norrist)
- * [osauzet](https://github.com/osauzet)
- * [SansPseudoFix](https://github.com/SansPseudoFix)
- * [tomamplius](https://github.com/tomamplius)
- * [tuxayo](https://github.com/tuxayo)
- * [victor-long](https://github.com/victor-long)
- * [zacharystenger](https://github.com/zacharystenger)
- * [ewasion](https://github.com/ewasion)
-
-
-# Translation contributors
-
- * [abdhessuk](https://trad.framasoft.org/zanata/profile/view/abdhessuk)
- * [abidin24](https://trad.framasoft.org/zanata/profile/view/abidin24)
- * [aditoo](https://trad.framasoft.org/zanata/profile/view/aditoo)
- * [alice](https://trad.framasoft.org/zanata/profile/view/alice)
- * [anastasia](https://trad.framasoft.org/zanata/profile/view/anastasia)
- * [autom](https://trad.framasoft.org/zanata/profile/view/autom)
- * [balaji](https://trad.framasoft.org/zanata/profile/view/balaji)
- * [bristow](https://trad.framasoft.org/zanata/profile/view/bristow)
- * [butterflyoffire](https://trad.framasoft.org/zanata/profile/view/butterflyoffire)
- * [chocobozzz](https://trad.framasoft.org/zanata/profile/view/chocobozzz)
- * [claichou](https://trad.framasoft.org/zanata/profile/view/claichou)
- * [degrange](https://trad.framasoft.org/zanata/profile/view/degrange)
- * [dibek](https://trad.framasoft.org/zanata/profile/view/dibek)
- * [edu](https://trad.framasoft.org/zanata/profile/view/edu)
- * [ehsaan](https://trad.framasoft.org/zanata/profile/view/ehsaan)
- * [esoforte](https://trad.framasoft.org/zanata/profile/view/esoforte)
- * [fkohrt](https://trad.framasoft.org/zanata/profile/view/fkohrt)
- * [giqtaqisi](https://trad.framasoft.org/zanata/profile/view/giqtaqisi)
- * [goofy](https://trad.framasoft.org/zanata/profile/view/goofy)
- * [gorkaazk](https://trad.framasoft.org/zanata/profile/view/gorkaazk)
- * [gwendald](https://trad.framasoft.org/zanata/profile/view/gwendald)
- * [h3zjp](https://trad.framasoft.org/zanata/profile/view/h3zjp)
- * [jfblanc](https://trad.framasoft.org/zanata/profile/view/jfblanc)
- * [jhertel](https://trad.framasoft.org/zanata/profile/view/jhertel)
- * [jmf](https://trad.framasoft.org/zanata/profile/view/jmf)
- * [jorropo](https://trad.framasoft.org/zanata/profile/view/jorropo)
- * [kairozen](https://trad.framasoft.org/zanata/profile/view/kairozen)
- * [kedemferre](https://trad.framasoft.org/zanata/profile/view/kedemferre)
- * [kousha](https://trad.framasoft.org/zanata/profile/view/kousha)
- * [krkk](https://trad.framasoft.org/zanata/profile/view/krkk)
- * [landrok](https://trad.framasoft.org/zanata/profile/view/landrok)
- * [leeroyepold48](https://trad.framasoft.org/zanata/profile/view/leeroyepold48)
- * [m4sk1n](https://trad.framasoft.org/zanata/profile/view/m4sk1n)
- * [matograine](https://trad.framasoft.org/zanata/profile/view/matograine)
- * [medow](https://trad.framasoft.org/zanata/profile/view/medow)
- * [mhu](https://trad.framasoft.org/zanata/profile/view/mhu)
- * [midgard](https://trad.framasoft.org/zanata/profile/view/midgard)
- * [nbrucy](https://trad.framasoft.org/zanata/profile/view/nbrucy)
- * [nitai](https://trad.framasoft.org/zanata/profile/view/nitai)
- * [noncommutativegeo](https://trad.framasoft.org/zanata/profile/view/noncommutativegeo)
- * [nopsidy](https://trad.framasoft.org/zanata/profile/view/nopsidy)
- * [nvivant](https://trad.framasoft.org/zanata/profile/view/nvivant)
- * [osoitz](https://trad.framasoft.org/zanata/profile/view/osoitz)
- * [outloudvi](https://trad.framasoft.org/zanata/profile/view/outloudvi)
- * [quentin](https://trad.framasoft.org/zanata/profile/view/quentin)
- * [quentind](https://trad.framasoft.org/zanata/profile/view/quentind)
- * [rafaelff](https://trad.framasoft.org/zanata/profile/view/rafaelff)
- * [rigelk](https://trad.framasoft.org/zanata/profile/view/rigelk)
- * [s8321414](https://trad.framasoft.org/zanata/profile/view/s8321414)
- * [sato_ss](https://trad.framasoft.org/zanata/profile/view/sato_ss)
- * [sercom_kc](https://trad.framasoft.org/zanata/profile/view/sercom_kc)
- * [severo](https://trad.framasoft.org/zanata/profile/view/severo)
- * [silkevicious](https://trad.framasoft.org/zanata/profile/view/silkevicious)
- * [sosha](https://trad.framasoft.org/zanata/profile/view/sosha)
- * [spla](https://trad.framasoft.org/zanata/profile/view/spla)
- * [strubbl](https://trad.framasoft.org/zanata/profile/view/strubbl)
- * [swedneck](https://trad.framasoft.org/zanata/profile/view/swedneck)
- * [tagomago](https://trad.framasoft.org/zanata/profile/view/tagomago)
- * [talone](https://trad.framasoft.org/zanata/profile/view/talone)
- * [thibaultmartin](https://trad.framasoft.org/zanata/profile/view/thibaultmartin)
- * [tirifto](https://trad.framasoft.org/zanata/profile/view/tirifto)
- * [tuxayo](https://trad.framasoft.org/zanata/profile/view/tuxayo)
- * [unextro](https://trad.framasoft.org/zanata/profile/view/unextro)
- * [unzarida](https://trad.framasoft.org/zanata/profile/view/unzarida)
- * [vincent](https://trad.framasoft.org/zanata/profile/view/vincent)
- * [wanhua](https://trad.framasoft.org/zanata/profile/view/wanhua)
- * [xinayder](https://trad.framasoft.org/zanata/profile/view/xinayder)
- * [xosem](https://trad.framasoft.org/zanata/profile/view/xosem)
- * [zveryok](https://trad.framasoft.org/zanata/profile/view/zveryok)
- * [6543](https://trad.framasoft.org/zanata/profile/view/6543)
- * [aasami](https://trad.framasoft.org/zanata/profile/view/aasami)
- * [alidemirtas](https://trad.framasoft.org/zanata/profile/view/alidemirtas)
- * [alpha](https://trad.framasoft.org/zanata/profile/view/alpha)
- * [ariasuni](https://trad.framasoft.org/zanata/profile/view/ariasuni)
- * [bfonton](https://trad.framasoft.org/zanata/profile/view/bfonton)
- * [c0dr](https://trad.framasoft.org/zanata/profile/view/c0dr)
- * [canony](https://trad.framasoft.org/zanata/profile/view/canony)
- * [cat](https://trad.framasoft.org/zanata/profile/view/cat)
- * [clerie](https://trad.framasoft.org/zanata/profile/view/clerie)
- * [curupira](https://trad.framasoft.org/zanata/profile/view/curupira)
- * [dhsets](https://trad.framasoft.org/zanata/profile/view/dhsets)
- * [digitalkiller](https://trad.framasoft.org/zanata/profile/view/digitalkiller)
- * [dwsage](https://trad.framasoft.org/zanata/profile/view/dwsage)
- * [flauta](https://trad.framasoft.org/zanata/profile/view/flauta)
- * [frankstrater](https://trad.framasoft.org/zanata/profile/view/frankstrater)
- * [gillux](https://trad.framasoft.org/zanata/profile/view/gillux)
- * [gunchleoc](https://trad.framasoft.org/zanata/profile/view/gunchleoc)
- * [jaidedtd](https://trad.framasoft.org/zanata/profile/view/jaidedtd)
- * [joss2lyon](https://trad.framasoft.org/zanata/profile/view/joss2lyon)
- * [kekkotranslates](https://trad.framasoft.org/zanata/profile/view/kekkotranslates)
- * [kingu](https://trad.framasoft.org/zanata/profile/view/kingu)
- * [kittybecca](https://trad.framasoft.org/zanata/profile/view/kittybecca)
- * [knuxify](https://trad.framasoft.org/zanata/profile/view/knuxify)
- * [lapor](https://trad.framasoft.org/zanata/profile/view/lapor)
- * [laufor](https://trad.framasoft.org/zanata/profile/view/laufor)
- * [lstamellos](https://trad.framasoft.org/zanata/profile/view/lstamellos)
- * [lw1](https://trad.framasoft.org/zanata/profile/view/lw1)
- * [mablr](https://trad.framasoft.org/zanata/profile/view/mablr)
- * [marcinmalecki](https://trad.framasoft.org/zanata/profile/view/marcinmalecki)
- * [mayana](https://trad.framasoft.org/zanata/profile/view/mayana)
- * [mikeorlov](https://trad.framasoft.org/zanata/profile/view/mikeorlov)
- * [nin](https://trad.framasoft.org/zanata/profile/view/nin)
- * [norbipeti](https://trad.framasoft.org/zanata/profile/view/norbipeti)
- * [ppnplus](https://trad.framasoft.org/zanata/profile/view/ppnplus)
- * [predatorix](https://trad.framasoft.org/zanata/profile/view/predatorix)
- * [robin](https://trad.framasoft.org/zanata/profile/view/robin)
- * [rond](https://trad.framasoft.org/zanata/profile/view/rond)
- * [secreet](https://trad.framasoft.org/zanata/profile/view/secreet)
- * [sftblw](https://trad.framasoft.org/zanata/profile/view/sftblw)
- * [sporiff](https://trad.framasoft.org/zanata/profile/view/sporiff)
- * [tekuteku](https://trad.framasoft.org/zanata/profile/view/tekuteku)
- * [thecatjustmeow](https://trad.framasoft.org/zanata/profile/view/thecatjustmeow)
- * [tmota](https://trad.framasoft.org/zanata/profile/view/tmota)
- * [uranix](https://trad.framasoft.org/zanata/profile/view/uranix)
- * [wakutiteo](https://trad.framasoft.org/zanata/profile/view/wakutiteo)
- * [wonderingdane](https://trad.framasoft.org/zanata/profile/view/wonderingdane)
- * [zeynepeliacik](https://trad.framasoft.org/zanata/profile/view/zeynepeliacik)
+ * Chocobozzz
+ * Rigel Kent
+ * Bigard Florian
+ * Felix Ableitner
+ * Gérald Niel
+ * Jorropo
+ * Josh Morel
+ * BO41
+ * Julien Maulny
+ * Filip Bengtsson
+ * Frank Sträter
+ * buoyantair
+ * Attila F
+ * Benjamin Bouvier
+ * Jan Keromnes
+ * John Livingston
+ * Lucas Declercq
+ * David Libeau
+ * Florent F
+ * Francesc
+ * Luc Didry
+ * Nassim Bounouas
+ * BRAINS YUM
+ * Dimitri Gilbert
+ * Florent Poinsaut
+ * Green-Star
+ * Micah Elizabeth Scott
+ * Phongpanot
+ * SVNET Libre
+ * Thomas Kuntz
+ * William Lahti
+ * Wirebrass
+ * Angristan
+ * GunChleoc
+ * Okhin
+ * Pierre-Alain TORET
+ * Thomas Citharel
+ * clementbrizard
+ * kaiyou
+ * Andréas Livet
+ * Andrés Maldonado
+ * Aurélien Bertron
+ * Hans Meiser
+ * Jefferson Hernandez
+ * Kemal Oktay Aktoğan
+ * LecygneNoir
+ * Leopere
+ * Marcin Mikołajczak
+ * Yohan Boniface
+ * am97
+ * anotheranonymoususer
+ * dada
+ * frankdelange
+ * jonathanraes
+ * Andrew Morgan
+ * Aurélien Béranger
+ * Axel Viala
+ * ButterflyOfFire
+ * Dashie
+ * Dirk Kelly
+ * Florent Fayolle
+ * Florian
+ * Frank de Lange
+ * Gaëtan Rizio
+ * Jocelyn Jaubert
+ * Julien Lemaire
+ * Lucas Teixeira
+ * Lukas Winkler
+ * Millicent Billette
+ * NorbiPeti
+ * Pierre Jaury
+ * Quentin
+ * Ronan
+ * SerCom_KC
+ * Valvin
+ * ahmadsharifian
+ * taziden
+ * victor héry
+ * Acid Chicken (硫酸鶏)
+ * Adam Gauthier
+ * Adam Magnier
+ * Adnane Belmadiaf
+ * Alexander F. Rødseth
+ * Antoine Millet
+ * Anton Latukha
+ * Armando Lüscher
+ * Artem Prosvetov
+ * Asier Iturralde Sarasola
+ * Austin Heap
+ * Autom
+ * Ben Abbott
+ * Ben Lubar
+ * Benjamin EWFT
+ * Brad Johnson
+ * Cale
+ * Ch
+ * Charles de Lacombe
+ * Claude
+ * Clément Brizard
+ * DeeJayBro
+ * DontUseGithub
+ * Edouard SCHWEISGUTH
+ * Edwin Alberto Amado Baron
+ * Eric Brehault
+ * Erwan Croze
+ * Fabio Agreles Bezerra
+ * Fernandez, ReK2
+ * Glandos
+ * Haelwenn (lanodan) Monnier
+ * HesioZ
+ * Jacen
+ * Jacob
+ * Jacques Foucry
+ * Jagannath Bhat
+ * Jarosław Maciejewski
+ * Jeff Huang
+ * Jessica Fairchild
+ * Julien Le Bras
+ * Knackie
+ * Kody
+ * Kyâne Pichou
+ * Leo Mouyna
+ * Lesterpig
+ * LiPeK
+ * Lint
+ * LoveIsGrief
+ * Léo Andrès
+ * ManMade-cube42
+ * Manuel Viens
+ * Marco Zehe
+ * Markus Richter
+ * Martin Trigaux
+ * Mateusz Piotrowski
+ * Mathieu Agopian
+ * Matthieu De Beule
+ * Michael Koppmann
+ * Mike
+ * MrGiga
+ * Mélanie Pin
+ * Nathanaël J
+ * Nicolas Fortin
+ * Niklas Reimer
+ * Nitesh Sawant
+ * Olivier Jolly
+ * Pablo Joubert
+ * Paul FLORENCE
+ * PhieF
+ * Philip Durbin
+ * Predatorix Phoenix
+ * Quentin Dupont
+ * Quentí
+ * Raphael
+ * Robin
+ * Sankar
+ * Simon Gilliot
+ * Simounet
+ * Stefan Schüller
+ * Tomás Sebastián Romero
+ * TrashMacNugget
+ * Vincent Stakenburg
+ * Yann Sionneau
+ * Yorwba
+ * Yun
+ * Zig-03
+ * anmol26s
+ * augier
+ * bikepunk
+ * bsky
+ * ctlaltdefeat
+ * jomo
+ * libertysoft3
+ * lsde
+ * luz.paz
+ * luzpaz
+ * memorybox
+ * mike stedman
+ * morteza
+ * norrist
+ * numéro6
+ * osauzet
+ * potedeo
+ * spf
+ * tilllt
+ * tomamplius
+ * tuxayo
+ * victor-long
+ * zacharystenger
+ * ‮noisawe
+ * abdhessuk
+ * abidin24
+ * aditoo
+ * alice
+ * anastasia
+ * autom
+ * balaji
+ * bristow
+ * butterflyoffire
+ * claichou
+ * degrange
+ * dibek
+ * edu
+ * ehsaan
+ * esoforte
+ * fkohrt
+ * giqtaqisi
+ * goofy
+ * gorkaazk
+ * gwendald
+ * h3zjp
+ * jfblanc
+ * jhertel
+ * jmf
+ * jorropo
+ * kairozen
+ * kedemferre
+ * kousha
+ * krkk
+ * landrok
+ * leeroyepold48
+ * m4sk1n
+ * matograine
+ * medow
+ * mhu
+ * midgard
+ * nbrucy
+ * nitai
+ * noncommutativegeo
+ * nopsidy
+ * nvivant
+ * osoitz
+ * outloudvi
+ * quentin
+ * quentind
+ * rafaelff
+ * rigelk
+ * s8321414
+ * sato_ss
+ * sercom_kc
+ * severo
+ * silkevicious
+ * sosha
+ * spla
+ * strubbl
+ * swedneck
+ * tagomago
+ * talone
+ * thibaultmartin
+ * tirifto
+ * tuxayo
+ * unextro
+ * unzarida
+ * vincent
+ * wanhua
+ * xinayder
+ * xosem
+ * zveryok
+ * 6543
+ * aasami
+ * alidemirtas
+ * alpha
+ * ariasuni
+ * bfonton
+ * c0dr
+ * canony
+ * cat
+ * clerie
+ * curupira
+ * dhsets
+ * digitalkiller
+ * dwsage
+ * flauta
+ * frankstrater
+ * gillux
+ * gunchleoc
+ * jaidedtd
+ * joss2lyon
+ * kekkotranslates
+ * kingu
+ * kittybecca
+ * knuxify
+ * lapor
+ * laufor
+ * lstamellos
+ * lw1
+ * mablr
+ * marcinmalecki
+ * mayana
+ * mikeorlov
+ * nin
+ * norbipeti
+ * ppnplus
+ * predatorix
+ * robin
+ * rond
+ * secreet
+ * sftblw
+ * sporiff
+ * tekuteku
+ * thecatjustmeow
+ * tmota
+ * uranix
+ * wakutiteo
+ * wonderingdane
+ * zeynepeliacik
 
 
 # Design
 
- * [Olivier Massain](https://twitter.com/omassain)
+ * [Olivier Massain](https://dribbble.com/omassain)
 
 
 # Icons

+ 140 - 59
scripts/generate-code-contributors.ts

@@ -5,6 +5,7 @@ registerTSPaths()
 import { doRequest } from '../server/helpers/requests'
 import { readFileSync } from 'fs-extra'
 import { uniqBy } from 'lodash'
+import { execCLI } from '@shared/extra-utils'
 
 run()
   .then(() => process.exit(0))
@@ -14,33 +15,20 @@ run()
   })
 
 async function run () {
+  const blacklist = getContributorsBlacklist()
 
-  {
-    const contributors = await fetchGithub('https://api.github.com/repos/chocobozzz/peertube/contributors')
+  let contributors = await getGitContributors()
+  contributors = contributors.concat(getZanataContributors())
+  contributors = contributors.filter(c => blacklist[c.username] !== true)
 
-    console.log('# Code contributors\n')
-    for (const contributor of contributors) {
-      const contributorUrl = contributor.url.replace('api.github.com/users', 'github.com')
-      console.log(` * [${contributor.login}](${contributorUrl})`)
-    }
-  }
-
-  {
-    const zanataConfig = readFileSync(require('os').homedir() + '/.config/zanata.ini').toString()
-    const zanataUsername = zanataConfig.match('.username=([^\n]+)')[1]
-    const zanataToken = zanataConfig.match('.key=([^\n]+)')[1]
-
-    const translators = await fetchZanata(zanataUsername, zanataToken)
-
-    console.log('\n\n# Translation contributors\n')
-    for (const translator of translators) {
-      console.log(` * [${translator.username}](https://trad.framasoft.org/zanata/profile/view/${translator.username})`)
-    }
+  console.log('# Code & Translators contributors\n')
+  for (const contributor of contributors) {
+    console.log(` * ${contributor.username}`)
   }
 
   {
     console.log('\n\n# Design\n')
-    console.log(' * [Olivier Massain](https://twitter.com/omassain)')
+    console.log(' * [Olivier Massain](https://dribbble.com/omassain)')
 
     console.log('\n\n# Icons\n')
     console.log(' * [Robbie Pearce](https://robbiepearce.com/softies/)')
@@ -49,47 +37,140 @@ async function run () {
   }
 }
 
-function get (url: string, headers: any = {}) {
-  return doRequest<any>({
-    uri: url,
-    json: true,
-    headers: Object.assign(headers, {
-      'User-Agent': 'PeerTube-App'
-    })
-  }).then(res => res.body)
-}
-
-async function fetchGithub (url: string) {
-  let next = url
-  let allResult = []
-
-  let i = 1
+async function getGitContributors () {
+  const output = await execCLI(`git --no-pager shortlog -sn < /dev/tty | sed 's/^\\s\\+[0-9]\\+\\s\\+//g'`)
 
-  // Hard limit
-  while (i < 20) {
-    const result = await get(next + '?page=' + i)
-    if (result.length === 0) break
-
-    allResult = allResult.concat(result)
-    i++
-  }
-
-  return allResult
+  return output.split('\n')
+               .filter(l => !!l)
+               .map(l => ({ username: l }))
 }
 
-async function fetchZanata (zanataUsername: string, zanataPassword: string) {
-  const today = new Date().toISOString().split('T')[0]
-  const year2018 = `https://trad.framasoft.org/zanata/rest/project/peertube/version/develop/contributors/2018-01-01..2019-01-01`
-  const year2019 = `https://trad.framasoft.org/zanata/rest/project/peertube/version/develop/contributors/2019-01-01..${today}`
+// Zanata is dead, don't loose the contributors name
+function getZanataContributors () {
+  return [ { 'username': 'abdhessuk', 'name': 'Abd Hessuk' }, { 'username': 'abidin24', 'name': 'abidin toumi' }, {
+    'username': 'aditoo',
+    'name': 'Lorem Ipsum'
+  }, { 'username': 'alice', 'name': 'Alice' }, { 'username': 'anastasia', 'name': 'Anastasia' }, {
+    'username': 'autom',
+    'name': 'Filip Bengtsson'
+  }, { 'username': 'balaji', 'name': 'Balaji' }, { 'username': 'bristow', 'name': 'Cédric F.' }, {
+    'username': 'butterflyoffire',
+    'name': 'ButterflyOfFire'
+  }, { 'username': 'chocobozzz', 'name': 'Chocobozzz' }, { 'username': 'claichou', 'name': 'Claire Mohin' }, {
+    'username': 'degrange',
+    'name': 'Degrange Mathieu'
+  }, { 'username': 'dibek', 'name': 'Giuseppe Di Bella' }, { 'username': 'edu', 'name': 'eduardo' }, {
+    'username': 'ehsaan',
+    'name': 'ehsaan'
+  }, { 'username': 'esoforte', 'name': 'Ondřej Kotas' }, { 'username': 'fkohrt', 'name': 'Florian Kohrt' }, {
+    'username': 'giqtaqisi',
+    'name': 'Ian Townsend'
+  }, { 'username': 'goofy', 'name': 'goofy' }, { 'username': 'gorkaazk', 'name': 'Gorka Azkarate Zubiaur' }, {
+    'username': 'gwendald',
+    'name': 'GwendalD'
+  }, { 'username': 'h3zjp', 'name': 'h3zjp' }, { 'username': 'jfblanc', 'name': 'Joan Francés Blanc' }, {
+    'username': 'jhertel',
+    'name': 'Jean Hertel'
+  }, { 'username': 'jmf', 'name': 'Jan-Michael Franz' }, { 'username': 'jorropo', 'name': 'Jorropo' }, {
+    'username': 'kairozen',
+    'name': 'Geoffrey Baudelet'
+  }, { 'username': 'kedemferre', 'name': 'Kédem Ferré' }, { 'username': 'kousha', 'name': 'Kousha Zanjani' }, {
+    'username': 'krkk',
+    'name': 'Karol Kosek'
+  }, { 'username': 'landrok', 'name': 'Landrok' }, { 'username': 'leeroyepold48', 'name': 'Leeroy Epold' }, {
+    'username': 'm4sk1n',
+    'name': 'marcin mikołajczak'
+  }, { 'username': 'matograine', 'name': 'tom ngr' }, { 'username': 'medow', 'name': 'Mahir Ahmed' }, {
+    'username': 'mhu',
+    'name': 'Max Hübner'
+  }, { 'username': 'midgard', 'name': 'Midgard' }, { 'username': 'nbrucy', 'name': 'N. B.' }, {
+    'username': 'nitai',
+    'name': 'nitai bezerra'
+  }, { 'username': 'noncommutativegeo', 'name': 'Andrea Panontin' }, { 'username': 'nopsidy', 'name': 'McFlat' }, {
+    'username': 'nvivant',
+    'name': 'Nicolas Vivant'
+  }, { 'username': 'osoitz', 'name': 'Osoitz' }, { 'username': 'outloudvi', 'name': 'Outvi V' }, {
+    'username': 'quentin',
+    'name': 'Quentí'
+  }, { 'username': 'quentind', 'name': 'Quentin Dupont' }, { 'username': 'rafaelff', 'name': 'Rafael Fontenelle' }, {
+    'username': 'rigelk',
+    'name': 'Rigel Kent'
+  }, { 'username': 's8321414', 'name': 'Jeff Huang' }, { 'username': 'sato_ss', 'name': 'Satoshi Shirosaka' }, {
+    'username': 'sercom_kc',
+    'name': 'SerCom_KC'
+  }, { 'username': 'severo', 'name': 'Sylvain Lesage' }, { 'username': 'silkevicious', 'name': 'Sylke Vicious' }, {
+    'username': 'sosha',
+    'name': 'Sosha'
+  }, { 'username': 'spla', 'name': 'spla' }, { 'username': 'strubbl', 'name': 'Sven' }, {
+    'username': 'swedneck',
+    'name': 'Tim Stahel'
+  }, { 'username': 'tagomago', 'name': 'Tagomago' }, { 'username': 'talone', 'name': 'TitiAlone' }, {
+    'username': 'thibaultmartin',
+    'name': 'Thibault Martin'
+  }, { 'username': 'tirifto', 'name': 'Tirifto' }, { 'username': 'tuxayo', 'name': 'Victor Grousset/tuxayo' }, {
+    'username': 'unextro',
+    'name': 'Ondřej Pokorný'
+  }, { 'username': 'unzarida', 'name': 'unzarida' }, { 'username': 'vincent', 'name': 'Vincent Laporte' }, {
+    'username': 'wanhua',
+    'name': 'wanhua'
+  }, { 'username': 'xinayder', 'name': 'Alexandre' }, { 'username': 'xosem', 'name': 'Xosé M.' }, {
+    'username': 'zveryok',
+    'name': 'Nikitin Stanislav'
+  }, { 'username': '6543', 'name': '6543' }, { 'username': 'aasami', 'name': 'Miroslav Ďurian' }, {
+    'username': 'alidemirtas',
+    'name': 'Ali Demirtas'
+  }, { 'username': 'alpha', 'name': 'Alpha' }, { 'username': 'ariasuni', 'name': 'Mélanie Chauvel' }, {
+    'username': 'bfonton',
+    'name': 'Baptiste Fonton'
+  }, { 'username': 'c0dr', 'name': 'c0dr lnx' }, { 'username': 'canony', 'name': 'canony' }, {
+    'username': 'cat',
+    'name': 'Cat'
+  }, { 'username': 'clerie', 'name': 'Clemens Riese' }, { 'username': 'curupira', 'name': 'Curupira' }, {
+    'username': 'dhsets',
+    'name': 'djsets'
+  }, { 'username': 'digitalkiller', 'name': 'Digital Killer' }, { 'username': 'dwsage', 'name': 'd.w. sage' }, {
+    'username': 'flauta',
+    'name': 'Andrea Primiani'
+  }, { 'username': 'frankstrater', 'name': 'Frank Sträter' }, { 'username': 'gillux', 'name': 'gillux' }, {
+    'username': 'gunchleoc',
+    'name': 'GunChleoc'
+  }, { 'username': 'jaidedtd', 'name': 'Jenga Phoenix' }, { 'username': 'joss2lyon', 'name': 'Josselin' }, {
+    'username': 'kekkotranslates',
+    'name': 'Francesco'
+  }, { 'username': 'kingu', 'name': 'Allan Nordhøy' }, { 'username': 'kittybecca', 'name': 'Rivka bat Tsvi' }, {
+    'username': 'knuxify',
+    'name': 'knuxify'
+  }, { 'username': 'lapor', 'name': 'Kristijan Tkalec' }, { 'username': 'laufor', 'name': 'Lau For' }, {
+    'username': 'lstamellos',
+    'name': 'Loukas Stamellos'
+  }, { 'username': 'lw1', 'name': 'Lukas Winkler' }, { 'username': 'mablr', 'name': 'Mablr' }, {
+    'username': 'marcinmalecki',
+    'name': 'Marcin Małecki'
+  }, { 'username': 'mayana', 'name': 'Mayana' }, { 'username': 'mikeorlov', 'name': 'Michael Orlov' }, {
+    'username': 'nin',
+    'name': 'nz'
+  }, { 'username': 'norbipeti', 'name': 'NorbiPeti' }, { 'username': 'ppnplus', 'name': 'Phongpanot Phairat' }, {
+    'username': 'predatorix',
+    'name': 'Predatorix'
+  }, { 'username': 'robin', 'name': 'Robin Lahtinen' }, { 'username': 'rond', 'name': 'rondnelly nunes' }, {
+    'username': 'secreet',
+    'name': 'Secreet'
+  }, { 'username': 'sftblw', 'name': 'sftblw' }, { 'username': 'sporiff', 'name': 'Ciarán Ainsworth' }, {
+    'username': 'tekuteku',
+    'name': 'tekuteku'
+  }, { 'username': 'thecatjustmeow', 'name': 'Nguyen Huynh Hung' }, { 'username': 'tmota', 'name': 'Tiago Mota' }, {
+    'username': 'uranix',
+    'name': 'Michal Mauser'
+  }, { 'username': 'wakutiteo', 'name': 'Markel' }, {
+    'username': 'wonderingdane',
+    'name': 'Nicolai Ireneo-Larsen'
+  }, { 'username': 'zeynepeliacik', 'name': 'Zeynep Can' } ]
+}
 
-  const headers = {
-    'X-Auth-User': zanataUsername,
-    'X-Auth-Token': zanataPassword
+function getContributorsBlacklist () {
+  return {
+    'Florian Bigard': true,
+    'chocobozzz': true,
+    'Rigel': true
   }
-  const [ results2018, results2019 ] = await Promise.all([
-    get(year2018, headers),
-    get(year2019, headers)
-  ])
-
-  return uniqBy(results2018.concat(results2019) as { username: string }[], 'username')
 }

+ 1 - 1
shared/extra-utils/cli/cli.ts

@@ -6,7 +6,7 @@ function getEnvCli (server?: ServerInfo) {
   return `NODE_ENV=test NODE_APP_INSTANCE=${server.serverNumber}`
 }
 
-async function execCLI (command: string) {
+async function execCLI (command: string,) {
   return new Promise<string>((res, rej) => {
     exec(command, (err, stdout, stderr) => {
       if (err) return rej(err)