From fab50f75fcd92817208f01d0a9b09117aaa94e01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bala=CC=81zs=20Hajagos?= Date: Thu, 4 Sep 2025 14:08:12 +0200 Subject: [PATCH] Use loginterceptor in xcodecommand/xcbeautify and xcodecommand/xcpretty as well --- xcodecommand/xcbeautify.go | 18 +++++++++++++++--- xcodecommand/xcpretty.go | 18 ++++++++++++++++-- 2 files changed, 31 insertions(+), 5 deletions(-) diff --git a/xcodecommand/xcbeautify.go b/xcodecommand/xcbeautify.go index 03a1cf16..527b4a74 100644 --- a/xcodecommand/xcbeautify.go +++ b/xcodecommand/xcbeautify.go @@ -7,14 +7,18 @@ import ( "io" "os" "os/exec" + "regexp" "github.com/bitrise-io/go-utils/v2/command" "github.com/bitrise-io/go-utils/v2/log" "github.com/bitrise-io/go-xcode/v2/errorfinder" + "github.com/bitrise-io/go-xcode/v2/loginterceptor" version "github.com/hashicorp/go-version" ) -const xcbeautify = "xcbeautify" +const ( + xcbeautify = "xcbeautify" +) // XcbeautifyRunner is a xcodebuild runner that uses xcbeautify as log formatter type XcbeautifyRunner struct { @@ -36,13 +40,21 @@ func (c *XcbeautifyRunner) Run(workDir string, xcodebuildArgs []string, xcbeauti buildOutBuffer bytes.Buffer pipeReader, pipeWriter = io.Pipe() buildOutWriter = io.MultiWriter(&buildOutBuffer, pipeWriter) + prefixRegexp = regexp.MustCompile(prefix) + interceptor = loginterceptor.NewPrefixInterceptor(prefixRegexp, os.Stdout, buildOutWriter, c.logger) ) + defer func() { + if err := interceptor.Close(); err != nil { + c.logger.Warnf("Failed to close log interceptor, error: %s", err) + } + }() + // For parallel and concurrent destination testing, it helps to use unbuffered I/O for stdout and to redirect stderr to stdout. // NSUnbufferedIO=YES xcodebuild [args] 2>&1 | xcbeautify buildCmd := c.commandFactory.Create("xcodebuild", xcodebuildArgs, &command.Opts{ - Stdout: buildOutWriter, - Stderr: buildOutWriter, + Stdout: interceptor, + Stderr: interceptor, Env: unbufferedIOEnv, Dir: workDir, ErrorFinder: errorfinder.FindXcodebuildErrors, diff --git a/xcodecommand/xcpretty.go b/xcodecommand/xcpretty.go index ad0c3846..521178e8 100644 --- a/xcodecommand/xcpretty.go +++ b/xcodecommand/xcpretty.go @@ -6,6 +6,7 @@ import ( "io" "os" "os/exec" + "regexp" "github.com/bitrise-io/go-steputils/v2/ruby" "github.com/bitrise-io/go-utils/v2/command" @@ -13,6 +14,11 @@ import ( "github.com/bitrise-io/go-utils/v2/log" "github.com/bitrise-io/go-utils/v2/pathutil" "github.com/bitrise-io/go-xcode/v2/errorfinder" + "github.com/bitrise-io/go-xcode/v2/loginterceptor" +) + +const ( + prefix = `^\[Bitrise.*\].*` ) // XcprettyCommandRunner is an xcodebuild command runner that uses xcpretty as log formatter @@ -46,13 +52,21 @@ func (c *XcprettyCommandRunner) Run(workDir string, xcodebuildArgs []string, xcp pipeReader, pipeWriter = io.Pipe() buildOutWriter = io.MultiWriter(&buildOutBuffer, pipeWriter) prettyOutWriter = os.Stdout + prefixRegexp = regexp.MustCompile(prefix) + interceptor = loginterceptor.NewPrefixInterceptor(prefixRegexp, os.Stdout, buildOutWriter, c.logger) ) + defer func() { + if err := interceptor.Close(); err != nil { + c.logger.Warnf("Failed to close log interceptor, error: %s", err) + } + }() + c.cleanOutputFile(xcprettyArgs) buildCmd := c.commandFactory.Create("xcodebuild", xcodebuildArgs, &command.Opts{ - Stdout: buildOutWriter, - Stderr: buildOutWriter, + Stdout: interceptor, + Stderr: interceptor, Env: unbufferedIOEnv, Dir: workDir, ErrorFinder: errorfinder.FindXcodebuildErrors,