Feature: add command line to run app and environment variables settings

This commit is contained in:
2015-12-07 15:37:41 +00:00
parent 75c0ec650c
commit fe4ac511fc
6 changed files with 193 additions and 27 deletions

View File

@@ -33,7 +33,7 @@ var exec = Npm.require('child_process').exec,
CommandRunner = {
run: function( data, callback = undefined) {
var bundle = _.extend({deployment: {}, project:{}, stdout: console.log, stderr: console.error, counter: 0, deploy_script: true}, data),
var bundle = _.extend({deployment: {}, project:{}, stdout: console.log, stderr: console.error, counter: 0, step: 0}, data),
customs = {'%CWD%': bundle.project._id, '%GIT%': bundle.project.git_url};
var line = bundle.script[bundle.counter],
@@ -50,14 +50,18 @@ CommandRunner = {
return;
}
}
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');
if( bundle.step < 1 ) {
bundle.step++;
bundle.counter = 0;
CommandRunner.commands(bundle, callback);
if( bundle.project.commands ) {
bundle.script = bundle.project.commands.split('\n');
CommandRunner.commands(bundle, callback);
} else if( callback ) {
callback();
}
} else if( callback ) {
callback();
}
@@ -85,10 +89,38 @@ CommandRunner = {
bundle.counter++;
if( bundle.counter >= bundle.script.length ) {
callback();
if( bundle.project.run ) {
bundle.script = [bundle.project.run];
bundle.counter = 0;
CommandRunner.launch(bundle, callback);
} else {
callback();
}
} else {
CommandRunner.commands(bundle, callback);
}
});
},
launch: function(bundle, callback = undefined) {
var command = bundle.script[bundle.counter],
customs = {'%CWD%': bundle.project._id},
options = {
cwd: replace('%ROOT_CWD%/%CWD%', customs),
env: {}
},
variables = bundle.project.variables;
for( var index in variables ) {
options.env[variables[index].name] = variables[index].value;
}
execSync(command, options, bundle.stdout, bundle.stderr, function(errors) {
if( callback ) {
return callback();
} else {
return;
}
});
}
}

View File

@@ -7,16 +7,16 @@ Meteor.methods({
return ProjectService.get(id);
},
addProject: function(label, git_url, public_url ,commands) {
return ProjectService.insert(label, git_url, public_url ,commands, function(errors, id) {
addProject: function(label, git_url, public_url ,commands, run, variables) {
return ProjectService.insert(label, git_url, public_url ,commands, run, variables, function(errors, id) {
if( id ) {
DeploymentService.create(ProjectService.get(id));
}
});
},
editProject: function(id, label, git_url, public_url ,commands) {
ProjectService.update(id, label, git_url, public_url ,commands, function(errors, updated_count) {
editProject: function(id, label, git_url, public_url ,commands, run, variables) {
ProjectService.update(id, label, git_url, public_url ,commands, run, variables, function(errors, updated_count) {
if( updated_count ) {
DeploymentService.update(id);
}

View File

@@ -1,23 +1,27 @@
Projects = new Mongo.Collection('projects');
ProjectService = {
insert: function(label, git_url, public_url, commands, callback) {
insert: function(label, git_url, public_url, commands, run, variables, callback) {
Projects.insert({
label: label,
git_url: git_url,
public_url: public_url,
commands: commands
run: run,
commands: commands,
variables: variables
}, callback);
},
update: function(id, label, git_url, public_url ,commands, callback) {
update: function(id, label, git_url, public_url ,commands, run, variables, callback) {
Projects.update(
id,
{ $set: {
label: label,
git_url: git_url,
public_url: public_url,
commands: commands
commands: commands,
run: run,
variables: variables
}
},
callback