Feature: add deployment + deployment logs

This commit is contained in:
2015-11-25 15:13:00 +00:00
parent 9c8ed27c1b
commit e135c5d2c6
19 changed files with 416 additions and 68 deletions

View File

@@ -1,35 +1,83 @@
var exec = Npm.require('child_process').exec,
execSync = function(cmd, options, stdoutHandler, stderrHandler) {
execSync = function(cmd, options, stdoutHandler, stderrHandler, callback) {
stdoutHandler('$ ' + cmd);
exec(cmd,
options,
Meteor.bindEnvironment(
function(error, stdout, stderr) {
if( stdout != '' ) {
if( stdout !== '' ) {
stdoutHandler(stdout);
}
if( stderr != '' ) {
stderrHandler(stderr);
}
callback();
}
)
);
},
replace = function(string, customs = {}) {
var globals = {'%ROOT_CWD%': DEPLOYMENT_FOLDER};
for(var key in globals) {
string = string.replace(key, globals[key]);
}
for(var key in customs) {
string = string.replace(key, customs[key]);
}
return string;
};
var CommandRunner = {
run: function( script, deployment, stdout, stderr, counter, callback ) {
var command = script[command].cmd.replace('%ROOT_CWD%', DEPLOYMENT_FOLDER).replace('%CWD%', deployment._id),
options = script[command].options;
options.cwd.replace('%ROOT_CWD%', DEPLOYMENT_FOLDER).replace('%CWD%', deployment._id);
CommandRunner = {
run: function( data, callback = undefined) {
var bundle = _.extend({deployment: {}, project:{}, stdout: console.log, stderr: console.error, counter: 0, deploy_script: true}, data),
customs = {'%CWD%': bundle.project._id, '%GIT%': bundle.project.git_url};
var line = bundle.script[bundle.counter],
command = replace(line.cmd, customs ),
options = line.options;
options.cwd = replace(options.cwd, customs);
execSync(command, options, stdout, stderr, function() {
counter++;
if( counter > script.length ) {
if( callback ) {
execSync(command, options, bundle.stdout, bundle.stderr, function() {
bundle.counter++;
if( bundle.counter >= bundle.script.length ) {
if( bundle.deploy_script && bundle.project.commands ) {
bundle.deploy_script = false;
bundle.script = bundle.project.commands.split('\n');
bundle.counter = 0;
CommandRunner.commands(bundle, callback);
} else if( callback ) {
if( bundle.deployment ) {
DeploymentService.update_status(bundle.deployment._id, 'closed', callback);
} else {
callback();
}
}
} else {
CommandRunner.run(bundle, callback);
}
});
},
commands: function(bundle, callback = undefined) {
var command = bundle.script[bundle.counter],
customs = {'%CWD%': bundle.project._id},
options = {
cwd: replace('%ROOT_CWD%/%CWD%', customs)
};
execSync(command, options, bundle.stdout, bundle.stderr, function() {
bundle.counter++;
if( bundle.counter >= bundle.script.length ) {
if( bundle.deployment ) {
DeploymentService.update_status(bundle.deployment._id, 'closed', callback);
} else {
callback();
}
} else {
CommandRunner.run(script, deployment, stdout, stderr, counter, callback);
CommandRunner.commands(bundle, callback);
}
});
}