-
Notifications
You must be signed in to change notification settings - Fork 12
/
api-specification.yml
456 lines (428 loc) · 11.9 KB
/
api-specification.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
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
swagger: '2.0'
info:
description: |
Official documentation for BugZoo's RESTful API.
version: '1.0'
title: BugZoo - API Specification
contact:
name: Christopher Timperley
url: https://github.com/squaresLab/BugZoo
host: localhost
basePath: /bugzoo
tags:
- name: container
description: All operations related to containers
- name: bug
description: All operations related to bugs
- name: docker
description: All operations related to the underlying Docker installation
- name: configuration
description: All operations related to the server configuration
definitions:
Bug:
type: object
required:
- id
properties:
id:
type: string
description: A unique identifier for this bug.
example: 'manybugs:python:69223-69224'
Container:
type: object
required:
- id
properties:
id:
type: string
description: >-
A unique identifier for the container. If an ID was not provided by
the user upon the creation of the container, an ID will automatically
be generated instead.
ExecResponse:
type: object
required:
- code
- duration
- output
properties:
code:
type: number
format: int
description: >-
The exit code produced by the command.
duration:
type: number
format: float
description: >-
The number of seconds taken to execute the command.
output:
type: string
description: >-
The output produced by the command.
paths:
###############################################################################
# Configuration
###############################################################################
/status:
get:
summary: Status of the server.
description: >-
Produces a diagnostic summary of the health of the server.
tags:
- configuration
produces:
- application/json
responses:
204:
description: Server is running.
###############################################################################
# Docker
###############################################################################
/docker/images/${name}:
delete:
summary: Destroys a given Docker image.
description: Destroys a given Docker image.
parameters:
- in: path
name: name
type: string
description: The name of the Docker image.
required: true
tags:
- docker
responses:
204:
description: Docker image was successfully destroyed.
404:
description: Docker image was not found or has already been destroyed.
###############################################################################
# Bugs
###############################################################################
/bugs:
get:
summary: List of registered bugs.
description: >-
Produces a list of all the bugs registered with this server given by
their unique identifiers.
tags:
- bug
produces:
- application/json
responses:
200:
description: OK
schema:
type: array
items:
type: string
description: The unique identifier of the bug.
example: 'manybugs:python:69223-69224'
/bugs/${id}:
get:
summary: Bug information.
description: Produces a detailed description of a given bug.
tags:
- bug
produces:
- application/json
parameters:
- in: path
name: id
type: string
description: The unique identifier of the bug.
required: true
responses:
200:
description: OK
schema:
$ref: '#/definitions/Bug'
404:
description: Bug not found.
put:
summary: Registers a bug with the server.
description: Registers a given bug with this server.
tags:
- bug
consumes:
- application/json
parameters:
- in: path
name: id
type: string
description: The unique identifier of the bug.
required: true
- in: body
name: Parameters
required: true
schema:
$ref: '#/definitions/Bug'
responses:
204:
description: The bug was successfully registered.
400:
description: The bug description is invalid.
/bugs/${id}/build:
post:
summary: Builds the Docker image for a bug from its blueprint.
description: Builds the Docker image for a given bug.
tags:
- bug
produces:
- application/json
parameters:
- in: path
name: id
type: string
description: The unique identifier of the bug.
required: true
responses:
204:
description: Built bug.
200:
description: Bug already built.
404:
description: Bug not found.
/bugs/${id}/download:
post:
summary: Downloads the Docker image for a bug.
description: Downloads the Docker image for a bug from DockerHub.
tags:
- bug
produces:
- application/json
parameters:
- in: path
name: id
type: string
description: The unique identifier of the bug.
required: true
responses:
204:
description: Successfully downloaded Docker image.
200:
description: Docker image already installed.
404:
description: Bug not found.
###############################################################################
#
# Containers
#
###############################################################################
/containers:
get:
summary: List of running containers.
description: >-
Produces a list of the names of all of the containers that are
currently running on this server.
tags:
- container
produces:
- application/json
responses:
200:
description: OK
schema:
type: array
items:
$ref: '#/definitions/Container'
404:
description: Bug not found.
/containers/${id}:
get:
summary: Container information.
description: Produces a detailed description of a given container.
tags:
- container
produces:
- application/json
parameters:
- in: path
name: id
type: string
description: The unique identifier of the container.
required: true
responses:
200:
description: OK
schema:
$ref: '#/definitions/Container'
404:
description: Container not found.
patch:
summary: Patches source code inside container.
description: >-
Attempts to apply a given patch to the source code for the program
inside the container.
tags:
- container
consumes:
- text/plain
parameters:
- in: path
name: id
type: string
description: The unique identifier of the container.
required: true
- in: body
name: patch
type: string
required: true
description: >-
The patch that should be applied to the source code, given as a
unified diff.
responses:
204:
description: OK.
400:
description: Failed to apply patch.
delete:
summary: Destroy container.
description: Destroys a given container.
tags:
- container
produces:
- application/json
parameters:
- in: path
name: id
type: string
description: The unique identifier of the container.
required: true
responses:
204:
description: OK
404:
description: Container does not exist or was already destroyed.
/containers/${container-id}/test/${test-id}:
post:
summary: Executes a test inside a container.
description: >-
Executes a test case belonging to the program within a given container,
and returns the outcome of the execution.
tags:
- container
produces:
- application/json
parameters:
- in: path
name: container-id
type: string
description: The unique identifier of the container.
required: true
- in: path
name: test-id
type: string
description: The unique identifier of the test case.
required: true
responses:
200:
description: OK
schema:
type: object
404:
description: Container or test case not found.
/containers/${container-id}/compile:
post:
summary: Compiles program inside container.
description: >-
Attempts to compile the program inside a given container, and returns
a description of the outcome of the compilation process.
tags:
- container
produces:
- application/json
parameters:
- in: path
name: container-id
type: string
description: The unique identifier of the container.
required: true
responses:
200:
description: Compilation success.
211:
description: Compilation failure.
212:
description: Compilation timeout.
404:
description: Container not found.
/containers/${id}/persist/${image}:
post:
summary: Persists container to a Docker image.
description: >-
Persists the state of a container to a Docker image on the server.
tags:
- container
produces:
- application/json
parameters:
- in: path
name: id
type: string
description: The unique identifier of the container.
required: true
- in: path
name: image
type: string
required: true
description: >-
The name of the Docker image to which the state of the container
should be persisted.
responses:
204:
description: The container was persisted as a Docker image.
400:
description: >-
An error occurred whilst attempting to persist the container.
404:
description: Container not found.
409:
description: There already exists a Docker image with the given name.
/containers/${id}/exec:
post:
summary: Executes a command inside the container.
description: >-
Executes a given command inside the container.
tags:
- container
produces:
- application/json
parameters:
- in: path
name: id
type: string
description: The unique identifier of the container.
required: true
responses:
200:
description: OK.
schema:
$ref: '#/definitions/ExecResponse'
404:
description: Container not found.
/containers/${container-id}/alive:
get:
summary: Checks whether container is alive.
description: >-
Checks whether the underlying Docker container for a given BugZoo
container is alive.
tags:
- container
produces:
- application/json
parameters:
- in: path
name: container-id
type: string
description: The unique identifier of the container.
required: true
responses:
200:
description: OK
schema:
type: boolean
description: >-
A flag indicating whether or not the container is alive.
404:
description: Container not found.