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(); |