diff --git a/cmd/tree/validate.go b/cmd/tree/validate.go index 2f1e7495..341b2d4c 100644 --- a/cmd/tree/validate.go +++ b/cmd/tree/validate.go @@ -85,7 +85,7 @@ func validatePackage(p pkg.Package, checkType string, opts *ValidateOpts, recipe if opts.WithSolver { emptyInstallationDb := pkg.NewInMemoryDatabase(false) - depSolver = solver.NewSolver(solver.Options{Type: solver.SingleCoreSimple},pkg.NewInMemoryDatabase(false), + depSolver = solver.NewSolver(solver.Options{Type: solver.SingleCoreSimple}, pkg.NewInMemoryDatabase(false), reciper.GetDatabase(), emptyInstallationDb) } diff --git a/pkg/compiler/compiler.go b/pkg/compiler/compiler.go index dae707df..635abefb 100644 --- a/pkg/compiler/compiler.go +++ b/pkg/compiler/compiler.go @@ -237,7 +237,7 @@ func (cs *LuetCompiler) stripIncludesFromRootfs(includes []string, rootfs string func (cs *LuetCompiler) compileWithImage(image, buildertaggedImage, packageImage string, concurrency int, keepPermissions, keepImg bool, p CompilationSpec, generateArtifact bool) (Artifact, error) { - pkgTag := ":package: " + p.GetPackage().GetName() + pkgTag := ":package: " + p.GetPackage().HumanReadableString() // Use packageImage as salt into the fp being used // so the hash is unique also in cases where @@ -296,7 +296,7 @@ func (cs *LuetCompiler) compileWithImage(image, buildertaggedImage, packageImage } } - Info(pkgTag, "Generating :whale: definition for builder image from", image) + Info(pkgTag, ":whale: Generating 'builder' image definition from", image) // First we create the builder image p.WriteBuildImageDefinition(filepath.Join(buildDir, p.GetPackage().GetFingerPrint()+"-builder.dockerfile")) @@ -433,7 +433,7 @@ func (cs *LuetCompiler) compileWithImage(image, buildertaggedImage, packageImage artifact.SetCompileSpec(p) } else { - Info(pkgTag, "Generating delta") + Info(pkgTag, ":hammer: Generating delta") diffs, err := cs.Backend.Changes(p.Rel(p.GetPackage().GetFingerPrint()+"-builder.image.tar"), p.Rel(p.GetPackage().GetFingerPrint()+".image.tar")) if err != nil { return nil, errors.Wrap(err, "Could not generate changes from layers") @@ -589,8 +589,8 @@ func (cs *LuetCompiler) compile(concurrency int, keepPermissions bool, p Compila for _, assertion := range dependencies { //highly dependent on the order currentN++ - pkgTag := fmt.Sprintf(":package: %d/%d %s ⤑ %s", currentN, depsN, p.GetPackage().HumanReadableString(), assertion.Package.HumanReadableString()) - Info(pkgTag, " :zap: Building dependency") + pkgTag := fmt.Sprintf(":package: %d/%d %s ⤑ :hammer: build %s", currentN, depsN, p.GetPackage().HumanReadableString(), assertion.Package.HumanReadableString()) + Info(pkgTag, " starts") compileSpec, err := cs.FromPackage(assertion.Package) if err != nil { return nil, errors.Wrap(err, "Error while generating compilespec for "+assertion.Package.GetName()) @@ -622,7 +622,7 @@ func (cs *LuetCompiler) compile(concurrency int, keepPermissions bool, p Compila // break // stop at first error } departifacts = append(departifacts, artifact) - Info(pkgTag, ":collision: Done") + Info(pkgTag, ":white_check_mark: Done") } } else if len(dependencies) > 0 { @@ -630,7 +630,8 @@ func (cs *LuetCompiler) compile(concurrency int, keepPermissions bool, p Compila } if !cs.Options.OnlyDeps { - Info(":package:", p.GetPackage().HumanReadableString(), ":cyclone: Building package target from:", lastHash) + Info(":rocket: All dependencies are satisfied, building package requested by the user", p.GetPackage().HumanReadableString()) + Info(":package:", p.GetPackage().HumanReadableString(), " Using image: ", lastHash) artifact, err := cs.compileWithImage(lastHash, "", targetPackageHash, concurrency, keepPermissions, cs.KeepImg, p, true) if err != nil { return artifact, err diff --git a/pkg/helpers/helm.go b/pkg/helpers/helm.go index ee69736d..13d1f1e9 100644 --- a/pkg/helpers/helm.go +++ b/pkg/helpers/helm.go @@ -1,15 +1,14 @@ package helpers import ( - + "github.com/pkg/errors" "helm.sh/helm/v3/pkg/chart" "helm.sh/helm/v3/pkg/chartutil" "helm.sh/helm/v3/pkg/engine" - "github.com/pkg/errors" ) // RenderHelm renders the template string with helm -func RenderHelm(template string, values map[string]interface{}) (string,error) { +func RenderHelm(template string, values map[string]interface{}) (string, error) { c := &chart.Chart{ Metadata: &chart.Metadata{ Name: "", @@ -18,17 +17,17 @@ func RenderHelm(template string, values map[string]interface{}) (string,error) { Templates: []*chart.File{ {Name: "templates", Data: []byte(template)}, }, - Values: map[string]interface{}{"Values":values}, + Values: map[string]interface{}{"Values": values}, } v, err := chartutil.CoalesceValues(c, map[string]interface{}{}) if err != nil { - return "",errors.Wrap(err,"while rendering template") + return "", errors.Wrap(err, "while rendering template") } out, err := engine.Render(c, v) if err != nil { - return "",errors.Wrap(err,"while rendering template") + return "", errors.Wrap(err, "while rendering template") } - return out["templates"],nil + return out["templates"], nil } diff --git a/pkg/helpers/helm_test.go b/pkg/helpers/helm_test.go index db9f0ea8..2c9e3739 100644 --- a/pkg/helpers/helm_test.go +++ b/pkg/helpers/helm_test.go @@ -24,7 +24,7 @@ import ( var _ = Describe("Helpers", func() { Context("RenderHelm", func() { It("Renders templates", func() { - out, err := RenderHelm("{{.Values.Test}}",map[string]interface{}{"Test":"foo"}) + out, err := RenderHelm("{{.Values.Test}}", map[string]interface{}{"Test": "foo"}) Expect(err).ToNot(HaveOccurred()) Expect(out).To(Equal("foo")) }) diff --git a/pkg/installer/finalizer.go b/pkg/installer/finalizer.go index ac5781fb..8fe0024b 100644 --- a/pkg/installer/finalizer.go +++ b/pkg/installer/finalizer.go @@ -47,7 +47,7 @@ func (f *LuetFinalizer) RunInstall(s *System) error { for _, c := range f.Install { toRun := append(args, c) - Info("Executing finalizer on ", s.Target, cmd, toRun) + Info(":shell: Executing finalizer on ", s.Target, cmd, toRun) if s.Target == "/" { cmd := exec.Command(cmd, toRun...) stdoutStderr, err := cmd.CombinedOutput() diff --git a/pkg/installer/installer.go b/pkg/installer/installer.go index 6f120911..8d9d580c 100644 --- a/pkg/installer/installer.go +++ b/pkg/installer/installer.go @@ -69,8 +69,10 @@ func (l *LuetInstaller) Upgrade(s *System) error { return err } - Info(":thinking: Computing upgrade, please hang tight") - + Info(":thinking: Computing upgrade, please hang tight... :zzz:") + if l.Options.UpgradeNewRevisions { + Info(":memo: note: will consider new build revisions while upgrading") + } Spinner(32) defer SpinnerStop() // First match packages against repositories by priority @@ -97,7 +99,7 @@ func (l *LuetInstaller) Upgrade(s *System) error { SpinnerStop() if len(uninstall) > 0 { - Info("Packages marked for uninstall:") + Info(":recycle: Packages marked for uninstall:") } for _, p := range uninstall { @@ -105,7 +107,7 @@ func (l *LuetInstaller) Upgrade(s *System) error { } if len(solution) > 0 { - Info("Packages marked for upgrade:") + Info(":zap: Packages marked for upgrade:") } toInstall := pkg.Packages{} @@ -118,13 +120,13 @@ func (l *LuetInstaller) Upgrade(s *System) error { } if l.Options.UpgradeNewRevisions { - Info("Checking packages with new revisions available") + Info(":mag: Checking packages with new revisions available") for _, p := range s.Database.World() { matches := syncedRepos.PackageMatches(pkg.Packages{p}) if len(matches) == 0 { // Package missing. the user should run luet upgrade --universe - Info("Installed packages seems to be missing from remote repositories.") - Info("It is suggested to run 'luet upgrade --universe'") + Info(":warning: Installed packages seems to be missing from remote repositories.") + Info(":warning: It is suggested to run 'luet upgrade --universe'") continue } for _, artefact := range matches[0].Repo.GetIndex() { @@ -293,7 +295,7 @@ func (l *LuetInstaller) Reclaim(s *System) error { if err != nil { return err } - Info("Found package:", p.HumanReadableString()) + Info(":mag: Found package:", p.HumanReadableString()) toMerge = append(toMerge, ArtifactMatch{Artifact: artefact, Package: p}) break FILES } @@ -314,7 +316,7 @@ func (l *LuetInstaller) Reclaim(s *System) error { return errors.Wrap(err, "Failed creating package") } s.Database.SetPackageFiles(&pkg.PackageFile{PackageFingerprint: pack.GetFingerPrint(), Files: match.Artifact.GetFiles()}) - Info("Reclaimed package:", pack.HumanReadableString()) + Info(":zap: Reclaimed package:", pack.HumanReadableString()) } Info("Done!") @@ -396,7 +398,7 @@ func (l *LuetInstaller) install(syncedRepos Repositories, cp pkg.Packages, s *Sy // Filter out already installed if _, err := s.Database.FindPackage(currentPack); err != nil { toInstall[currentPack.GetFingerPrint()] = ArtifactMatch{Package: currentPack, Artifact: artefact, Repository: matches[0].Repo} - Info("\t:package:", currentPack.HumanReadableString(), "from repository", matches[0].Repo.GetName()) + Info("\t:package:", currentPack.HumanReadableString(), ":cloud:", matches[0].Repo.GetName()) } break A } @@ -467,12 +469,12 @@ func (l *LuetInstaller) install(syncedRepos Repositories, cp pkg.Packages, s *Sy return errors.Wrap(err, "Error getting package "+ass.Package.HumanReadableString()) } if helpers.Exists(treePackage.Rel(tree.FinalizerFile)) { - Info("Executing finalizer for " + ass.Package.HumanReadableString()) finalizerRaw, err := ioutil.ReadFile(treePackage.Rel(tree.FinalizerFile)) if err != nil && !l.Options.Force { return errors.Wrap(err, "Error reading file "+treePackage.Rel(tree.FinalizerFile)) } if _, exists := executedFinalizer[ass.Package.GetFingerPrint()]; !exists { + Info("Executing finalizer for " + ass.Package.HumanReadableString()) finalizer, err := NewLuetFinalizerFromYaml(finalizerRaw) if err != nil && !l.Options.Force { return errors.Wrap(err, "Error reading finalizer "+treePackage.Rel(tree.FinalizerFile)) @@ -496,12 +498,12 @@ func (l *LuetInstaller) install(syncedRepos Repositories, cp pkg.Packages, s *Sy return errors.Wrap(err, "Error getting package "+c.Package.HumanReadableString()) } if helpers.Exists(treePackage.Rel(tree.FinalizerFile)) { - Info("Executing finalizer for " + c.Package.HumanReadableString()) finalizerRaw, err := ioutil.ReadFile(treePackage.Rel(tree.FinalizerFile)) if err != nil && !l.Options.Force { return errors.Wrap(err, "Error reading file "+treePackage.Rel(tree.FinalizerFile)) } if _, exists := executedFinalizer[c.Package.GetFingerPrint()]; !exists { + Info(":shell: Executing finalizer for " + c.Package.HumanReadableString()) finalizer, err := NewLuetFinalizerFromYaml(finalizerRaw) if err != nil && !l.Options.Force { return errors.Wrap(err, "Error reading finalizer "+treePackage.Rel(tree.FinalizerFile)) @@ -630,7 +632,7 @@ func (l *LuetInstaller) uninstall(p pkg.Package, s *System) error { return errors.Wrap(err, "Failed removing package from database") } - Info(p.GetFingerPrint(), "Removed") + Info(":recycle:", p.GetFingerPrint(), "Removed :heavy_check_mark:") return nil } @@ -638,7 +640,7 @@ func (l *LuetInstaller) Uninstall(p pkg.Package, s *System) error { Spinner(32) defer SpinnerStop() - Info("Uninstalling :package:", p.HumanReadableString(), "hang tight") + Info(":recycle: Uninstalling :package:", p.HumanReadableString(), "hang tight") // compute uninstall from all world - remove packages in parallel - run uninstall finalizer (in order) TODO - mark the uninstallation in db // Get installed definition @@ -661,7 +663,7 @@ func (l *LuetInstaller) Uninstall(p pkg.Package, s *System) error { } if !l.Options.NoDeps { - Info("Finding :package:", p.HumanReadableString(), "dependency graph :deciduous_tree:") + Info(":mag: Finding :package:", p.HumanReadableString(), "dependency graph :deciduous_tree:") solv := solver.NewResolver(solver.Options{Type: l.Options.SolverOptions.Implementation, Concurrency: l.Options.Concurrency}, installedtmp, installedtmp, pkg.NewInMemoryDatabase(false), l.Options.SolverOptions.Resolver()) var solution pkg.Packages var err error @@ -678,19 +680,19 @@ func (l *LuetInstaller) Uninstall(p pkg.Package, s *System) error { } for _, p := range solution { - Info("Uninstalling", p.HumanReadableString()) + Info(":recycle: Uninstalling", p.HumanReadableString()) err := l.uninstall(p, s) if err != nil && !l.Options.Force { return errors.Wrap(err, "Uninstall failed") } } } else { - Info("Uninstalling", p.HumanReadableString(), "without deps") + Info(":recycle: Uninstalling", p.HumanReadableString(), "without deps") err := l.uninstall(p, s) if err != nil && !l.Options.Force { return errors.Wrap(err, "Uninstall failed") } - Info(":package:", p.HumanReadableString(), "uninstalled") + Info(":recycle: :package:", p.HumanReadableString(), "uninstalled :heavy_check_mark:") } return nil diff --git a/tests/integration/03_qlearning.sh b/tests/integration/03_qlearning.sh index d8c8c03a..2ea95935 100755 --- a/tests/integration/03_qlearning.sh +++ b/tests/integration/03_qlearning.sh @@ -74,7 +74,8 @@ testFullInstall() { testInstallAgain() { output=$(luet install --solver-type qlearning --config $tmpdir/luet.yaml test/d test/f test/e test/a) installst=$? - assertEquals 'install test successfully' "$installst" "0" + echo "$output" + assertEquals 'install test successfully' "0" "$installst" assertNotContains 'contains warning' "$output" 'Filtering out' assertTrue 'package D installed' "[ -e '$tmpdir/testrootfs/d' ]" assertTrue 'package F installed' "[ -e '$tmpdir/testrootfs/f' ]"