UNPKG

mediacentral-publish

Version:

A publish tool for publishing cloud-ux projects

79 lines (72 loc) 4.67 kB
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); }; })();