aboutsummaryrefslogblamecommitdiffhomepage
path: root/scripts/generate-code-contributors.ts
blob: 8cc3dc5b454b49783334811cfd5014c29944fe5b (plain) (tree)
1
2
3
4
5
6
7
                                                                     
 

                 
                                                      
                                       
                               












                                                                                                           
                                        












                                                                                                 
                                                   






                                                                                                                       





                                                                                 



                                               
                         



























                                                                             

                                                                                                                                




                                  




                                                          
                                                              
 
import { registerTSPaths } from '../server/helpers/register-ts-paths'

registerTSPaths()

import { doRequest } from '../server/helpers/requests'
import { readFileSync } from 'fs-extra'
import { uniqBy } from 'lodash'

run()
  .then(() => process.exit(0))
  .catch(err => {
    console.error(err)
    process.exit(-1)
  })

async function run () {

  {
    const contributors = await fetchGithub('https://api.github.com/repos/chocobozzz/peertube/contributors')

    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('\n\n# Design\n')
    console.log(' * [Olivier Massain](https://twitter.com/omassain)')

    console.log('\n\n# Icons\n')
    console.log(' * [Robbie Pearce](https://robbiepearce.com/softies/)')
    console.log(' * [Fork-Awesome](https://github.com/ForkAwesome/Fork-Awesome)')
    console.log(' * playlist add by Google')
  }
}

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

  // Hard limit
  while (i < 20) {
    const result = await get(next + '?page=' + i)
    if (result.length === 0) break

    allResult = allResult.concat(result)
    i++
  }

  return allResult
}

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}`

  const headers = {
    'X-Auth-User': zanataUsername,
    'X-Auth-Token': zanataPassword
  }
  const [ results2018, results2019 ] = await Promise.all([
    get(year2018, headers),
    get(year2019, headers)
  ])

  return uniqBy((results2018.concat(results2019)), 'username')
}