Small fixes and enhance output

Fixes a small issue with the Spinner which prevented to update the
spinner style. Also respect the temp folders of the output when
extracting the rootfs.
This commit is contained in:
Ettore Di Giacinto
2019-11-14 17:45:21 +01:00
parent 0eef18d75c
commit ccdca66420
5 changed files with 53 additions and 28 deletions

View File

@@ -78,7 +78,7 @@ func initConfig() {
if err := viper.ReadInConfig(); err == nil {
Info("Using config file:", viper.ConfigFileUsed())
} else {
Error(err)
Warning(err)
}
}

View File

@@ -47,14 +47,16 @@ func (*SimpleDocker) BuildImage(opts compiler.CompilerBackendOptions) error {
Spinner(24)
defer SpinnerStop()
Debug(" 🐋 Building image "+name+" - running docker with: ", buildarg)
Debug(" 🐋 Building image " + name)
cmd := exec.Command("docker", buildarg...)
cmd.Dir = path
out, err := cmd.CombinedOutput()
if err != nil {
return errors.Wrap(err, "Failed building image: "+string(out))
}
Info(string(out))
Info(" 🐋 Building image " + name + " done")
//Info(string(out))
return nil
}
@@ -62,13 +64,13 @@ func (*SimpleDocker) CopyImage(src, dst string) error {
Spinner(24)
defer SpinnerStop()
Debug(" 🐋 Tagging image - running docker with: ", src, dst)
Debug(" 🐋 Tagging image:", src, "->", dst)
cmd := exec.Command("docker", "tag", src, dst)
out, err := cmd.CombinedOutput()
if err != nil {
return errors.Wrap(err, "Failed tagging image: "+string(out))
}
Info(string(out))
Info(" 🐋 Tagged image:", src, "->", dst)
return nil
}
@@ -78,13 +80,13 @@ func (*SimpleDocker) DownloadImage(opts compiler.CompilerBackendOptions) error {
Spinner(24)
defer SpinnerStop()
Debug(" 🐋 Downloading image "+name+" - running docker with: ", buildarg)
Debug(" 🐋 Downloading image " + name)
cmd := exec.Command("docker", buildarg...)
out, err := cmd.CombinedOutput()
if err != nil {
return errors.Wrap(err, "Failed building image: "+string(out))
}
Info(string(out))
Info(" 🐋 Downloaded image:", name)
return nil
}
@@ -97,7 +99,8 @@ func (*SimpleDocker) RemoveImage(opts compiler.CompilerBackendOptions) error {
if err != nil {
return errors.Wrap(err, "Failed removing image: "+string(out))
}
Info(string(out))
Info(" 🐋 Removed image:", name)
//Info(string(out))
return nil
}
@@ -121,13 +124,13 @@ func (*SimpleDocker) ExportImage(opts compiler.CompilerBackendOptions) error {
buildarg := []string{"save", name, "-o", path}
Spinner(24)
defer SpinnerStop()
Debug(" 🐋 Saving image "+name+" - running docker with: ", buildarg)
Debug(" 🐋 Saving image " + name)
out, err := exec.Command("docker", buildarg...).CombinedOutput()
if err != nil {
return errors.Wrap(err, "Failed exporting image: "+string(out))
}
Info(string(out))
Info(" 🐋 Exported image:", name)
return nil
}
@@ -139,7 +142,7 @@ func (*SimpleDocker) ExtractRootfs(opts compiler.CompilerBackendOptions, keepPer
src := opts.SourcePath
dst := opts.Destination
rootfs, err := ioutil.TempDir(os.TempDir(), "rootfs")
rootfs, err := ioutil.TempDir(dst, "tmprootfs")
if err != nil {
return errors.Wrap(err, "Error met while creating tempdir for rootfs")
}

View File

@@ -16,6 +16,7 @@
package compiler
import (
"fmt"
"io/ioutil"
"os"
"path/filepath"
@@ -189,6 +190,10 @@ func (cs *LuetCompiler) compileWithImage(image, buildertaggedImage, packageImage
}
func (cs *LuetCompiler) packageFromImage(p CompilationSpec, tag string, keepPermissions bool) (Artifact, error) {
pkgTag := "📦 " + p.GetPackage().GetName()
Info(pkgTag, " 🍩 Build starts 🔨 🔨 🔨 ")
builderOpts := CompilerBackendOptions{
ImageName: p.GetImage(),
Destination: p.Rel(p.GetPackage().GetFingerPrint() + ".image.tar"),
@@ -225,12 +230,13 @@ func (cs *LuetCompiler) packageFromImage(p CompilationSpec, tag string, keepPerm
if err != nil {
return nil, errors.Wrap(err, "Error met while creating package archive")
}
return NewPackageArtifact(p.Rel(p.GetPackage().GetFingerPrint() + ".package.tar")), nil
Info(pkgTag, " 🎉 Done")
return NewPackageArtifact(p.Rel(p.GetPackage().GetFingerPrint() + ".package.tar")), nil
}
func (cs *LuetCompiler) Compile(concurrency int, keepPermissions bool, p CompilationSpec) (Artifact, error) {
Debug(" 📦 Compiling " + p.GetPackage().GetName())
Info("📦 Compiling", p.GetPackage().GetName(), "version", p.GetPackage().GetVersion(), ".... ☕")
err := cs.Tree().ResolveDeps(concurrency) // FIXME: When done in parallel, this could be done on top before starting
if err != nil {
@@ -278,11 +284,22 @@ func (cs *LuetCompiler) Compile(concurrency int, keepPermissions bool, p Compila
departifacts := []Artifact{} // TODO: Return this somehow
deperrs := []error{}
var lastHash string
Info(" 📦 Build dependencies: ( target "+p.GetPackage().GetName()+")", dependencies.Explain())
depsN := 0
currentN := 0
Info("🌲 Build dependencies for " + p.GetPackage().GetName())
for _, assertion := range dependencies { //highly dependent on the order
if assertion.Value && assertion.Package.Flagged() {
depsN++
Info(" ⤷", assertion.Package.GetName(), "🍃", assertion.Package.GetVersion(), "(", assertion.Package.GetCategory(), ")")
}
}
for _, assertion := range dependencies { //highly dependent on the order
if assertion.Value && assertion.Package.Flagged() {
Info("( 📦 target "+p.GetPackage().GetName()+") Building", assertion.Package.GetName())
currentN++
pkgTag := fmt.Sprintf("📦 %d/%d %s ⤑ %s", currentN, depsN, p.GetPackage().GetName(), assertion.Package.GetName())
Info(pkgTag, " 🏗 Building dependency")
compileSpec, err := cs.FromPackage(assertion.Package)
if err != nil {
return nil, errors.New("Error while generating compilespec for " + assertion.Package.GetName())
@@ -301,8 +318,8 @@ func (cs *LuetCompiler) Compile(concurrency int, keepPermissions bool, p Compila
buildImageHash := "luet/cache:" + nthsolution.Order(depPack.GetFingerPrint()).Drop(depPack).AssertionHash()
currentPackageImageHash := "luet/cache:" + nthsolution.Order(depPack.GetFingerPrint()).AssertionHash()
Debug("( 📦"+p.GetPackage().GetName()+") 🐋 Builder image name:", buildImageHash)
Debug("( 📦 "+p.GetPackage().GetName()+") 🐋 Package image name:", currentPackageImageHash)
Debug(pkgTag, " ⤷ 🐋 Builder image name", buildImageHash)
Debug(pkgTag, " ⤷ 🐋 Package image name", currentPackageImageHash)
lastHash = currentPackageImageHash
if compileSpec.GetImage() != "" {
@@ -317,13 +334,14 @@ func (cs *LuetCompiler) Compile(concurrency int, keepPermissions bool, p Compila
continue
}
Debug(" 📦 (" + p.GetPackage().GetName() + ") Compiling " + compileSpec.GetPackage().GetFingerPrint() + " from image")
Debug(pkgTag, " 🍰 Compiling "+compileSpec.GetPackage().GetFingerPrint()+" from image 🐋")
artifact, err := cs.compileWithImage(compileSpec.GetImage(), buildImageHash, currentPackageImageHash, concurrency, keepPermissions, compileSpec)
if err != nil {
deperrs = append(deperrs, err)
break // stop at first error
}
departifacts = append(departifacts, artifact)
Info(pkgTag, "💥 Done")
continue
}
@@ -334,9 +352,10 @@ func (cs *LuetCompiler) Compile(concurrency int, keepPermissions bool, p Compila
// break // stop at first error
}
departifacts = append(departifacts, artifact)
Info(pkgTag, "💥 Done")
}
}
Debug(" 📦 ("+p.GetPackage().GetName()+") Building target from", lastHash)
Info("📦", p.GetPackage().GetName(), "🌪 Building package target from:", lastHash)
return cs.compileWithImage(lastHash, "", "", concurrency, keepPermissions, p)
}

View File

@@ -25,6 +25,7 @@ func Spinner(i int) {
if s == nil {
s = spinner.New(spinner.CharSets[i], 100*time.Millisecond) // Build our new spinner
}
s.UpdateCharSet(spinner.CharSets[i])
enabled = true
s.Start() // Start the spinner
}
@@ -42,7 +43,9 @@ func SpinnerText(suffix, prefix string) {
func SpinnerStop() {
m.Lock()
defer m.Unlock()
if s != nil {
s.Stop()
}
enabled = false
}
@@ -55,13 +58,13 @@ func msg(level string, msg ...interface{}) {
var levelMsg string
switch level {
case "warning":
levelMsg = Bold(Yellow(message)).BgBlack().String()
levelMsg = Bold(Yellow("🌩 " + message)).BgBlack().String()
case "debug":
levelMsg = Bold(White(message)).BgBlack().String()
levelMsg = White(message).BgBlack().String()
case "info":
levelMsg = Bold(Blue(message)).BgBlack().String()
levelMsg = Bold(White(message)).BgBlack().String()
case "error":
levelMsg = Bold(Red(message)).BgBlack().String()
levelMsg = Bold(Red("💣 " + message + "🔥")).BgBlack().String()
}
if enabled {

View File

@@ -91,7 +91,7 @@ func (gt *DefaultTree) FindPackage(pack pkg.Package) (pkg.Package, error) {
}
func (gb *DefaultTree) updatePackage(p pkg.Package) error {
Debug("Calculating deps for", p.GetName())
Debug("🔧 Calculating deps for", p.GetName())
for i, r := range p.GetRequires() {
foundPackage, err := gb.FindPackage(r)
if err == nil {
@@ -106,7 +106,7 @@ func (gb *DefaultTree) updatePackage(p pkg.Package) error {
}
}
Debug("Walking conflicts for", p.GetName())
Debug("🔍 Walking conflicts for", p.GetName())
for i, r := range p.GetConflicts() {
foundPackage, err := gb.FindPackage(r)
if err == nil {
@@ -120,14 +120,14 @@ func (gb *DefaultTree) updatePackage(p pkg.Package) error {
Warning("Unmatched conflict for", r.GetFingerPrint())
}
}
Debug("Finished processing", p.GetName())
Debug("💫 Finished processing", p.GetName())
if err := gb.GetPackageSet().UpdatePackage(p); err != nil {
return err
}
gb.UpdateWorldPackage(p)
Debug("Update done", p.GetName())
//Debug("Update done", p.GetName())
// Debug("Triggering propagation", p.GetName())
// Debug(" "+p.GetName(), "Deps ")