probot/bin/probot-run.js

62 lines
1.8 KiB
JavaScript
Raw Normal View History

2017-03-18 12:04:23 +08:00
#!/usr/bin/env node
require('dotenv').config();
const pkgConf = require('pkg-conf');
2017-03-18 12:04:23 +08:00
const program = require('commander');
const {findPrivateKey} = require('../lib/private-key');
2017-03-18 12:04:23 +08:00
program
.usage('[options] <plugins...>')
.option('-a, --app <id>', 'ID of the GitHub App', process.env.APP_ID)
.option('-s, --secret <secret>', 'Webhook secret of the GitHub App', process.env.WEBHOOK_SECRET)
2017-03-18 12:04:23 +08:00
.option('-p, --port <n>', 'Port to start the server on', process.env.PORT || 3000)
.option('-P, --private-key <file>', 'Path to certificate of the GitHub App', findPrivateKey)
.option('-t, --tunnel <subdomain>', 'Expose your local bot to the internet', process.env.SUBDOMAIN || process.env.NODE_ENV !== 'production')
2017-03-18 12:04:23 +08:00
.parse(process.argv);
if (!program.app) {
console.warn('Missing GitHub App ID.\nUse --app flag or set APP_ID environment variable.');
2017-03-20 00:51:45 +08:00
program.help();
}
if (!program.privateKey) {
program.privateKey = findPrivateKey();
}
if (program.tunnel) {
2017-04-09 05:52:53 +08:00
try {
const setupTunnel = require('../lib/tunnel');
setupTunnel(program.tunnel, program.port).then(tunnel => {
console.log('Listening on ' + tunnel.url);
}).catch(err => {
console.warn('Could not open tunnel: ', err.message);
});
} catch (err) {
2017-04-09 05:52:53 +08:00
console.warn('Run `npm install --save-dev localtunnel` to enable localtunnel.');
}
}
2017-03-18 12:04:23 +08:00
const createProbot = require('../');
const probot = createProbot({
id: program.app,
2017-03-18 12:04:23 +08:00
secret: program.secret,
2017-03-20 00:58:12 +08:00
cert: program.privateKey,
2017-03-18 12:04:23 +08:00
port: program.port
});
pkgConf('probot').then(pkg => {
const plugins = require('../lib/plugin')(probot);
const requestedPlugins = program.args.concat(pkg.plugins || []);
2017-03-18 12:04:23 +08:00
// If we have explicitly requested plugins, load them; otherwise use autoloading
if (requestedPlugins.length > 0) {
plugins.load(requestedPlugins);
} else {
plugins.autoload();
}
2017-03-18 12:04:23 +08:00
probot.start();
});