From 9e7f1bea428c4f523155c133b29e374aba242079 Mon Sep 17 00:00:00 2001 From: Aditya R Date: Thu, 2 Feb 2023 14:26:36 +0530 Subject: [PATCH] system-reset: use CleanCacheMount to clear build cache Just like buildkit buildah must allow cleaning the buildcache and cache generated on host by --mount=type=cache just like buildkit's prune command. See: https://github.com/moby/buildkit#cache Signed-off-by: Aditya R --- cmd/podman/system/reset.go | 6 ++++++ test/e2e/build/cache/Dockerfilecacheread | 4 ++++ test/e2e/build/cache/Dockerfilecachewrite | 4 ++++ test/e2e/build_test.go | 16 ++++++++++++++++ 4 files changed, 30 insertions(+) create mode 100644 test/e2e/build/cache/Dockerfilecacheread create mode 100644 test/e2e/build/cache/Dockerfilecachewrite diff --git a/cmd/podman/system/reset.go b/cmd/podman/system/reset.go index 02c4a7b467..a52ab9faf5 100644 --- a/cmd/podman/system/reset.go +++ b/cmd/podman/system/reset.go @@ -9,6 +9,7 @@ import ( "os" "strings" + "github.com/containers/buildah/pkg/parse" "github.com/containers/common/pkg/completion" "github.com/containers/podman/v4/cmd/podman/registry" "github.com/containers/podman/v4/cmd/podman/validate" @@ -88,6 +89,11 @@ func reset(cmd *cobra.Command, args []string) { if err != nil { logrus.Error(err) } + // Clean build cache if any + err = parse.CleanCacheMount() + if err != nil { + logrus.Error(err) + } // Shutdown all running engines, `reset` will hijack repository registry.ContainerEngine().Shutdown(registry.Context()) registry.ImageEngine().Shutdown(registry.Context()) diff --git a/test/e2e/build/cache/Dockerfilecacheread b/test/e2e/build/cache/Dockerfilecacheread new file mode 100644 index 0000000000..be123158c9 --- /dev/null +++ b/test/e2e/build/cache/Dockerfilecacheread @@ -0,0 +1,4 @@ +FROM alpine +RUN mkdir /test +# use option z if selinux is enabled +RUN --mount=type=cache,target=/test,z cat /test/world diff --git a/test/e2e/build/cache/Dockerfilecachewrite b/test/e2e/build/cache/Dockerfilecachewrite new file mode 100644 index 0000000000..67a65939ea --- /dev/null +++ b/test/e2e/build/cache/Dockerfilecachewrite @@ -0,0 +1,4 @@ +FROM alpine +RUN mkdir /test +# use option z if selinux is enabled +RUN --mount=type=cache,target=/test,z echo hello > /test/world diff --git a/test/e2e/build_test.go b/test/e2e/build_test.go index 22e5d419d0..5445e5302d 100644 --- a/test/e2e/build_test.go +++ b/test/e2e/build_test.go @@ -874,4 +874,20 @@ RUN ls /dev/test1`, ALPINE) build.WaitWithDefaultTimeout() Expect(build).To(Exit(0)) }) + + It("podman system reset must clean host shared cache", func() { + SkipIfRemote("podman-remote does not have system reset -f") + podmanTest.AddImageToRWStore(ALPINE) + session := podmanTest.Podman([]string{"build", "--pull-never", "--file", "build/cache/Dockerfilecachewrite", "build/cache/"}) + session.WaitWithDefaultTimeout() + Expect(session).Should(Exit(0)) + + session = podmanTest.Podman([]string{"system", "reset", "-f"}) + session.WaitWithDefaultTimeout() + Expect(session).Should(Exit(0)) + + session = podmanTest.Podman([]string{"build", "--pull-never", "--file", "build/cache/Dockerfilecacheread", "build/cache/"}) + session.WaitWithDefaultTimeout() + Expect(session).Should(Exit(1)) + }) })