import { createError } from '@cirrusct/core-node'; import { Logger } from '@cirrusct/logging'; import { MonoRepoPackage, MonoRepo } from '@cirrusct/mr-core'; import { BuildConfig } from '@cirrusct/mr-build'; import { MrCommandHandler, MrCommandHandlerArgs } from '@cirrusct/mr-command'; import { MrDockerOptions } from './types'; import { shellDocker } from './shellExec'; import { getResolvedConfigs } from '../deploy'; export const commandHandler: MrCommandHandler = async ( args: MrCommandHandlerArgs ): Promise => { const { options = {}, logger, packages } = args; if (!options.deployment) { logger.warn('Docker: No Deployment specified.'); return Promise.resolve(); } try { const resolvedConfigs = await getResolvedConfigs( options.deployment, { dotEnvPath: options.dotEnvPath }, args.monoRepo ); if (resolvedConfigs.length === 0) { logger.warn(`Docker: No Deployment matching '${options.deployment}'`); return Promise.resolve(); } else if (resolvedConfigs.length > 1) { logger.warn( `Docker: Pattern '${ options.deployment }' resolves to more than 1 config. Please specify a single deployment.` ); return Promise.resolve(); } const resolvedConfig = resolvedConfigs[0]; await shellDocker(resolvedConfig, options, args.monoRepo, logger); logger.info(`Docker on ${resolvedConfig.name} in path ${resolvedConfig.output}`); } catch (e) { throw createError(`Deploy Command Failed`, e); } };