Skip to content

Instantly share code, notes, and snippets.

@rlmartin
Last active April 10, 2019 13:44
Show Gist options
  • Save rlmartin/c61e8f04d4d90ed3cf60b9b897f986de to your computer and use it in GitHub Desktop.
Save rlmartin/c61e8f04d4d90ed3cf60b9b897f986de to your computer and use it in GitHub Desktop.
This will list all forks of any repo in a given Github organization
const Promise = require("bluebird")
const Octokit = require('@octokit/rest')
const octokit = new Octokit({auth: 'YOUR_TOKEN_HERE'})
const per_page = 25
const repos = {}
const your_org = 'YOUR_ORG_HERE'
function forRepos(processor, page = 1) {
return octokit.repos.listForOrg({
org: your_org,
per_page,
page
}).then(({ data, status, headers }) => {
return processor(data).then(() => {
if (data.length == per_page) return forRepos(processor, page + 1);
})
})
}
function forForks(owner, repo, processor, page = 1) {
return octokit.repos.listForks({
owner,
repo,
per_page,
page
}).then(({ data, status, headers }) => {
return processor(data).then(() => {
if (data.length == per_page) return forForks(owner, repo, processor, page + 1);
})
})
}
forRepos(data => {
return Promise.each(data, (repo) => {
const num_forks = repo.forks_count
if (num_forks > 0) {
const org = repo.owner.login
const repo_name = repo.name
repos[repo_name] = {
org,
num_forks,
forks: []
}
return forForks(org, repo_name, forkData => {
return Promise.each(forkData, (fork) => {
repos[repo_name].forks.push({
owner: fork.owner.login,
name: fork.name,
num_forks: fork.forks_count,
private: fork.private
})
})
})
}
})
})
.then(() => {
Object.keys(repos).forEach(repo_name => {
const repo = repos[repo_name]
if (repo.num_forks != repo.forks.length) console.log('WARNING: ' + repo.name + ' did not return the correct number of forks.')
repo.forks.forEach(fork => {
const meta = []
if (fork.num_forks > 0) meta.push('WARNING[repo has been forked.]')
if (!fork.private > 0) meta.push('WARNING[repo is public.]')
if (fork.name != repo_name) meta.push('ORIG[' + repo_name + ']')
console.log(fork.owner + '/' + fork.name + ' ' + meta.join(';'))
})
})
})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment