Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 15 additions & 3 deletions xcodecommand/xcbeautify.go
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand All @@ -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)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🐛 Bug

The constant 'prefix' is not defined in this file, causing a compilation error. The constant is defined in xcpretty.go but not accessible here.

🔄 Suggestion:

Suggested change
prefixRegexp = regexp.MustCompile(prefix)
const (
xcbeautify = "xcbeautify"
prefix = `^\[Bitrise.*\].*`
)

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,
Expand Down
18 changes: 16 additions & 2 deletions xcodecommand/xcpretty.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,19 @@ import (
"io"
"os"
"os/exec"
"regexp"

"github.com/bitrise-io/go-steputils/v2/ruby"
"github.com/bitrise-io/go-utils/v2/command"
"github.com/bitrise-io/go-utils/v2/fileutil"
"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
Expand Down Expand Up @@ -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,
Expand Down