@arc-fusion/cli
Version:
CLI for running Arc Fusion on your local machine
57 lines (45 loc) • 1.52 kB
JavaScript
const spawn = require('../utils/spawn')
const { dockerList } = require('../utils/docker')
async function cleanContainers () {
const containers = (await dockerList('ps -a'))
.filter((container) => container.includes('Exited'))
.map((container) => container.split(/\s+/g)[0])
return (containers && containers.length)
? spawn('docker', ['rm'].concat(containers), { stdio: 'inherit' })
: Promise.resolve()
}
async function cleanImages () {
const untaggedImages = (await dockerList('images -a'))
.map((image) => image.split(/\s+/g))
.filter((parts) => parts[0] === '<none>' || parts[1] === '<none>')
.map((parts) => parts[2])
return (untaggedImages && untaggedImages.length)
? spawn('docker', ['rmi'].concat(untaggedImages), { stdio: 'inherit' })
.catch(() => null)
: Promise.resolve()
}
async function cleanNetworks () {
return spawn('docker', ['network', 'prune', '-f'], { stdio: 'inherit' })
}
async function cleanVolumes () {
const volumeIds = (await dockerList('volume ls'))
.map((volume) => volume.split(/\s+/g)[1])
.filter((volumeId) => /^[a-z0-9]{64}$/.test(volumeId))
return (volumeIds && volumeIds.length)
? spawn('docker', ['volume', 'rm'].concat(volumeIds), { stdio: 'inherit' })
: Promise.resolve()
}
async function nuke () {
await cleanContainers()
await cleanImages()
await cleanVolumes()
await cleanNetworks()
}
module.exports = {
cleanContainers,
cleanImages,
cleanNetworks,
cleanVolumes,
nuke
}