Last active
April 10, 2019 13:44
-
-
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
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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