Skip to content

Commit 9b21e1b

Browse files
author
Arief Rahmansyah
authored
Ensembler Image Building API (caraml-dev#376)
* [wip] list images and build image api * Fix existing api-test * Update open api spec * Generate SDK client * Fix lint * Update specs/ensembler-images.yaml * Implement image building API in SDK * Pin pytest version * Revert turing/version.py * Update api test * Fix lint api * Fix lint api
1 parent b4bc519 commit 9b21e1b

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

56 files changed

+4313
-241
lines changed

.github/workflows/sdk.yaml

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ jobs:
2626
strategy:
2727
matrix:
2828
python-version: ["3.8", "3.9", "3.10"]
29-
29+
3030
defaults:
3131
run:
3232
working-directory: ./sdk
@@ -53,6 +53,12 @@ jobs:
5353
- name: Run unit tests
5454
run: make test
5555

56+
- uses: codecov/codecov-action@v4
57+
with:
58+
flags: sdk-test-${{ matrix.python-version }}
59+
name: sdk-test-${{ matrix.python-version }}
60+
token: ${{ secrets.CODECOV_TOKEN }}
61+
5662
release-rules:
5763
runs-on: ubuntu-latest
5864
outputs:

.github/workflows/turing.yaml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -276,6 +276,13 @@ jobs:
276276
working-directory: api
277277
args: --timeout 3m --verbose
278278

279+
- uses: codecov/codecov-action@v4
280+
with:
281+
flags: api-test
282+
name: api-test
283+
token: ${{ secrets.CODECOV_TOKEN }}
284+
working-directory: api
285+
279286
test-engines-router:
280287
runs-on: ubuntu-latest
281288
defaults:

api/api/openapi-sdk.yaml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,10 @@ paths:
1616
"/projects/{project_id}/ensemblers/{ensembler_id}":
1717
$ref: "specs/ensemblers.yaml#/paths/~1projects~1{project_id}~1ensemblers~1{ensembler_id}"
1818

19+
# E N S E M B L E R I M A G E S
20+
"/projects/{project_id}/ensemblers/{ensembler_id}/images":
21+
$ref: "specs/ensembler-images.yaml#/paths/~1projects~1{project_id}~1ensemblers~1{ensembler_id}~1images"
22+
1923
# J O B S
2024
"/projects/{project_id}/jobs":
2125
$ref: "specs/jobs.yaml#/paths/~1projects~1{project_id}~1jobs"
@@ -40,4 +44,4 @@ paths:
4044
"/projects/{project_id}/routers/{router_id}/events":
4145
$ref: "specs/routers.yaml#/paths/~1projects~1{project_id}~1routers~1{router_id}~1events"
4246
"/projects/{project_id}/router-versions":
43-
$ref: "specs/routers.yaml#/paths/~1projects~1{project_id}~1router-versions"
47+
$ref: "specs/routers.yaml#/paths/~1projects~1{project_id}~1router-versions"

api/api/openapi.bundle.yaml

Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,77 @@ paths:
183183
summary: Updates existing Ensembler with the data provided in the payload
184184
tags:
185185
- Ensembler
186+
/projects/{project_id}/ensemblers/{ensembler_id}/images:
187+
get:
188+
operationId: ListEnsemblerImages
189+
parameters:
190+
- in: path
191+
name: project_id
192+
required: true
193+
schema:
194+
format: int32
195+
type: integer
196+
- in: path
197+
name: ensembler_id
198+
required: true
199+
schema:
200+
format: int32
201+
type: integer
202+
- in: query
203+
name: runner_type
204+
required: false
205+
schema:
206+
$ref: '#/components/schemas/EnsemblerImageRunnerType'
207+
responses:
208+
"200":
209+
content:
210+
application/json:
211+
schema:
212+
$ref: '#/components/schemas/EnsemblerImages'
213+
description: A JSON object
214+
"400":
215+
description: Invalid request body
216+
"404":
217+
description: Ensembler not found
218+
"500":
219+
description: Unable to list ensembler images
220+
summary: Returns a list of ensembler images that belong to the ensembler
221+
tags:
222+
- Ensembler Images
223+
put:
224+
operationId: CreateEnsemblerImage
225+
parameters:
226+
- in: path
227+
name: project_id
228+
required: true
229+
schema:
230+
format: int32
231+
type: integer
232+
- in: path
233+
name: ensembler_id
234+
required: true
235+
schema:
236+
format: int32
237+
type: integer
238+
requestBody:
239+
content:
240+
application/json:
241+
schema:
242+
$ref: '#/components/schemas/BuildEnsemblerImageRequest'
243+
description: A JSON object containing information about the ensembler
244+
required: true
245+
responses:
246+
"202":
247+
description: Accepted
248+
"400":
249+
description: Invalid request body
250+
"404":
251+
description: Ensembler not found
252+
"500":
253+
description: Unable to build ensembler image
254+
summary: Creates a new ensembler image
255+
tags:
256+
- Ensembler Images
186257
/projects/{project_id}/jobs:
187258
get:
188259
operationId: ListEnsemblingJobs
@@ -1441,6 +1512,64 @@ components:
14411512
Id:
14421513
format: int32
14431514
type: integer
1515+
EnsemblerImages:
1516+
items:
1517+
$ref: '#/components/schemas/EnsemblerImage'
1518+
type: array
1519+
EnsemblerImage:
1520+
example:
1521+
image_ref: image_ref
1522+
project_id: 0
1523+
image_building_job_status:
1524+
message: message
1525+
exists: true
1526+
ensembler_id: 6
1527+
properties:
1528+
project_id:
1529+
format: int32
1530+
type: integer
1531+
ensembler_id:
1532+
format: int32
1533+
type: integer
1534+
runner_type:
1535+
$ref: '#/components/schemas/EnsemblerImageRunnerType'
1536+
image_ref:
1537+
type: string
1538+
exists:
1539+
type: boolean
1540+
image_building_job_status:
1541+
$ref: '#/components/schemas/ImageBuildingJobStatus'
1542+
type: object
1543+
EnsemblerImageRunnerType:
1544+
enum:
1545+
- job
1546+
- service
1547+
nullable: true
1548+
type: string
1549+
ImageBuildingJobStatus:
1550+
example:
1551+
message: message
1552+
properties:
1553+
state:
1554+
$ref: '#/components/schemas/ImageBuildingJobState'
1555+
message:
1556+
type: string
1557+
type: object
1558+
ImageBuildingJobState:
1559+
enum:
1560+
- active
1561+
- succeeded
1562+
- failed
1563+
- unknown
1564+
type: string
1565+
BuildEnsemblerImageRequest:
1566+
example: {}
1567+
properties:
1568+
runner_type:
1569+
$ref: '#/components/schemas/EnsemblerImageRunnerType'
1570+
required:
1571+
- runner_type
1572+
type: object
14441573
EnsemblingJobPaginatedResults:
14451574
allOf:
14461575
- $ref: '#/components/schemas/EnsemblersPaginatedResults_allOf'

api/api/openapi.yaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,10 @@ paths:
2020
"/projects/{project_id}/ensemblers/{ensembler_id}":
2121
$ref: "specs/ensemblers.yaml#/paths/~1projects~1{project_id}~1ensemblers~1{ensembler_id}"
2222

23+
# E N S E M B L E R I M A G E S
24+
"/projects/{project_id}/ensemblers/{ensembler_id}/images":
25+
$ref: "specs/ensembler-images.yaml#/paths/~1projects~1{project_id}~1ensemblers~1{ensembler_id}~1images"
26+
2327
# J O B S
2428
"/projects/{project_id}/jobs":
2529
$ref: "specs/jobs.yaml#/paths/~1projects~1{project_id}~1jobs"
Lines changed: 136 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,136 @@
1+
openapi: 3.0.3
2+
info:
3+
title: Endpoints and schemas of Turing ensembler images
4+
version: 0.0.1
5+
6+
.tags: &tags
7+
- "Ensembler Images"
8+
9+
.id: &id
10+
type: "integer"
11+
format: "int32"
12+
13+
paths:
14+
"/projects/{project_id}/ensemblers/{ensembler_id}/images":
15+
get:
16+
tags: *tags
17+
operationId: "ListEnsemblerImages"
18+
summary: Returns a list of ensembler images that belong to the ensembler
19+
parameters:
20+
- in: path
21+
name: project_id
22+
schema:
23+
<<: *id
24+
required: true
25+
- in: path
26+
name: ensembler_id
27+
schema:
28+
<<: *id
29+
required: true
30+
- in: query
31+
name: runner_type
32+
schema:
33+
"$ref": "#/components/schemas/EnsemblerImageRunnerType"
34+
required: false
35+
responses:
36+
"200":
37+
description: A JSON object
38+
content:
39+
application/json:
40+
schema:
41+
$ref: "#/components/schemas/EnsemblerImages"
42+
"400":
43+
description: Invalid request body
44+
"404":
45+
description: Ensembler not found
46+
"500":
47+
description: Unable to list ensembler images
48+
put:
49+
tags: *tags
50+
operationId: "CreateEnsemblerImage"
51+
summary: Creates a new ensembler image
52+
parameters:
53+
- in: path
54+
name: project_id
55+
schema:
56+
<<: *id
57+
required: true
58+
- in: path
59+
name: ensembler_id
60+
schema:
61+
<<: *id
62+
required: true
63+
requestBody:
64+
description: A JSON object containing information about the ensembler
65+
required: true
66+
content:
67+
application/json:
68+
schema:
69+
$ref: "#/components/schemas/BuildEnsemblerImageRequest"
70+
responses:
71+
"202":
72+
description: Accepted
73+
"400":
74+
description: Invalid request body
75+
"404":
76+
description: Ensembler not found
77+
"500":
78+
description: Unable to build ensembler image
79+
80+
components:
81+
schemas:
82+
EnsemblerId:
83+
$ref: "./common.yaml#/components/schemas/IdObject"
84+
85+
EnsemblerImages:
86+
type: array
87+
items:
88+
$ref: "#/components/schemas/EnsemblerImage"
89+
90+
EnsemblerImage:
91+
type: object
92+
properties:
93+
project_id:
94+
type: integer
95+
format: int32
96+
ensembler_id:
97+
type: integer
98+
format: int32
99+
runner_type:
100+
"$ref": "#/components/schemas/EnsemblerImageRunnerType"
101+
image_ref:
102+
type: string
103+
exists:
104+
type: boolean
105+
image_building_job_status:
106+
"$ref": "#/components/schemas/ImageBuildingJobStatus"
107+
108+
EnsemblerImageRunnerType:
109+
type: string
110+
nullable: true
111+
enum:
112+
- job
113+
- service
114+
115+
ImageBuildingJobStatus:
116+
type: object
117+
properties:
118+
state:
119+
"$ref": "#/components/schemas/ImageBuildingJobState"
120+
message:
121+
type: string
122+
ImageBuildingJobState:
123+
type: string
124+
enum:
125+
- active
126+
- succeeded
127+
- failed
128+
- unknown
129+
130+
BuildEnsemblerImageRequest:
131+
type: object
132+
properties:
133+
runner_type:
134+
"$ref": "#/components/schemas/EnsemblerImageRunnerType"
135+
required:
136+
- runner_type

api/go.mod

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,7 @@ require (
137137
github.com/jackc/pgtype v1.12.0 // indirect
138138
github.com/jackc/pgx/v4 v4.17.2 // indirect
139139
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect
140+
github.com/jedib0t/go-pretty/v6 v6.5.3 // indirect
140141
github.com/jinzhu/inflection v1.0.0 // indirect
141142
github.com/jinzhu/now v1.1.5 // indirect
142143
github.com/josharian/intern v1.0.0 // indirect

api/go.sum

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -453,6 +453,8 @@ github.com/jackc/puddle v1.1.3/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dv
453453
github.com/jackc/puddle v1.3.0/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk=
454454
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A=
455455
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo=
456+
github.com/jedib0t/go-pretty/v6 v6.5.3 h1:GIXn6Er/anHTkVUoufs7ptEvxdD6KIhR7Axa2wYCPF0=
457+
github.com/jedib0t/go-pretty/v6 v6.5.3/go.mod h1:5LQIxa52oJ/DlDSLv0HEkWOFMDGoWkJb9ss5KqPpJBg=
456458
github.com/jessevdk/go-flags v1.5.0/go.mod h1:Fw0T6WPc1dYxT4mKEZRfG5kJhaTDP9pj1c2EWnYs/m4=
457459
github.com/jhump/protoreflect v1.6.0/go.mod h1:eaTn3RZAmMBcV0fifFvlm6VHNz3wSkYyXYWUh7ymB74=
458460
github.com/jhump/protoreflect v1.12.1-0.20220721211354-060cc04fc18b h1:izTof8BKh/nE1wrKOrloNA5q4odOarjf+Xpe+4qow98=

0 commit comments

Comments
 (0)