89 lines
2.7 KiB
JavaScript
89 lines
2.7 KiB
JavaScript
|
'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();
|
||
|
});
|