UNPKG

paratrooper

Version:

Deployment CLI for Node on Ubuntu (nginx & upstart) with Git

95 lines (80 loc) 3.37 kB
'use strict'; var fs = require('fs'); var path = require('path'); var Handlebars = require('handlebars'); var mkdirp = require('mkdirp'); var unixPathJoin = require('./utils/unix-path-join'); var templatesPath = path.join(__dirname, 'templates'); function generateStencil(type, settings) { var templatePath = path.join(templatesPath, type + '.hbs'); var template = fs.readFileSync(templatePath, { encoding: 'utf8' }); var stencil = Handlebars.compile(template); return stencil(settings); }; exports.generate = function (targetPath, settings) { if (!fs.existsSync(targetPath)) { mkdirp.sync(targetPath); } fs.writeFileSync(path.join(targetPath, settings.appName + '.conf'), generateStencil('upstart', settings)); fs.writeFileSync(path.join(targetPath, settings.appName), generateStencil('nginx', settings)); }; exports.verify = function createVerifyScript(settings) { var templatePath = path.join(__dirname, 'templates', 'verify.hbs'); var template = fs.readFileSync(templatePath, { encoding: 'utf8' }); var stencil = Handlebars.compile(template); return stencil({ appName: settings.appName, debug: settings.debug }); }; exports.remove = function createRemoveScript(settings) { var templatePath = path.join(__dirname, 'templates', 'remove.hbs'); var template = fs.readFileSync(templatePath, { encoding: 'utf8' }); var stencil = Handlebars.compile(template); // check that application exists return stencil({ appName: settings.appName, appPath: unixPathJoin(settings.serverAppPath, settings.appName), sitesEnabledPath: settings.sitesEnabledPath, nginxConfig: unixPathJoin(settings.sitesEnabledPath, settings.appName), upstartConfig: unixPathJoin('/etc/init', settings.appName + '.conf') }); }; exports.deploy = function createDeployScript(settings) { var repoPath = unixPathJoin(settings.serverAppPath, settings.appUrl); var templatePath = path.join(__dirname, 'templates', 'deploy.hbs'); var template = fs.readFileSync(templatePath, { encoding: 'utf8' }); var appConfigName = settings.appConfigName || 'config.json'; var stencil = Handlebars.compile(template); var options = { repoPath: repoPath, appPath: unixPathJoin(repoPath, settings.rootPath), appName: settings.appName, branch: settings.branch, cloneUrl: settings.cloneUrl, serverAppPath: settings.serverAppPath, sitesEnabledPath: settings.sitesEnabledPath, nginxFrom: unixPathJoin(repoPath, settings.directory, settings.appName), nginxTo: unixPathJoin(settings.sitesEnabledPath, settings.appName), upstartFrom: unixPathJoin(repoPath, settings.directory, settings.appName + '.conf'), upstartTo: unixPathJoin('/etc/init', settings.appName + '.conf'), appConfig: unixPathJoin(repoPath, settings.directory, appConfigName), appConfigName: appConfigName, npmScript: settings.npmScript, npmInstallArguments: settings.npmInstallArguments, nodeVersion: settings.nodeVersion, debug: settings.debug, errors: { cloning: 'failed to clone ' + settings.cloneUrl, branchCheckout: 'failed to checkout tracking branch ' + settings.branch, branchPull: 'failed to pull changes on ' + settings.branch } }; var deployScript = stencil(options); if (settings.debug) { console.log(deployScript); } return deployScript; };