Skip to content

Commit

Permalink
feat: hide build logs if --require-built-images is in use, show logs …
Browse files Browse the repository at this point in the history
…on error

- Use --log-verbose to see full log anyway
- Use --log-quiet to hide build log without --require-built-images

Signed-off-by: Ivan Mikheykin <ivan.mikheykin@flant.com>
  • Loading branch information
diafour authored and distorhead committed May 19, 2023
1 parent f56174e commit 3a7506c
Show file tree
Hide file tree
Showing 8 changed files with 143 additions and 67 deletions.
30 changes: 19 additions & 11 deletions cmd/werf/bundle/export/export.go
Expand Up @@ -13,6 +13,7 @@ import (
"helm.sh/helm/v3/pkg/cli/values"

"github.com/werf/logboek"
"github.com/werf/logboek/pkg/level"
"github.com/werf/werf/cmd/werf/common"
"github.com/werf/werf/pkg/build"
"github.com/werf/werf/pkg/config"
Expand All @@ -23,6 +24,7 @@ import (
"github.com/werf/werf/pkg/git_repo"
"github.com/werf/werf/pkg/git_repo/gitdata"
"github.com/werf/werf/pkg/image"
"github.com/werf/werf/pkg/logging"
"github.com/werf/werf/pkg/ssh_agent"
"github.com/werf/werf/pkg/storage/lrumeta"
"github.com/werf/werf/pkg/storage/manager"
Expand Down Expand Up @@ -297,19 +299,25 @@ func runExport(ctx context.Context, imagesToProcess build.ImagesToProcess) error
defer conveyorWithRetry.Terminate()

if err := conveyorWithRetry.WithRetryBlock(ctx, func(c *build.Conveyor) error {
if common.GetRequireBuiltImages(ctx, &commonCmdData) {
shouldBeBuiltOptions, err := common.GetShouldBeBuiltOptions(&commonCmdData, giterminismManager, werfConfig)
if err != nil {
return err
buildFunc := func(ctx context.Context) error {
if common.GetRequireBuiltImages(ctx, &commonCmdData) {
shouldBeBuiltOptions, err := common.GetShouldBeBuiltOptions(&commonCmdData, giterminismManager, werfConfig)
if err != nil {
return err
}

return c.ShouldBeBuilt(ctx, shouldBeBuiltOptions)
}
return c.Build(ctx, buildOptions)
}

if err := c.ShouldBeBuilt(ctx, shouldBeBuiltOptions); err != nil {
return err
}
} else {
if err := c.Build(ctx, buildOptions); err != nil {
return err
}
// Print build logs on error if --require-built-images is specified.
// Always print logs by default or if --log-verbose is specified.
requireBuiltImage := common.GetRequireBuiltImages(ctx, &commonCmdData)
isVerbose := logboek.Context(ctx).IsAcceptedLevel(level.Default)
deferLog := requireBuiltImage || !isVerbose
if err := logging.RunWithDeferredLog(ctx, deferLog, buildFunc); err != nil {
return err
}

imagesInfoGetters, err = c.GetImageInfoGetters(image.InfoGetterOptions{CustomTagFunc: useCustomTagFunc})
Expand Down
30 changes: 19 additions & 11 deletions cmd/werf/bundle/publish/publish.go
Expand Up @@ -15,6 +15,7 @@ import (
"helm.sh/helm/v3/pkg/cli/values"

"github.com/werf/logboek"
"github.com/werf/logboek/pkg/level"
"github.com/werf/werf/cmd/werf/common"
"github.com/werf/werf/pkg/build"
"github.com/werf/werf/pkg/config"
Expand All @@ -26,6 +27,7 @@ import (
"github.com/werf/werf/pkg/git_repo"
"github.com/werf/werf/pkg/git_repo/gitdata"
"github.com/werf/werf/pkg/image"
"github.com/werf/werf/pkg/logging"
"github.com/werf/werf/pkg/ssh_agent"
"github.com/werf/werf/pkg/storage/lrumeta"
"github.com/werf/werf/pkg/storage/manager"
Expand Down Expand Up @@ -303,19 +305,25 @@ func runPublish(ctx context.Context, imagesToProcess build.ImagesToProcess) erro
defer conveyorWithRetry.Terminate()

if err := conveyorWithRetry.WithRetryBlock(ctx, func(c *build.Conveyor) error {
if common.GetRequireBuiltImages(ctx, &commonCmdData) {
shouldBeBuiltOptions, err := common.GetShouldBeBuiltOptions(&commonCmdData, giterminismManager, werfConfig)
if err != nil {
return err
buildFunc := func(ctx context.Context) error {
if common.GetRequireBuiltImages(ctx, &commonCmdData) {
shouldBeBuiltOptions, err := common.GetShouldBeBuiltOptions(&commonCmdData, giterminismManager, werfConfig)
if err != nil {
return err
}

return c.ShouldBeBuilt(ctx, shouldBeBuiltOptions)
}
return c.Build(ctx, buildOptions)
}

if err := c.ShouldBeBuilt(ctx, shouldBeBuiltOptions); err != nil {
return err
}
} else {
if err := c.Build(ctx, buildOptions); err != nil {
return err
}
// Print build logs on error if --require-built-images is specified.
// Always print logs by default or if --log-verbose is specified.
requireBuiltImage := common.GetRequireBuiltImages(ctx, &commonCmdData)
isVerbose := logboek.Context(ctx).IsAcceptedLevel(level.Default)
deferLog := requireBuiltImage || !isVerbose
if err := logging.RunWithDeferredLog(ctx, deferLog, buildFunc); err != nil {
return err
}

imagesInfoGetters, err = c.GetImageInfoGetters(image.InfoGetterOptions{CustomTagFunc: useCustomTagFunc})
Expand Down
22 changes: 15 additions & 7 deletions cmd/werf/compose/main.go
Expand Up @@ -11,13 +11,15 @@ import (
"github.com/spf13/cobra"

"github.com/werf/logboek"
"github.com/werf/logboek/pkg/level"
"github.com/werf/werf/cmd/werf/common"
"github.com/werf/werf/pkg/build"
"github.com/werf/werf/pkg/container_backend"
"github.com/werf/werf/pkg/git_repo"
"github.com/werf/werf/pkg/git_repo/gitdata"
"github.com/werf/werf/pkg/giterminism_manager"
"github.com/werf/werf/pkg/image"
"github.com/werf/werf/pkg/logging"
"github.com/werf/werf/pkg/ssh_agent"
"github.com/werf/werf/pkg/storage/lrumeta"
"github.com/werf/werf/pkg/storage/manager"
Expand Down Expand Up @@ -409,14 +411,20 @@ func run(ctx context.Context, containerBackend container_backend.ContainerBacken
defer conveyorWithRetry.Terminate()

if err := conveyorWithRetry.WithRetryBlock(ctx, func(c *build.Conveyor) error {
if common.GetRequireBuiltImages(ctx, &commonCmdData) {
if err := c.ShouldBeBuilt(ctx, build.ShouldBeBuiltOptions{}); err != nil {
return err
}
} else {
if err := c.Build(ctx, build.BuildOptions{SkipImageMetadataPublication: *commonCmdData.Dev}); err != nil {
return err
buildFunc := func(ctx context.Context) error {
if common.GetRequireBuiltImages(ctx, &commonCmdData) {
return c.ShouldBeBuilt(ctx, build.ShouldBeBuiltOptions{})
}
return c.Build(ctx, build.BuildOptions{SkipImageMetadataPublication: *commonCmdData.Dev})
}

// Print build logs on error if --require-built-images is specified.
// Always print logs by default or if --log-verbose is specified.
requireBuiltImage := common.GetRequireBuiltImages(ctx, &commonCmdData)
isVerbose := logboek.Context(ctx).IsAcceptedLevel(level.Default)
deferLog := requireBuiltImage || !isVerbose
if err := logging.RunWithDeferredLog(ctx, deferLog, buildFunc); err != nil {
return err
}

for _, img := range c.GetExportedImages() {
Expand Down
30 changes: 19 additions & 11 deletions cmd/werf/converge/converge.go
Expand Up @@ -20,6 +20,7 @@ import (

"github.com/werf/kubedog/pkg/kube"
"github.com/werf/logboek"
"github.com/werf/logboek/pkg/level"
"github.com/werf/werf/cmd/werf/common"
"github.com/werf/werf/pkg/build"
"github.com/werf/werf/pkg/config/deploy_params"
Expand All @@ -35,6 +36,7 @@ import (
"github.com/werf/werf/pkg/git_repo/gitdata"
"github.com/werf/werf/pkg/giterminism_manager"
"github.com/werf/werf/pkg/image"
"github.com/werf/werf/pkg/logging"
"github.com/werf/werf/pkg/ssh_agent"
"github.com/werf/werf/pkg/storage/lrumeta"
"github.com/werf/werf/pkg/storage/manager"
Expand Down Expand Up @@ -346,19 +348,25 @@ func run(ctx context.Context, containerBackend container_backend.ContainerBacken
defer conveyorWithRetry.Terminate()

if err := conveyorWithRetry.WithRetryBlock(ctx, func(c *build.Conveyor) error {
if common.GetRequireBuiltImages(ctx, &commonCmdData) {
shouldBeBuiltOptions, err := common.GetShouldBeBuiltOptions(&commonCmdData, giterminismManager, werfConfig)
if err != nil {
return err
buildFunc := func(ctx context.Context) error {
if common.GetRequireBuiltImages(ctx, &commonCmdData) {
shouldBeBuiltOptions, err := common.GetShouldBeBuiltOptions(&commonCmdData, giterminismManager, werfConfig)
if err != nil {
return err
}

return c.ShouldBeBuilt(ctx, shouldBeBuiltOptions)
}
return c.Build(ctx, buildOptions)
}

if err := c.ShouldBeBuilt(ctx, shouldBeBuiltOptions); err != nil {
return err
}
} else {
if err := c.Build(ctx, buildOptions); err != nil {
return err
}
// Print build logs on error if --require-built-images is specified.
// Always print logs by default or if --log-verbose is specified.
requireBuiltImage := common.GetRequireBuiltImages(ctx, &commonCmdData)
isVerbose := logboek.Context(ctx).IsAcceptedLevel(level.Default)
deferLog := requireBuiltImage || !isVerbose
if err := logging.RunWithDeferredLog(ctx, deferLog, buildFunc); err != nil {
return err
}

imagesInfoGetters, err = c.GetImageInfoGetters(image.InfoGetterOptions{CustomTagFunc: useCustomTagFunc})
Expand Down
21 changes: 14 additions & 7 deletions cmd/werf/kube_run/kube_run.go
Expand Up @@ -25,6 +25,7 @@ import (

"github.com/werf/kubedog/pkg/kube"
"github.com/werf/logboek"
"github.com/werf/logboek/pkg/level"
"github.com/werf/werf/cmd/werf/common"
"github.com/werf/werf/pkg/build"
"github.com/werf/werf/pkg/config"
Expand Down Expand Up @@ -407,14 +408,20 @@ func run(ctx context.Context, pod, secret, namespace string, werfConfig *config.

var image string
if err := conveyorWithRetry.WithRetryBlock(ctx, func(c *build.Conveyor) error {
if common.GetRequireBuiltImages(ctx, &commonCmdData) {
if err := c.ShouldBeBuilt(ctx, build.ShouldBeBuiltOptions{}); err != nil {
return err
}
} else {
if err := c.Build(ctx, build.BuildOptions{}); err != nil {
return err
buildFunc := func(ctx context.Context) error {
if common.GetRequireBuiltImages(ctx, &commonCmdData) {
return c.ShouldBeBuilt(ctx, build.ShouldBeBuiltOptions{})
}
return c.Build(ctx, build.BuildOptions{})
}

// Print build logs on error if --require-built-images is specified.
// Always print logs by default or if --log-verbose is specified.
requireBuiltImage := common.GetRequireBuiltImages(ctx, &commonCmdData)
isVerbose := logboek.Context(ctx).IsAcceptedLevel(level.Default)
deferLog := requireBuiltImage || !isVerbose
if err := logging.RunWithDeferredLog(ctx, deferLog, buildFunc); err != nil {
return err
}

image, err = c.GetFullImageName(ctx, imageName)
Expand Down
35 changes: 22 additions & 13 deletions cmd/werf/render/render.go
@@ -1,7 +1,6 @@
package render

import (
"bytes"
"context"
"fmt"
"io"
Expand All @@ -28,6 +27,7 @@ import (
"github.com/werf/werf/pkg/git_repo"
"github.com/werf/werf/pkg/git_repo/gitdata"
"github.com/werf/werf/pkg/image"
"github.com/werf/werf/pkg/logging"
"github.com/werf/werf/pkg/ssh_agent"
"github.com/werf/werf/pkg/storage"
"github.com/werf/werf/pkg/storage/lrumeta"
Expand Down Expand Up @@ -334,20 +334,29 @@ func runRender(ctx context.Context, imagesToProcess build.ImagesToProcess) error
return c.Build(ctx, buildOptions)
}

// Print build logs on error by default.
// Always print logs if --log-verbose is specified (level.Info).
deferLog := true
if logboek.Context(ctx).IsAcceptedLevel(level.Default) {
if err := buildFunc(ctx); err != nil {
return err
}
} else {
buf := new(bytes.Buffer)
bufLogger := logboek.NewLogger(buf, buf)
ctxWithBufLogger := logboek.NewContext(ctx, bufLogger)

if err := buildFunc(ctxWithBufLogger); err != nil {
fmt.Println(buf.String())
return err
}
deferLog = false
}
if err := logging.RunWithDeferredLog(ctx, deferLog, buildFunc); err != nil {
return err
}
//if logboek.Context(ctx).IsAcceptedLevel(level.Default) {
// if err := buildFunc(ctx); err != nil {
// return err
// }
//} else {
// buf := new(bytes.Buffer)
// bufLogger := logboek.NewLogger(buf, buf)
// ctxWithBufLogger := logboek.NewContext(ctx, bufLogger)
//
// if err := buildFunc(ctxWithBufLogger); err != nil {
// fmt.Println(buf.String())
// return err
// }
//}

imagesInfoGetters, err = c.GetImageInfoGetters(image.InfoGetterOptions{CustomTagFunc: useCustomTagFunc})
if err != nil {
Expand Down
21 changes: 14 additions & 7 deletions cmd/werf/run/run.go
Expand Up @@ -13,6 +13,7 @@ import (
"github.com/spf13/cobra"

"github.com/werf/logboek"
"github.com/werf/logboek/pkg/level"
"github.com/werf/werf/cmd/werf/common"
"github.com/werf/werf/pkg/build"
"github.com/werf/werf/pkg/container_backend"
Expand Down Expand Up @@ -393,14 +394,20 @@ func run(ctx context.Context, containerBackend container_backend.ContainerBacken

var dockerImageName string
if err := conveyorWithRetry.WithRetryBlock(ctx, func(c *build.Conveyor) error {
if common.GetRequireBuiltImages(ctx, &commonCmdData) {
if err := c.ShouldBeBuilt(ctx, build.ShouldBeBuiltOptions{}); err != nil {
return err
}
} else {
if err := c.Build(ctx, build.BuildOptions{SkipImageMetadataPublication: *commonCmdData.Dev}); err != nil {
return err
buildFunc := func(ctx context.Context) error {
if common.GetRequireBuiltImages(ctx, &commonCmdData) {
return c.ShouldBeBuilt(ctx, build.ShouldBeBuiltOptions{})
}
return c.Build(ctx, build.BuildOptions{SkipImageMetadataPublication: *commonCmdData.Dev})
}

// Print build logs on error if --require-built-images is specified.
// Always print logs by default or if --log-verbose is specified.
requireBuiltImage := common.GetRequireBuiltImages(ctx, &commonCmdData)
isVerbose := logboek.Context(ctx).IsAcceptedLevel(level.Default)
deferLog := requireBuiltImage || !isVerbose
if err := logging.RunWithDeferredLog(ctx, deferLog, buildFunc); err != nil {
return err
}

dockerImageName, err = c.GetFullImageName(ctx, imageName)
Expand Down
21 changes: 21 additions & 0 deletions pkg/logging/main.go
@@ -1,9 +1,12 @@
package logging

import (
"bytes"
"context"
"fmt"

"github.com/gookit/color"
"github.com/werf/logboek"
)

var (
Expand Down Expand Up @@ -63,3 +66,21 @@ func ImageDefaultStyle(isArtifact bool) color.Style {
func ImageMetadataStyle() color.Style {
return ImageDefaultStyle(false)
}

// RunWithDeferredLog will run a function and print log if condition is true and
// print logs only on error if condition is false.
func RunWithDeferredLog(ctx context.Context, deferLog bool, run func(ctx context.Context) error) error {
if !deferLog {
return run(ctx)
}

buf := new(bytes.Buffer)
bufLogger := logboek.NewLogger(buf, buf)
ctxWithBufLogger := logboek.NewContext(ctx, bufLogger)

err := run(ctxWithBufLogger)
if err != nil {
fmt.Println(buf.String())
}
return err
}

0 comments on commit 3a7506c

Please sign in to comment.