mirror of
https://github.com/woodpecker-ci/woodpecker.git
synced 2024-11-30 08:06:52 +02:00
b8900cdf88
Provide up to date drone compatibility environment variables to each step execution. closes #1416 Before a step is executed, some environemnt variables are updated. This ensures, that the updated environment variables are copied to their corresponding `DRONE_` environemt variables. Side effect is that the `DRONE_` environemnt variables are no longer available in the metadata which should not harm as they are not used inside woodpecker.
57 lines
2.0 KiB
Go
57 lines
2.0 KiB
Go
package pipeline
|
|
|
|
import (
|
|
"strconv"
|
|
"time"
|
|
)
|
|
|
|
// Tracer handles process tracing.
|
|
type Tracer interface {
|
|
Trace(*State) error
|
|
}
|
|
|
|
// TraceFunc type is an adapter to allow the use of ordinary
|
|
// functions as a Tracer.
|
|
type TraceFunc func(*State) error
|
|
|
|
// Trace calls f(state).
|
|
func (f TraceFunc) Trace(state *State) error {
|
|
return f(state)
|
|
}
|
|
|
|
// DefaultTracer provides a tracer that updates the CI_ environment
|
|
// variables to include the correct timestamp and status.
|
|
// TODO: find either a new home or better name for this.
|
|
var DefaultTracer = TraceFunc(func(state *State) error {
|
|
if state.Process.Exited {
|
|
return nil
|
|
}
|
|
if state.Pipeline.Step.Environment == nil {
|
|
return nil
|
|
}
|
|
state.Pipeline.Step.Environment["CI_PIPELINE_STATUS"] = "success"
|
|
state.Pipeline.Step.Environment["CI_PIPELINE_STARTED"] = strconv.FormatInt(state.Pipeline.Time, 10)
|
|
state.Pipeline.Step.Environment["CI_PIPELINE_FINISHED"] = strconv.FormatInt(time.Now().Unix(), 10)
|
|
|
|
state.Pipeline.Step.Environment["CI_STEP_STATUS"] = "success"
|
|
state.Pipeline.Step.Environment["CI_STEP_STARTED"] = strconv.FormatInt(state.Pipeline.Time, 10)
|
|
state.Pipeline.Step.Environment["CI_STEP_FINISHED"] = strconv.FormatInt(time.Now().Unix(), 10)
|
|
|
|
// DEPRECATED
|
|
state.Pipeline.Step.Environment["CI_BUILD_STATUS"] = "success"
|
|
state.Pipeline.Step.Environment["CI_BUILD_STARTED"] = strconv.FormatInt(state.Pipeline.Time, 10)
|
|
state.Pipeline.Step.Environment["CI_BUILD_FINISHED"] = strconv.FormatInt(time.Now().Unix(), 10)
|
|
state.Pipeline.Step.Environment["CI_JOB_STATUS"] = "success"
|
|
state.Pipeline.Step.Environment["CI_JOB_STARTED"] = strconv.FormatInt(state.Pipeline.Time, 10)
|
|
state.Pipeline.Step.Environment["CI_JOB_FINISHED"] = strconv.FormatInt(time.Now().Unix(), 10)
|
|
|
|
if state.Pipeline.Error != nil {
|
|
state.Pipeline.Step.Environment["CI_PIPELINE_STATUS"] = "failure"
|
|
state.Pipeline.Step.Environment["CI_STEP_STATUS"] = "failure"
|
|
// DEPRECATED
|
|
state.Pipeline.Step.Environment["CI_BUILD_STATUS"] = "failure"
|
|
state.Pipeline.Step.Environment["CI_JOB_STATUS"] = "failure"
|
|
}
|
|
return nil
|
|
})
|