diff --git a/pkg/compiler/artifact_test.go b/pkg/compiler/artifact_test.go index 047fa2a3..e8eb1377 100644 --- a/pkg/compiler/artifact_test.go +++ b/pkg/compiler/artifact_test.go @@ -102,15 +102,15 @@ ENV PACKAGE_VERSION=1.4.0 ENV PACKAGE_CATEGORY=app-admin RUN echo foo > /test RUN echo bar > /test2`)) - opts = CompilerBackendOptions{ + opts2 := CompilerBackendOptions{ ImageName: "test", SourcePath: tmpdir, DockerFileName: "LuetDockerfile", Destination: filepath.Join(tmpdir, "output2.tar"), } - Expect(b.ImageDefinitionToTar(opts)).ToNot(HaveOccurred()) + Expect(b.ImageDefinitionToTar(opts2)).ToNot(HaveOccurred()) Expect(helpers.Exists(filepath.Join(tmpdir, "output2.tar"))).To(BeTrue()) - diffs, err := b.Changes(filepath.Join(tmpdir2, "output1.tar"), filepath.Join(tmpdir, "output2.tar")) + diffs, err := b.Changes(opts, opts2) Expect(err).ToNot(HaveOccurred()) artifacts := []ArtifactNode{} diff --git a/pkg/compiler/backend/diff.go b/pkg/compiler/backend/diff.go index cb0fd8d2..f49058c0 100644 --- a/pkg/compiler/backend/diff.go +++ b/pkg/compiler/backend/diff.go @@ -52,7 +52,10 @@ import ( // } // } // ] -func GenerateChanges(b compiler.CompilerBackend, srcImage, dstImage string) ([]compiler.ArtifactLayer, error) { +func GenerateChanges(b compiler.CompilerBackend, fromImage, toImage compiler.CompilerBackendOptions) ([]compiler.ArtifactLayer, error) { + + srcImage := fromImage.Destination + dstImage := toImage.Destination res := compiler.ArtifactLayer{FromImage: srcImage, ToImage: dstImage} @@ -95,6 +98,7 @@ func GenerateChanges(b compiler.CompilerBackend, srcImage, dstImage string) ([]c srcImageExtract := compiler.CompilerBackendOptions{ SourcePath: srcImage, + ImageName: fromImage.ImageName, Destination: srcRootFS, } err = b.ExtractRootfs(srcImageExtract, false) // No need to keep permissions as we just collect file diffs @@ -123,6 +127,7 @@ func GenerateChanges(b compiler.CompilerBackend, srcImage, dstImage string) ([]c dstImageExtract := compiler.CompilerBackendOptions{ SourcePath: dstImage, + ImageName: toImage.ImageName, Destination: dstRootFS, } err = b.ExtractRootfs(dstImageExtract, false) diff --git a/pkg/compiler/backend/diff_test.go b/pkg/compiler/backend/diff_test.go index f517d9b1..842e39d9 100644 --- a/pkg/compiler/backend/diff_test.go +++ b/pkg/compiler/backend/diff_test.go @@ -32,12 +32,14 @@ var _ = Describe("Docker image diffs", func() { Context("Generate diffs from docker images", func() { It("Detect no changes", func() { - err := b.DownloadImage(compiler.CompilerBackendOptions{ - ImageName: "alpine:latest", - }) + opts := compiler.CompilerBackendOptions{ + ImageName: "alpine:latest", + Destination: "alpine:latest", + } + err := b.DownloadImage(opts) Expect(err).ToNot(HaveOccurred()) - layers, err := GenerateChanges(b, "alpine:latest", "alpine:latest") + layers, err := GenerateChanges(b, opts, opts) Expect(err).ToNot(HaveOccurred()) Expect(len(layers)).To(Equal(1)) Expect(len(layers[0].Diffs.Additions)).To(Equal(0)) @@ -55,7 +57,13 @@ var _ = Describe("Docker image diffs", func() { }) Expect(err).ToNot(HaveOccurred()) - layers, err := GenerateChanges(b, "quay.io/mocaccino/micro", "quay.io/mocaccino/extra") + layers, err := GenerateChanges(b, compiler.CompilerBackendOptions{ + ImageName: "quay.io/mocaccino/micro", + Destination: "quay.io/mocaccino/micro", + }, compiler.CompilerBackendOptions{ + ImageName: "quay.io/mocaccino/extra", + Destination: "quay.io/mocaccino/extra", + }) Expect(err).ToNot(HaveOccurred()) Expect(len(layers)).To(Equal(1)) diff --git a/pkg/compiler/backend/simpledocker.go b/pkg/compiler/backend/simpledocker.go index 005c0b77..ca12d04b 100644 --- a/pkg/compiler/backend/simpledocker.go +++ b/pkg/compiler/backend/simpledocker.go @@ -239,7 +239,7 @@ func (*SimpleDocker) ExtractRootfs(opts compiler.CompilerBackendOptions, keepPer } // Changes retrieves changes between image layers -func (d *SimpleDocker) Changes(fromImage, toImage string) ([]compiler.ArtifactLayer, error) { +func (d *SimpleDocker) Changes(fromImage, toImage compiler.CompilerBackendOptions) ([]compiler.ArtifactLayer, error) { diffs, err := GenerateChanges(d, fromImage, toImage) if config.LuetCfg.GetGeneral().Debug { diff --git a/pkg/compiler/backend/simpledocker_test.go b/pkg/compiler/backend/simpledocker_test.go index e3968495..8732caf3 100644 --- a/pkg/compiler/backend/simpledocker_test.go +++ b/pkg/compiler/backend/simpledocker_test.go @@ -93,13 +93,13 @@ ENV PACKAGE_VERSION=1.4.0 ENV PACKAGE_CATEGORY=app-admin RUN echo foo > /test RUN echo bar > /test2`)) - opts = CompilerBackendOptions{ + opts2 := CompilerBackendOptions{ ImageName: "test", SourcePath: tmpdir, DockerFileName: "LuetDockerfile", Destination: filepath.Join(tmpdir, "output2.tar"), } - Expect(b.ImageDefinitionToTar(opts)).ToNot(HaveOccurred()) + Expect(b.ImageDefinitionToTar(opts2)).ToNot(HaveOccurred()) Expect(helpers.Exists(filepath.Join(tmpdir, "output2.tar"))).To(BeTrue()) artifacts := []ArtifactNode{} @@ -109,7 +109,7 @@ RUN echo bar > /test2`)) artifacts = append(artifacts, ArtifactNode{Name: "/test", Size: 4}) artifacts = append(artifacts, ArtifactNode{Name: "/test2", Size: 4}) - Expect(b.Changes(filepath.Join(tmpdir2, "output1.tar"), filepath.Join(tmpdir, "output2.tar"))).To(Equal( + Expect(b.Changes(opts, opts2)).To(Equal( []ArtifactLayer{{ FromImage: filepath.Join(tmpdir2, "output1.tar"), ToImage: filepath.Join(tmpdir, "output2.tar"), diff --git a/pkg/compiler/backend/simpleimg.go b/pkg/compiler/backend/simpleimg.go index 853857bd..83fd84e6 100644 --- a/pkg/compiler/backend/simpleimg.go +++ b/pkg/compiler/backend/simpleimg.go @@ -149,7 +149,7 @@ func (*SimpleImg) ExtractRootfs(opts compiler.CompilerBackendOptions, keepPerms // TODO: Use container-diff (https://github.com/GoogleContainerTools/container-diff) for checking out layer diffs // Changes uses container-diff (https://github.com/GoogleContainerTools/container-diff) for retrieving out layer diffs -func (i *SimpleImg) Changes(fromImage, toImage string) ([]compiler.ArtifactLayer, error) { +func (i *SimpleImg) Changes(fromImage, toImage compiler.CompilerBackendOptions) ([]compiler.ArtifactLayer, error) { return GenerateChanges(i, fromImage, toImage) } diff --git a/pkg/compiler/compiler.go b/pkg/compiler/compiler.go index 4d34e0eb..902b07f6 100644 --- a/pkg/compiler/compiler.go +++ b/pkg/compiler/compiler.go @@ -272,7 +272,7 @@ func (cs *LuetCompiler) unpackDelta(rootfs string, concurrency int, keepPermissi defer os.Remove(builderOpts.Destination) } Info(pkgTag, ":hammer: Generating delta") - diffs, err := cs.Backend.Changes(builderOpts.Destination, runnerOpts.Destination) + diffs, err := cs.Backend.Changes(builderOpts, runnerOpts) if err != nil { return nil, errors.Wrap(err, "Could not generate changes from layers") } diff --git a/pkg/compiler/interface.go b/pkg/compiler/interface.go index 8d9e339d..b9412ecb 100644 --- a/pkg/compiler/interface.go +++ b/pkg/compiler/interface.go @@ -79,7 +79,7 @@ type CompilerBackend interface { BuildImage(CompilerBackendOptions) error ExportImage(CompilerBackendOptions) error RemoveImage(CompilerBackendOptions) error - Changes(fromImage, toImage string) ([]ArtifactLayer, error) + Changes(fromImage, toImage CompilerBackendOptions) ([]ArtifactLayer, error) ImageDefinitionToTar(CompilerBackendOptions) error ExtractRootfs(opts CompilerBackendOptions, keepPerms bool) error