UNPKG

@enspirit/emb

Version:

A replacement for our Makefile-for-monorepos

46 lines (45 loc) 1.67 kB
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(); } }