UNPKG

containr

Version:

Docker Build scripts for npm

127 lines (95 loc) 3.1 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _assign = require('babel-runtime/core-js/object/assign'); var _assign2 = _interopRequireDefault(_assign); var _fs = require('fs'); var _fs2 = _interopRequireDefault(_fs); var _path = require('path'); var _path2 = _interopRequireDefault(_path); var _ejs = require('ejs'); var _ejs2 = _interopRequireDefault(_ejs); var _tmp = require('tmp'); var _tmp2 = _interopRequireDefault(_tmp); var _layer = require('./layer'); var _logger = require('./logger'); var _logger2 = _interopRequireDefault(_logger); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } _tmp2.default.setGracefulCleanup(); const getTemplate = templateName => { const templateSearchPaths = [process.cwd(), _path2.default.join(process.cwd(), 'share'), __dirname, _path2.default.join(__dirname, 'share'), _path2.default.join(__dirname, '..', 'share')]; let templatePath = null; for (const templateDir of templateSearchPaths) { templatePath = _path2.default.join(templateDir, templateName); if (_fs2.default.existsSync(templatePath)) { break; } } try { return _fs2.default.readFileSync(templatePath).toString('utf-8'); } catch (error) { console.error(` * error: no such file or read error: ${error.message}`); return false; } }; const renderContent = (templateContent, vars = {}, options = {}) => { _logger2.default.debug('renderContent', templateContent, vars); try { let res = _ejs2.default.render(templateContent, vars, options); _logger2.default.debug(res); return res; } catch (renderError) { console.error(`Rendering error: ${renderError.message}`); return ''; } }; const writeTempFile = content => { const tmpDir = process.cwd(); const tf = _tmp2.default.fileSync({ mode: '0644', dir: tmpDir, prefix: '.tmp-containr-', postfix: '' }); _fs2.default.writeFileSync(tf.fd, content); return tf.name; }; const renderTemplate = (templateContent, templateVars = {}) => { const { pkg, labels } = templateVars; const layer = (0, _assign2.default)({ npm: baseLayer => (0, _layer.getNpmLayer)(baseLayer, pkg) }, templateVars.layer || {}); const containr = (0, _assign2.default)({ imageName: pkg.imageName }, templateVars.containr || {}); const dockerFileContent = renderContent(templateContent, { pkg, labels, layer, containr }, { // debug: true, }); // console.log(dockerFileContent); const dockerFilePath = writeTempFile(dockerFileContent); return dockerFilePath; }; const renderFile = (fileName, vars = {}) => { const templateContent = getTemplate(fileName); return renderTemplate(templateContent, vars); }; const getExtension = (filename = '') => { if (filename.indexOf('.') === -1) { return ''; } return filename.split('.').pop(); }; const isEjs = (filename = '') => getExtension(filename) === 'ejs'; exports.default = { renderFile, writeTempFile, getExtension, isEjs }; //# sourceMappingURL=templating.js.map