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
}