diff --git a/plugins/app-json/appjson.go b/plugins/app-json/appjson.go index 52a16695e..e83d7eaa4 100644 --- a/plugins/app-json/appjson.go +++ b/plugins/app-json/appjson.go @@ -2,6 +2,7 @@ package appjson import ( "bytes" + "context" "encoding/json" "errors" "fmt" @@ -11,6 +12,7 @@ import ( "github.com/dokku/dokku/plugins/common" shellquote "github.com/kballard/go-shellquote" + "golang.org/x/sync/errgroup" ) // AppJSON is a struct that represents an app.json file as understood by Dokku @@ -130,16 +132,31 @@ func getReleaseCommand(appName string, image string) string { } func getDokkuAppShell(appName string) string { - dokkuAppShell := "/bin/bash" - if b, _ := common.PlugnTriggerOutput("config-get-global", []string{"DOKKU_APP_SHELL"}...); strings.TrimSpace(string(b[:])) != "" { - dokkuAppShell = strings.TrimSpace(string(b[:])) + shell := "/bin/bash" + globalShell := "" + appShell := "" + + ctx := context.Background() + errs, ctx := errgroup.WithContext(ctx) + errs.Go(func() error { + b, _ := common.PlugnTriggerOutput("config-get-global", []string{"DOKKU_APP_SHELL"}...) + globalShell = strings.TrimSpace(string(b[:])) + return nil + }) + errs.Go(func() error { + b, _ := common.PlugnTriggerOutput("config-global", []string{"DOKKU_APP_SHELL"}...) + appShell = strings.TrimSpace(string(b[:])) + return nil + }) + + errs.Wait() + if appShell != "" { + shell = appShell + } else if globalShell != "" { + shell = globalShell } - if b, _ := common.PlugnTriggerOutput("config-get", []string{appName, "DOKKU_APP_SHELL"}...); strings.TrimSpace(string(b[:])) != "" { - dokkuAppShell = strings.TrimSpace(string(b[:])) - } - - return dokkuAppShell + return shell } func executeScript(appName string, imageTag string, phase string) error { diff --git a/plugins/app-json/go.mod b/plugins/app-json/go.mod index d5297f0c4..bccdd308d 100644 --- a/plugins/app-json/go.mod +++ b/plugins/app-json/go.mod @@ -7,6 +7,7 @@ require ( github.com/dokku/dokku/plugins/common v0.0.0-00010101000000-000000000000 github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 github.com/ryanuber/columnize v1.1.2-0.20190319233515-9e6335e58db3 // indirect + golang.org/x/sync v0.0.0-20201207232520-09787c993a3a ) replace github.com/dokku/dokku/plugins/common => ../common diff --git a/plugins/app-json/go.sum b/plugins/app-json/go.sum index ee7942d28..3599be52d 100644 --- a/plugins/app-json/go.sum +++ b/plugins/app-json/go.sum @@ -6,3 +6,5 @@ github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNU github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8= github.com/ryanuber/columnize v1.1.2-0.20190319233515-9e6335e58db3 h1:utdYOikI1XjNtTFGCwSM6OmFJblU4ld4gACoJsbadJg= github.com/ryanuber/columnize v1.1.2-0.20190319233515-9e6335e58db3/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= +golang.org/x/sync v0.0.0-20201207232520-09787c993a3a h1:DcqTD9SDLc+1P/r1EmRBwnVsrOwW+kk2vWf9n+1sGhs= +golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= diff --git a/plugins/apps/go.sum b/plugins/apps/go.sum index 8d94a86e4..58c904707 100644 --- a/plugins/apps/go.sum +++ b/plugins/apps/go.sum @@ -6,3 +6,5 @@ github.com/ryanuber/columnize v1.1.2-0.20190319233515-9e6335e58db3 h1:utdYOikI1X github.com/ryanuber/columnize v1.1.2-0.20190319233515-9e6335e58db3/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +golang.org/x/sync v0.0.0-20201207232520-09787c993a3a h1:DcqTD9SDLc+1P/r1EmRBwnVsrOwW+kk2vWf9n+1sGhs= +golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= diff --git a/plugins/buildpacks/go.sum b/plugins/buildpacks/go.sum index 8d94a86e4..58c904707 100644 --- a/plugins/buildpacks/go.sum +++ b/plugins/buildpacks/go.sum @@ -6,3 +6,5 @@ github.com/ryanuber/columnize v1.1.2-0.20190319233515-9e6335e58db3 h1:utdYOikI1X github.com/ryanuber/columnize v1.1.2-0.20190319233515-9e6335e58db3/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +golang.org/x/sync v0.0.0-20201207232520-09787c993a3a h1:DcqTD9SDLc+1P/r1EmRBwnVsrOwW+kk2vWf9n+1sGhs= +golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= diff --git a/plugins/common/common.go b/plugins/common/common.go index 78e938f84..6472b7d9e 100644 --- a/plugins/common/common.go +++ b/plugins/common/common.go @@ -1,6 +1,7 @@ package common import ( + "context" "errors" "fmt" "io/ioutil" @@ -11,10 +12,10 @@ import ( "sort" "strconv" "strings" - "sync" "unicode" "github.com/ryanuber/columnize" + "golang.org/x/sync/errgroup" ) type errfunc func() error @@ -68,23 +69,20 @@ func GetAppScheduler(appName string) string { appScheduler := "" globalScheduler := "" - var wg sync.WaitGroup + ctx := context.Background() + errs, ctx := errgroup.WithContext(ctx) if appName != "--global" { - wg.Add(1) - go func() { - defer wg.Done() + errs.Go(func() error { appScheduler = getAppScheduler(appName) - }() + return nil + }) } - - wg.Add(1) - go func() { - defer wg.Done() + errs.Go(func() error { globalScheduler = GetGlobalScheduler() - }() - - wg.Wait() + return nil + }) + errs.Wait() if appScheduler == "" { appScheduler = globalScheduler @@ -114,23 +112,38 @@ func GetGlobalScheduler() string { // GetDeployingAppImageName returns deploying image identifier for a given app, tag tuple. validate if tag is presented func GetDeployingAppImageName(appName, imageTag, imageRepo string) (string, error) { - b, err := PlugnTriggerOutput("deployed-app-repository", []string{appName}...) - if err != nil { - return "", err - } - imageRemoteRepository := strings.TrimSpace(string(b[:])) + imageRemoteRepository := "" + newImageTag := "" + newImageRepo := "" - b, err = PlugnTriggerOutput("deployed-app-image-tag", []string{appName}...) - if err != nil { - return "", err - } - newImageTag := strings.TrimSpace(string(b[:])) + ctx := context.Background() + errs, ctx := errgroup.WithContext(ctx) + errs.Go(func() error { + b, err := PlugnTriggerOutput("deployed-app-repository", []string{appName}...) + if err == nil { + imageRemoteRepository = strings.TrimSpace(string(b[:])) + } + return err + }) + errs.Go(func() error { + b, err := PlugnTriggerOutput("deployed-app-image-tag", []string{appName}...) + if err == nil { + newImageTag = strings.TrimSpace(string(b[:])) + } + return err + }) - b, err = PlugnTriggerOutput("deployed-app-image-repo", []string{appName}...) - if err != nil { + errs.Go(func() error { + b, err := PlugnTriggerOutput("deployed-app-image-repo", []string{appName}...) + if err == nil { + newImageRepo = strings.TrimSpace(string(b[:])) + } + return err + }) + + if err := errs.Wait(); err != nil { return "", err } - newImageRepo := strings.TrimSpace(string(b[:])) if newImageRepo != "" { imageRepo = newImageRepo diff --git a/plugins/common/go.mod b/plugins/common/go.mod index 9fdf26c2e..6fb4e0764 100644 --- a/plugins/common/go.mod +++ b/plugins/common/go.mod @@ -6,4 +6,5 @@ require ( github.com/codegangsta/inject v0.0.0-20150114235600-33e0aa1cb7c0 // indirect github.com/codeskyblue/go-sh v0.0.0-20190412065543-76bd3d59ff27 github.com/ryanuber/columnize v1.1.2-0.20190319233515-9e6335e58db3 + golang.org/x/sync v0.0.0-20201207232520-09787c993a3a ) diff --git a/plugins/common/go.sum b/plugins/common/go.sum index f05068f8d..aa1fb3e7e 100644 --- a/plugins/common/go.sum +++ b/plugins/common/go.sum @@ -4,3 +4,5 @@ github.com/codeskyblue/go-sh v0.0.0-20190412065543-76bd3d59ff27 h1:HHUr4P/aKh4qu github.com/codeskyblue/go-sh v0.0.0-20190412065543-76bd3d59ff27/go.mod h1:VQx0hjo2oUeQkQUET7wRwradO6f+fN5jzXgB/zROxxE= github.com/ryanuber/columnize v1.1.2-0.20190319233515-9e6335e58db3 h1:utdYOikI1XjNtTFGCwSM6OmFJblU4ld4gACoJsbadJg= github.com/ryanuber/columnize v1.1.2-0.20190319233515-9e6335e58db3/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= +golang.org/x/sync v0.0.0-20201207232520-09787c993a3a h1:DcqTD9SDLc+1P/r1EmRBwnVsrOwW+kk2vWf9n+1sGhs= +golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= diff --git a/plugins/config/go.sum b/plugins/config/go.sum index bb951f71d..fb5ba1a79 100644 --- a/plugins/config/go.sum +++ b/plugins/config/go.sum @@ -8,3 +8,5 @@ github.com/ryanuber/columnize v1.1.2-0.20190319233515-9e6335e58db3 h1:utdYOikI1X github.com/ryanuber/columnize v1.1.2-0.20190319233515-9e6335e58db3/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +golang.org/x/sync v0.0.0-20201207232520-09787c993a3a h1:DcqTD9SDLc+1P/r1EmRBwnVsrOwW+kk2vWf9n+1sGhs= +golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= diff --git a/plugins/logs/go.sum b/plugins/logs/go.sum index 8d94a86e4..58c904707 100644 --- a/plugins/logs/go.sum +++ b/plugins/logs/go.sum @@ -6,3 +6,5 @@ github.com/ryanuber/columnize v1.1.2-0.20190319233515-9e6335e58db3 h1:utdYOikI1X github.com/ryanuber/columnize v1.1.2-0.20190319233515-9e6335e58db3/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +golang.org/x/sync v0.0.0-20201207232520-09787c993a3a h1:DcqTD9SDLc+1P/r1EmRBwnVsrOwW+kk2vWf9n+1sGhs= +golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= diff --git a/plugins/network/go.sum b/plugins/network/go.sum index bb951f71d..fb5ba1a79 100644 --- a/plugins/network/go.sum +++ b/plugins/network/go.sum @@ -8,3 +8,5 @@ github.com/ryanuber/columnize v1.1.2-0.20190319233515-9e6335e58db3 h1:utdYOikI1X github.com/ryanuber/columnize v1.1.2-0.20190319233515-9e6335e58db3/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +golang.org/x/sync v0.0.0-20201207232520-09787c993a3a h1:DcqTD9SDLc+1P/r1EmRBwnVsrOwW+kk2vWf9n+1sGhs= +golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= diff --git a/plugins/proxy/go.sum b/plugins/proxy/go.sum index bb951f71d..fb5ba1a79 100644 --- a/plugins/proxy/go.sum +++ b/plugins/proxy/go.sum @@ -8,3 +8,5 @@ github.com/ryanuber/columnize v1.1.2-0.20190319233515-9e6335e58db3 h1:utdYOikI1X github.com/ryanuber/columnize v1.1.2-0.20190319233515-9e6335e58db3/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +golang.org/x/sync v0.0.0-20201207232520-09787c993a3a h1:DcqTD9SDLc+1P/r1EmRBwnVsrOwW+kk2vWf9n+1sGhs= +golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= diff --git a/plugins/ps/go.sum b/plugins/ps/go.sum index e991213a1..c6f028d99 100644 --- a/plugins/ps/go.sum +++ b/plugins/ps/go.sum @@ -12,3 +12,5 @@ github.com/ryanuber/columnize v1.1.2-0.20190319233515-9e6335e58db3 h1:utdYOikI1X github.com/ryanuber/columnize v1.1.2-0.20190319233515-9e6335e58db3/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +golang.org/x/sync v0.0.0-20201207232520-09787c993a3a h1:DcqTD9SDLc+1P/r1EmRBwnVsrOwW+kk2vWf9n+1sGhs= +golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= diff --git a/plugins/repo/go.sum b/plugins/repo/go.sum index bb951f71d..fb5ba1a79 100644 --- a/plugins/repo/go.sum +++ b/plugins/repo/go.sum @@ -8,3 +8,5 @@ github.com/ryanuber/columnize v1.1.2-0.20190319233515-9e6335e58db3 h1:utdYOikI1X github.com/ryanuber/columnize v1.1.2-0.20190319233515-9e6335e58db3/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +golang.org/x/sync v0.0.0-20201207232520-09787c993a3a h1:DcqTD9SDLc+1P/r1EmRBwnVsrOwW+kk2vWf9n+1sGhs= +golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= diff --git a/plugins/resource/go.sum b/plugins/resource/go.sum index 8d94a86e4..58c904707 100644 --- a/plugins/resource/go.sum +++ b/plugins/resource/go.sum @@ -6,3 +6,5 @@ github.com/ryanuber/columnize v1.1.2-0.20190319233515-9e6335e58db3 h1:utdYOikI1X github.com/ryanuber/columnize v1.1.2-0.20190319233515-9e6335e58db3/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +golang.org/x/sync v0.0.0-20201207232520-09787c993a3a h1:DcqTD9SDLc+1P/r1EmRBwnVsrOwW+kk2vWf9n+1sGhs= +golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=