mirror of
https://github.com/mempool/mempool.git
synced 2024-11-19 18:03:00 +01:00
153 lines
4.9 KiB
JavaScript
153 lines
4.9 KiB
JavaScript
var fs = require('fs');
|
|
const { spawnSync } = require('child_process');
|
|
|
|
const CONFIG_FILE_NAME = 'mempool-frontend-config.json';
|
|
const GENERATED_CONFIG_FILE_NAME = 'src/resources/config.js';
|
|
const GENERATED_TEMPLATE_CONFIG_FILE_NAME = 'src/resources/config.template.js';
|
|
const GENERATED_CUSTOMIZATION_FILE_NAME = 'src/resources/customize.js';
|
|
|
|
let settings = [];
|
|
let configContent = {};
|
|
let gitCommitHash = '';
|
|
let packetJsonVersion = '';
|
|
let customConfig;
|
|
let customConfigContent;
|
|
|
|
try {
|
|
const rawConfig = fs.readFileSync(CONFIG_FILE_NAME);
|
|
configContent = JSON.parse(rawConfig);
|
|
console.log(`${CONFIG_FILE_NAME} file found, using provided config`);
|
|
} catch (e) {
|
|
if (e.code !== 'ENOENT') {
|
|
throw new Error(e);
|
|
} else {
|
|
console.log(`${CONFIG_FILE_NAME} file not found, using default config`);
|
|
}
|
|
}
|
|
|
|
if (configContent && configContent.CUSTOMIZATION) {
|
|
try {
|
|
customConfig = readConfig(configContent.CUSTOMIZATION);
|
|
customConfigContent = JSON.parse(customConfig);
|
|
} catch (e) {
|
|
console.log(`failed to load customization config from ${configContent.CUSTOMIZATION}`);
|
|
}
|
|
}
|
|
|
|
const baseModuleName = configContent.BASE_MODULE || 'mempool';
|
|
const customBuildName = (customConfigContent && customConfigContent.enterprise) ? ('.' + customConfigContent.enterprise) : '';
|
|
const indexFilePath = 'src/index.' + baseModuleName + customBuildName + '.html';
|
|
|
|
try {
|
|
fs.copyFileSync(indexFilePath, 'src/index.html');
|
|
console.log('Copied ' + indexFilePath + ' to src/index.html');
|
|
} catch (e) {
|
|
console.log('Error copying the index file');
|
|
throw new Error(e);
|
|
}
|
|
|
|
try {
|
|
const packageJson = fs.readFileSync('package.json');
|
|
packetJsonVersion = JSON.parse(packageJson).version;
|
|
console.log(`mempool version ${packetJsonVersion}`);
|
|
} catch (e) {
|
|
throw new Error(e);
|
|
}
|
|
|
|
for (setting in configContent) {
|
|
settings.push({
|
|
key: setting,
|
|
value: configContent[setting]
|
|
});
|
|
}
|
|
|
|
if (process.env.DOCKER_COMMIT_HASH) {
|
|
gitCommitHash = process.env.DOCKER_COMMIT_HASH;
|
|
} else {
|
|
try {
|
|
const gitRevParse = spawnSync('git', ['rev-parse', '--short', 'HEAD']);
|
|
if (!gitRevParse.error) {
|
|
const output = gitRevParse.stdout.toString('utf-8').replace(/[\n\r\s]+$/, '');
|
|
gitCommitHash = output ? output : '?';
|
|
console.log(`mempool revision ${gitCommitHash}`);
|
|
} else if (gitRevParse.error.code === 'ENOENT') {
|
|
console.log('git not found, cannot parse git hash');
|
|
gitCommitHash = '?';
|
|
}
|
|
} catch (e) {
|
|
console.log('Could not load git commit info: ' + e.message);
|
|
gitCommitHash = '?';
|
|
}
|
|
}
|
|
|
|
const newConfig = `(function (window) {
|
|
window.__env = window.__env || {};${settings.reduce((str, obj) => `${str}
|
|
window.__env.${obj.key} = ${typeof obj.value === 'string' ? `'${obj.value}'` : obj.value};`, '')}
|
|
window.__env.GIT_COMMIT_HASH = '${gitCommitHash}';
|
|
window.__env.PACKAGE_JSON_VERSION = '${packetJsonVersion}';
|
|
}((typeof global !== 'undefined') ? global : this));`;
|
|
|
|
const newConfigTemplate = `(function (window) {
|
|
window.__env = window.__env || {};${settings.reduce((str, obj) => `${str}
|
|
window.__env.${obj.key} = ${typeof obj.value === 'string' ? `'\${__${obj.key}__}'` : `\${__${obj.key}__}`};`, '')}
|
|
window.__env.GIT_COMMIT_HASH = '${gitCommitHash}';
|
|
window.__env.PACKAGE_JSON_VERSION = '${packetJsonVersion}';
|
|
}(this));`;
|
|
|
|
function readConfig(path) {
|
|
try {
|
|
const currentConfig = fs.readFileSync(path).toString().trim();
|
|
return currentConfig;
|
|
} catch (e) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
function writeConfig(path, config) {
|
|
try {
|
|
fs.writeFileSync(path, config, 'utf8');
|
|
} catch (e) {
|
|
throw new Error(e);
|
|
}
|
|
}
|
|
|
|
function writeConfigTemplate(path, config) {
|
|
try {
|
|
fs.writeFileSync(path, config, 'utf8');
|
|
} catch (e) {
|
|
throw new Error(e);
|
|
}
|
|
}
|
|
|
|
writeConfigTemplate(GENERATED_TEMPLATE_CONFIG_FILE_NAME, newConfigTemplate);
|
|
|
|
const currentConfig = readConfig(GENERATED_CONFIG_FILE_NAME);
|
|
|
|
let customConfigJs = '';
|
|
if (customConfig) {
|
|
console.log(`Customizing frontend using ${configContent.CUSTOMIZATION}`);
|
|
customConfigJs = `(function (window) {
|
|
window.__env = window.__env || {};
|
|
window.__env.customize = ${customConfig};
|
|
}((typeof global !== 'undefined') ? global : this));
|
|
`;
|
|
}
|
|
writeConfig(GENERATED_CUSTOMIZATION_FILE_NAME, customConfigJs);
|
|
|
|
if (currentConfig && currentConfig === newConfig) {
|
|
console.log(`No configuration updates, skipping ${GENERATED_CONFIG_FILE_NAME} file update`);
|
|
return;
|
|
} else if (!currentConfig) {
|
|
console.log(`${GENERATED_CONFIG_FILE_NAME} file not found, creating new config file`);
|
|
console.log('CONFIG: ', newConfig);
|
|
writeConfig(GENERATED_CONFIG_FILE_NAME, newConfig);
|
|
console.log(`${GENERATED_CONFIG_FILE_NAME} file saved`);
|
|
return;
|
|
} else {
|
|
console.log(`Configuration changes detected, updating ${GENERATED_CONFIG_FILE_NAME} file`);
|
|
console.log('OLD CONFIG: ', currentConfig);
|
|
console.log('NEW CONFIG: ', newConfig);
|
|
writeConfig(GENERATED_CONFIG_FILE_NAME, newConfig);
|
|
console.log(`${GENERATED_CONFIG_FILE_NAME} file updated`);
|
|
}
|