MySQL · 3954 bytes Raw Blame History
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