func()

in pkg/testutil/step_runner.go [57:108]


func (b *StepRunnerBuilder) Run(yaml string) (*proto.StepResult, string, error) {
	schemaSpec, schemaStep, err := schema.ReadSteps(yaml)
	require.NoError(b.t, err)

	protoSpec, err := schemaSpec.Compile()
	require.NoError(b.t, err)

	protoDef, err := schemaStep.Compile()
	require.NoError(b.t, err)

	dir, err := os.Getwd()
	require.NoError(b.t, err)

	specDef := runner.NewSpecDefinition(protoSpec, protoDef, dir)
	require.NoError(b.t, err)

	diContainer := di.NewContainer()

	osEnv, err := runner.NewEnvironmentFromOS()
	require.NoError(b.t, err)

	env, err := runner.GlobalEnvironment(osEnv, b.globalCtxJob)
	require.NoError(b.t, err)

	if b.globalEnv != nil {
		env = env.AddLexicalScope(b.globalEnv)
	}

	workDir, err := os.UserHomeDir()
	require.NoError(b.t, err)

	stepLog := io.MultiWriter(b.log, os.Stdout)
	globalCtx := runner.NewGlobalContext(workDir, b.globalCtxJob, env, stepLog, stepLog)
	params := &runner.Params{}

	stepParser, err := diContainer.StepParser()
	require.NoError(b.t, err)

	step, err := stepParser.Parse(globalCtx, specDef, params, runner.StepDefinedInGitLabJob)
	require.NoError(b.t, err)

	inputs := params.NewInputsWithDefault(specDef.SpecInputs())
	stepsCtx, err := runner.NewStepsContext(globalCtx, specDef.Dir(), inputs, globalCtx.EnvWithLexicalScope(params.Env))
	require.NoError(b.t, err)

	ctx, cancel := context.WithTimeout(context.Background(), b.timeout)
	defer cancel()

	run, err := step.Run(ctx, stepsCtx)

	return run, b.log.String(), err
}