From ce6f3a95ceeb9142f823b1f7b3c02a63ff77c5d2 Mon Sep 17 00:00:00 2001 From: jweg <jweg@informatik.uni-kiel.de> Date: Thu, 6 Jul 2017 16:50:10 +0200 Subject: [PATCH] work in progress: promises for zip --- app.js | 211 ++++++++++++++++++++++++--------------------------------- 1 file changed, 88 insertions(+), 123 deletions(-) diff --git a/app.js b/app.js index 2c89efe..a75048d 100644 --- a/app.js +++ b/app.js @@ -14,10 +14,10 @@ var exphbs = require('express-handlebars'); //initializer var nanit = require('nanit'); //load names of available download files -var downloadFiles = require('./downloadFiles.json'); -var downloadNames = Object.keys(downloadFiles); +const downloadFiles = require('./downloadFiles.json'); +const downloadNames = Object.keys(downloadFiles); -var app = express(); +let app = express(); app.use(bodyParser.urlencoded({ extended: true @@ -29,13 +29,13 @@ app.engine('.hbs', exphbs({extname: '.hbs'})); app.set('view engine', '.hbs'); //initialize the git repos -//TODO error handling is not working properly, error returned is not in var error, but in req + req and res are undefined! +//TODO error handling is not working properly, error returned is not in let error, but in req + req and res are undefined! // nanit.initialize(downloadFiles, function(req,res,err){ // // console.log('err in nanit.initialize:', err); // // console.log('req in nanit.initialize:', req); // // console.log('res in nanit.initialize:', res); -// var response = +// let response = // 'There was an error during cloning the git repositories. ' + // 'Please contact "explorviz-developers-request@listserv.dfn.de" ' + // 'and add the following information: ' + req; @@ -69,14 +69,11 @@ app.get('/download', function(req, res){ const promiseArray = [] const checkedFiles = req.query.checkedFiles.split(','); -const zip = new JSZip(); // create a file to stream archive data to. +const zip = new JSZip(); zip.file("README.txt", "text for README"); -var frontendFinished = false; -var backendFinished = false; -//----------------------------------------------------------------backend backendChecked = checkedFiles.find(function(file){ return file === 'explorviz-ui-backend'; }); @@ -86,30 +83,26 @@ if (backendChecked){ const fileName = backendChecked; const downloadURL = downloadFiles[backendChecked]; -const backendPromise = new Promise((resolve, reject)=> { + const backendPromise = new Promise((resolve, reject)=> { exec('git pull ' + ' && cd ' + fileName + ' && mvn compile war:war ', (error, stdout, stderr) => { - //addBackend(); - - console.log('error in exec', error); if (error) { reject(error); - // res.send(response); beim promise.all - return; + return; } console.log(stdout); console.log(stderr); -resolve({fileName:"backend.war", path:"explorviz-ui-backend/target/explorviz-ui-backend-1.0-SNAPSHOT.war"}); + +resolve({zipFileName:'backend.war', path:'explorviz-ui-backend/target/explorviz-ui-backend-1.0-SNAPSHOT.war'}); }); }) -promiseArray.push(backendPromise); -console.log('promiseArray:',promiseArray); + promiseArray.push(backendPromise); + console.log('promiseArray:',promiseArray); } -//--------------------------------------------------------------------------------frontend frontendChecked = checkedFiles.find(function(file){ return file === 'explorviz-ui-frontend'; @@ -119,123 +112,113 @@ if (frontendChecked){ const fileName = frontendChecked; const downloadURL = downloadFiles[frontendChecked]; -exec('git pull ', (error, stdout, stderr) => { -installAddons(); - var response = - 'There was an error during your build. ' + - 'Please contact "explorviz-developers-request@listserv.dfn.de" ' + - 'and add the following information: ' + error; +const frontendPullPromise = new Promise((resolve, reject) => { + console.log('resolve frontendPullPromise', resolve); + exec('cd ' + fileName + ' git pull ', (error, stdout, stderr) => { - if (error) { - res.send(response); - return; - } + if (error) { + reject(error) + return; + } -}); + console.log(stdout); + console.log(stderr); +resolve(); + }); +}) +promiseArray.push(frontendPullPromise); +console.log('promiseArray.push(frontendPullPromise):',promiseArray); -}; -function installAddons(){ -console.log('in installAddons()'); -checkedPlugins = checkedFiles.filter(function(file){ - return /\bexplorviz-frontend-plugin-\w*/.exec(file); -}); +// const frontendInstallAddons = frontendPullPromise.then((resolve, reject) => { - checkedPlugins.forEach((pluginName) => { - exec('cd ' + 'explorviz-ui-frontend ' + 'ember install ' + downloadFiles[pluginName], (error, stdout, stderr) => { - - var response = - 'There was an error during your build. ' + - 'Please contact "explorviz-developers-request@listserv.dfn.de" ' + - 'and add the following information: ' + error; +// console.log('in installAddons()'); +// checkedPlugins = checkedFiles.filter(function(file){ +// return /\bexplorviz-frontend-plugin-\w*/.exec(file); +// }); +// console.log('checkedPlugins', checkedPlugins); +// checkedPlugins.forEach((pluginName) => { +// exec('cd ' + 'explorviz-ui-frontend ' + 'ember install ' + downloadFiles[pluginName], (error, stdout, stderr) => { +// console.log('in exec plugin install'); +// console.log('error in exec plugin install', error); +// if (error) { +// reject(error); +// return; +// } - if (error) { - res.send(response); - return; - } +// console.log(stdout); +// console.log(stderr); -console.log(stdout); -console.log(stderr); +// resolve({zipFileName:'Zwischenschritt2', path:'./explorviz-ui-frontend/dist/'}); - }); +// }); -}); - buildFrontend(); -}; +// }) +// }) +//promiseArray.push(frontendInstallAddons); +//console.log('promiseArray.push(frontendInstallAddons):',promiseArray); -function buildFrontend(){ - console.log('buildFrontend()'); +const frontendBuildPromise = frontendPullPromise.then((resolve)=> { +console.log('resolve frontendBuildPromise', resolve); //build everything you have -exec('cd explorviz-ui-frontend && ember build --environment=production', (error, stdout, stderr) => { -//exec('cd explorviz-ui-frontend', (error, stdout, stderr) => { +exec('cd ' + fileName +' && ember build --environment=production', (error, stdout, stderr) => { -addFrontend(); + // if (error) { + // reject(error); + // return; + // } + console.log(stdout); + console.log(stderr); - var response = - 'There was an error during your build. ' + - 'Please contact "explorviz-developers-request@listserv.dfn.de" ' + - 'and add the following information: ' + error; - - if (error) { - res.send(response); - return; - } + resolve({zipFileName:'frontend', path:'./explorviz-ui-frontend/dist/'}); + }); -console.log(stdout); -console.log(stderr); - }); - }; // ------------------------------------------ember build - - -// function addBackend(){ -// // read a file as a stream and add it to a zip -// console.log('addBackend()'); -// const backendStream = fs.createReadStream("explorviz-ui-backend/target/explorviz-ui-backend-1.0-SNAPSHOT.war"); -// zip.file("backend.war", backendStream); -// backendFinished = true; -// createZip(); -// }; - -function addFrontend(){ - console.log("in addFrontend"); - -var stream = fsReaddir('./explorviz-ui-frontend/dist/') -.on('error', function(err) { - console.log('error:', err); -}).on('data', function(data){ - - for (var i=0; i<data.length; i++) { - const frontendStream = fs.createReadStream(data[i]); - zip.file(data[i], frontendStream); -} +}) +console.log('frontendBuildPromise:', frontendBuildPromise); +promiseArray.push(frontendBuildPromise); +console.log('promiseArray:',promiseArray); -}).on('finish',function(){ - frontendFinished = true; - createZip(); -}); }; -Promise.all(promiseArray).then(files => { -//if (files.fileName === "backend.war"){ -console.log('files.path' ,files.path); -console.log('files.fileName', files.fileName); - backendStream = fs.createReadStream(files.path); -zip.file(files.fileName, backendStream); +Promise.all(promiseArray).then(files => { +console.log('in promise.all: promiseArray', promiseArray); + files.forEach(file => { + if (file.zipFileName === 'backend.war'){ + backendStream = fs.createReadStream(file.path); + zip.file(file.zipFileName, backendStream); + } + if(file.zipFileName === 'frontend'){ + console.log('zipFileName: frontend', file.zipFileName); + const stream = fsReaddir(file.path) + .on('error', function(err) { + console.log('error:', err); + }).on('data', function(data){ + for (let i=0; i<data.length; i++) { + const frontendStream = fs.createReadStream(data[i]); + zip.file(data[i], frontendStream); + } + + }) + + } + + + }); zip.generateNodeStream({type:'nodebuffer',streamFiles:true}).pipe(fs.createWriteStream('explorviz-builds.zip')).on('finish', function () { console.log('explorviz-builds.zip written.'); res.download('explorviz-builds.zip'); }); - }).catch(function(error) {let response = +}).catch(function(error) {let response = 'There was an error during your build. ' + 'Please contact "explorviz-developers-request@listserv.dfn.de" ' + 'and add the following information: ' + error; @@ -243,24 +226,6 @@ zip.generateNodeStream({type:'nodebuffer',streamFiles:true}).pipe(fs.createWrite }) - - - -// function createZip(){ -// console.log('frontendFinished', frontendFinished); -// console.log('backendFinished', backendFinished); - -// //create zip and download it -// zip.generateNodeStream({type:'nodebuffer',streamFiles:true}).pipe(fs.createWriteStream('explorviz-builds.zip')).on('finish', function () { -// // JSZip generates a readable stream with a "end" event, -// // but is piped here in a writable stream which emits a "finish" event. -// console.log("explorviz-builds.zip written."); -// res.download('explorviz-builds.zip'); -// }); - - -// }; - }); -- GitLab