12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- 'use strict';
-
- var GITHUB_CLIENT_ID = '2031dbe958e741775201';
- var GITHUB_CLIENT_SECRET = 'd509a1e5e89248ce5d4211cb06995edcd979667d';
- var SCOPE = 'public_repo';
-
- var fs = require('fs');
- var qs = require('querystring');
- var crypto = require('crypto');
- var express = require('express');
- var opener = require('opener');
- var github = require('github-basic');
- var pr = require('pull-request');
- var readdirp = require('lsr').sync;
-
-
- // todo: check that the version is a new un-released version
- // todo: check the user has commit access to the github repo
- // todo: check the user is an owner in npm
- // todo: check History.md has been updated
-
- var version = require('./package.json').version;
- var compiledWebsite = require('./docs/stop.js');
-
- function getToken(gotToken) {
- try {
- var settings = JSON.parse(fs.readFileSync(__dirname + '/.release.json', 'utf8'));
- return gotToken(settings.token);
- } catch (ex) {
- // use server to initialize config
- }
-
- var app = express();
-
- var state = crypto.randomBytes(8).toString('hex');
- var server = null;
-
- app.get('/', function (req, res, next) {
- if (req.query.code) return next();
- res.redirect('https://github.com/login/oauth/authorize?client_id=' + GITHUB_CLIENT_ID
- + '&scope=' + SCOPE
- + '&redirect_uri=http://localhost:1337/'
- + '&state=' + state);
- });
- app.get('/', function (req, res, next) {
- var code = req.query.code;
- var u = 'https://github.com/login/oauth/access_token'
- + '?client_id=' + GITHUB_CLIENT_ID
- + '&client_secret=' + GITHUB_CLIENT_SECRET
- + '&code=' + code
- + '&state=' + state;
- github.buffer('GET', u, {}, {}, function (err, response) {
- if (err) return next(err);
- req.token = qs.parse(response.body);
- next();
- });
- });
- app.get('/', function (req, res, next) {
- res.send('got token, return to terminal');
- server.close();
- fs.writeFileSync(__dirname + '/.release.json', JSON.stringify({token: req.token}));
- gotToken(req.token);
- });
-
- server = app.listen(1337);
- server.setTimeout(3000);
- opener('http://localhost:1337');
- }
-
- getToken(function (token) {
- compiledWebsite.then(function () {
- var fileUpdates = readdirp(__dirname + '/docs/out').filter(function (info) {
- return info.isFile();
- }).map(function (info) {
- return {
- path: info.path.replace(/^\.\//, ''),
- content: fs.readFileSync(info.fullPath)
- };
- });
- return pr.commit('visionmedia', 'jade', {
- branch: 'gh-pages',
- message: 'Update website for ' + version,
- updates: fileUpdates
- }, {auth: {type: 'oauth', token: token.access_token}});
- }).then(function () {
- // todo: release the new npm package, set the tag and commit etc.
- }).done();
- });
|