Populate the org and token fields with the appropriate values then run:
node repoify <github-username>
| var org = '<organization to fork to (or undefined>' | |
| var token = '<your token here>' | |
| function options(host) { | |
| return { | |
| host: host || undefined, | |
| auth: { | |
| type: 'oauth', | |
| token: token | |
| } | |
| } | |
| } | |
| var color = require('bash-color') | |
| var Promise = require('promise') | |
| var barrage = require('barrage') | |
| var github = require('github-basic') | |
| var pr = require('pull-request') | |
| github.stream('/users/:user/repos', {user: process.argv[2]}, options()) | |
| .pipe(fixupStream()) | |
| function fixupStream() { | |
| var stream = new barrage.Writable({objectMode: true}) | |
| stream._write = function (repo, _, cb) { | |
| if (repo.fork) return cb() | |
| var name = repo.full_name.split('/') | |
| fixup(name[0], name[1]) | |
| .then(function (added) { | |
| if (added) { | |
| console.log('fixed ' + color.green(name[1])) | |
| } else { | |
| console.log(color.cyan(name[1]) + ' is already correct.') | |
| } | |
| }, function (err) { | |
| console.log('failed to add repo url to ' + color.red(name[1])) | |
| console.warn(err.message.substring(0, 100)) | |
| }) | |
| .nodeify(cb) | |
| } | |
| return stream | |
| } | |
| function fixup(user, repo) { | |
| return github.buffer('GET', '/' + user + '/' + repo + '/master/package.json', {}, options('raw.github.com')) | |
| .then(function (pkg) { | |
| pkg = pkg.body | |
| var data | |
| try { | |
| data = JSON.parse(pkg) | |
| if (data.repository) { | |
| return false | |
| } | |
| data.repository = { | |
| type: 'git', | |
| url: 'https://github.com/' + user + '/' + repo + '.git' | |
| } | |
| var newpkg = JSON.stringify(data, null, /\{\n( *|\t)/.exec(pkg)[1]) | |
| if (pkg[pkg.length - 1] === '\n') { | |
| newpkg += '\n' | |
| } | |
| return submit(user, repo, newpkg) | |
| } catch (ex) { | |
| throw ex | |
| } | |
| }, function () { | |
| return false | |
| }) | |
| } | |
| function submit(user, repo, pkg) { | |
| return pr.exists(org, repo, options()) | |
| .then(function (exists) { | |
| if (exists) return false | |
| var opts = options() | |
| opts.organization = org | |
| return pr.fork(user, repo, opts) | |
| .then(function () { | |
| return pr.branch(org, repo, 'master', 'add/repository', options()) | |
| }) | |
| .then(function () { | |
| return pr.commit(org, repo, { | |
| branch: 'add/repository', | |
| message: 'add repository field to readme', | |
| updates: [{path: 'package.json', content: pkg}] | |
| }, options()) | |
| }) | |
| .then(function () { | |
| return pr.pull({ | |
| user: org, | |
| repo: repo, | |
| branch: 'add/repository' | |
| }, { | |
| user: user, | |
| repo: repo | |
| }, { | |
| title: 'Add repository field to readme', | |
| body: 'I am a bot. I add repository fields to package.json files because they\'re super useful for npm.' | |
| }, options()) | |
| }) | |
| .then(function () { | |
| return true | |
| }) | |
| }) | |
| } |