diff --git a/src/bin/vip-dev-env-create.js b/src/bin/vip-dev-env-create.js index a9a22ca9e..6b5977596 100755 --- a/src/bin/vip-dev-env-create.js +++ b/src/bin/vip-dev-env-create.js @@ -125,7 +125,7 @@ cmd.argv( process.argv, async ( arg, opt ) => { /** @type {import('../lib/dev-environment/types').InstanceOptions} */ let defaultOptions = {}; - /** @type {Record} */ + /** @type {Record} */ let integrationsConfig = {}; try { diff --git a/src/lib/dev-environment/dev-environment-core.ts b/src/lib/dev-environment/dev-environment-core.ts index b15f6d0a5..ab56487de 100644 --- a/src/lib/dev-environment/dev-environment-core.ts +++ b/src/lib/dev-environment/dev-environment-core.ts @@ -45,7 +45,13 @@ import { createProxyAgent } from '../http/proxy-agent'; import { searchAndReplace } from '../search-and-replace'; import UserError from '../user-error'; -import type { AppInfo, ComponentConfig, InstanceData, WordPressConfig } from './types'; +import type { + AppInfo, + ComponentConfig, + InstanceData, + IntegrationConfig, + WordPressConfig, +} from './types'; import type Lando from 'lando'; const debug = debugLib( '@automattic/vip:bin:dev-environment' ); @@ -151,9 +157,10 @@ export async function stopEnvironment( lando: Lando, slug: string ): Promise< vo export async function createEnvironment( lando: Lando, instanceData: InstanceData, - integrationsConfig?: Record< string, unknown > | undefined + integrationsConfig?: Record< string, IntegrationConfig > | undefined ): Promise< void > { const slug = instanceData.siteSlug; + integrationsConfig ??= {}; debug( 'Will process an environment', slug, 'with instanceData for creation: ', instanceData ); const instancePath = getEnvironmentPath( slug ); @@ -167,6 +174,19 @@ export async function createEnvironment( } const preProcessedInstanceData = preProcessInstanceData( instanceData ); + if ( preProcessedInstanceData.elasticsearch === true ) { + integrationsConfig = { + ...integrationsConfig, + 'enterprise-search': { + ...( integrationsConfig[ 'enterprise-search' ] ?? {} ), + env: { + ...( integrationsConfig[ 'enterprise-search' ]?.env ?? {} ), + status: 'enabled', + }, + } as IntegrationConfig, + }; + } + debug( 'Will create an environment', slug, 'with instanceData: ', preProcessedInstanceData ); await prepareLandoEnv( lando, preProcessedInstanceData, instancePath, integrationsConfig ); @@ -682,7 +702,8 @@ export async function getApplicationInformation( php: envData.softwareSettings?.php?.current.version ?? '', wordpress: envData.softwareSettings?.wordpress?.current.version ?? '', integrations: - ( envData.getIntegrationsDevEnvConfig?.data as Record< string, unknown > ) ?? {}, + ( envData.getIntegrationsDevEnvConfig?.data as Record< string, IntegrationConfig > ) ?? + {}, }; } } diff --git a/src/lib/dev-environment/types.ts b/src/lib/dev-environment/types.ts index dcfa2982e..181b81154 100644 --- a/src/lib/dev-environment/types.ts +++ b/src/lib/dev-environment/types.ts @@ -20,6 +20,18 @@ export interface InstanceOptions { [ index: string ]: unknown; } +export interface IntergrationSettings { + status: string; + config?: Record< string, unknown >; +} + +export interface IntegrationConfig { + type?: string; + org?: IntergrationSettings; + env?: IntergrationSettings; + network_sites?: IntergrationSettings; +} + export interface AppInfo { id?: number | null; name?: string | null; @@ -32,7 +44,7 @@ export interface AppInfo { primaryDomain: string; php: string; wordpress: string; - integrations: Record< string, unknown >; + integrations: Record< string, IntegrationConfig >; }; }