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