Fixup spinner data race

Add spinner lock
This commit is contained in:
Ettore Di Giacinto 2021-02-17 09:43:44 +01:00
parent 92e73051a0
commit b3e3abec8f
6 changed files with 20 additions and 23 deletions

2
go.mod
View File

@ -7,7 +7,7 @@ require (
github.com/Sabayon/pkgs-checker v0.7.2
github.com/asaskevich/govalidator v0.0.0-20200907205600-7a23bdc65eef
github.com/asdine/storm v0.0.0-20190418133842-e0f77eada154
github.com/briandowns/spinner v1.7.0
github.com/briandowns/spinner v1.12.1-0.20201220203425-e201aaea0a31
github.com/cavaliercoder/grab v1.0.1-0.20201108051000-98a5bfe305ec
github.com/containerd/containerd v1.4.1-0.20201117152358-0edc412565dc
github.com/crillab/gophersat v1.3.2-0.20201023142334-3fc2ac466765

4
go.sum
View File

@ -144,8 +144,8 @@ github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJm
github.com/blang/semver v3.1.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk=
github.com/blang/semver v3.5.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk=
github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4=
github.com/briandowns/spinner v1.7.0 h1:aan1hBBOoscry2TXAkgtxkJiq7Se0+9pt+TUWaPrB4g=
github.com/briandowns/spinner v1.7.0/go.mod h1://Zf9tMcxfRUA36V23M6YGEAv+kECGfvpnLTnb8n4XQ=
github.com/briandowns/spinner v1.12.1-0.20201220203425-e201aaea0a31 h1:yInAg9pE5qGec5eQ7XdfOTTaGwGxD3bKFVjmD6VKkwc=
github.com/briandowns/spinner v1.12.1-0.20201220203425-e201aaea0a31/go.mod h1:QOuQk7x+EaDASo80FEXwlwiA+j/PPIcX3FScO+3/ZPQ=
github.com/bshuster-repo/logrus-logstash-hook v0.4.1/go.mod h1:zsTqEiSzDgAa/8GZR7E1qaXrhYNDKBYy5/dWPTIflbk=
github.com/bugsnag/bugsnag-go v0.0.0-20141110184014-b1d153021fcd/go.mod h1:2oa8nejYd4cQ/b0hMIopN0lCRxU0bueqREvZLWFrtK8=
github.com/bugsnag/osext v0.0.0-20130617224835-0dd3f918b21b/go.mod h1:obH5gd0BsqsP2LwDJ9aOkm/6J86V6lyAXCoQWGw3K50=

View File

@ -21,6 +21,7 @@ import (
"github.com/mudler/luet/pkg/compiler"
"github.com/mudler/luet/pkg/config"
. "github.com/mudler/luet/pkg/logger"
"github.com/google/go-containerregistry/pkg/crane"
"github.com/pkg/errors"
@ -49,8 +50,14 @@ func NewBackend(s string) compiler.CompilerBackend {
}
func runCommand(cmd *exec.Cmd) (string, error) {
buffered := !config.LuetCfg.GetGeneral().ShowBuildOutput
if buffered {
Spinner(22)
defer SpinnerStop()
}
ans := ""
writer := NewBackendWriter(!config.LuetCfg.GetGeneral().ShowBuildOutput)
writer := NewBackendWriter(buffered)
cmd.Stdout = writer
cmd.Stderr = writer
@ -68,7 +75,7 @@ func runCommand(cmd *exec.Cmd) (string, error) {
res := cmd.ProcessState.ExitCode()
if res != 0 {
errMsg := fmt.Sprintf("Failed building image (exiting with %d)", res)
if !config.LuetCfg.GetGeneral().ShowBuildOutput {
if buffered {
errMsg = fmt.Sprintf("Failed building image (exiting with %d): %s",
res, writer.GetCombinedOutput())
}
@ -76,7 +83,7 @@ func runCommand(cmd *exec.Cmd) (string, error) {
return "", errors.Wrap(err, errMsg)
}
if !config.LuetCfg.GetGeneral().ShowBuildOutput {
if buffered {
ans = writer.GetCombinedOutput()
}

View File

@ -53,11 +53,6 @@ func (*SimpleDocker) BuildImage(opts compiler.CompilerBackendOptions) error {
}
buildarg := []string{"build", "-f", dockerfileName, "-t", name, context}
if !config.LuetCfg.GetGeneral().ShowBuildOutput {
Spinner(22)
defer SpinnerStop()
}
Info(":whale2: Building image " + name)
cmd := exec.Command("docker", buildarg...)
cmd.Dir = path
@ -66,10 +61,6 @@ func (*SimpleDocker) BuildImage(opts compiler.CompilerBackendOptions) error {
return err
}
if !config.LuetCfg.GetGeneral().ShowBuildOutput {
SpinnerStop()
}
Info(":whale: Building image " + name + " done")
if os.Getenv("DOCKER_SQUASH") == "true" {
@ -77,7 +68,7 @@ func (*SimpleDocker) BuildImage(opts compiler.CompilerBackendOptions) error {
var client *docker.Client
Spinner(22)
defer SpinnerStop()
client, err = docker.NewClientFromEnv()
if err != nil {
return errors.Wrap(err, "could not connect to the Docker daemon")

View File

@ -21,7 +21,6 @@ import (
"strings"
"github.com/mudler/luet/pkg/compiler"
"github.com/mudler/luet/pkg/config"
. "github.com/mudler/luet/pkg/logger"
"github.com/pkg/errors"
@ -48,11 +47,6 @@ func (*SimpleImg) BuildImage(opts compiler.CompilerBackendOptions) error {
Info(":tea: Building image " + name)
if !config.LuetCfg.GetGeneral().ShowBuildOutput {
Spinner(22)
defer SpinnerStop()
}
cmd := exec.Command("img", buildarg...)
cmd.Dir = path
_, err := runCommand(cmd)

View File

@ -8,6 +8,7 @@ import (
"runtime"
"strings"
"sync"
. "github.com/mudler/luet/pkg/config"
"github.com/briandowns/spinner"
@ -20,7 +21,7 @@ import (
var s *spinner.Spinner = nil
var z *zap.Logger = nil
var aurora Aurora = nil
var spinnerLock = sync.Mutex{}
func NewSpinner() {
if s == nil {
s = spinner.New(
@ -84,6 +85,8 @@ func ZapLogger() error {
}
func Spinner(i int) {
spinnerLock.Lock()
defer spinnerLock.Unlock()
var confLevel int
if LuetCfg.GetGeneral().Debug {
confLevel = 3
@ -120,6 +123,8 @@ func SpinnerText(suffix, prefix string) {
}
func SpinnerStop() {
spinnerLock.Lock()
defer spinnerLock.Unlock()
var confLevel int
if LuetCfg.GetGeneral().Debug {
confLevel = 3