mirror of
https://github.com/thegeeklab/wp-plugin-go.git
synced 2024-11-24 13:10:39 +00:00
fix: fix global logger setup (#80)
This commit is contained in:
parent
5ca8c9ac0e
commit
5e6b213c13
@ -36,7 +36,11 @@ func loggingFlags(category string) []cli.Flag {
|
|||||||
|
|
||||||
// SetupConsoleLogger sets up the console logger.
|
// SetupConsoleLogger sets up the console logger.
|
||||||
func SetupConsoleLogger(c *cli.Context) error {
|
func SetupConsoleLogger(c *cli.Context) error {
|
||||||
level := c.String("log-level")
|
level := "info"
|
||||||
|
|
||||||
|
if c != nil {
|
||||||
|
level = c.String("log-level")
|
||||||
|
}
|
||||||
|
|
||||||
lvl, err := zerolog.ParseLevel(level)
|
lvl, err := zerolog.ParseLevel(level)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -96,13 +96,14 @@ func New(opt Options) *Plugin {
|
|||||||
_ = godotenv.Overload("/run/woodpecker/env")
|
_ = godotenv.Overload("/run/woodpecker/env")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_ = SetupConsoleLogger(nil)
|
||||||
|
|
||||||
app := &cli.App{
|
app := &cli.App{
|
||||||
Name: opt.Name,
|
Name: opt.Name,
|
||||||
Usage: opt.Description,
|
Usage: opt.Description,
|
||||||
Version: opt.Version,
|
Version: opt.Version,
|
||||||
Flags: append(opt.Flags, Flags()...),
|
Flags: append(opt.Flags, Flags()...),
|
||||||
Before: SetupConsoleLogger,
|
Before: SetupConsoleLogger,
|
||||||
After: SetupConsoleLogger,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if opt.HideWoodpeckerFlags {
|
if opt.HideWoodpeckerFlags {
|
||||||
|
@ -9,12 +9,22 @@ import (
|
|||||||
"golang.org/x/sys/execabs"
|
"golang.org/x/sys/execabs"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// Cmd represents a command to be executed. It extends the execabs.Cmd struct
|
||||||
|
// and adds fields for controlling the command's execution, such as whether
|
||||||
|
// it should be executed in private mode (with output discarded) and whether
|
||||||
|
// its execution should be traced.
|
||||||
type Cmd struct {
|
type Cmd struct {
|
||||||
*execabs.Cmd
|
*execabs.Cmd
|
||||||
Private bool
|
Private bool
|
||||||
Trace *bool
|
Trace *bool
|
||||||
|
TraceWriter io.Writer
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Run executes the command and waits for it to complete.
|
||||||
|
// If the Trace field is nil, it is set to true.
|
||||||
|
// The Env, Stdout, and Stderr fields are set to their default values if they are nil.
|
||||||
|
// If the Private field is true, the Stdout field is set to io.Discard.
|
||||||
|
// If the Trace field is true, the command line is printed to Stdout.
|
||||||
func (c *Cmd) Run() error {
|
func (c *Cmd) Run() error {
|
||||||
if c.Trace == nil {
|
if c.Trace == nil {
|
||||||
c.SetTrace(true)
|
c.SetTrace(true)
|
||||||
@ -36,8 +46,12 @@ func (c *Cmd) Run() error {
|
|||||||
c.Stdout = io.Discard
|
c.Stdout = io.Discard
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if c.TraceWriter == nil {
|
||||||
|
c.TraceWriter = os.Stdout
|
||||||
|
}
|
||||||
|
|
||||||
if *c.Trace {
|
if *c.Trace {
|
||||||
fmt.Fprintf(os.Stdout, "+ %s\n", strings.Join(c.Args, " "))
|
fmt.Fprintf(c.TraceWriter, "+ %s\n", strings.Join(c.Args, " "))
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := c.Start(); err != nil {
|
if err := c.Start(); err != nil {
|
||||||
@ -47,6 +61,7 @@ func (c *Cmd) Run() error {
|
|||||||
return c.Wait()
|
return c.Wait()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SetTrace sets the Trace field of the Cmd to the provided boolean value.
|
||||||
func (c *Cmd) SetTrace(trace bool) {
|
func (c *Cmd) SetTrace(trace bool) {
|
||||||
c.Trace = &trace
|
c.Trace = &trace
|
||||||
}
|
}
|
||||||
|
142
types/command_test.go
Normal file
142
types/command_test.go
Normal file
@ -0,0 +1,142 @@
|
|||||||
|
package types
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"os/exec"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestCmdRun(t *testing.T) {
|
||||||
|
tests := []struct {
|
||||||
|
name string
|
||||||
|
cmd *Cmd
|
||||||
|
wantErr bool
|
||||||
|
wantStdout string
|
||||||
|
wantStderr string
|
||||||
|
wantTrace string
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
name: "trace enabled",
|
||||||
|
cmd: &Cmd{
|
||||||
|
Trace: boolPtr(true),
|
||||||
|
Cmd: &exec.Cmd{
|
||||||
|
Path: "/usr/bin/echo",
|
||||||
|
Args: []string{"echo", "hello"},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
wantTrace: "+ echo hello\n",
|
||||||
|
wantStdout: "hello\n",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "private output",
|
||||||
|
cmd: &Cmd{
|
||||||
|
Private: true,
|
||||||
|
Cmd: &exec.Cmd{
|
||||||
|
Path: "/usr/bin/echo",
|
||||||
|
Args: []string{"echo", "hello"},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
wantTrace: "+ echo hello\n",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "custom env",
|
||||||
|
cmd: &Cmd{
|
||||||
|
Cmd: &exec.Cmd{
|
||||||
|
Path: "/bin/sh",
|
||||||
|
Args: []string{"sh", "-c", "echo $TEST"},
|
||||||
|
Env: []string{"TEST=1"},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
wantTrace: "+ sh -c echo $TEST\n",
|
||||||
|
wantStdout: "1\n",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "custom stdout",
|
||||||
|
cmd: &Cmd{
|
||||||
|
Cmd: &exec.Cmd{
|
||||||
|
Path: "/bin/sh",
|
||||||
|
Args: []string{"sh", "-c", "echo hello"},
|
||||||
|
Stdout: new(bytes.Buffer),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
wantTrace: "+ sh -c echo hello\n",
|
||||||
|
wantStdout: "hello\n",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "custom stderr",
|
||||||
|
cmd: &Cmd{
|
||||||
|
Cmd: &exec.Cmd{
|
||||||
|
Path: "/bin/sh",
|
||||||
|
Args: []string{"sh", "-c", "echo error >&2"},
|
||||||
|
Stderr: new(bytes.Buffer),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
wantTrace: "+ sh -c echo error >&2\n",
|
||||||
|
wantStderr: "error\n",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, tt := range tests {
|
||||||
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
|
traceBuf := new(bytes.Buffer)
|
||||||
|
stdoutBuf := new(bytes.Buffer)
|
||||||
|
stderrBuf := new(bytes.Buffer)
|
||||||
|
tt.cmd.TraceWriter = traceBuf
|
||||||
|
tt.cmd.Stdout = stdoutBuf
|
||||||
|
tt.cmd.Stderr = stderrBuf
|
||||||
|
|
||||||
|
err := tt.cmd.Run()
|
||||||
|
if tt.wantErr {
|
||||||
|
assert.Error(t, err)
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.Equal(t, tt.wantTrace, traceBuf.String())
|
||||||
|
assert.Equal(t, tt.wantStdout, stdoutBuf.String())
|
||||||
|
assert.Equal(t, tt.wantStderr, stderrBuf.String())
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestCmdSetTrace(t *testing.T) {
|
||||||
|
tests := []struct {
|
||||||
|
name string
|
||||||
|
cmd *Cmd
|
||||||
|
trace bool
|
||||||
|
expected *bool
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
name: "set trace to true",
|
||||||
|
cmd: &Cmd{},
|
||||||
|
trace: true,
|
||||||
|
expected: boolPtr(true),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "set trace to false",
|
||||||
|
cmd: &Cmd{},
|
||||||
|
trace: false,
|
||||||
|
expected: boolPtr(false),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "overwrite existing trace value",
|
||||||
|
cmd: &Cmd{Trace: boolPtr(true)},
|
||||||
|
trace: false,
|
||||||
|
expected: boolPtr(false),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, tt := range tests {
|
||||||
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
|
tt.cmd.SetTrace(tt.trace)
|
||||||
|
assert.Equal(t, tt.expected, tt.cmd.Trace)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func boolPtr(b bool) *bool {
|
||||||
|
return &b
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user