containr
Version:
Docker Build scripts for npm
127 lines (95 loc) • 3.1 kB
JavaScript
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
;