Refactoring: reorganize files between client and server + initiate deployment

This commit is contained in:
2015-11-05 07:58:55 +00:00
parent fd483c0d27
commit 42e5a06750
11 changed files with 177 additions and 59 deletions

View File

@@ -21,3 +21,4 @@ twbs:bootstrap-noglyph
fortawesome:fontawesome fortawesome:fontawesome
iron:router iron:router
zenorocha:clipboard zenorocha:clipboard
simple:reactive-method

View File

@@ -61,6 +61,7 @@ reload@1.1.4
retry@1.0.4 retry@1.0.4
routepolicy@1.0.6 routepolicy@1.0.6
session@1.1.1 session@1.1.1
simple:reactive-method@1.0.2
spacebars@1.0.7 spacebars@1.0.7
spacebars-compiler@1.0.7 spacebars-compiler@1.0.7
standard-minifiers@1.0.1 standard-minifiers@1.0.1

View File

@@ -1,64 +1,71 @@
Template.management.helpers({ Template.management.onCreated(function(){
projects: function () { Meteor.subscribe('projects');
return ProjectService.list(); });
}
});
Template.projectForm.onRendered(function() { Template.management.helpers({
new Clipboard('.btn.clipboard'); projects: function () {
}); return ProjectService.list();
}
Template.projectForm.events({ });
'submit .new-project': function (event) {
event.preventDefault(); Template.projectForm.onRendered(function() {
var form = event.target; new Clipboard('.btn.clipboard');
if( form.id.value ) { });
Meteor.call('editProject',form.id.value, form.label.value, form.git_url.value, form.public_url.value, form.commands.value);
form.id.value = ''; Template.projectForm.events({
} else { 'submit .new-project': function (event) {
Meteor.call('addProject', form.label.value, form.git_url.value, form.public_url.value, form.commands.value);
}
Session.set('projectToEdit', undefined);
form.label.value = '';
form.git_url.value = '';
form.public_url.value = '';
form.commands.value = '';
},
'click .cancel': function(event) {
event.preventDefault(); event.preventDefault();
var form = event.target;
if( form.id.value ) {
Meteor.call('editProject',form.id.value, form.label.value, form.git_url.value, form.public_url.value, form.commands.value, function(errors, result) {
console.log(errors);
console.log(result);
});
form.id.value = '';
} else {
Meteor.call('addProject', form.label.value, form.git_url.value, form.public_url.value, form.commands.value);
}
Session.set('projectToEdit', undefined); Session.set('projectToEdit', undefined);
}, form.label.value = '';
form.git_url.value = '';
'click .trash': function(event) { form.public_url.value = '';
event.preventDefault(); form.commands.value = '';
},
Meteor.call('deleteProject', Session.get('projectToEdit')._id);
Session.set('projectToEdit', undefined);
}
});
Template.projectForm.helpers({ 'click .cancel': function(event) {
project: function() { event.preventDefault();
return Session.get('projectToEdit');
},
editionMode: function() { Session.set('projectToEdit', undefined);
return Session.get('projectToEdit') ? '' : 'hidden'; },
},
deployLink: function() {
return Meteor.absoluteUrl('deploy?token=XXXX&project_id=' + Session.get('projectToEdit')._id);
}
});
Template.project.events({ 'click .trash': function(event) {
'click .edit': function(event) { event.preventDefault();
event.preventDefault();
return Meteor.call('getProject', this._id, function(error, result) { Meteor.call('deleteProject', Session.get('projectToEdit')._id);
Session.set('projectToEdit', result); Session.set('projectToEdit', undefined);
}); }
}, });
});
Template.projectForm.helpers({
project: function() {
return Session.get('projectToEdit');
},
editionMode: function() {
return Session.get('projectToEdit') ? '' : 'hidden';
},
deployLink: function() {
return Meteor.absoluteUrl('deploy?token=XXXX&project_id=' + Session.get('projectToEdit')._id);
}
});
Template.project.events({
'click .edit': function(event) {
event.preventDefault();
return Meteor.call('getProject', this._id, function(error, result) {
Session.set('projectToEdit', result);
});
},
});

View File

@@ -0,0 +1,7 @@
Projects = new Mongo.Collection('projects');
ProjectService = {
list: function() {
return Projects.find({}, {sort: {label: 1}});
}
};

View File

@@ -1 +0,0 @@
Meteor.subscribe('projects');

24
server/constants.js Normal file
View File

@@ -0,0 +1,24 @@
var DEPLOYMENT_FOLDER = 'deployment',
SCRIPTS = {
CREATE : [
{
cmd: 'mkdir %CWD%',
options : {
cwd: '%ROOT_CWD%'
}
},
{
cmd: 'cd %CWD%',
options : {
cwd: '%ROOT_CWD%'
}
},
{
cmd: 'git clone %GIT% .',
options : {
cwd: '%ROOT_CWD%/%CWD%'
}
}
]
};

View File

@@ -0,0 +1,36 @@
var exec = Npm.require('child_process').exec,
execSync = function(cmd, options, stdoutHandler, stderrHandler) {
exec(cmd,
options,
Meteor.bindEnvironment(
function(error, stdout, stderr) {
if( stdout != '' ) {
stdoutHandler(stdout);
}
if( stderr != '' ) {
stderrHandler(stderr);
}
}
)
);
};
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);
execSync(command, options, stdout, stderr, function() {
counter++;
if( counter > script.length ) {
if( callback ) {
callback();
}
} else {
CommandRunner.run(script, deployment, stdout, stderr, counter, callback);
}
});
}
}

View File

@@ -0,0 +1,33 @@
Deployments = new Mongo.Collection('deployments');
DeploymentService = {
get: function(id) {
return Deployments.find({_id: id}, {date: 1});
},
appendLog: function(id, data, error) {
Deployments.update({ _id: id },{ $push: {
output: {
timestamp : new Date().getTime(),
data : data
}
}});
},
create: function(project, callback) {
return Deployment.insert({
project_id: projet._id,
timestamp: new Date().getTime(),
output: []
}, function(errors, deploymentId) {
_execSync(cmd, function(data) {
DeploymentService.appendLog(deploymentId, data, false);
}, function(data) {
DeploymentService.appendLog(deploymentId, data, true);
});
});
},
deploy: function(project) {
}
}

View File

@@ -8,7 +8,13 @@ Meteor.methods({
}, },
addProject: function(label, git_url, public_url ,commands) { addProject: function(label, git_url, public_url ,commands) {
ProjectService.insert(label, git_url, public_url ,commands); return ProjectService.insert(label, git_url, public_url ,commands, function(errors, id) {
if( id ) {
/*DeploymentService.deploy(ProjectService.get(id), function(errors, deploymentId) {
});*/
}
});
}, },
editProject: function(id, label, git_url, public_url ,commands) { editProject: function(id, label, git_url, public_url ,commands) {

View File

@@ -1,3 +1,7 @@
Meteor.publish('projects', function() { Meteor.publish('projects', function() {
return ProjectService.list(); return ProjectService.list();
});
Meteor.publish('deployment', function(id) {
return DeploymentService.get(id);
}); });