diff --git a/pkg/compiler/compiler.go b/pkg/compiler/compiler.go index f902f8a0..ff3b8286 100644 --- a/pkg/compiler/compiler.go +++ b/pkg/compiler/compiler.go @@ -502,12 +502,14 @@ func (cs *LuetCompiler) genArtifact(p *compilerspec.LuetCompilationSpec, builder } } - filelist, err := a.FileList() - if err != nil { - return a, errors.Wrapf(err, "Failed getting package list for '%s' '%s'", a.Path, a.CompileSpec.Package.HumanReadableString()) + if !p.Package.Hidden { + filelist, err := a.FileList() + if err != nil { + return a, errors.Wrapf(err, "Failed getting package list for '%s' '%s'", a.Path, a.CompileSpec.Package.HumanReadableString()) + } + a.Files = filelist } - a.Files = filelist a.CompileSpec.GetPackage().SetBuildTimestamp(time.Now().String()) err = a.WriteYAML(p.GetOutputPath()) diff --git a/pkg/compiler/compiler_test.go b/pkg/compiler/compiler_test.go index 14e63d66..826adbb4 100644 --- a/pkg/compiler/compiler_test.go +++ b/pkg/compiler/compiler_test.go @@ -1064,5 +1064,41 @@ var _ = Describe("Compiler", func() { files := art.Files Expect(files).To(ContainElement("bin/busybox")) }) + + It("is not generated after the compilation process and annotated in the metadata if a package is hidden", func() { + generalRecipe := tree.NewCompilerRecipe(pkg.NewInMemoryDatabase(false)) + + err := generalRecipe.Load("../../tests/fixtures/packagelayers_hidden") + Expect(err).ToNot(HaveOccurred()) + + Expect(len(generalRecipe.GetDatabase().GetPackages())).To(Equal(2)) + + compiler := NewLuetCompiler(sd.NewSimpleDockerBackend(ctx), generalRecipe.GetDatabase(), options.WithContext(context.NewContext())) + + spec, err := compiler.FromPackage(&pkg.DefaultPackage{Name: "runtime", Category: "layer", Version: "0.1"}) + Expect(err).ToNot(HaveOccurred()) + compiler.Options.CompressionType = compression.GZip + Expect(spec.GetPackage().GetPath()).ToNot(Equal("")) + + tmpdir, err := ioutil.TempDir("", "tree") + Expect(err).ToNot(HaveOccurred()) + defer os.RemoveAll(tmpdir) // clean up + + spec.SetOutputPath(tmpdir) + + artifacts, errs := compiler.CompileParallel(false, compilerspec.NewLuetCompilationspecs(spec)) + Expect(errs).To(BeNil()) + Expect(len(artifacts)).To(Equal(1)) + Expect(len(artifacts[0].Dependencies)).To(Equal(1)) + Expect(artifacts[0].Files).ToNot(ContainElement("bin/busybox")) + + Expect(fileHelper.Exists(spec.Rel("runtime-layer-0.1.metadata.yaml"))).To(BeTrue()) + + art, err := LoadArtifactFromYaml(spec) + Expect(err).ToNot(HaveOccurred()) + + files := art.Files + Expect(files).ToNot(ContainElement("bin/busybox")) + }) }) }) diff --git a/tests/fixtures/packagelayers_hidden/build/build.yaml b/tests/fixtures/packagelayers_hidden/build/build.yaml new file mode 100644 index 00000000..a50e4f15 --- /dev/null +++ b/tests/fixtures/packagelayers_hidden/build/build.yaml @@ -0,0 +1,3 @@ + +unpack: true +image: "alpine" diff --git a/tests/fixtures/packagelayers_hidden/build/definition.yaml b/tests/fixtures/packagelayers_hidden/build/definition.yaml new file mode 100644 index 00000000..05a852f0 --- /dev/null +++ b/tests/fixtures/packagelayers_hidden/build/definition.yaml @@ -0,0 +1,3 @@ +category: "layer" +name: "build" +version: "0.1" diff --git a/tests/fixtures/packagelayers_hidden/runtime/build.yaml b/tests/fixtures/packagelayers_hidden/runtime/build.yaml new file mode 100644 index 00000000..208f24d7 --- /dev/null +++ b/tests/fixtures/packagelayers_hidden/runtime/build.yaml @@ -0,0 +1,8 @@ + +unpack: true +requires: +- category: "layer" + name: "build" + version: ">=0.1" +steps: +- rm -rfv /var diff --git a/tests/fixtures/packagelayers_hidden/runtime/definition.yaml b/tests/fixtures/packagelayers_hidden/runtime/definition.yaml new file mode 100644 index 00000000..415a6c1f --- /dev/null +++ b/tests/fixtures/packagelayers_hidden/runtime/definition.yaml @@ -0,0 +1,4 @@ +category: "layer" +name: "runtime" +version: "0.1" +hidden: true \ No newline at end of file