in cmd/run/run.go [77:156]
func run(options *Options) error {
var specDef *runner.SpecDefinition
if options.TextProtoStepFile != "" {
data, err := os.ReadFile(options.TextProtoStepFile)
if err != nil {
return err
}
defn := &proto.Definition{}
err = prototext.Unmarshal(data, defn)
if err != nil {
return err
}
spec := &proto.Spec{Spec: &proto.Spec_Content{}}
dir := filepath.Dir(options.TextProtoStepFile)
specDef = runner.NewSpecDefinition(spec, defn, dir)
} else {
yml, err := yamlStep(options)
if err != nil {
return err
}
def, err := wrapStepsInSingleStep(yml)
if err != nil {
return err
}
protoDef, err := def.Compile()
if err != nil {
return err
}
spec := &proto.Spec{Spec: &proto.Spec_Content{}}
specDef = runner.NewSpecDefinition(spec, protoDef, "")
}
diContainer := di.NewContainer()
globalCtx, err := createGlobalCtx(options)
if err != nil {
return err
}
stepParser, err := diContainer.StepParser()
if err != nil {
return err
}
params := &runner.Params{}
step, err := stepParser.Parse(globalCtx, specDef, params, runner.StepDefinedInGitLabJob)
if err != nil {
return err
}
inputs := params.NewInputsWithDefault(specDef.SpecInputs())
stepsCtx, err := runner.NewStepsContext(globalCtx, specDef.Dir(), inputs, globalCtx.Env())
if err != nil {
return err
}
defer stepsCtx.Cleanup()
result, err := step.Run(ctx.Background(), stepsCtx)
if options.WriteStepResults || options.StepResultsFile != "" {
reptErr := report.NewStepResultReport(
options.StepResultsFile,
report.Format(options.StepResultsFormat),
).Write(result)
if reptErr != nil {
fmt.Println(reptErr)
}
}
return err
}