From c12b0a882954f3569796777ad091b3c317c135d7 Mon Sep 17 00:00:00 2001 From: Mikhail Klementev Date: Sat, 3 Jun 2023 13:05:17 +0000 Subject: [PATCH] feat: remove dangling or unused images from local storage after build --- container/container.go | 11 +++++++++++ kernel.go | 11 +++++++++++ 2 files changed, 22 insertions(+) diff --git a/container/container.go b/container/container.go index 34c2d7c..07eee6b 100644 --- a/container/container.go +++ b/container/container.go @@ -35,6 +35,8 @@ var Commands []config.DockerCommand var UseCache = true +var Prune = true + type Image struct { Name string Distro distro.Distro @@ -231,7 +233,16 @@ func (c Container) Build(image string, envs, runs []string) (err error) { return } +func (c Container) prune() error { + c.Log.Debug().Msg("remove dangling or unused images from local storage") + return exec.Command(Runtime, "image", "prune", "-f").Run() +} + func (c Container) build(imagePath string) (output string, err error) { + if Prune { + defer c.prune() + } + args := []string{"build"} if !UseCache { args = append(args, "--pull", "--no-cache") diff --git a/kernel.go b/kernel.go index 0d7640d..ce0fc9c 100644 --- a/kernel.go +++ b/kernel.go @@ -31,6 +31,7 @@ type KernelCmd struct { Threads int `help:"threads for parallel installation" default:"1"` Update bool `help:"update container"` Max int `help:"maximum kernels to download" default:"100500"` + NoPrune bool `help:"do not remove dangling or unused images from local storage after build"` ContainerTimeout time.Duration `help:"container timeout"` @@ -157,6 +158,9 @@ func (cmd *KernelCmd) Generate(g *Globals, km config.Target) (err error) { if cmd.Update { container.UseCache = false } + if cmd.NoPrune { + container.Prune = false + } cmd.kcfg, err = config.ReadKernelConfig(g.Config.Kernels) if err != nil { @@ -246,6 +250,13 @@ type KernelListRemoteCmd struct { } func (cmd *KernelListRemoteCmd) Run(kernelCmd *KernelCmd, g *Globals) (err error) { + if kernelCmd.Update { + container.UseCache = false + } + if kernelCmd.NoPrune { + container.Prune = false + } + distroType, err := distro.NewID(cmd.Distro) if err != nil { return