Sfoglia il codice sorgente

Refactoring: reorganize files between client and server + initiate deployment

febbweiss 10 anni fa
parent
commit
42e5a06750

+ 1 - 0
.meteor/packages

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

+ 1 - 0
.meteor/versions

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

+ 63 - 56
client/projects.js

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

+ 7 - 0
client/projects.service.js

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

+ 0 - 1
client/subscriptions.js

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

+ 24 - 0
server/constants.js

@@ -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 - 0
server/lib/command_runner.js

@@ -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 - 0
server/lib/deployment.service.js

@@ -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) {
+        
+    }
+}

+ 7 - 1
lib/methods.js → server/lib/projects.methods.js

@@ -8,7 +8,13 @@ Meteor.methods({
   },
   
   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) {

+ 0 - 0
lib/projects.js → server/lib/projects.service.js


+ 4 - 0
server/publications.js

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