mirror of
https://github.com/containers/podman.git
synced 2025-06-25 12:20:42 +08:00
build: allow using cache explicitly with --squash-all using --layers
Buildah already supports using `--layers` with `--squash` after https://github.com/containers/buildah/pull/3674 if user wants to do so hence podman must honor similar configuration in `--squash-all` behaviour if user wants to using cache. PS: We cannot alter behaviour of `podman build --squash` for docker-compat reasons hence this feature can be easily supported by `--squash-all`. Closes: https://github.com/containers/buildah/issues/4011 Signed-off-by: Aditya R <arajan@redhat.com>
This commit is contained in:
@ -197,9 +197,8 @@ func buildFlags(cmd *cobra.Command) {
|
|||||||
// build executes the build command.
|
// build executes the build command.
|
||||||
func build(cmd *cobra.Command, args []string) error {
|
func build(cmd *cobra.Command, args []string) error {
|
||||||
if (cmd.Flags().Changed("squash") && cmd.Flags().Changed("layers")) ||
|
if (cmd.Flags().Changed("squash") && cmd.Flags().Changed("layers")) ||
|
||||||
(cmd.Flags().Changed("squash-all") && cmd.Flags().Changed("layers")) ||
|
|
||||||
(cmd.Flags().Changed("squash-all") && cmd.Flags().Changed("squash")) {
|
(cmd.Flags().Changed("squash-all") && cmd.Flags().Changed("squash")) {
|
||||||
return errors.New("cannot specify --squash, --squash-all and --layers options together")
|
return errors.New("cannot specify --squash with --layers and --squash-all with --squash")
|
||||||
}
|
}
|
||||||
|
|
||||||
if cmd.Flag("output").Changed && registry.IsRemote() {
|
if cmd.Flag("output").Changed && registry.IsRemote() {
|
||||||
@ -418,8 +417,14 @@ func buildFlagsWrapperToOptions(c *cobra.Command, contextDir string, flags *buil
|
|||||||
// Squash-all invoked, squash both new and old layers into one.
|
// Squash-all invoked, squash both new and old layers into one.
|
||||||
if c.Flags().Changed("squash-all") {
|
if c.Flags().Changed("squash-all") {
|
||||||
flags.Squash = true
|
flags.Squash = true
|
||||||
|
if !c.Flags().Changed("layers") {
|
||||||
|
// Buildah supports using layers and --squash together
|
||||||
|
// after https://github.com/containers/buildah/pull/3674
|
||||||
|
// so podman must honor if user wants to still use layers
|
||||||
|
// with --squash-all.
|
||||||
flags.Layers = false
|
flags.Layers = false
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
var stdin io.Reader
|
var stdin io.Reader
|
||||||
if flags.Stdin {
|
if flags.Stdin {
|
||||||
|
@ -178,6 +178,32 @@ var _ = Describe("Podman build", func() {
|
|||||||
Expect(session).Should(Exit(0))
|
Expect(session).Should(Exit(0))
|
||||||
})
|
})
|
||||||
|
|
||||||
|
It("podman build verify explicit cache use with squash-all and --layers", func() {
|
||||||
|
session := podmanTest.Podman([]string{"build", "--pull-never", "-f", "build/squash/Dockerfile.squash-c", "--squash-all", "--layers", "-t", "test-squash-d:latest", "build/squash"})
|
||||||
|
session.WaitWithDefaultTimeout()
|
||||||
|
Expect(session).Should(Exit(0))
|
||||||
|
|
||||||
|
session = podmanTest.Podman([]string{"inspect", "--format", "{{.RootFS.Layers}}", "test-squash-d"})
|
||||||
|
session.WaitWithDefaultTimeout()
|
||||||
|
Expect(session).Should(Exit(0))
|
||||||
|
// Check for one layers
|
||||||
|
Expect(strings.Fields(session.OutputToString())).To(HaveLen(1))
|
||||||
|
|
||||||
|
// Second build must use last squashed build from cache
|
||||||
|
session = podmanTest.Podman([]string{"build", "--pull-never", "-f", "build/squash/Dockerfile.squash-c", "--squash-all", "--layers", "-t", "test", "build/squash"})
|
||||||
|
session.WaitWithDefaultTimeout()
|
||||||
|
Expect(session).Should(Exit(0))
|
||||||
|
// Test if entire build is used from cache
|
||||||
|
Expect(session.OutputToString()).To(ContainSubstring("Using cache"))
|
||||||
|
|
||||||
|
session = podmanTest.Podman([]string{"inspect", "--format", "{{.RootFS.Layers}}", "test-squash-d"})
|
||||||
|
session.WaitWithDefaultTimeout()
|
||||||
|
Expect(session).Should(Exit(0))
|
||||||
|
// Check for one layers
|
||||||
|
Expect(strings.Fields(session.OutputToString())).To(HaveLen(1))
|
||||||
|
|
||||||
|
})
|
||||||
|
|
||||||
It("podman build Containerfile locations", func() {
|
It("podman build Containerfile locations", func() {
|
||||||
// Given
|
// Given
|
||||||
// Switch to temp dir and restore it afterwards
|
// Switch to temp dir and restore it afterwards
|
||||||
|
Reference in New Issue
Block a user