mirror of
https://github.com/Febbweiss/ProjectDeployer.git
synced 2026-03-04 22:25:38 +00:00
Refactoring: reorganize files between client and server + initiate deployment
This commit is contained in:
@@ -21,3 +21,4 @@ twbs:bootstrap-noglyph
|
|||||||
fortawesome:fontawesome
|
fortawesome:fontawesome
|
||||||
iron:router
|
iron:router
|
||||||
zenorocha:clipboard
|
zenorocha:clipboard
|
||||||
|
simple:reactive-method
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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({
|
Template.projectForm.onRendered(function() {
|
||||||
'submit .new-project': function (event) {
|
new Clipboard('.btn.clipboard');
|
||||||
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);
|
|
||||||
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);
|
Template.projectForm.events({
|
||||||
form.label.value = '';
|
'submit .new-project': function (event) {
|
||||||
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 = '';
|
||||||
|
form.public_url.value = '';
|
||||||
|
form.commands.value = '';
|
||||||
|
},
|
||||||
|
|
||||||
'click .trash': function(event) {
|
'click .cancel': function(event) {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
|
|
||||||
Meteor.call('deleteProject', Session.get('projectToEdit')._id);
|
Session.set('projectToEdit', undefined);
|
||||||
Session.set('projectToEdit', undefined);
|
},
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
Template.projectForm.helpers({
|
'click .trash': function(event) {
|
||||||
project: function() {
|
event.preventDefault();
|
||||||
return Session.get('projectToEdit');
|
|
||||||
},
|
|
||||||
|
|
||||||
editionMode: function() {
|
Meteor.call('deleteProject', Session.get('projectToEdit')._id);
|
||||||
return Session.get('projectToEdit') ? '' : 'hidden';
|
Session.set('projectToEdit', undefined);
|
||||||
},
|
}
|
||||||
|
});
|
||||||
|
|
||||||
deployLink: function() {
|
Template.projectForm.helpers({
|
||||||
return Meteor.absoluteUrl('deploy?token=XXXX&project_id=' + Session.get('projectToEdit')._id);
|
project: function() {
|
||||||
}
|
return Session.get('projectToEdit');
|
||||||
});
|
},
|
||||||
|
|
||||||
Template.project.events({
|
editionMode: function() {
|
||||||
'click .edit': function(event) {
|
return Session.get('projectToEdit') ? '' : 'hidden';
|
||||||
event.preventDefault();
|
},
|
||||||
return Meteor.call('getProject', this._id, function(error, result) {
|
|
||||||
Session.set('projectToEdit', result);
|
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);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
});
|
||||||
7
client/projects.service.js
Normal file
7
client/projects.service.js
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
Projects = new Mongo.Collection('projects');
|
||||||
|
|
||||||
|
ProjectService = {
|
||||||
|
list: function() {
|
||||||
|
return Projects.find({}, {sort: {label: 1}});
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -1 +0,0 @@
|
|||||||
Meteor.subscribe('projects');
|
|
||||||
24
server/constants.js
Normal file
24
server/constants.js
Normal 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%'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
||||||
36
server/lib/command_runner.js
Normal file
36
server/lib/command_runner.js
Normal 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);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
33
server/lib/deployment.service.js
Normal file
33
server/lib/deployment.service.js
Normal 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) {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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) {
|
||||||
@@ -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);
|
||||||
|
});
|
||||||
Reference in New Issue
Block a user