@enspirit/emb
Version:
A replacement for our Makefile-for-monorepos
43 lines (42 loc) • 1.69 kB
JavaScript
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;
}
}