UNPKG

@enspirit/emb

Version:

A replacement for our Makefile-for-monorepos

62 lines (61 loc) 2.3 kB
import { DockerComposeClient, getContext, isContextStale, resetContext, setContext, } from '../../index.js'; import { Command, Flags } from '@oclif/core'; import Dockerode from 'dockerode'; import { loadConfig } from '../../config/index.js'; import { createKubernetesClient } from '../../kubernetes/client.js'; import { Monorepo } from '../../monorepo/monorepo.js'; import { SecretManager } from '../../secrets/index.js'; import { withMarker } from '../utils.js'; export class BaseCommand extends Command { context; static baseFlags = { verbose: Flags.boolean({ name: 'verbose', allowNo: true, }), root: Flags.string({ char: 'C', description: 'Run as if emb was started in <path>. Can also be set via EMB_ROOT env var.', name: 'root', required: false, }), }; async init() { const { flags } = await this.parse(); await super.init(); // Reset context if EMB_ROOT changed (e.g., in tests switching between examples) if (isContextStale()) { resetContext(); } if (getContext()) { return; } try { const { rootDir, config } = await withMarker('emb:config', 'load', () => loadConfig({ root: flags.root })); // Create SecretManager early so plugins can register providers during init const secrets = new SecretManager(); // Set a partial context before monorepo init so plugins can access secrets const partialContext = { docker: new Dockerode(), kubernetes: createKubernetesClient(), secrets, }; setContext(partialContext); const monorepo = await withMarker('emb:monorepo', 'init', () => { return new Monorepo(config, rootDir).init(); }); if (flags.verbose) { monorepo.setTaskRenderer('verbose'); } const compose = new DockerComposeClient(monorepo); this.context = setContext({ ...partialContext, monorepo, compose, }); } catch (error) { this.error(error); } } }