Get a token from https://github.com/settings/tokens
npm install babel-cli babel-preset-es2015 request
mkdir out
./node_modules/.bin/babel index.js -o out/index.js
node out/index.js <token>
Get a token from https://github.com/settings/tokens
npm install babel-cli babel-preset-es2015 request
mkdir out
./node_modules/.bin/babel index.js -o out/index.js
node out/index.js <token>
#!/usr/bin/env node | |
var request = require("request"); | |
var token; | |
if (process.argv.length < 3) { | |
console.log("GitHub token required. Create one here: https://github.com/settings/tokens"); | |
process.exit(1); | |
} else { | |
token = process.argv[2]; | |
} | |
var query = { | |
operationName: "PagedRepositories", | |
variables: JSON.stringify({cursor: ""}), | |
query: ` | |
query PagedRepositories($cursor: String) { | |
viewer { | |
repositories(first:25, after:$cursor) { | |
pageInfo { | |
endCursor | |
hasNextPage | |
} | |
edges { | |
node { | |
name | |
isFork | |
object(expression:"master") { | |
... on Commit { | |
tree { | |
entries { | |
name | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
` | |
} | |
var allRepositories = []; | |
function loadNext(cursor = "") { | |
query.variables = JSON.stringify({cursor: cursor}); | |
request({ | |
url: "https://api.github.com/graphql", | |
method: "POST", | |
body: JSON.stringify(query), | |
headers: { | |
"User-Agent": "License Checker", | |
Authorization: "Bearer " + token | |
} | |
}, function(err, response, body) { | |
var result = JSON.parse(body); | |
var pageInfo = result.data.viewer.repositories.pageInfo; | |
var edges = result.data.viewer.repositories.edges.map((edge) => edge.node); | |
allRepositories = allRepositories.concat(edges); | |
if (pageInfo.hasNextPage) { | |
setTimeout(() => { | |
loadNext(pageInfo.endCursor); | |
}); | |
} else { | |
var sources = allRepositories.filter((r) => !r.isFork && r.object); | |
sources = sources.map((repo) => { | |
return { | |
name: repo.name, | |
entries: repo.object.tree.entries.filter((e) => e.name === "LICENSE") | |
}; | |
}); | |
console.log(sources.filter(r => r.entries.length === 0).map(r => r.name).join("\n")); | |
} | |
}); | |
} | |
loadNext(); |