pkg/runner/step_result_builder.go (93 lines of code) (raw):
package runner
import (
"google.golang.org/protobuf/types/known/structpb"
"gitlab.com/gitlab-org/step-runner/proto"
)
type StepResultBuilder struct {
env map[string]string
execResult *proto.StepResult_ExecResult
exports map[string]string
loadedFrom StepReference
outputs map[string]*structpb.Value
params *Params
specDef *SpecDefinition
subStepResults []*proto.StepResult
}
func NewStepResultBuilder(loadedFrom StepReference, params *Params, specDef *SpecDefinition) *StepResultBuilder {
return &StepResultBuilder{
env: make(map[string]string),
execResult: nil,
exports: make(map[string]string),
loadedFrom: loadedFrom,
outputs: make(map[string]*structpb.Value),
params: params,
specDef: specDef,
subStepResults: make([]*proto.StepResult, 0),
}
}
func (bldr *StepResultBuilder) WithExecResult(executedCmd *ExecResult) *StepResultBuilder {
if executedCmd != nil {
bldr.execResult = executedCmd.ToProto()
}
return bldr
}
func (bldr *StepResultBuilder) WithEnv(env map[string]string) *StepResultBuilder {
bldr.env = env
return bldr
}
func (bldr *StepResultBuilder) WithOutputs(outputs map[string]*structpb.Value) *StepResultBuilder {
bldr.outputs = outputs
return bldr
}
func (bldr *StepResultBuilder) WithSubStepResult(result *proto.StepResult) *StepResultBuilder {
if result != nil {
bldr.subStepResults = append(bldr.subStepResults, result)
}
return bldr
}
func (bldr *StepResultBuilder) WithExports(exports *Environment) *StepResultBuilder {
if exports != nil {
bldr.exports = exports.Values()
}
return bldr
}
func (bldr *StepResultBuilder) ObserveEnv(env *Environment, err error) error {
if env != nil {
bldr.WithEnv(env.Values())
}
return err
}
func (bldr *StepResultBuilder) ObserveExecutedCmd(execResult *ExecResult, err error) error {
bldr.WithExecResult(execResult)
return err
}
func (bldr *StepResultBuilder) ObserveOutputs(outputs map[string]*structpb.Value, err error) error {
bldr.WithOutputs(outputs)
return err
}
func (bldr *StepResultBuilder) ObserveExports(exports *Environment, err error) (*Environment, error) {
bldr.WithExports(exports)
return exports, err
}
func (bldr *StepResultBuilder) ObserveStepResult(stepResult *proto.StepResult, err error) (*proto.StepResult, error) {
bldr.WithSubStepResult(stepResult)
return stepResult, err
}
func (bldr *StepResultBuilder) BuildFailure() *proto.StepResult {
return bldr.buildResult(proto.StepResult_failure)
}
func (bldr *StepResultBuilder) Build() *proto.StepResult {
return bldr.buildResult(proto.StepResult_success)
}
func (bldr *StepResultBuilder) buildResult(status proto.StepResult_Status) *proto.StepResult {
return &proto.StepResult{
Step: bldr.loadedFrom.ToProtoStep(bldr.params),
SpecDefinition: bldr.specDef.ToProto(),
Status: status,
Outputs: bldr.outputs,
Exports: bldr.exports,
Env: bldr.env,
ExecResult: bldr.execResult,
SubStepResults: bldr.subStepResults,
}
}