mirror of
https://github.com/woodpecker-ci/woodpecker.git
synced 2024-11-27 04:11:03 +00:00
write exit code to logs
This commit is contained in:
parent
cf3fb7623f
commit
8ce22709f0
2 changed files with 47 additions and 1 deletions
|
@ -2,8 +2,10 @@ package build
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bufio"
|
"bufio"
|
||||||
|
"strconv"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/Sirupsen/logrus"
|
||||||
"github.com/drone/drone/yaml"
|
"github.com/drone/drone/yaml"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -48,6 +50,12 @@ func (p *Pipeline) Next() <-chan error {
|
||||||
// Exec executes the current step.
|
// Exec executes the current step.
|
||||||
func (p *Pipeline) Exec() {
|
func (p *Pipeline) Exec() {
|
||||||
go func() {
|
go func() {
|
||||||
|
defer func() {
|
||||||
|
if r := recover(); r != nil {
|
||||||
|
logrus.Errorln("recover executing build step", r)
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
err := p.exec(p.head.Container)
|
err := p.exec(p.head.Container)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
p.err = err
|
p.err = err
|
||||||
|
@ -119,6 +127,11 @@ func (p *Pipeline) step() {
|
||||||
// close closes open channels and signals the pipeline is done.
|
// close closes open channels and signals the pipeline is done.
|
||||||
func (p *Pipeline) close(err error) {
|
func (p *Pipeline) close(err error) {
|
||||||
go func() {
|
go func() {
|
||||||
|
defer func() {
|
||||||
|
if r := recover(); r != nil {
|
||||||
|
logrus.Errorln("recover closing the pipeline", r)
|
||||||
|
}
|
||||||
|
}()
|
||||||
p.done <- err
|
p.done <- err
|
||||||
}()
|
}()
|
||||||
}
|
}
|
||||||
|
@ -131,6 +144,12 @@ func (p *Pipeline) exec(c *yaml.Container) error {
|
||||||
p.containers = append(p.containers, name)
|
p.containers = append(p.containers, name)
|
||||||
|
|
||||||
go func() {
|
go func() {
|
||||||
|
defer func() {
|
||||||
|
if r := recover(); r != nil {
|
||||||
|
logrus.Errorln("recover writing build output", r)
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
rc, rerr := p.engine.ContainerLogs(name)
|
rc, rerr := p.engine.ContainerLogs(name)
|
||||||
if rerr != nil {
|
if rerr != nil {
|
||||||
return
|
return
|
||||||
|
@ -165,5 +184,19 @@ func (p *Pipeline) exec(c *yaml.Container) error {
|
||||||
} else if state.ExitCode != 0 {
|
} else if state.ExitCode != 0 {
|
||||||
return &ExitError{c.Name, state.ExitCode}
|
return &ExitError{c.Name, state.ExitCode}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
go func() {
|
||||||
|
defer func() {
|
||||||
|
if r := recover(); r != nil {
|
||||||
|
logrus.Errorln("recover writing exit code to output", r)
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
|
p.pipe <- &Line{
|
||||||
|
Proc: c.Name,
|
||||||
|
Type: ExitCodeLine,
|
||||||
|
Out: strconv.Itoa(state.ExitCode),
|
||||||
|
}
|
||||||
|
}()
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,14 @@ package build
|
||||||
|
|
||||||
import "fmt"
|
import "fmt"
|
||||||
|
|
||||||
|
const (
|
||||||
|
StdoutLine int = iota
|
||||||
|
StderrLine
|
||||||
|
ExitCodeLine
|
||||||
|
MetadataLine
|
||||||
|
ProgressLine
|
||||||
|
)
|
||||||
|
|
||||||
// Line is a line of console output.
|
// Line is a line of console output.
|
||||||
type Line struct {
|
type Line struct {
|
||||||
Proc string `json:"proc,omitempty"`
|
Proc string `json:"proc,omitempty"`
|
||||||
|
@ -12,7 +20,12 @@ type Line struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (l *Line) String() string {
|
func (l *Line) String() string {
|
||||||
return fmt.Sprintf("[%s:L%v:%vs] %s", l.Proc, l.Pos, l.Time, l.Out)
|
switch l.Type {
|
||||||
|
case ExitCodeLine:
|
||||||
|
return fmt.Sprintf("[%s] exit code %s", l.Proc, l.Out)
|
||||||
|
default:
|
||||||
|
return fmt.Sprintf("[%s:L%v:%vs] %s", l.Proc, l.Pos, l.Time, l.Out)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// State defines the state of the container.
|
// State defines the state of the container.
|
||||||
|
|
Loading…
Reference in a new issue