o3-panther-cli
Version:
Panther CLI for developing and editing sites.
61 lines (58 loc) • 1.98 kB
JavaScript
const req = require('request-promise').defaults({ jar: true });
const jszip = require('jszip');
const path = require('path');
const fs = require('fs');
const cnf = require(path.resolve(process.cwd(), 'o3.json'));
const zip = new jszip();
const addFile = (filepath, cut) => {
var p = filepath.substr(cut);
if (fs.lstatSync(filepath).isDirectory()) {
if (p != '') {
console.log("Archiving Folder:", filepath);
zip.folder(p);
}
var directory = fs.readdirSync(filepath);
directory.forEach(function (subfilepath) {
addFile(path.join(filepath, subfilepath), cut);
});
} else {
console.log("Archiving File:", filepath);
let norm = p.replace(/\\/g, '/');
zip.file(norm, fs.readFileSync(filepath, 'binary'), { binary: true });
}
};
module.exports = () => {
console.log('adding files');
addFile(cnf.local.www, cnf.local.www.length + 1);
console.log('compressing files');
zip.generateAsync({
type: 'nodebuffer',
compression: "DEFLATE",
compressionOptions: {
level: 9
},
streamFiles: true
}).then(function (content) {
let url = (cnf.remote.https ? 'https://' : 'http://') + cnf.remote.domain + cnf.remote.uri_update;
console.log('uploading files to:', url);
fs.writeFileSync('panther_deployment.zip', content);
var opt = {
method: 'POST',
uri: url,
formData: {
file: {
value: fs.createReadStream('panther_deployment.zip'),
options: {
filename: 'deploy.zip',
contentType: 'application/zip'
}
}
}
}
return req(opt).then(function (body) {
console.log(body);
}).catch(function (err) {
console.log(err.message);
});
});
}