( ctx context.Context, taskRecord Task, startingTask Task, run Run, actor ActorContext, )
| 1244 | } |
| 1245 | |
| 1246 | func (m *Service) startRunSession( |
| 1247 | ctx context.Context, |
| 1248 | taskRecord Task, |
| 1249 | startingTask Task, |
| 1250 | run Run, |
| 1251 | actor ActorContext, |
| 1252 | ) (string, *Run, error) { |
| 1253 | profile, err := m.startTaskExecutionProfile(ctx, startingTask.ID) |
| 1254 | if err != nil { |
| 1255 | message := fmt.Sprintf("load execution profile: %v", err) |
| 1256 | failedRun, failErr := m.failRunAfterSessionStartError(ctx, taskRecord, run, actor, message) |
| 1257 | if failErr != nil { |
| 1258 | return "", nil, errorsJoin(err, failErr) |
| 1259 | } |
| 1260 | return "", failedRun, fmt.Errorf("task: load execution profile for run %q: %w", run.ID, err) |
| 1261 | } |
| 1262 | sessionRef, err := m.sessions.StartTaskSession(ctx, &StartTaskSession{ |
| 1263 | Task: startingTask, |
| 1264 | Run: run, |
| 1265 | ExecutionProfile: &profile, |
| 1266 | Actor: actor, |
| 1267 | }) |
| 1268 | if err != nil { |
| 1269 | message := fmt.Sprintf("start task session: %v", err) |
| 1270 | failedRun, failErr := m.failRunAfterSessionStartError(ctx, taskRecord, run, actor, message) |
| 1271 | if failErr != nil { |
| 1272 | return "", nil, errorsJoin(err, failErr) |
| 1273 | } |
| 1274 | return "", failedRun, fmt.Errorf("task: start task session for run %q: %w", run.ID, err) |
| 1275 | } |
| 1276 | if sessionRef == nil { |
| 1277 | failedRun, failErr := m.failRunAfterSessionStartError( |
| 1278 | ctx, |
| 1279 | taskRecord, |
| 1280 | run, |
| 1281 | actor, |
| 1282 | "start task session: nil session reference", |
| 1283 | ) |
| 1284 | if failErr != nil { |
| 1285 | return "", nil, failErr |
| 1286 | } |
| 1287 | return "", failedRun, fmt.Errorf("%w: start_task_session returned nil session reference", ErrValidation) |
| 1288 | } |
| 1289 | if err := sessionRef.Validate(); err != nil { |
| 1290 | message := fmt.Sprintf("start task session: %v", err) |
| 1291 | failedRun, failErr := m.failRunAfterSessionStartError(ctx, taskRecord, run, actor, message) |
| 1292 | if failErr != nil { |
| 1293 | return "", nil, errorsJoin(err, failErr) |
| 1294 | } |
| 1295 | return "", failedRun, err |
| 1296 | } |
| 1297 | return strings.TrimSpace(sessionRef.SessionID), nil, nil |
| 1298 | } |
| 1299 | |
| 1300 | func (m *Service) startTaskExecutionProfile(ctx context.Context, taskID string) (ExecutionProfile, error) { |
| 1301 | profile, err := m.store.GetExecutionProfile(ctx, taskID) |
no test coverage detected