autocode-cli
Version:
code automation for every language, framework and platform
111 lines (98 loc) • 3.27 kB
JavaScript
// Generated by CoffeeScript 1.10.0
(function() {
var fs, fstream, load, mkdirp, prompt, publish, request, tar, userHome, zlib;
fs = require('fs');
fstream = require('./publish/fstream');
load = require('./load');
mkdirp = require('mkdirp');
prompt = require('prompt');
request = require('request');
tar = require('tar-fs');
userHome = require('user-home');
zlib = require('zlib');
publish = function(opts) {
var config, crystal, dest, dest_dir, dest_file, packer;
crystal = this;
console.log('Publishing...');
this.path = opts._ && opts._[1] ? opts._[1] : '.';
dest_dir = userHome + "/.autocode/tmp";
mkdirp.sync(dest_dir);
config = load(this.path);
dest_file = dest_dir + "/" + config.name + "-" + config.version;
dest = fs.createWriteStream(dest_file + ".tar");
packer = tar.Pack().on('error', function(err) {
return console.error("An error occurred: " + err);
}).on('end', function() {
fs.createReadStream(dest_file + ".tar").pipe(zlib.createGzip()).pipe(fs.createWriteStream(dest_file + ".tgz"));
fs.unlinkSync(dest_file + ".tar");
prompt.message = '';
prompt.delimiter = '';
prompt.start();
return prompt.get({
properties: {
username: {
"default": crystal.cache('username'),
description: 'Enter your username',
required: true,
type: 'string'
},
password: {
description: 'Enter your password',
hidden: true,
required: true,
type: 'string'
}
}
}, publish);
});
publish = function(err, result) {
var formData;
if (!result) {
throw new Error('Username/Password is required.');
}
if (!result.username) {
throw new Error('Username is required.');
}
if (!result.password) {
throw new Error('Password is required.');
}
if (!crystal.cache('username')) {
crystal.cache('username', result.username);
}
formData = {
file: fs.createReadStream(dest_file + ".tgz"),
name: config.name,
version: config.version.split('.')
};
return request.post({
auth: {
username: result.username,
password: result.password
},
formData: formData,
url: crystal.url('api', 'publish')
}, function(err, resp, body) {
var name, version;
fs.unlinkSync(dest_file + ".tgz");
if (err || resp.statusCode !== 200) {
if (body === 'Version already exists.') {
name = formData.name;
version = formData.version.join('.');
throw new Error("Version already exists (" + version + ") for generator (" + name + ").");
}
throw new Error('Unable to publish project.');
}
crystal.cache('username', result.username);
return console.log('Done.');
});
};
return fstream({
folder: config.version,
path: this.path,
type: 'Directory'
}).on('error', function(err) {
return console.error("An error occurred: " + err);
}).pipe(packer).pipe(dest);
};
module.exports = publish;
}).call(this);