in src/cli/upload.js [16:89]
module.exports = function(config, workflowDir) {
if (!workflowDir) {
exit(new Error(i18n('Workflow directory should be defined')));
return;
}
const zipPath = tmpdir(generateZipName(workflowDir));
let workflowName = path.basename(workflowDir);
const pkgPath = path.resolve(workflowDir, 'manifest.json');
if (fs.existsSync(pkgPath)) {
workflowName = require(pkgPath).name;
} else {
const obsoletePkgPath = path.resolve(workflowDir, 'package.json');
if (fs.existsSync(obsoletePkgPath)) {
workflowName = require(obsoletePkgPath).name;
}
}
zipfolder(path.resolve(config.cwd, workflowDir), zipPath, (error, zip) => {
if (error) {
return exit(error);
}
return updateWorkflow();
/**
* @param {boolean} [isCreate]
* @returns {import('http').ClientRequest}
*/
function updateWorkflow(isCreate) {
const form = new FormData();
form.append('file', fs.createReadStream(zip.path), {filename:workflowName + '.zip'});
let message = HttpMessage(resolve(config.host, '/api/admin/workflows/import'));
const options = {
method: 'POST',
headers: form.getHeaders()
};
if (config.token) {
const signHeaders = HttpMessage.sign(config.token);
options.headers = {...options.headers, ...signHeaders.headers};
}
const req = request(message, options, (error) => {
if (error && error.statusCode === 404 && !isCreate) { // Try to create new workflow
return updateWorkflow(true);
}
if (error) {
return exit(error);
}
if (isCreate) {
console.log(i18n('Workflow "' + workflowName + '" created'));
} else {
console.log(i18n('Workflow "' + workflowName + '" uploaded'));
}
});
form.pipe(req);
return req;
}
});
/**
* @param {string} workflowDir
* @returns {string}
*/
function generateZipName(workflowDir) {
return 'youtrack-workflow-' + path.basename(workflowDir) + '.zip';
}
};