Go · 12373 bytes Raw Blame History
1 // Code generated by sqlc. DO NOT EDIT.
2 // versions:
3 // sqlc v1.31.1
4 // source: workflow_jobs.sql
5
6 package actionsdb
7
8 import (
9 "context"
10
11 "github.com/jackc/pgx/v5/pgtype"
12 )
13
14 const claimQueuedWorkflowJob = `-- name: ClaimQueuedWorkflowJob :one
15 WITH candidate AS (
16 SELECT j.id
17 FROM workflow_jobs j
18 WHERE j.status = 'queued'
19 AND j.cancel_requested = false
20 AND j.runner_id IS NULL
21 AND (j.runs_on = '' OR j.runs_on = ANY($1::text[]))
22 AND NOT EXISTS (
23 SELECT 1
24 FROM workflow_jobs dep
25 WHERE dep.run_id = j.run_id
26 AND dep.job_key = ANY(j.needs_jobs)
27 AND (dep.status <> 'completed' OR dep.conclusion <> 'success')
28 )
29 ORDER BY j.created_at ASC, j.id ASC
30 FOR UPDATE OF j SKIP LOCKED
31 LIMIT 1
32 ),
33 claimed AS (
34 UPDATE workflow_jobs j
35 SET runner_id = $2::bigint,
36 status = 'running',
37 started_at = COALESCE(j.started_at, now()),
38 version = j.version + 1,
39 updated_at = now()
40 FROM candidate c
41 WHERE j.id = c.id
42 RETURNING j.id, j.run_id, j.job_index, j.job_key, j.job_name, j.runs_on,
43 j.runner_id, j.needs_jobs, j.if_expr, j.timeout_minutes,
44 j.permissions, j.job_env, j.status, j.conclusion,
45 j.cancel_requested, j.started_at, j.completed_at, j.version,
46 j.created_at, j.updated_at
47 )
48 SELECT c.id, c.run_id, c.job_index, c.job_key, c.job_name, c.runs_on,
49 c.runner_id, c.needs_jobs, c.if_expr, c.timeout_minutes,
50 c.permissions, c.job_env, c.status, c.conclusion,
51 c.cancel_requested, c.started_at, c.completed_at, c.version,
52 c.created_at, c.updated_at,
53 r.repo_id, r.run_index, r.workflow_file, r.workflow_name,
54 r.head_sha, r.head_ref, r.event, r.event_payload
55 FROM claimed c
56 JOIN workflow_runs r ON r.id = c.run_id
57 `
58
59 type ClaimQueuedWorkflowJobParams struct {
60 Labels []string
61 RunnerID int64
62 }
63
64 type ClaimQueuedWorkflowJobRow struct {
65 ID int64
66 RunID int64
67 JobIndex int32
68 JobKey string
69 JobName string
70 RunsOn string
71 RunnerID pgtype.Int8
72 NeedsJobs []string
73 IfExpr string
74 TimeoutMinutes int32
75 Permissions []byte
76 JobEnv []byte
77 Status WorkflowJobStatus
78 Conclusion NullCheckConclusion
79 CancelRequested bool
80 StartedAt pgtype.Timestamptz
81 CompletedAt pgtype.Timestamptz
82 Version int32
83 CreatedAt pgtype.Timestamptz
84 UpdatedAt pgtype.Timestamptz
85 RepoID int64
86 RunIndex int64
87 WorkflowFile string
88 WorkflowName string
89 HeadSha string
90 HeadRef string
91 Event WorkflowRunEvent
92 EventPayload []byte
93 }
94
95 func (q *Queries) ClaimQueuedWorkflowJob(ctx context.Context, db DBTX, arg ClaimQueuedWorkflowJobParams) (ClaimQueuedWorkflowJobRow, error) {
96 row := db.QueryRow(ctx, claimQueuedWorkflowJob, arg.Labels, arg.RunnerID)
97 var i ClaimQueuedWorkflowJobRow
98 err := row.Scan(
99 &i.ID,
100 &i.RunID,
101 &i.JobIndex,
102 &i.JobKey,
103 &i.JobName,
104 &i.RunsOn,
105 &i.RunnerID,
106 &i.NeedsJobs,
107 &i.IfExpr,
108 &i.TimeoutMinutes,
109 &i.Permissions,
110 &i.JobEnv,
111 &i.Status,
112 &i.Conclusion,
113 &i.CancelRequested,
114 &i.StartedAt,
115 &i.CompletedAt,
116 &i.Version,
117 &i.CreatedAt,
118 &i.UpdatedAt,
119 &i.RepoID,
120 &i.RunIndex,
121 &i.WorkflowFile,
122 &i.WorkflowName,
123 &i.HeadSha,
124 &i.HeadRef,
125 &i.Event,
126 &i.EventPayload,
127 )
128 return i, err
129 }
130
131 const countRunningJobsForRunner = `-- name: CountRunningJobsForRunner :one
132 SELECT COUNT(*)::integer
133 FROM workflow_jobs
134 WHERE runner_id = $1::bigint AND status = 'running'
135 `
136
137 func (q *Queries) CountRunningJobsForRunner(ctx context.Context, db DBTX, runnerID int64) (int32, error) {
138 row := db.QueryRow(ctx, countRunningJobsForRunner, runnerID)
139 var column_1 int32
140 err := row.Scan(&column_1)
141 return column_1, err
142 }
143
144 const getWorkflowJobByID = `-- name: GetWorkflowJobByID :one
145 SELECT id, run_id, job_index, job_key, job_name, runs_on,
146 runner_id, needs_jobs, if_expr, timeout_minutes, permissions,
147 job_env, status, conclusion, cancel_requested,
148 started_at, completed_at, version, created_at, updated_at
149 FROM workflow_jobs
150 WHERE id = $1
151 `
152
153 func (q *Queries) GetWorkflowJobByID(ctx context.Context, db DBTX, id int64) (WorkflowJob, error) {
154 row := db.QueryRow(ctx, getWorkflowJobByID, id)
155 var i WorkflowJob
156 err := row.Scan(
157 &i.ID,
158 &i.RunID,
159 &i.JobIndex,
160 &i.JobKey,
161 &i.JobName,
162 &i.RunsOn,
163 &i.RunnerID,
164 &i.NeedsJobs,
165 &i.IfExpr,
166 &i.TimeoutMinutes,
167 &i.Permissions,
168 &i.JobEnv,
169 &i.Status,
170 &i.Conclusion,
171 &i.CancelRequested,
172 &i.StartedAt,
173 &i.CompletedAt,
174 &i.Version,
175 &i.CreatedAt,
176 &i.UpdatedAt,
177 )
178 return i, err
179 }
180
181 const insertWorkflowJob = `-- name: InsertWorkflowJob :one
182
183 INSERT INTO workflow_jobs (
184 run_id, job_index, job_key, job_name,
185 runs_on, needs_jobs, if_expr, timeout_minutes,
186 permissions, job_env
187 ) VALUES (
188 $1, $2, $3, $4, $5, $6, $7, $8, $9, $10
189 )
190 RETURNING id, run_id, job_index, job_key, job_name, runs_on,
191 runner_id, needs_jobs, if_expr, timeout_minutes, permissions,
192 job_env, status, conclusion, cancel_requested,
193 started_at, completed_at, version, created_at, updated_at
194 `
195
196 type InsertWorkflowJobParams struct {
197 RunID int64
198 JobIndex int32
199 JobKey string
200 JobName string
201 RunsOn string
202 NeedsJobs []string
203 IfExpr string
204 TimeoutMinutes int32
205 Permissions []byte
206 JobEnv []byte
207 }
208
209 // SPDX-License-Identifier: AGPL-3.0-or-later
210 func (q *Queries) InsertWorkflowJob(ctx context.Context, db DBTX, arg InsertWorkflowJobParams) (WorkflowJob, error) {
211 row := db.QueryRow(ctx, insertWorkflowJob,
212 arg.RunID,
213 arg.JobIndex,
214 arg.JobKey,
215 arg.JobName,
216 arg.RunsOn,
217 arg.NeedsJobs,
218 arg.IfExpr,
219 arg.TimeoutMinutes,
220 arg.Permissions,
221 arg.JobEnv,
222 )
223 var i WorkflowJob
224 err := row.Scan(
225 &i.ID,
226 &i.RunID,
227 &i.JobIndex,
228 &i.JobKey,
229 &i.JobName,
230 &i.RunsOn,
231 &i.RunnerID,
232 &i.NeedsJobs,
233 &i.IfExpr,
234 &i.TimeoutMinutes,
235 &i.Permissions,
236 &i.JobEnv,
237 &i.Status,
238 &i.Conclusion,
239 &i.CancelRequested,
240 &i.StartedAt,
241 &i.CompletedAt,
242 &i.Version,
243 &i.CreatedAt,
244 &i.UpdatedAt,
245 )
246 return i, err
247 }
248
249 const listJobsForRun = `-- name: ListJobsForRun :many
250 SELECT id, run_id, job_index, job_key, job_name, runs_on, status,
251 conclusion, cancel_requested, needs_jobs, started_at, completed_at, created_at, updated_at
252 FROM workflow_jobs
253 WHERE run_id = $1
254 ORDER BY job_index ASC
255 `
256
257 type ListJobsForRunRow struct {
258 ID int64
259 RunID int64
260 JobIndex int32
261 JobKey string
262 JobName string
263 RunsOn string
264 Status WorkflowJobStatus
265 Conclusion NullCheckConclusion
266 CancelRequested bool
267 NeedsJobs []string
268 StartedAt pgtype.Timestamptz
269 CompletedAt pgtype.Timestamptz
270 CreatedAt pgtype.Timestamptz
271 UpdatedAt pgtype.Timestamptz
272 }
273
274 func (q *Queries) ListJobsForRun(ctx context.Context, db DBTX, runID int64) ([]ListJobsForRunRow, error) {
275 rows, err := db.Query(ctx, listJobsForRun, runID)
276 if err != nil {
277 return nil, err
278 }
279 defer rows.Close()
280 items := []ListJobsForRunRow{}
281 for rows.Next() {
282 var i ListJobsForRunRow
283 if err := rows.Scan(
284 &i.ID,
285 &i.RunID,
286 &i.JobIndex,
287 &i.JobKey,
288 &i.JobName,
289 &i.RunsOn,
290 &i.Status,
291 &i.Conclusion,
292 &i.CancelRequested,
293 &i.NeedsJobs,
294 &i.StartedAt,
295 &i.CompletedAt,
296 &i.CreatedAt,
297 &i.UpdatedAt,
298 ); err != nil {
299 return nil, err
300 }
301 items = append(items, i)
302 }
303 if err := rows.Err(); err != nil {
304 return nil, err
305 }
306 return items, nil
307 }
308
309 const requestWorkflowJobCancel = `-- name: RequestWorkflowJobCancel :one
310 UPDATE workflow_jobs
311 SET cancel_requested = true,
312 status = CASE
313 WHEN status = 'queued' THEN 'cancelled'::workflow_job_status
314 ELSE status
315 END,
316 conclusion = CASE
317 WHEN status = 'queued' THEN 'cancelled'::check_conclusion
318 ELSE conclusion
319 END,
320 started_at = CASE
321 WHEN status = 'queued' THEN COALESCE(started_at, now())
322 ELSE started_at
323 END,
324 completed_at = CASE
325 WHEN status = 'queued' THEN COALESCE(completed_at, now())
326 ELSE completed_at
327 END,
328 version = version + 1,
329 updated_at = now()
330 WHERE id = $1
331 AND status IN ('queued', 'running')
332 AND (status = 'queued' OR cancel_requested = false)
333 RETURNING id, run_id, job_index, job_key, job_name, runs_on,
334 runner_id, needs_jobs, if_expr, timeout_minutes, permissions,
335 job_env, status, conclusion, cancel_requested,
336 started_at, completed_at, version, created_at, updated_at
337 `
338
339 func (q *Queries) RequestWorkflowJobCancel(ctx context.Context, db DBTX, id int64) (WorkflowJob, error) {
340 row := db.QueryRow(ctx, requestWorkflowJobCancel, id)
341 var i WorkflowJob
342 err := row.Scan(
343 &i.ID,
344 &i.RunID,
345 &i.JobIndex,
346 &i.JobKey,
347 &i.JobName,
348 &i.RunsOn,
349 &i.RunnerID,
350 &i.NeedsJobs,
351 &i.IfExpr,
352 &i.TimeoutMinutes,
353 &i.Permissions,
354 &i.JobEnv,
355 &i.Status,
356 &i.Conclusion,
357 &i.CancelRequested,
358 &i.StartedAt,
359 &i.CompletedAt,
360 &i.Version,
361 &i.CreatedAt,
362 &i.UpdatedAt,
363 )
364 return i, err
365 }
366
367 const requestWorkflowRunCancel = `-- name: RequestWorkflowRunCancel :many
368 UPDATE workflow_jobs
369 SET cancel_requested = true,
370 status = CASE
371 WHEN status = 'queued' THEN 'cancelled'::workflow_job_status
372 ELSE status
373 END,
374 conclusion = CASE
375 WHEN status = 'queued' THEN 'cancelled'::check_conclusion
376 ELSE conclusion
377 END,
378 started_at = CASE
379 WHEN status = 'queued' THEN COALESCE(started_at, now())
380 ELSE started_at
381 END,
382 completed_at = CASE
383 WHEN status = 'queued' THEN COALESCE(completed_at, now())
384 ELSE completed_at
385 END,
386 version = version + 1,
387 updated_at = now()
388 WHERE run_id = $1
389 AND status IN ('queued', 'running')
390 AND (status = 'queued' OR cancel_requested = false)
391 RETURNING id, run_id, job_index, job_key, job_name, runs_on,
392 runner_id, needs_jobs, if_expr, timeout_minutes, permissions,
393 job_env, status, conclusion, cancel_requested,
394 started_at, completed_at, version, created_at, updated_at
395 `
396
397 func (q *Queries) RequestWorkflowRunCancel(ctx context.Context, db DBTX, runID int64) ([]WorkflowJob, error) {
398 rows, err := db.Query(ctx, requestWorkflowRunCancel, runID)
399 if err != nil {
400 return nil, err
401 }
402 defer rows.Close()
403 items := []WorkflowJob{}
404 for rows.Next() {
405 var i WorkflowJob
406 if err := rows.Scan(
407 &i.ID,
408 &i.RunID,
409 &i.JobIndex,
410 &i.JobKey,
411 &i.JobName,
412 &i.RunsOn,
413 &i.RunnerID,
414 &i.NeedsJobs,
415 &i.IfExpr,
416 &i.TimeoutMinutes,
417 &i.Permissions,
418 &i.JobEnv,
419 &i.Status,
420 &i.Conclusion,
421 &i.CancelRequested,
422 &i.StartedAt,
423 &i.CompletedAt,
424 &i.Version,
425 &i.CreatedAt,
426 &i.UpdatedAt,
427 ); err != nil {
428 return nil, err
429 }
430 items = append(items, i)
431 }
432 if err := rows.Err(); err != nil {
433 return nil, err
434 }
435 return items, nil
436 }
437
438 const updateWorkflowJobStatus = `-- name: UpdateWorkflowJobStatus :one
439 UPDATE workflow_jobs
440 SET status = $2,
441 conclusion = $3::check_conclusion,
442 started_at = $4::timestamptz,
443 completed_at = $5::timestamptz,
444 version = version + 1,
445 updated_at = now()
446 WHERE id = $1
447 RETURNING id, run_id, job_index, job_key, job_name, runs_on,
448 runner_id, needs_jobs, if_expr, timeout_minutes, permissions,
449 job_env, status, conclusion, cancel_requested,
450 started_at, completed_at, version, created_at, updated_at
451 `
452
453 type UpdateWorkflowJobStatusParams struct {
454 ID int64
455 Status WorkflowJobStatus
456 Conclusion NullCheckConclusion
457 StartedAt pgtype.Timestamptz
458 CompletedAt pgtype.Timestamptz
459 }
460
461 func (q *Queries) UpdateWorkflowJobStatus(ctx context.Context, db DBTX, arg UpdateWorkflowJobStatusParams) (WorkflowJob, error) {
462 row := db.QueryRow(ctx, updateWorkflowJobStatus,
463 arg.ID,
464 arg.Status,
465 arg.Conclusion,
466 arg.StartedAt,
467 arg.CompletedAt,
468 )
469 var i WorkflowJob
470 err := row.Scan(
471 &i.ID,
472 &i.RunID,
473 &i.JobIndex,
474 &i.JobKey,
475 &i.JobName,
476 &i.RunsOn,
477 &i.RunnerID,
478 &i.NeedsJobs,
479 &i.IfExpr,
480 &i.TimeoutMinutes,
481 &i.Permissions,
482 &i.JobEnv,
483 &i.Status,
484 &i.Conclusion,
485 &i.CancelRequested,
486 &i.StartedAt,
487 &i.CompletedAt,
488 &i.Version,
489 &i.CreatedAt,
490 &i.UpdatedAt,
491 )
492 return i, err
493 }
494