Fix french translations in signup page
[oweals/peertube.git] / scripts / generate-code-contributors.ts
1 import { registerTSPaths } from '../server/helpers/register-ts-paths'
2 registerTSPaths()
3
4 import { doRequest } from '../server/helpers/requests'
5 import { readFileSync } from 'fs-extra'
6
7 run()
8   .then(() => process.exit(0))
9   .catch(err => {
10     console.error(err)
11     process.exit(-1)
12   })
13
14 async function run () {
15
16   {
17     const contributors = await fetchGithub('https://api.github.com/repos/chocobozzz/peertube/contributors')
18
19     console.log('# Code contributors\n')
20     for (const contributor of contributors) {
21       const contributorUrl = contributor.url.replace('api.github.com/users', 'github.com')
22       console.log(` * [${contributor.login}](${contributorUrl})`)
23     }
24   }
25
26   {
27     const zanataConfig = readFileSync(require('os').homedir() + '/.config/zanata.ini').toString()
28     const zanataUsername = zanataConfig.match('.username=([^\n]+)')[1]
29     const zanataToken = zanataConfig.match('.key=([^\n]+)')[1]
30
31     const translators = await fetchZanata(zanataUsername, zanataToken)
32
33     console.log('\n\n# Translation contributors\n')
34     for (const translator of translators) {
35       console.log(` * [${translator.username}](https://trad.framasoft.org/zanata/profile/view/${translator.username})`)
36     }
37   }
38
39   {
40     console.log('\n\n# Design\n')
41     console.log(' * [Olivier Massain](https://twitter.com/omassain)')
42
43     console.log('\n\n# Icons\n')
44     console.log(' * [Robbie Pearce](https://robbiepearce.com/softies/)')
45     console.log(' * [Fork-Awesome](https://github.com/ForkAwesome/Fork-Awesome)')
46     console.log(' * playlist add by Google')
47   }
48 }
49
50 function get (url: string, headers: any = {}) {
51   return doRequest<any>({
52     uri: url,
53     json: true,
54     headers: Object.assign(headers, {
55       'User-Agent': 'PeerTube-App'
56     })
57   }).then(res => res.body)
58 }
59
60 async function fetchGithub (url: string) {
61   let next = url
62   let allResult = []
63
64   let i = 1
65
66   // Hard limit
67   while (i < 20) {
68     const result = await get(next + '?page=' + i)
69     if (result.length === 0) break
70
71     allResult = allResult.concat(result)
72     i++
73   }
74
75   return allResult
76 }
77
78 async function fetchZanata (zanataUsername: string, zanataPassword: string) {
79   const today = new Date().toISOString().split('T')[0]
80   const year2018 = `https://trad.framasoft.org/zanata/rest/project/peertube/version/develop/contributors/2018-01-01..2019-01-01`
81   const year2019 = `https://trad.framasoft.org/zanata/rest/project/peertube/version/develop/contributors/2019-01-01..${today}`
82
83   const headers = {
84     'X-Auth-User': zanataUsername,
85     'X-Auth-Token': zanataPassword
86   }
87   const [ results2018, results2019 ] = await Promise.all([
88     get(year2018, headers),
89     get(year2019, headers)
90   ])
91
92   return results2018.concat(results2019)
93 }