cleanup logging

Signed-off-by: Casey Lee <cplee@nektos.com>
This commit is contained in:
Casey Lee
2020-02-11 09:10:35 -08:00
parent a21d4bbd90
commit 033168228b
13 changed files with 183 additions and 54 deletions

View File

@@ -25,7 +25,7 @@ type NewDockerBuildExecutorInput struct {
func NewDockerBuildExecutor(input NewDockerBuildExecutorInput) common.Executor {
return func(ctx context.Context) error {
logger := common.Logger(ctx)
logger.Infof("docker build -t %s %s", input.ImageTag, input.ContextDir)
logger.Infof("%sdocker build -t %s %s", logPrefix, input.ImageTag, input.ContextDir)
if common.Dryrun(ctx) {
return nil
}

View File

@@ -5,9 +5,7 @@ import (
"context"
"encoding/json"
"errors"
"fmt"
"io"
"os"
"github.com/nektos/act/pkg/common"
"github.com/sirupsen/logrus"
@@ -26,6 +24,8 @@ type dockerMessage struct {
Progress string `json:"progress"`
}
const logPrefix = " \U0001F433 "
func logDockerOutput(ctx context.Context, dockerResponse io.Reader) {
logger := common.Logger(ctx)
if entry, ok := logger.(*logrus.Entry); ok {
@@ -46,16 +46,33 @@ func logDockerOutput(ctx context.Context, dockerResponse io.Reader) {
}
func streamDockerOutput(ctx context.Context, dockerResponse io.Reader) {
out := os.Stdout
go func() {
<-ctx.Done()
fmt.Println()
}()
/*
out := os.Stdout
go func() {
<-ctx.Done()
//fmt.Println()
}()
_, err := io.Copy(out, dockerResponse)
if err != nil {
logrus.Error(err)
_, err := io.Copy(out, dockerResponse)
if err != nil {
logrus.Error(err)
}
*/
logger := common.Logger(ctx)
reader := bufio.NewReader(dockerResponse)
for {
if ctx.Err() != nil {
break
}
line, _, err := reader.ReadLine()
if err == io.EOF {
break
}
logger.Debugf("%s\n", line)
}
}
func logDockerResponse(logger logrus.FieldLogger, dockerResponse io.ReadCloser, isError bool) error {

View File

@@ -21,7 +21,7 @@ type NewDockerPullExecutorInput struct {
func NewDockerPullExecutor(input NewDockerPullExecutorInput) common.Executor {
return func(ctx context.Context) error {
logger := common.Logger(ctx)
logger.Infof("docker pull %v", input.Image)
logger.Infof("%sdocker pull %v", logPrefix, input.Image)
if common.Dryrun(ctx) {
return nil

View File

@@ -9,6 +9,7 @@ import (
"github.com/docker/docker/api/types"
"github.com/docker/docker/api/types/container"
"github.com/docker/docker/client"
"github.com/docker/docker/pkg/stdcopy"
"github.com/nektos/act/pkg/common"
"github.com/pkg/errors"
"golang.org/x/crypto/ssh/terminal"
@@ -26,6 +27,8 @@ type NewDockerRunExecutorInput struct {
Volumes []string
Name string
ReuseContainers bool
Stdout io.Writer
Stderr io.Writer
}
// NewDockerRunExecutor function to create a run executor for the container
@@ -34,7 +37,7 @@ func NewDockerRunExecutor(input NewDockerRunExecutorInput) common.Executor {
cr.input = input
return common.
NewInfoExecutor("docker run image=%s entrypoint=%+q cmd=%+q", input.Image, input.Entrypoint, input.Cmd).
NewInfoExecutor("%sdocker run image=%s entrypoint=%+q cmd=%+q", logPrefix, input.Image, input.Entrypoint, input.Cmd).
Then(
common.NewPipelineExecutor(
cr.connect(),
@@ -177,11 +180,26 @@ func (cr *containerReference) attach() common.Executor {
return errors.WithStack(err)
}
isTerminal := terminal.IsTerminal(int(os.Stdout.Fd()))
if !isTerminal || os.Getenv("NORAW") != "" {
go logDockerOutput(ctx, out.Reader)
} else {
go streamDockerOutput(ctx, out.Reader)
var outWriter io.Writer
outWriter = cr.input.Stdout
if outWriter == nil {
outWriter = os.Stdout
}
errWriter := cr.input.Stderr
if errWriter == nil {
errWriter = os.Stderr
}
go func() {
if !isTerminal || os.Getenv("NORAW") != "" {
_, err = stdcopy.StdCopy(outWriter, errWriter, out.Reader)
} else {
_, err = io.Copy(outWriter, out.Reader)
}
if err != nil {
common.Logger(ctx).Error(err)
}
}()
return nil
}
}
@@ -218,8 +236,6 @@ func (cr *containerReference) wait() common.Executor {
if statusCode == 0 {
return nil
} else if statusCode == 78 {
return fmt.Errorf("exit with `NEUTRAL`: 78")
}
return fmt.Errorf("exit with `FAILURE`: %v", statusCode)