From bcc6ce19ea8a9ee8790224f44a28a979c2fea4c2 Mon Sep 17 00:00:00 2001 From: Ettore Di Giacinto Date: Sun, 5 Jan 2020 14:32:26 +0100 Subject: [PATCH 1/7] Move compiler options to its own struct Also add Clean attribute, to handle a future build clean method --- cmd/build.go | 2 +- pkg/compiler/artifact_test.go | 2 +- pkg/compiler/compiler.go | 26 +++++++++++++------------- pkg/compiler/compiler_test.go | 30 +++++++++++++++--------------- pkg/compiler/interface.go | 20 ++++++++++++++++++++ pkg/compiler/spec_test.go | 2 +- 6 files changed, 51 insertions(+), 31 deletions(-) diff --git a/cmd/build.go b/cmd/build.go index d5b882e0..d125881f 100644 --- a/cmd/build.go +++ b/cmd/build.go @@ -90,7 +90,7 @@ var buildCmd = &cobra.Command{ if err != nil { Fatal("Error: " + err.Error()) } - luetCompiler := compiler.NewLuetCompiler(compilerBackend, generalRecipe.GetDatabase()) + luetCompiler := compiler.NewLuetCompiler(compilerBackend, generalRecipe.GetDatabase(), compiler.NewDefaultCompilerOptions()) luetCompiler.SetConcurrency(concurrency) luetCompiler.SetCompressionType(compiler.CompressionImplementation(compressionType)) if !all { diff --git a/pkg/compiler/artifact_test.go b/pkg/compiler/artifact_test.go index d5b243cc..5237d7a6 100644 --- a/pkg/compiler/artifact_test.go +++ b/pkg/compiler/artifact_test.go @@ -41,7 +41,7 @@ var _ = Describe("Artifact", func() { Expect(len(generalRecipe.GetDatabase().GetPackages())).To(Equal(1)) - compiler := NewLuetCompiler(nil, generalRecipe.GetDatabase()) + compiler := NewLuetCompiler(nil, generalRecipe.GetDatabase(), NewDefaultCompilerOptions()) spec, err := compiler.FromPackage(&pkg.DefaultPackage{Name: "enman", Category: "app-admin", Version: "1.4.0"}) Expect(err).ToNot(HaveOccurred()) diff --git a/pkg/compiler/compiler.go b/pkg/compiler/compiler.go index 34d26994..7ad2baad 100644 --- a/pkg/compiler/compiler.go +++ b/pkg/compiler/compiler.go @@ -21,7 +21,6 @@ import ( "os" "path/filepath" "regexp" - "runtime" "strings" "sync" @@ -37,15 +36,15 @@ const BuildFile = "build.yaml" type LuetCompiler struct { *tree.CompilerRecipe - Backend CompilerBackend - Database pkg.PackageDatabase - ImageRepository string - PullFirst, KeepImg bool - Concurrency int - CompressionType CompressionImplementation + Backend CompilerBackend + Database pkg.PackageDatabase + ImageRepository string + PullFirst, KeepImg, Clean bool + Concurrency int + CompressionType CompressionImplementation } -func NewLuetCompiler(backend CompilerBackend, db pkg.PackageDatabase) Compiler { +func NewLuetCompiler(backend CompilerBackend, db pkg.PackageDatabase, opt CompilerOptions) Compiler { // The CompilerRecipe will gives us a tree with only build deps listed. return &LuetCompiler{ Backend: backend, @@ -53,11 +52,12 @@ func NewLuetCompiler(backend CompilerBackend, db pkg.PackageDatabase) Compiler { tree.Recipe{Database: db}, }, Database: db, - ImageRepository: "luet/cache", - PullFirst: true, - CompressionType: None, - KeepImg: true, - Concurrency: runtime.NumCPU(), + ImageRepository: opt.ImageRepository, + PullFirst: opt.PullFirst, + CompressionType: opt.CompressionType, + KeepImg: opt.KeepImg, + Concurrency: opt.Concurrency, + Clean: opt.Clean, } } diff --git a/pkg/compiler/compiler_test.go b/pkg/compiler/compiler_test.go index 1eea1f46..6f4817c1 100644 --- a/pkg/compiler/compiler_test.go +++ b/pkg/compiler/compiler_test.go @@ -38,7 +38,7 @@ var _ = Describe("Compiler", func() { Expect(len(generalRecipe.GetDatabase().GetPackages())).To(Equal(3)) - compiler := NewLuetCompiler(sd.NewSimpleDockerBackend(), generalRecipe.GetDatabase()) + compiler := NewLuetCompiler(sd.NewSimpleDockerBackend(), generalRecipe.GetDatabase(), NewDefaultCompilerOptions()) spec, err := compiler.FromPackage(&pkg.DefaultPackage{Name: "b", Category: "test", Version: "1.0"}) Expect(err).ToNot(HaveOccurred()) @@ -82,7 +82,7 @@ var _ = Describe("Compiler", func() { Expect(len(generalRecipe.GetDatabase().GetPackages())).To(Equal(3)) - compiler := NewLuetCompiler(sd.NewSimpleDockerBackend(), generalRecipe.GetDatabase()) + compiler := NewLuetCompiler(sd.NewSimpleDockerBackend(), generalRecipe.GetDatabase(), NewDefaultCompilerOptions()) spec, err := compiler.FromPackage(&pkg.DefaultPackage{Name: "b", Category: "test", Version: "1.0"}) Expect(err).ToNot(HaveOccurred()) @@ -120,7 +120,7 @@ var _ = Describe("Compiler", func() { Expect(len(generalRecipe.GetDatabase().GetPackages())).To(Equal(4)) - compiler := NewLuetCompiler(sd.NewSimpleDockerBackend(), generalRecipe.GetDatabase()) + compiler := NewLuetCompiler(sd.NewSimpleDockerBackend(), generalRecipe.GetDatabase(), NewDefaultCompilerOptions()) spec, err := compiler.FromPackage(&pkg.DefaultPackage{Name: "c", Category: "test", Version: "1.0"}) Expect(err).ToNot(HaveOccurred()) @@ -177,7 +177,7 @@ var _ = Describe("Compiler", func() { Expect(len(generalRecipe.GetDatabase().GetPackages())).To(Equal(2)) - compiler := NewLuetCompiler(sd.NewSimpleDockerBackend(), generalRecipe.GetDatabase()) + compiler := NewLuetCompiler(sd.NewSimpleDockerBackend(), generalRecipe.GetDatabase(), NewDefaultCompilerOptions()) spec, err := compiler.FromPackage(&pkg.DefaultPackage{Name: "extra", Category: "layer", Version: "1.0"}) Expect(err).ToNot(HaveOccurred()) @@ -219,7 +219,7 @@ var _ = Describe("Compiler", func() { Expect(len(generalRecipe.GetDatabase().GetPackages())).To(Equal(1)) - compiler := NewLuetCompiler(sd.NewSimpleDockerBackend(), generalRecipe.GetDatabase()) + compiler := NewLuetCompiler(sd.NewSimpleDockerBackend(), generalRecipe.GetDatabase(), NewDefaultCompilerOptions()) spec, err := compiler.FromPackage(&pkg.DefaultPackage{Name: "b", Category: "test", Version: "1.0"}) Expect(err).ToNot(HaveOccurred()) @@ -254,7 +254,7 @@ var _ = Describe("Compiler", func() { Expect(len(generalRecipe.GetDatabase().GetPackages())).To(Equal(2)) - compiler := NewLuetCompiler(sd.NewSimpleDockerBackend(), generalRecipe.GetDatabase()) + compiler := NewLuetCompiler(sd.NewSimpleDockerBackend(), generalRecipe.GetDatabase(), NewDefaultCompilerOptions()) spec, err := compiler.FromPackage(&pkg.DefaultPackage{Name: "b", Category: "test", Version: "1.0"}) Expect(err).ToNot(HaveOccurred()) @@ -292,7 +292,7 @@ var _ = Describe("Compiler", func() { Expect(len(generalRecipe.GetDatabase().GetPackages())).To(Equal(3)) - compiler := NewLuetCompiler(sd.NewSimpleDockerBackend(), generalRecipe.GetDatabase()) + compiler := NewLuetCompiler(sd.NewSimpleDockerBackend(), generalRecipe.GetDatabase(), NewDefaultCompilerOptions()) spec, err := compiler.FromPackage(&pkg.DefaultPackage{Name: "pkgs-checker", Category: "package", Version: "9999"}) Expect(err).ToNot(HaveOccurred()) @@ -333,7 +333,7 @@ var _ = Describe("Compiler", func() { Expect(len(generalRecipe.GetDatabase().GetPackages())).To(Equal(3)) - compiler := NewLuetCompiler(sd.NewSimpleDockerBackend(), generalRecipe.GetDatabase()) + compiler := NewLuetCompiler(sd.NewSimpleDockerBackend(), generalRecipe.GetDatabase(), NewDefaultCompilerOptions()) spec, err := compiler.FromPackage(&pkg.DefaultPackage{Name: "d", Category: "test", Version: "1.0"}) Expect(err).ToNot(HaveOccurred()) @@ -377,7 +377,7 @@ var _ = Describe("Compiler", func() { Expect(len(generalRecipe.GetDatabase().GetPackages())).To(Equal(3)) - compiler := NewLuetCompiler(sd.NewSimpleDockerBackend(), generalRecipe.GetDatabase()) + compiler := NewLuetCompiler(sd.NewSimpleDockerBackend(), generalRecipe.GetDatabase(), NewDefaultCompilerOptions()) spec, err := compiler.FromPackage(&pkg.DefaultPackage{Name: "d", Category: "test", Version: "1.0"}) Expect(err).ToNot(HaveOccurred()) @@ -419,7 +419,7 @@ var _ = Describe("Compiler", func() { Expect(len(generalRecipe.GetDatabase().GetPackages())).To(Equal(3)) - compiler := NewLuetCompiler(sd.NewSimpleDockerBackend(), generalRecipe.GetDatabase()) + compiler := NewLuetCompiler(sd.NewSimpleDockerBackend(), generalRecipe.GetDatabase(), NewDefaultCompilerOptions()) spec, err := compiler.FromPackage(&pkg.DefaultPackage{Name: "extra", Category: "layer", Version: "0.1"}) Expect(err).ToNot(HaveOccurred()) @@ -457,7 +457,7 @@ var _ = Describe("Compiler", func() { Expect(len(generalRecipe.GetDatabase().GetPackages())).To(Equal(10)) - compiler := NewLuetCompiler(sd.NewSimpleDockerBackend(), generalRecipe.GetDatabase()) + compiler := NewLuetCompiler(sd.NewSimpleDockerBackend(), generalRecipe.GetDatabase(), NewDefaultCompilerOptions()) spec, err := compiler.FromPackage(&pkg.DefaultPackage{Name: "vhba", Category: "sys-fs-5.4.2", Version: "20190410"}) Expect(err).ToNot(HaveOccurred()) @@ -496,7 +496,7 @@ var _ = Describe("Compiler", func() { Expect(len(generalRecipe.GetDatabase().GetPackages())).To(Equal(4)) - compiler := NewLuetCompiler(sd.NewSimpleDockerBackend(), generalRecipe.GetDatabase()) + compiler := NewLuetCompiler(sd.NewSimpleDockerBackend(), generalRecipe.GetDatabase(), NewDefaultCompilerOptions()) spec, err := compiler.FromPackage(&pkg.DefaultPackage{Name: "b", Category: "test", Version: "1.0"}) @@ -548,7 +548,7 @@ var _ = Describe("Compiler", func() { Expect(len(generalRecipe.GetDatabase().GetPackages())).To(Equal(3)) - compiler := NewLuetCompiler(sd.NewSimpleDockerBackend(), generalRecipe.GetDatabase()) + compiler := NewLuetCompiler(sd.NewSimpleDockerBackend(), generalRecipe.GetDatabase(), NewDefaultCompilerOptions()) spec, err := compiler.FromPackage(&pkg.DefaultPackage{Name: "c", Category: "test", Version: "1.0"}) Expect(err).ToNot(HaveOccurred()) @@ -591,7 +591,7 @@ var _ = Describe("Compiler", func() { Expect(len(generalRecipe.GetDatabase().GetPackages())).To(Equal(2)) - compiler := NewLuetCompiler(sd.NewSimpleDockerBackend(), generalRecipe.GetDatabase()) + compiler := NewLuetCompiler(sd.NewSimpleDockerBackend(), generalRecipe.GetDatabase(), NewDefaultCompilerOptions()) spec, err := compiler.FromPackage(&pkg.DefaultPackage{Name: "runtime", Category: "layer", Version: "0.1"}) Expect(err).ToNot(HaveOccurred()) @@ -624,7 +624,7 @@ var _ = Describe("Compiler", func() { Expect(len(generalRecipe.GetDatabase().GetPackages())).To(Equal(2)) - compiler := NewLuetCompiler(sd.NewSimpleDockerBackend(), generalRecipe.GetDatabase()) + compiler := NewLuetCompiler(sd.NewSimpleDockerBackend(), generalRecipe.GetDatabase(), NewDefaultCompilerOptions()) spec, err := compiler.FromPackage(&pkg.DefaultPackage{Name: "runtime", Category: "layer", Version: "0.1"}) Expect(err).ToNot(HaveOccurred()) diff --git a/pkg/compiler/interface.go b/pkg/compiler/interface.go index d4fff3ca..0d786856 100644 --- a/pkg/compiler/interface.go +++ b/pkg/compiler/interface.go @@ -16,6 +16,8 @@ package compiler import ( + "runtime" + pkg "github.com/mudler/luet/pkg/package" "github.com/mudler/luet/pkg/solver" ) @@ -40,6 +42,24 @@ type CompilerBackendOptions struct { Destination string } +type CompilerOptions struct { + ImageRepository string + PullFirst, KeepImg bool + Concurrency int + CompressionType CompressionImplementation + Clean bool +} + +func NewDefaultCompilerOptions() CompilerOptions { + return CompilerOptions{ + ImageRepository: "luet/cache", + PullFirst: true, + CompressionType: None, + KeepImg: true, + Concurrency: runtime.NumCPU(), + } +} + type CompilerBackend interface { BuildImage(CompilerBackendOptions) error ExportImage(CompilerBackendOptions) error diff --git a/pkg/compiler/spec_test.go b/pkg/compiler/spec_test.go index d6c15eb0..c0ce591a 100644 --- a/pkg/compiler/spec_test.go +++ b/pkg/compiler/spec_test.go @@ -61,7 +61,7 @@ var _ = Describe("Spec", func() { Expect(len(generalRecipe.GetDatabase().GetPackages())).To(Equal(1)) - compiler := NewLuetCompiler(nil, generalRecipe.GetDatabase()) + compiler := NewLuetCompiler(nil, generalRecipe.GetDatabase(), NewDefaultCompilerOptions()) spec, err := compiler.FromPackage(&pkg.DefaultPackage{Name: "enman", Category: "app-admin", Version: "1.4.0"}) Expect(err).ToNot(HaveOccurred()) From 1d1efad18bcb31b470bdaeb03cf4ea43c86e4cfb Mon Sep 17 00:00:00 2001 From: Ettore Di Giacinto Date: Sun, 5 Jan 2020 15:30:16 +0100 Subject: [PATCH 2/7] Skip building if artifact already exists --- pkg/compiler/artifact.go | 11 +++++++++++ pkg/compiler/compiler.go | 10 ++++++++++ 2 files changed, 21 insertions(+) diff --git a/pkg/compiler/artifact.go b/pkg/compiler/artifact.go index c28a8b0c..7ce08ef1 100644 --- a/pkg/compiler/artifact.go +++ b/pkg/compiler/artifact.go @@ -92,6 +92,17 @@ func NewPackageArtifactFromYaml(data []byte) (Artifact, error) { return p, err } +func LoadArtifactFromYaml(spec CompilationSpec) (Artifact, error) { + + metaFile := spec.GetPackage().GetFingerPrint() + ".metadata.yaml" + dat, err := ioutil.ReadFile(spec.Rel(metaFile)) + if err != nil { + return nil, errors.Wrap(err, "Error reading file "+metaFile) + } + + return NewPackageArtifactFromYaml(dat) +} + func (a *PackageArtifact) SetCompressionType(t CompressionImplementation) { a.CompressionType = t } diff --git a/pkg/compiler/compiler.go b/pkg/compiler/compiler.go index 7ad2baad..caef184d 100644 --- a/pkg/compiler/compiler.go +++ b/pkg/compiler/compiler.go @@ -227,6 +227,11 @@ func (cs *LuetCompiler) stripIncludesFromRootfs(includes []string, rootfs string } func (cs *LuetCompiler) compileWithImage(image, buildertaggedImage, packageImage string, concurrency int, keepPermissions, keepImg bool, p CompilationSpec) (Artifact, error) { + if !cs.Clean { + if art, err := LoadArtifactFromYaml(p); err == nil { + return art, err + } + } pkgTag := ":package: " + p.GetPackage().GetName() p.SetSeedImage(image) // In this case, we ignore the build deps as we suppose that the image has them - otherwise we recompose the tree with a solver, @@ -382,6 +387,11 @@ func (cs *LuetCompiler) compileWithImage(image, buildertaggedImage, packageImage } func (cs *LuetCompiler) packageFromImage(p CompilationSpec, tag string, keepPermissions, keepImg bool, concurrency int) (Artifact, error) { + if !cs.Clean { + if art, err := LoadArtifactFromYaml(p); err == nil { + return art, err + } + } pkgTag := ":package: " + p.GetPackage().GetName() Info(pkgTag, " 🍩 Build starts 🔨 🔨 🔨 ") From 02c37c7451348c21400b02963a7262ef2dd917f2 Mon Sep 17 00:00:00 2001 From: Ettore Di Giacinto Date: Sun, 5 Jan 2020 15:31:08 +0100 Subject: [PATCH 3/7] Fix tests after contructor change --- pkg/compiler/backend/simpledocker_test.go | 2 +- pkg/installer/installer_test.go | 8 ++++---- pkg/installer/repository_test.go | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/pkg/compiler/backend/simpledocker_test.go b/pkg/compiler/backend/simpledocker_test.go index 05961f04..07a9d341 100644 --- a/pkg/compiler/backend/simpledocker_test.go +++ b/pkg/compiler/backend/simpledocker_test.go @@ -40,7 +40,7 @@ var _ = Describe("Docker backend", func() { Expect(len(generalRecipe.GetDatabase().GetPackages())).To(Equal(1)) - compiler := NewLuetCompiler(nil, generalRecipe.GetDatabase()) + compiler := NewLuetCompiler(nil, generalRecipe.GetDatabase(), NewDefaultCompilerOptions()) spec, err := compiler.FromPackage(&pkg.DefaultPackage{Name: "enman", Category: "app-admin", Version: "1.4.0"}) Expect(err).ToNot(HaveOccurred()) diff --git a/pkg/installer/installer_test.go b/pkg/installer/installer_test.go index a90805a3..98eebb0c 100644 --- a/pkg/installer/installer_test.go +++ b/pkg/installer/installer_test.go @@ -47,7 +47,7 @@ var _ = Describe("Installer", func() { Expect(len(generalRecipe.GetDatabase().GetPackages())).To(Equal(3)) - compiler := compiler.NewLuetCompiler(backend.NewSimpleDockerBackend(), generalRecipe.GetDatabase()) + compiler := compiler.NewLuetCompiler(backend.NewSimpleDockerBackend(), generalRecipe.GetDatabase(), compiler.NewDefaultCompilerOptions()) spec, err := compiler.FromPackage(&pkg.DefaultPackage{Name: "b", Category: "test", Version: "1.0"}) Expect(err).ToNot(HaveOccurred()) @@ -159,7 +159,7 @@ uri: "`+tmpdir+`" Expect(len(generalRecipe.GetDatabase().GetPackages())).To(Equal(3)) - compiler := compiler.NewLuetCompiler(backend.NewSimpleDockerBackend(), generalRecipe.GetDatabase()) + compiler := compiler.NewLuetCompiler(backend.NewSimpleDockerBackend(), generalRecipe.GetDatabase(), compiler.NewDefaultCompilerOptions()) spec, err := compiler.FromPackage(&pkg.DefaultPackage{Name: "b", Category: "test", Version: "1.0"}) Expect(err).ToNot(HaveOccurred()) @@ -277,7 +277,7 @@ uri: "`+tmpdir+`" Expect(len(generalRecipe.GetDatabase().GetPackages())).To(Equal(4)) - c := compiler.NewLuetCompiler(backend.NewSimpleDockerBackend(), generalRecipe.GetDatabase()) + c := compiler.NewLuetCompiler(backend.NewSimpleDockerBackend(), generalRecipe.GetDatabase(), compiler.NewDefaultCompilerOptions()) spec, err := c.FromPackage(&pkg.DefaultPackage{Name: "b", Category: "test", Version: "1.0"}) Expect(err).ToNot(HaveOccurred()) @@ -390,7 +390,7 @@ uri: "`+tmpdir+`" Expect(len(generalRecipe.GetDatabase().GetPackages())).To(Equal(4)) - c := compiler.NewLuetCompiler(backend.NewSimpleDockerBackend(), generalRecipe.GetDatabase()) + c := compiler.NewLuetCompiler(backend.NewSimpleDockerBackend(), generalRecipe.GetDatabase(), compiler.NewDefaultCompilerOptions()) spec, err := c.FromPackage(&pkg.DefaultPackage{Name: "b", Category: "test", Version: "1.0"}) Expect(err).ToNot(HaveOccurred()) diff --git a/pkg/installer/repository_test.go b/pkg/installer/repository_test.go index e0285338..2c5a9fc7 100644 --- a/pkg/installer/repository_test.go +++ b/pkg/installer/repository_test.go @@ -46,7 +46,7 @@ var _ = Describe("Repository", func() { Expect(len(generalRecipe.GetDatabase().GetPackages())).To(Equal(3)) - compiler := compiler.NewLuetCompiler(backend.NewSimpleDockerBackend(), generalRecipe.GetDatabase()) + compiler := compiler.NewLuetCompiler(backend.NewSimpleDockerBackend(), generalRecipe.GetDatabase(), compiler.NewDefaultCompilerOptions()) spec, err := compiler.FromPackage(&pkg.DefaultPackage{Name: "b", Category: "test", Version: "1.0"}) Expect(err).ToNot(HaveOccurred()) From 6d745ef9155d2416c2a065a3dfca66268fda24d1 Mon Sep 17 00:00:00 2001 From: Ettore Di Giacinto Date: Sun, 5 Jan 2020 15:39:34 +0100 Subject: [PATCH 4/7] Add build --clean to CLI --- cmd/build.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/cmd/build.go b/cmd/build.go index d125881f..ded9db5b 100644 --- a/cmd/build.go +++ b/cmd/build.go @@ -47,6 +47,7 @@ var buildCmd = &cobra.Command{ }, Run: func(cmd *cobra.Command, args []string) { + clean := viper.GetBool("clean") src := viper.GetString("tree") dst := viper.GetString("destination") concurrency := viper.GetInt("concurrency") @@ -90,7 +91,9 @@ var buildCmd = &cobra.Command{ if err != nil { Fatal("Error: " + err.Error()) } - luetCompiler := compiler.NewLuetCompiler(compilerBackend, generalRecipe.GetDatabase(), compiler.NewDefaultCompilerOptions()) + opts := compiler.NewDefaultCompilerOptions() + opts.Clean = clean + luetCompiler := compiler.NewLuetCompiler(compilerBackend, generalRecipe.GetDatabase(), opts) luetCompiler.SetConcurrency(concurrency) luetCompiler.SetCompressionType(compiler.CompressionImplementation(compressionType)) if !all { @@ -151,6 +154,7 @@ func init() { if err != nil { Fatal(err) } + buildCmd.Flags().Bool("clean", true, "Build all packages without considering the packages present in the build directory") buildCmd.Flags().String("tree", path, "Source luet tree") buildCmd.Flags().String("backend", "docker", "backend used (docker,img)") buildCmd.Flags().Int("concurrency", runtime.NumCPU(), "Concurrency") From ee055e08b147d5ea246d25a7b532fae3efae71c1 Mon Sep 17 00:00:00 2001 From: Ettore Di Giacinto Date: Sun, 5 Jan 2020 15:51:48 +0100 Subject: [PATCH 5/7] Set abs path when returning artifact from yaml --- pkg/compiler/artifact.go | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/pkg/compiler/artifact.go b/pkg/compiler/artifact.go index 7ce08ef1..44ac8f2c 100644 --- a/pkg/compiler/artifact.go +++ b/pkg/compiler/artifact.go @@ -99,8 +99,13 @@ func LoadArtifactFromYaml(spec CompilationSpec) (Artifact, error) { if err != nil { return nil, errors.Wrap(err, "Error reading file "+metaFile) } - - return NewPackageArtifactFromYaml(dat) + art, err := NewPackageArtifactFromYaml(dat) + if err != nil { + return nil, errors.Wrap(err, "Error writing file "+metaFile) + } + // It is relative, set it back to abs + art.SetPath(spec.Rel(art.GetPath())) + return art, nil } func (a *PackageArtifact) SetCompressionType(t CompressionImplementation) { From d23e1dee78eef4dd016cf22d3d6af489f7489505 Mon Sep 17 00:00:00 2001 From: Ettore Di Giacinto Date: Sun, 5 Jan 2020 15:52:05 +0100 Subject: [PATCH 6/7] Default to Clean true in CompilerOptions --- pkg/compiler/interface.go | 1 + 1 file changed, 1 insertion(+) diff --git a/pkg/compiler/interface.go b/pkg/compiler/interface.go index 0d786856..b48c283d 100644 --- a/pkg/compiler/interface.go +++ b/pkg/compiler/interface.go @@ -57,6 +57,7 @@ func NewDefaultCompilerOptions() CompilerOptions { CompressionType: None, KeepImg: true, Concurrency: runtime.NumCPU(), + Clean: true, } } From d2abaa9cc115fc72758832f70c577b3e81a00ae3 Mon Sep 17 00:00:00 2001 From: Ettore Di Giacinto Date: Sun, 5 Jan 2020 16:26:42 +0100 Subject: [PATCH 7/7] Add message asserting skip. Also return pointer to allow to edit Options --- cmd/build.go | 1 + pkg/compiler/compiler.go | 4 +++- pkg/compiler/interface.go | 4 ++-- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/cmd/build.go b/cmd/build.go index ded9db5b..c7130630 100644 --- a/cmd/build.go +++ b/cmd/build.go @@ -35,6 +35,7 @@ var buildCmd = &cobra.Command{ Short: "build a package or a tree", Long: `build packages or trees from luet tree definitions. Packages are in [category]/[name]-[version] form`, PreRun: func(cmd *cobra.Command, args []string) { + viper.BindPFlag("clean", cmd.Flags().Lookup("clean")) viper.BindPFlag("tree", cmd.Flags().Lookup("tree")) viper.BindPFlag("destination", cmd.Flags().Lookup("destination")) viper.BindPFlag("backend", cmd.Flags().Lookup("backend")) diff --git a/pkg/compiler/compiler.go b/pkg/compiler/compiler.go index caef184d..851e9d6a 100644 --- a/pkg/compiler/compiler.go +++ b/pkg/compiler/compiler.go @@ -44,7 +44,7 @@ type LuetCompiler struct { CompressionType CompressionImplementation } -func NewLuetCompiler(backend CompilerBackend, db pkg.PackageDatabase, opt CompilerOptions) Compiler { +func NewLuetCompiler(backend CompilerBackend, db pkg.PackageDatabase, opt *CompilerOptions) Compiler { // The CompilerRecipe will gives us a tree with only build deps listed. return &LuetCompiler{ Backend: backend, @@ -229,6 +229,7 @@ func (cs *LuetCompiler) stripIncludesFromRootfs(includes []string, rootfs string func (cs *LuetCompiler) compileWithImage(image, buildertaggedImage, packageImage string, concurrency int, keepPermissions, keepImg bool, p CompilationSpec) (Artifact, error) { if !cs.Clean { if art, err := LoadArtifactFromYaml(p); err == nil { + Debug("Artifact reloaded. Skipping build") return art, err } } @@ -389,6 +390,7 @@ func (cs *LuetCompiler) compileWithImage(image, buildertaggedImage, packageImage func (cs *LuetCompiler) packageFromImage(p CompilationSpec, tag string, keepPermissions, keepImg bool, concurrency int) (Artifact, error) { if !cs.Clean { if art, err := LoadArtifactFromYaml(p); err == nil { + Debug("Artifact reloaded. Skipping build") return art, err } } diff --git a/pkg/compiler/interface.go b/pkg/compiler/interface.go index b48c283d..fbe334da 100644 --- a/pkg/compiler/interface.go +++ b/pkg/compiler/interface.go @@ -50,8 +50,8 @@ type CompilerOptions struct { Clean bool } -func NewDefaultCompilerOptions() CompilerOptions { - return CompilerOptions{ +func NewDefaultCompilerOptions() *CompilerOptions { + return &CompilerOptions{ ImageRepository: "luet/cache", PullFirst: true, CompressionType: None,