-
Notifications
You must be signed in to change notification settings - Fork 250
/
0023.yml
293 lines (290 loc) · 10.4 KB
/
0023.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
version: 23
migrationScript: 0023-migration.sql
downgradeScript: 0023-downgrade.sql
methods:
taskcluster_github_builds_entities_load:
description: See taskcluster-lib-entities
mode: read
serviceName: github
args: partition_key text, row_key text
returns: table (partition_key_out text, row_key_out text, value jsonb, version integer, etag uuid)
body: |-
begin
return query
select
taskcluster_github_builds_entities_load.partition_key,
'taskGroupId' as row_key,
jsonb_build_object(
'PartitionKey', taskcluster_github_builds_entities_load.partition_key,
'RowKey', 'taskGroupId',
'organization', organization,
'repository', repository,
'sha', sha,
'taskGroupId', task_group_id,
'state', state,
'created', created,
'updated', updated,
'installationId', installation_id,
'eventType', event_type,
'eventId', event_id) as value,
1 as version,
github_builds.etag as etag
from github_builds
where
github_builds.task_group_id = decode_string_key(taskcluster_github_builds_entities_load.partition_key);
end
taskcluster_github_builds_entities_create:
description: See taskcluster-lib-entities
serviceName: github
mode: write
args: pk text, rk text, properties jsonb, overwrite boolean, version integer
returns: uuid
body: |-
declare
new_row github_builds%ROWTYPE;
begin
select
(properties ->> 'organization')::text as organization,
(properties ->> 'repository')::text as repository,
(properties ->> 'sha')::text as sha,
(properties ->> 'taskGroupId')::text as task_group_id,
(properties ->> 'state')::text as state,
(properties ->> 'created')::timestamptz as created,
(properties ->> 'updated')::timestamptz as updated,
(properties ->> 'installationId')::integer as installation_id,
(properties ->> 'eventType')::text as event_type,
(properties ->> 'eventId')::text as event_id,
public.gen_random_uuid() as etag
into new_row;
if overwrite then
raise exception 'overwrite not implemented';
else
execute 'insert into github_builds select $1.*' using new_row;
end if;
return new_row.etag;
end
taskcluster_github_builds_entities_scan:
description: See taskcluster-lib-entities
mode: read
serviceName: github
args: pk text, rk text, condition text, size integer, page integer
returns: table (partition_key text, row_key text, value jsonb, version integer, etag uuid)
body: |-
declare
begin
if not condition is null then
raise exception 'condition not supported';
end if;
return query
select
encode_string_key(task_group_id),
'taskGroupId' as row_key,
jsonb_build_object(
'PartitionKey', encode_string_key(task_group_id),
'RowKey', 'taskGroupId',
'organization', organization,
'repository', repository,
'sha', sha,
'taskGroupId', task_group_id,
'state', state,
'created', created,
'updated', updated,
'installationId', installation_id,
'eventType', event_type,
'eventId', event_id) as value,
1 as version,
github_builds.etag as etag
from github_builds
where
partition_key is null or
task_group_id = decode_string_key(partition_key)
order by task_group_id
limit case
when (size is not null and size > 0) then size + 1
else null
end
offset case
when (page is not null and page > 0) then page
else 0
end;
end
taskcluster_github_builds_entities_remove:
serviceName: github
description: See taskcluster-lib-entities
mode: write
args: partition_key text, row_key text
returns: table (etag uuid)
body: |-
begin
delete
from github_builds
where
github_builds.task_group_id = decode_string_key(partition_key);
-- tc-gh does not care if the row existed
return query select gen_random_uuid() as etag;
end
taskcluster_github_builds_entities_modify:
serviceName: github
description: See taskcluster-lib-entities
mode: write
args: partition_key text, row_key text, properties jsonb, version integer, old_etag uuid
returns: table (etag uuid)
body: |-
declare
new_row github_builds%ROWTYPE;
begin
select
(properties ->> 'organization')::text as organization,
(properties ->> 'repository')::text as repository,
(properties ->> 'sha')::text as sha,
(properties ->> 'taskGroupId')::text as task_group_id,
(properties ->> 'state')::text as state,
(properties ->> 'created')::timestamptz as created,
(properties ->> 'updated')::timestamptz as updated,
(properties ->> 'installationId')::integer as installation_id,
(properties ->> 'eventType')::text as event_type,
(properties ->> 'eventId')::text as event_id,
public.gen_random_uuid() as etag
into new_row;
update github_builds
set (
organization,
repository,
sha,
task_group_id,
state,
created,
updated,
installation_id,
event_type,
event_id,
etag
) = (
new_row.organization,
new_row.repository,
new_row.sha,
new_row.task_group_id,
new_row.state,
new_row.created,
new_row.updated,
new_row.installation_id,
new_row.event_type,
new_row.event_id,
new_row.etag
)
where
github_builds.task_group_id = decode_string_key(taskcluster_github_builds_entities_modify.partition_key) and
github_builds.etag = taskcluster_github_builds_entities_modify.old_etag;
if found then
return query select new_row.etag;
return;
end if;
perform github_builds.etag from github_builds
where github_builds.task_group_id = decode_string_key(taskcluster_github_builds_entities_modify.partition_key);
if found then
raise exception 'unsuccessful update' using errcode = 'P0004';
else
raise exception 'no such row' using errcode = 'P0002';
end if;
end
create_github_build:
description: |-
Create a new github build. Raises UNIQUE_VIOLATION if the pool already exists.
mode: write
serviceName: github
args: organization_in text, repository_in text, sha_in text, task_group_id_in text, state_in text, created_in timestamptz, updated_in timestamptz, installation_id_in integer, event_type_in text, event_id_in text
returns: void
body: |-
begin
insert
into github_builds (organization, repository, sha, task_group_id, state, created, updated, installation_id, event_type, event_id)
values (organization_in, repository_in, sha_in, task_group_id_in, state_in, created_in, updated_in, installation_id_in, event_type_in, event_id_in);
end
get_github_build:
description: |-
Get a github build. The returned table will have one or zero rows.
mode: read
serviceName: github
args: task_group_id_in text
returns: table (organization text, repository text, sha text, task_group_id text, state text, created timestamptz, updated timestamptz, installation_id integer, event_type text, event_id text, etag uuid)
body: |-
begin
return query
select
github_builds.organization,
github_builds.repository,
github_builds.sha,
github_builds.task_group_id,
github_builds.state,
github_builds.created,
github_builds.updated,
github_builds.installation_id,
github_builds.event_type,
github_builds.event_id,
github_builds.etag
from github_builds
where github_builds.task_group_id = task_group_id_in;
end
get_github_builds:
description: |-
Get github builds.
mode: read
serviceName: github
args: page_size_in integer, page_offset_in integer, organization_in text, repository_in text, sha_in text
returns: table (organization text, repository text, sha text, task_group_id text, state text, created timestamptz, updated timestamptz, installation_id integer, event_type text, event_id text, etag uuid)
body: |-
begin
return query
select
github_builds.organization,
github_builds.repository,
github_builds.sha,
github_builds.task_group_id,
github_builds.state,
github_builds.created,
github_builds.updated,
github_builds.installation_id,
github_builds.event_type,
github_builds.event_id,
github_builds.etag
from github_builds
where
(organization_in is null or github_builds.organization = organization_in) and
(repository_in is null or github_builds.repository = repository_in) and
(sha_in is null or github_builds.sha = sha_in)
order by github_builds.updated asc
limit get_page_limit(page_size_in)
offset get_page_offset(page_offset_in);
end
delete_github_build:
description: |-
Delete a github build.
mode: write
serviceName: github
args: task_group_id_in text
returns: void
body: |-
begin
delete
from github_builds
where github_builds.task_group_id = task_group_id_in;
end
set_github_build_state:
description: |-
Only update the state of a build and update the `updated` timestamp
mode: write
serviceName: github
args: task_group_id_in text, state_in text
returns: void
body: |-
begin
update github_builds
set (state, updated, etag) = (
state_in,
now(),
public.gen_random_uuid()
) where github_builds.task_group_id = task_group_id_in;
if not found then
raise exception 'no such row' using errcode = 'P0002';
end if;
end