in pkg/runner/executable_step.go [62:93]
func (s *ExecutableStep) execCommand(ctx ctx.Context, stepsCtx *StepsContext) (*ExecResult, error) {
cmdArgs := []string{}
for _, arg := range s.specDef.ExecCommand() {
res, err := expression.ExpandString(stepsCtx.View(), arg)
if err != nil {
return nil, fmt.Errorf("interpolate command argument %q: %w", arg, err)
}
cmdArgs = append(cmdArgs, res)
}
workDir, err := s.determineWorkDir(stepsCtx)
if err != nil {
return nil, err
}
cmd := exec.CommandContext(ctx, cmdArgs[0], cmdArgs[1:]...)
cmd.Dir = workDir
cmd.Env = stepsCtx.GetEnvList()
cmd.Stdout, cmd.Stderr = stepsCtx.Pipe()
err = cmd.Run()
execResult := NewExecResult(cmd.Dir, cmd.Args, cmd.ProcessState.ExitCode())
if err != nil {
return execResult, err
}
return execResult, nil
}