@aivec/wp-docker-dev-factory
Version:
Spin up local WordPress environments with Docker.
91 lines (83 loc) • 3.13 kB
text/typescript
import path from 'path';
import { homedir } from 'os';
import buildFtpConfig from './buildFtpConfig';
import buildEnvVars from './buildEnvVars';
import buildVolumePaths from './buildVolumePaths';
import buildPluginAutoInstallWhitelist from './buildPluginAutoInstallWhitelist';
import { _ } from 'lodash';
import { InstanceConfig, FinalInstanceConfig } from '../types';
import buildSSHConfig from './buildSSHConfig';
const buildFinalConfig = (
config: InstanceConfig,
workingdir: string,
topdir: string,
): FinalInstanceConfig => {
const configCopy: InstanceConfig = _.cloneDeep(config);
const phpVersion = configCopy.phpVersion ? configCopy.phpVersion : '7.3';
const snapshotImage = `${configCopy.instanceName}-${phpVersion}`;
const dockerBridgeIP = 'host.docker.internal';
let locale = configCopy.locale ? configCopy.locale : 'en_US';
if (configCopy.wordpressVersion === 'nightly') {
locale = 'en_US';
}
let flushOnRestart = false;
if (config.database) {
flushOnRestart = !!config.database.flushOnRestart;
}
let image = configCopy.image;
if (image) {
if (path.isAbsolute(image)) {
image = `${homedir()}${image}`;
}
image = path.resolve(workingdir, image);
}
let fullUrl = 'http://localhost';
if (config.hostName && config.hostName.length > 0) {
fullUrl = `http://${config.hostName}`;
}
if (config.containerPort) {
fullUrl = `${fullUrl}:${config.containerPort}`;
}
const finalConfig: FinalInstanceConfig = {
instanceName: configCopy.instanceName,
containerPort: configCopy.containerPort,
hostName: configCopy.hostName ? configCopy.hostName : null,
fullUrl,
phpVersion,
wordpressVersion: configCopy.wordpressVersion ? configCopy.wordpressVersion : 'latest',
locale,
flushOnRestart,
database: configCopy.database,
env: configCopy.env ? configCopy.env : null,
localPlugins: configCopy.localPlugins ? configCopy.localPlugins : [],
localThemes: configCopy.localThemes ? configCopy.localThemes : [],
downloadPlugins: configCopy.downloadPlugins ? configCopy.downloadPlugins : [],
downloadThemes: configCopy.downloadThemes ? configCopy.downloadThemes : [],
uploads: configCopy.uploads ? configCopy.uploads : null,
uploadsUrl: configCopy.uploadsUrl ? configCopy.uploadsUrl : null,
networkname: 'wpdevinstances',
containerName: configCopy.instanceName,
snapshotImage,
runningFromCache: !!image,
dockerBridgeIP,
alreadyInstalled: buildPluginAutoInstallWhitelist(configCopy, workingdir),
topdir,
workingdir,
image,
};
if (configCopy.ftp) {
finalConfig.ftp = buildFtpConfig(configCopy.ftp);
}
if (configCopy.ssh) {
finalConfig.ssh = buildSSHConfig(configCopy.ssh, workingdir);
}
finalConfig.volumes = buildVolumePaths(finalConfig, configCopy, workingdir, topdir);
finalConfig.envvarsMap = buildEnvVars(finalConfig);
finalConfig.envvars = Object.keys(finalConfig.envvarsMap)
.map((key) => {
return `--env ${key}=${finalConfig.envvarsMap[key]}`;
})
.join(' ');
return finalConfig;
};
export default buildFinalConfig;