@enspirit/emb
Version:
A replacement for our Makefile-for-monorepos
46 lines (45 loc) • 1.67 kB
JavaScript
import { getContext } from '../../../index.js';
import { Flags } from '@oclif/core';
import { Listr } from 'listr2';
import { BaseCommand } from '../../index.js';
import { deleteImage, listImages } from '../../../docker/index.js';
export default class ImagesDelete extends BaseCommand {
static description = 'Delete project images.';
static enableJsonFlag = true;
static examples = ['<%= config.bin %> <%= command.id %>'];
static flags = {
force: Flags.boolean({
char: 'f',
default: false,
description: 'Remove the image even if it is being used by stopped containers or has other tags',
name: 'force',
required: false,
}),
};
async run() {
const { flags } = await this.parse(ImagesDelete);
const context = await getContext();
const images = await listImages({
filters: {
label: [`emb/project=${context.monorepo.name}`],
},
});
// De-duplicate this (also in images/index.ts)
// TODO: move to repo/config abstraction
const imageNames = images.reduce((imgs, img) => {
const tags = (img.RepoTags || [])?.filter((tag) => tag.indexOf(context.monorepo.name) === 0);
return [...imgs, ...tags];
}, []);
const runner = new Listr(imageNames.map((img) => {
return {
async task() {
await deleteImage(img, {
force: flags.force,
});
},
title: `Delete ${img}`,
};
}));
await runner.run();
}
}