mediacentral-publish
Version:
A publish tool for publishing cloud-ux projects
79 lines (72 loc) • 4.67 kB
JavaScript
function _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { return Promise.resolve(value).then(function (value) { step("next", value); }, function (err) { step("throw", err); }); } } return step("next"); }); }; }
const { readFileSync, writeFileSync, existsSync, mkdirSync } = require('fs');
const { join } = require('path');
const { execSync } = require('child_process');
const ejs = require('ejs');
const logger = require.main.require('log4js').getLogger(`mediacentral-publish ${__filename}`);
/**
* Create helm chart for service using template files
* @param {Object} options
* @param {String} options.targetDir
* @param {String} options.chartDir
* @param {String} options.projectName
* @param {String | Number} options.version
* @param {String} options.organization
* @returns {{file: path}} {file: path}
*/
module.exports = (() => {
var _ref = _asyncToGenerator(function* ({ targetDir, chartDir, projectName, version: projectVersion, organization: projectOrganization }) {
logger.trace('Creating Helm Chart with path: ', targetDir, '\nProject Name: ', projectName, '\n Version ', projectVersion, '\nAnd organization: ', projectOrganization);
const helm_chart_path = join(targetDir, projectName);
if (!existsSync(helm_chart_path)) {
mkdirSync(join(targetDir, `${projectName}`));
mkdirSync(join(targetDir, `${projectName}`, 'templates'));
}
const resolveChartPath = function (relativePath) {
if (chartDir) {
const chartPath = join(chartDir, relativePath);
if (existsSync(chartPath)) {
logger.info(`Using custom chart template ${relativePath} -> ${chartPath}`);
return chartPath;
}
}
const defaultChartPath = join(__dirname, relativePath);
logger.trace(`Using default chart template ${relativePath} -> ${defaultChartPath}`);
return defaultChartPath;
};
// Templates folder
let _helpers = ejs.render(readFileSync(resolveChartPath('templates/_helpers.tpl'), 'utf8'), {});
let config = ejs.render(readFileSync(resolveChartPath('templates/config.yaml'), 'utf8'), { projectName });
let deployment = ejs.render(readFileSync(resolveChartPath('templates/deployment.yaml'), 'utf8'), {});
// Chart root
let chart = ejs.render(readFileSync(resolveChartPath('Chart.yaml'), 'utf8'), { projectName, projectVersion });
let requirements = ejs.render(readFileSync(resolveChartPath('requirements.yaml'), 'utf8'), {});
let ignore = ejs.render(readFileSync(resolveChartPath('.helmignore'), 'utf8'), {});
let values = ejs.render(readFileSync(resolveChartPath('values.yaml'), 'utf8'), { projectName, projectOrganization, projectVersion });
// Templates folder
writeFileSync(join(targetDir, `${projectName}`, 'templates/_helpers.tpl'), _helpers, { encoding: 'utf8' });
writeFileSync(join(targetDir, `${projectName}`, 'templates/config.yaml'), config, { encoding: 'utf8' });
writeFileSync(join(targetDir, `${projectName}`, 'templates/deployment.yaml'), deployment, { encoding: 'utf8' });
// Chart root
writeFileSync(join(targetDir, `${projectName}`, 'Chart.yaml'), chart, { encoding: 'utf8' });
writeFileSync(join(targetDir, `${projectName}`, '.helmignore'), ignore, { encoding: 'utf8' });
writeFileSync(join(targetDir, `${projectName}`, 'requirements.yaml'), requirements, { encoding: 'utf8' });
writeFileSync(join(targetDir, `${projectName}`, 'values.yaml'), values, { encoding: 'utf8' });
const outputFile = join(targetDir, `${projectName}-${projectVersion}.tgz`);
try {
logger.trace(`Creating Helm chart with command:\nhelm package "${join(targetDir, projectName)}" -d "${targetDir}"`);
const HELM_CHART = execSync(`helm package "${join(targetDir, projectName)}" -d "${targetDir}"`).toString('utf8').trim();
} catch (e) {
logger.trace('Error while creating HELM CHART');
if (!existsSync(outputFile)) {
throw e;
}
}
return {
file: outputFile
};
});
return function (_x) {
return _ref.apply(this, arguments);
};
})();