1 import { registerTSPaths } from '../server/helpers/register-ts-paths'
4 import { execCLI } from '@shared/extra-utils'
7 .then(() => process.exit(0))
13 async function run () {
14 const blacklist = getContributorsBlacklist()
17 let contributors = await getGitContributors()
18 contributors = contributors.concat(getZanataContributors())
19 contributors = contributors.filter(c => blacklist[c.username] !== true)
21 console.log('# Code & Translators contributors\n')
22 for (const contributor of contributors) {
23 console.log(` * ${contributor.username}`)
28 console.log('\n\n# Design\n')
29 console.log(' * [Olivier Massain](https://dribbble.com/omassain)')
30 console.log(' * [Marie-Cécile Godwin Paccard](https://mcgodwin.com/)')
32 console.log('\n\n# Icons\n')
33 console.log(' * [Feather Icons](feathericons.com/) (MIT)')
34 console.log(' * `playlist add`, `history`, `subscriptions`, `miscellaneous-services.svg` by Material UI (Apache 2.0)')
35 console.log(' * `support` by Chocobozzz (CC-BY)')
36 console.log(' * `language` by Aaron Jin (CC-BY)')
37 console.log(' * `video-language` by Rigel Kent (CC-BY)')
38 console.log(' * `peertube-x` by Solen DP (CC-BY)')
42 console.log('\n\n# Contributors to our 2020 crowdfunding :heart:\n')
44 `*We ran [a crowdfunding campaign](https://joinpeertube.org/roadmap) in 2020 to implement live streaming to the version ` +
45 `3.0.0 of PeerTube. Thanks to everyone who pitched in and shared the news!*\n\n`
48 console.log(get2020CrowdfundingContributors().join(', '))
52 console.log('\n\n# Contributors to our 2018 crowdfunding :heart:')
54 `\n*We ran [a crowdfunding campaign](https://www.kisskissbankbank.com/en/projects/peertube-a-free-and-federated-video-platform) ` +
55 `in 2018 to pave the road to the version 1.0.0 of PeerTube, with 1,379 backers. ` +
56 `Thanks to everyone who pitched in and shared the news!*\n\n`
59 console.log(get2018CrowdfundingContributors().join(', '))
63 async function getGitContributors () {
64 const output = await execCLI(`git --no-pager shortlog -sn < /dev/tty | sed 's/^\\s\\+[0-9]\\+\\s\\+//g'`)
66 return output.split('\n')
68 .map(l => ({ username: l }))
71 function get2020CrowdfundingContributors () {
155 'Black Winner Yoshi',
328 'GaetanIllustration',
420 'Jigme Datse Yli-Rasku ',
492 'lepetitbonnetrouge',
493 'L\'EtatPaiera-ManuMacron-16-03-2020',
500 'L\'intendant zonard',
542 'Matthieu Schneider',
544 'Mäusle aus Herbtown',
614 'Panos Alevropoulos',
624 'Paul-Louis Ageneau',
698 'Ruslanas Gzibovskis',
745 '@sozialwelten@ifwo .eu',
888 function get2018CrowdfundingContributors () {
920 'Aleksandar-Aleksandrov',
924 'Alexander-Murray-Watters',
925 'Alexandre-Alapetite',
927 'Alexandre-Giuliani',
947 'Antoine-Beauvillain',
957 'Aris-Papathéodorou',
999 'bertrand.arlabosse',
1017 'Cadiou-Christophe',
1027 'Cecile-Obernesser',
1038 'charlotte-cgondre78',
1041 'Christel-Berthelot',
1042 'Christian-FERRARIS',
1044 'Christophe-Bastin',
1045 'christophe-beziers',
1046 'Christophe-Pieret',
1047 'Christophe-Verhaege',
1061 'Consulting-AZAPTEC',
1099 'Denis-Lecourtiller',
1115 'Edouard-SCHWEISGUTH',
1133 'Ex-Serv,fabeveynes',
1148 'Florent-Deschamps',
1155 'Florian-Bellafont',
1158 'Florian-Siegenthaler',
1165 'François-Dambrine',
1166 'François-Deguerry',
1170 'François-Malterre',
1172 'François-Schoubben',
1173 'François-Xavier-Davanne',
1175 'francois.peyratout',
1179 'Frédéric-Blumstein',
1188 'Gabriel-Devillers',
1197 'Geneviève-Perello',
1226 'Grégory-Goulaouic',
1234 'Guillaume-Chambert',
1235 'Guillaume-Chaslot',
1239 'Guillaume-Lecoquierre',
1242 'Guiraud-Dominique,Guy-Torreilles',
1255 'Hoang-Mai-Lesaffre',
1257 'homosapienssapiens',
1283 'Jean-Baptiste-Maneyrol',
1284 'Jean-charles-Surbayrole',
1285 'Jean-claude-Jouanne',
1288 'JEAN-FRANCOIS-BOUDEAU',
1289 'Jean-Francois-Ducrot',
1290 'Jean-François-PETITBON',
1291 'Jean-François-Tomasi',
1293 'Jean-louis-Bergamo',
1297 'Jean-Noel-Bruletout',
1299 'Jean-Paul-Lescat,jean-philippe-bénétrix',
1300 'Jean-Philippe-Eisenbarth',
1301 'Jean-Philippe-Renaudet',
1302 'Jean-Philippe-Rennard',
1303 'Jean-Sébastien-Renaud',
1364 'Keplerpondorskell',
1381 'Laurent-PICQUENOT',
1425 'Marien-Fressinaud',
1440 'matt.faure,Mattéo-Delabre',
1441 'Matthias-Devlamynck',
1444 'Matthieu-DEVILLERS',
1447 'Matthieu-Sauboua-Beneluz',
1449 'MatthieuSchneider',
1521 'Olivier-Mondoloni',
1529 'Pascal-Larramendy',
1543 'Philippe-BATTMANN',
1547 'Philippe-Lallemant',
1550 'Philippe-Thébault',
1551 'Philippe-VINCENT-2',
1555 'Pierre-Antoine-Champin',
1557 'Pierre-d\'Alençon',
1563 'Pierrick-Couturier',
1583 'Raphaël-Grolimund',
1623 'Samuel-Verschelde',
1628 'Sebastiaan-Glazenborg',
1629 'Sebastian-Hugentobler',
1635 'shlagevuk-shlagevuk',
1653 'Stanislas-Michalak',
1657 'Stéphane-Girardon',
1674 'sylvain.arrachart',
1708 'toto-leroidelasaucisse',
1712 'Tristan-Porteries',
1716 'U-&_`HbAAe4onnpN9!e+/#425>k^E',
1717 'Ulrich-Norbisrath',
1730 'Victorien-Labalette',
1732 'Vincent-Fromentin',
1751 'yannick-grenzinger',
1765 // Zanata is dead, don't loose the contributors name
1766 function getZanataContributors () {
1768 { username: 'abdhessuk', name: 'Abd Hessuk' },
1769 { username: 'abidin24', name: 'abidin toumi' },
1770 { username: 'aditoo', name: 'Lorem Ipsum' },
1771 { username: 'alice', name: 'Alice' },
1772 { username: 'anastasia', name: 'Anastasia' },
1773 { username: 'autom', name: 'Filip Bengtsson' },
1774 { username: 'balaji', name: 'Balaji' },
1775 { username: 'bristow', name: 'Cédric F.' },
1776 { username: 'butterflyoffire', name: 'ButterflyOfFire' },
1777 { username: 'chocobozzz', name: 'Chocobozzz' },
1778 { username: 'claichou', name: 'Claire Mohin' },
1779 { username: 'degrange', name: 'Degrange Mathieu' },
1780 { username: 'dibek', name: 'Giuseppe Di Bella' },
1781 { username: 'edu', name: 'eduardo' },
1782 { username: 'ehsaan', name: 'ehsaan' },
1783 { username: 'esoforte', name: 'Ondřej Kotas' },
1784 { username: 'fkohrt', name: 'Florian Kohrt' },
1785 { username: 'giqtaqisi', name: 'Ian Townsend' },
1786 { username: 'goofy', name: 'goofy' },
1787 { username: 'gorkaazk', name: 'Gorka Azkarate Zubiaur' },
1788 { username: 'gwendald', name: 'GwendalD' },
1789 { username: 'h3zjp', name: 'h3zjp' },
1790 { username: 'jfblanc', name: 'Joan Francés Blanc' },
1791 { username: 'jhertel', name: 'Jean Hertel' },
1792 { username: 'jmf', name: 'Jan-Michael Franz' },
1793 { username: 'jorropo', name: 'Jorropo' },
1794 { username: 'kairozen', name: 'Geoffrey Baudelet' },
1795 { username: 'kedemferre', name: 'Kédem Ferré' },
1796 { username: 'kousha', name: 'Kousha Zanjani' },
1797 { username: 'krkk', name: 'Karol Kosek' },
1798 { username: 'landrok', name: 'Landrok' },
1799 { username: 'leeroyepold48', name: 'Leeroy Epold' },
1800 { username: 'm4sk1n', name: 'marcin mikołajczak' },
1801 { username: 'matograine', name: 'tom ngr' },
1802 { username: 'medow', name: 'Mahir Ahmed' },
1803 { username: 'mhu', name: 'Max Hübner' },
1804 { username: 'midgard', name: 'Midgard' },
1805 { username: 'nbrucy', name: 'N. B.' },
1806 { username: 'nitai', name: 'nitai bezerra' },
1807 { username: 'noncommutativegeo', name: 'Andrea Panontin' },
1808 { username: 'nopsidy', name: 'McFlat' },
1809 { username: 'nvivant', name: 'Nicolas Vivant' },
1810 { username: 'osoitz', name: 'Osoitz' },
1811 { username: 'outloudvi', name: 'Outvi V' },
1812 { username: 'quentin', name: 'Quentí' },
1813 { username: 'quentind', name: 'Quentin Dupont' },
1814 { username: 'rafaelff', name: 'Rafael Fontenelle' },
1815 { username: 'rigelk', name: 'Rigel Kent' },
1816 { username: 's8321414', name: 'Jeff Huang' },
1817 { username: 'sato_ss', name: 'Satoshi Shirosaka' },
1818 { username: 'sercom_kc', name: 'SerCom_KC' },
1819 { username: 'severo', name: 'Sylvain Lesage' },
1820 { username: 'silkevicious', name: 'Sylke Vicious' },
1821 { username: 'sosha', name: 'Sosha' },
1822 { username: 'spla', name: 'spla' },
1823 { username: 'strubbl', name: 'Sven' },
1824 { username: 'swedneck', name: 'Tim Stahel' },
1825 { username: 'tagomago', name: 'Tagomago' },
1826 { username: 'talone', name: 'TitiAlone' },
1827 { username: 'thibaultmartin', name: 'Thibault Martin' },
1828 { username: 'tirifto', name: 'Tirifto' },
1829 { username: 'tuxayo', name: 'Victor Grousset/tuxayo' },
1830 { username: 'unextro', name: 'Ondřej Pokorný' },
1831 { username: 'unzarida', name: 'unzarida' },
1832 { username: 'vincent', name: 'Vincent Laporte' },
1833 { username: 'wanhua', name: 'wanhua' },
1834 { username: 'xinayder', name: 'Alexandre' },
1835 { username: 'xosem', name: 'Xosé M.' },
1836 { username: 'zveryok', name: 'Nikitin Stanislav' },
1837 { username: '6543', name: '6543' },
1838 { username: 'aasami', name: 'Miroslav Ďurian' },
1839 { username: 'alidemirtas', name: 'Ali Demirtas' },
1840 { username: 'alpha', name: 'Alpha' },
1841 { username: 'ariasuni', name: 'Mélanie Chauvel' },
1842 { username: 'bfonton', name: 'Baptiste Fonton' },
1843 { username: 'c0dr', name: 'c0dr lnx' },
1844 { username: 'canony', name: 'canony' },
1845 { username: 'cat', name: 'Cat' },
1846 { username: 'clerie', name: 'Clemens Riese' },
1847 { username: 'curupira', name: 'Curupira' },
1848 { username: 'dhsets', name: 'djsets' },
1849 { username: 'digitalkiller', name: 'Digital Killer' },
1850 { username: 'dwsage', name: 'd.w. sage' },
1851 { username: 'flauta', name: 'Andrea Primiani' },
1852 { username: 'frankstrater', name: 'Frank Sträter' },
1853 { username: 'gillux', name: 'gillux' },
1854 { username: 'gunchleoc', name: 'GunChleoc' },
1855 { username: 'jaidedtd', name: 'Jenga Phoenix' },
1856 { username: 'joss2lyon', name: 'Josselin' },
1857 { username: 'kekkotranslates', name: 'Francesco' },
1858 { username: 'kingu', name: 'Allan Nordhøy' },
1859 { username: 'kittybecca', name: 'Rivka bat Tsvi' },
1860 { username: 'knuxify', name: 'knuxify' },
1861 { username: 'lapor', name: 'Kristijan Tkalec' },
1862 { username: 'laufor', name: 'Lau For' },
1863 { username: 'lstamellos', name: 'Loukas Stamellos' },
1864 { username: 'lw1', name: 'Lukas Winkler' },
1865 { username: 'mablr', name: 'Mablr' },
1866 { username: 'marcinmalecki', name: 'Marcin Małecki' },
1867 { username: 'mayana', name: 'Mayana' },
1868 { username: 'mikeorlov', name: 'Michael Orlov' },
1869 { username: 'nin', name: 'nz' },
1870 { username: 'norbipeti', name: 'NorbiPeti' },
1871 { username: 'ppnplus', name: 'Phongpanot Phairat' },
1872 { username: 'predatorix', name: 'Predatorix' },
1873 { username: 'robin', name: 'Robin Lahtinen' },
1874 { username: 'rond', name: 'rondnelly nunes' },
1875 { username: 'secreet', name: 'Secreet' },
1876 { username: 'sftblw', name: 'sftblw' },
1877 { username: 'sporiff', name: 'Ciarán Ainsworth' },
1878 { username: 'tekuteku', name: 'tekuteku' },
1879 { username: 'thecatjustmeow', name: 'Nguyen Huynh Hung' },
1880 { username: 'tmota', name: 'Tiago Mota' },
1881 { username: 'uranix', name: 'Michal Mauser' },
1882 { username: 'wakutiteo', name: 'Markel' },
1883 { username: 'wonderingdane', name: 'Nicolai Ireneo-Larsen' },
1884 { username: 'zeynepeliacik', name: 'Zeynep Can' }
1888 function getContributorsBlacklist () {
1890 'Bigard Florian': true,