Skip to content

Instantly share code, notes, and snippets.

@itsananderson
Last active September 16, 2016 18:30
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save itsananderson/39f23920aa7b7e78c1ab1efb0f545f36 to your computer and use it in GitHub Desktop.
Save itsananderson/39f23920aa7b7e78c1ab1efb0f545f36 to your computer and use it in GitHub Desktop.
List your GitHub repositories missing a LICENSE file

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();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment