UNPKG

@enspirit/emb

Version:

A replacement for our Makefile-for-monorepos

43 lines (42 loc) 1.69 kB
import { printTable } from '@oclif/table'; import { FlavoredCommand, getContext, TABLE_DEFAULTS } from '../../index.js'; import { getTimeAgo } from '../../utils.js'; import { ListContainersOperation } from '../../../docker/operations/index.js'; import { shortId } from '../../../docker/utils.js'; export default class ComponentsIndex extends FlavoredCommand { static description = 'List components.'; static enableJsonFlag = true; static examples = ['<%= config.bin %> <%= command.id %>']; static flags = {}; async run() { const { flags } = await this.parse(ComponentsIndex); const { monorepo } = await getContext(); const runningContainers = await monorepo.run(new ListContainersOperation(), { filters: { label: [`emb/project=${monorepo.name}`], }, }); const components = monorepo.components.map((cmp) => { const container = runningContainers.find((c) => c.Labels['emb/component'] === cmp.name && c.Labels['emb/flavor'] === monorepo.currentFlavor); return { component: cmp.name, id: shortId(container?.Id), name: container?.Names?.join(', '), created: getTimeAgo(container?.Created), status: container?.Status, }; }); if (!flags.json) { printTable({ ...TABLE_DEFAULTS, columns: ['component', 'name', 'id', 'created', 'status'], data: components, sort: { name: 'asc', }, }); } return components; } }