(ctx context.Context, job params.Job)
| 293 | } |
| 294 | |
| 295 | func (s *sqlDatabase) CreateOrUpdateJob(ctx context.Context, job params.Job) (params.Job, error) { |
| 296 | var asParams params.Job |
| 297 | var operation common.OperationType |
| 298 | |
| 299 | err := s.conn.Transaction(func(tx *gorm.DB) error { |
| 300 | var workflowJob WorkflowJob |
| 301 | |
| 302 | searchField := "workflow_job_id = ?" |
| 303 | var searchVal any = job.WorkflowJobID |
| 304 | if job.ScaleSetJobID != "" { |
| 305 | searchField = "scale_set_job_id = ?" |
| 306 | searchVal = job.ScaleSetJobID |
| 307 | } |
| 308 | q := tx.Preload("Instance").Where(searchField, searchVal).First(&workflowJob) |
| 309 | |
| 310 | if q.Error != nil { |
| 311 | if !errors.Is(q.Error, gorm.ErrRecordNotFound) { |
| 312 | return fmt.Errorf("error fetching job: %w", q.Error) |
| 313 | } |
| 314 | } |
| 315 | |
| 316 | if workflowJob.ID != 0 { |
| 317 | // Update workflowJob with values from job. |
| 318 | operation = common.UpdateOperation |
| 319 | |
| 320 | workflowJob.Status = job.Status |
| 321 | workflowJob.Action = job.Action |
| 322 | workflowJob.Conclusion = job.Conclusion |
| 323 | workflowJob.StartedAt = job.StartedAt |
| 324 | workflowJob.CompletedAt = job.CompletedAt |
| 325 | workflowJob.GithubRunnerID = job.GithubRunnerID |
| 326 | workflowJob.RunnerGroupID = job.RunnerGroupID |
| 327 | workflowJob.RunnerGroupName = job.RunnerGroupName |
| 328 | workflowJob.WorkflowRunURL = job.WorkflowRunURL |
| 329 | if job.RunID != 0 && workflowJob.RunID == 0 { |
| 330 | workflowJob.RunID = job.RunID |
| 331 | } |
| 332 | |
| 333 | if job.LockedBy != uuid.Nil { |
| 334 | workflowJob.LockedBy = job.LockedBy |
| 335 | } |
| 336 | |
| 337 | if job.RunnerName != "" { |
| 338 | instance, err := s.getInstance(ctx, tx, job.RunnerName) |
| 339 | if err == nil { |
| 340 | workflowJob.InstanceID = &instance.ID |
| 341 | } else { |
| 342 | // This usually is very normal as not all jobs run on our runners. |
| 343 | slog.DebugContext(ctx, "failed to get instance by name", "instance_name", job.RunnerName) |
| 344 | } |
| 345 | } |
| 346 | |
| 347 | if job.RepoID != nil { |
| 348 | workflowJob.RepoID = job.RepoID |
| 349 | } |
| 350 | |
| 351 | if job.OrgID != nil { |
| 352 | workflowJob.OrgID = job.OrgID |
nothing calls this directly
no test coverage detected