func run()

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
}