| 1 | -- SPDX-License-Identifier: AGPL-3.0-or-later |
| 2 | |
| 3 | -- name: InsertWorkflowRunApproval :one |
| 4 | INSERT INTO workflow_run_approvals (run_id, requested_reason) |
| 5 | VALUES ($1, $2) |
| 6 | ON CONFLICT (run_id) DO UPDATE SET |
| 7 | requested_reason = EXCLUDED.requested_reason, |
| 8 | updated_at = now() |
| 9 | RETURNING run_id, requested_reason, requested_at, |
| 10 | approved_by_user_id, approved_at, |
| 11 | rejected_by_user_id, rejected_at, |
| 12 | created_at, updated_at; |
| 13 | |
| 14 | -- name: GetWorkflowRunApproval :one |
| 15 | SELECT run_id, requested_reason, requested_at, |
| 16 | approved_by_user_id, approved_at, |
| 17 | rejected_by_user_id, rejected_at, |
| 18 | created_at, updated_at |
| 19 | FROM workflow_run_approvals |
| 20 | WHERE run_id = $1; |
| 21 | |
| 22 | -- name: ApproveWorkflowRun :one |
| 23 | WITH run AS ( |
| 24 | UPDATE workflow_runs r |
| 25 | SET approved_by_user_id = $2, |
| 26 | version = version + 1, |
| 27 | updated_at = now() |
| 28 | WHERE r.id = $1 |
| 29 | AND r.need_approval = true |
| 30 | AND r.approved_by_user_id IS NULL |
| 31 | AND r.status = 'queued' |
| 32 | AND EXISTS ( |
| 33 | SELECT 1 |
| 34 | FROM workflow_run_approvals a |
| 35 | WHERE a.run_id = r.id |
| 36 | AND a.approved_at IS NULL |
| 37 | AND a.rejected_at IS NULL |
| 38 | ) |
| 39 | RETURNING r.id, r.repo_id, r.run_index, r.workflow_file, r.workflow_name, |
| 40 | r.head_sha, r.head_ref, r.event, r.event_payload, |
| 41 | r.actor_user_id, r.parent_run_id, r.concurrency_group, |
| 42 | r.status, r.conclusion, r.pinned, r.need_approval, r.approved_by_user_id, |
| 43 | r.started_at, r.completed_at, r.version, r.created_at, r.updated_at, r.trigger_event_id |
| 44 | ), approval AS ( |
| 45 | UPDATE workflow_run_approvals a |
| 46 | SET approved_by_user_id = $2, |
| 47 | approved_at = now(), |
| 48 | updated_at = now() |
| 49 | FROM run r |
| 50 | WHERE a.run_id = r.id |
| 51 | AND a.approved_at IS NULL |
| 52 | AND a.rejected_at IS NULL |
| 53 | RETURNING a.run_id |
| 54 | ) |
| 55 | SELECT r.id, r.repo_id, r.run_index, r.workflow_file, r.workflow_name, |
| 56 | r.head_sha, r.head_ref, r.event, r.event_payload, |
| 57 | r.actor_user_id, r.parent_run_id, r.concurrency_group, |
| 58 | r.status, r.conclusion, r.pinned, r.need_approval, r.approved_by_user_id, |
| 59 | r.started_at, r.completed_at, r.version, r.created_at, r.updated_at, r.trigger_event_id |
| 60 | FROM run r |
| 61 | JOIN approval a ON a.run_id = r.id; |
| 62 | |
| 63 | -- name: RejectWorkflowRunApproval :one |
| 64 | UPDATE workflow_run_approvals |
| 65 | SET rejected_by_user_id = $2, |
| 66 | rejected_at = now(), |
| 67 | updated_at = now() |
| 68 | WHERE run_id = $1 |
| 69 | AND approved_at IS NULL |
| 70 | AND rejected_at IS NULL |
| 71 | RETURNING run_id, requested_reason, requested_at, |
| 72 | approved_by_user_id, approved_at, |
| 73 | rejected_by_user_id, rejected_at, |
| 74 | created_at, updated_at; |
| 75 | |
| 76 | -- name: MarkWorkflowRunRejected :one |
| 77 | UPDATE workflow_runs |
| 78 | SET status = 'completed', |
| 79 | conclusion = 'action_required', |
| 80 | started_at = COALESCE(started_at, now()), |
| 81 | completed_at = COALESCE(completed_at, now()), |
| 82 | version = version + 1, |
| 83 | updated_at = now() |
| 84 | WHERE id = $1 |
| 85 | AND need_approval = true |
| 86 | AND approved_by_user_id IS NULL |
| 87 | AND status = 'queued' |
| 88 | RETURNING id, repo_id, run_index, workflow_file, workflow_name, |
| 89 | head_sha, head_ref, event, event_payload, |
| 90 | actor_user_id, parent_run_id, concurrency_group, |
| 91 | status, conclusion, pinned, need_approval, approved_by_user_id, |
| 92 | started_at, completed_at, version, created_at, updated_at, trigger_event_id; |
| 93 | |
| 94 | -- name: MarkWorkflowJobsRejected :many |
| 95 | UPDATE workflow_jobs |
| 96 | SET cancel_requested = true, |
| 97 | status = 'cancelled', |
| 98 | conclusion = 'action_required', |
| 99 | started_at = COALESCE(started_at, now()), |
| 100 | completed_at = COALESCE(completed_at, now()), |
| 101 | version = version + 1, |
| 102 | updated_at = now() |
| 103 | WHERE run_id = $1 |
| 104 | AND status = 'queued' |
| 105 | RETURNING id, run_id, job_index, job_key, job_name, runs_on, |
| 106 | runner_id, needs_jobs, if_expr, timeout_minutes, permissions, |
| 107 | job_env, status, conclusion, cancel_requested, |
| 108 | started_at, completed_at, version, created_at, updated_at; |
| 109 |