MCPcopy Create free account
hub / github.com/cloudbase/garm / CreateOrUpdateJob

Method CreateOrUpdateJob

database/sql/jobs.go:295–389  ·  view source on GitHub ↗
(ctx context.Context, job params.Job)

Source from the content-addressed store, hash-verified

293}
294
295func (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

Callers

nothing calls this directly

Calls 4

getInstanceMethod · 0.95
sendNotifyMethod · 0.95

Tested by

no test coverage detected