UNPKG

kuduscript

Version:

Tool for generating deployment scripts for Azure Websites

140 lines (124 loc) 6.07 kB
var commander = require('commander'); var generator = require('../lib/generator'); if (!String.prototype.endsWith) { String.prototype.endsWith = require('../lib/polyfill.js').endsWith; } var version = require('../package.json').version; function addDeploymentScriptOptions(command) { command .usage('[options]') .description('Generate custom deployment script') .option('-r, --repositoryRoot [dir path]', 'The root path for the repository (default: .)') .option('--aspWAP <projectFilePath>', 'Create a deployment script for .NET web application, specify the project file path') .option('--aspNetCore <projectFilePath>', 'Create a deployment script for ASP.NET Core web application, specify the project file path') // could be project.json, xproj, csproj .option('--aspWebSite', 'Create a deployment script for basic website') .option('--go', 'Create a deployment script for Go website') .option('--node', 'Create a deployment script for node.js website') .option('--ruby', 'Create a deployment script for ruby website') .option('--php', 'Create a deployment script for php website') .option('--python', 'Create a deployment script for python website') .option('--functionApp [projectFilePath]', 'Create a deployment script for function App, specify the project file path if using msbuild') .option('--basic', 'Create a deployment script for any other website') .option('--dotNetConsole <projectFilePath>', 'Create a deployment script for .NET console application, specify the project file path') .option('-s, --solutionFile <file path>', 'The solution file path (sln)') .option('-p, --sitePath <directory path>', 'The path to the site being deployed (default: same as repositoryRoot)') .option('-t, --scriptType <batch|bash|posh>', 'The script output type (default: batch)') .option('-o, --outputPath <output path>', 'The path to output generated script (default: same as repository root)') .option('-y, --suppressPrompt', 'Suppresses prompting to confirm you want to overwrite an existing destination file.') .option('--no-dot-deployment', 'Do not generate the .deployment file.') .option('--no-solution', 'Do not require a solution file path (only for --aspWAP otherwise ignored).'); } function tryOptionalInput(argument) { // if argument == true, means option is specified, but optional input IS NOT provided // if argument != true, value of its optional input is stored in argument return argument === true ? undefined : argument; } function deploymentScriptExecute(name, options, log, confirm, _) { var repositoryRoot = options.repositoryRoot || '.'; var outputPath = options.outputPath || repositoryRoot; var scriptType = options.scriptType; var projectFile = options.aspWAP || options.dotNetConsole || options.aspNetCore || tryOptionalInput(options.functionApp); var solutionFile = options.solutionFile; var sitePath = options.sitePath || repositoryRoot; var noDotDeployment = options.dotDeployment === false; var noSolution = options.solution === false; var exclusionFlags = [options.aspWAP, options.php, options.python, options.aspWebSite, options.node, options.ruby, options.basic, options.functionApp, options.dotNetConsole, options.aspNetCore, options.go]; var flagCount = 0; for (var i in exclusionFlags) { if (exclusionFlags[i]) { flagCount++; } } if (flagCount === 0) { options.helpInformation(); log.help(''); log.help('Please specify one of these flags: --aspWAP, --aspNetCore, --aspWebSite, --php, --python, --dotNetConsole, --basic, --ruby, --functionApp or --node'); return; } else if (flagCount > 1) { throw new Error('Please specify only one of these flags: --aspWAP, --aspNetCore, --aspWebSite, --php, --python, --dotNetConsole, --basic, --ruby, --functionApp or --node'); } var projectType; if (options.aspWAP) { projectType = generator.ProjectType.wap; } else if (options.aspNetCore) { projectType = generator.ProjectType.aspNetCore; } else if (options.aspWebSite) { projectType = generator.ProjectType.website; } else if (options.go) { projectType = generator.ProjectType.go; } else if (options.node) { projectType = generator.ProjectType.node; } else if (options.python) { projectType = generator.ProjectType.python; } else if (options.dotNetConsole) { projectType = generator.ProjectType.dotNetConsole; } else if (options.functionApp) { projectType = generator.ProjectType.functionApp; } else if (options.ruby) { projectType = generator.ProjectType.ruby; } else if (options.php) { projectType = generator.ProjectType.php; } else { projectType = generator.ProjectType.basic; } var confirmFunc = confirm; if (options.suppressPrompt) { confirmFunc = function (message, callback) { callback(undefined, true); }; } var scriptGenerator = new generator.ScriptGenerator(repositoryRoot, projectType, projectFile, solutionFile, sitePath, scriptType, outputPath, noDotDeployment, noSolution, log, confirmFunc); scriptGenerator.generateDeploymentScript(_); } var log = {}; log.info = function (msg) { console.log(msg); }; log.help = function (msg) { console.log(msg); }; log.error = function (msg) { console.error("error: " + msg); }; function main() { commander.version(version); addDeploymentScriptOptions(commander); commander.parse(process.argv); if (!commander.suppressPrompt) { log.error('Unsuppressed prompt mode is not supported, please add -y flag'); process.exit(1); } deploymentScriptExecute( '', commander, log, null, function (err) { if (err) { log.error(err.message); process.exit(1); } process.exit(0); }); } exports.addDeploymentScriptOptions = addDeploymentScriptOptions; exports.deploymentScriptExecute = deploymentScriptExecute; exports.main = main;