Skip to content

Commit cef0e44

Browse files
authored
Added CI/CD for code interpreter template (#116)
1 parent c87f122 commit cef0e44

File tree

9 files changed

+159
-22
lines changed

9 files changed

+159
-22
lines changed
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
name: Build Template
2+
3+
on:
4+
workflow_call:
5+
secrets:
6+
E2B_TESTS_ACCESS_TOKEN:
7+
required: true
8+
inputs:
9+
E2B_DOMAIN:
10+
required: false
11+
type: string
12+
outputs:
13+
template_id:
14+
description: "The ID of the built template"
15+
value: ${{ jobs.build.outputs.template_id }}
16+
17+
permissions:
18+
contents: read
19+
20+
jobs:
21+
build:
22+
name: Build E2B Template
23+
runs-on: ubuntu-latest
24+
outputs:
25+
template_id: ${{ steps.build-template.outputs.template_id }}
26+
steps:
27+
- name: Checkout repository
28+
uses: actions/checkout@v4
29+
30+
- name: Set package version
31+
working-directory: ./template
32+
run: |
33+
VERSION=$(cat ../chart_data_extractor/pyproject.toml | grep version | cut -d '"' -f 2)
34+
echo "Version: $VERSION"
35+
sed -i "s/e2b_charts/e2b_charts==${VERSION}/g" requirements.txt
36+
37+
- name: Install E2B CLI
38+
run: npm install -g @e2b/cli
39+
40+
- name: Build E2B template
41+
id: build-template
42+
run: |
43+
rm -f e2b.toml
44+
e2b template build --memory-mb 1024 -c "/root/.jupyter/start-up.sh" -d "Dockerfile"
45+
TEMPLATE_ID=$(grep "template_id" e2b.toml | cut -d '"' -f 2)
46+
echo "Captured Template ID: $TEMPLATE_ID"
47+
echo "template_id=$TEMPLATE_ID" >> $GITHUB_OUTPUT
48+
working-directory: ./template
49+
env:
50+
E2B_ACCESS_TOKEN: ${{ secrets.E2B_TESTS_ACCESS_TOKEN }}
51+
E2B_DOMAIN: ${{ inputs.E2B_DOMAIN }}
52+
53+
- name: Output template ID
54+
run: |
55+
echo "Template ID from step output: ${{ steps.build-template.outputs.template_id }}"

.github/workflows/charts_tests.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ jobs:
1515
runs-on: ubuntu-22.04
1616
steps:
1717
- name: Checkout repository
18-
uses: actions/checkout@v3
18+
uses: actions/checkout@v4
1919

2020
- name: Set up Python
2121
uses: actions/setup-python@v4
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
name: Cleanup Build Template
2+
3+
on:
4+
workflow_call:
5+
secrets:
6+
E2B_TESTS_ACCESS_TOKEN:
7+
required: true
8+
inputs:
9+
E2B_DOMAIN:
10+
required: false
11+
type: string
12+
E2B_TESTS_TEMPLATE:
13+
required: true
14+
type: string
15+
16+
permissions:
17+
contents: read
18+
19+
jobs:
20+
cleanup:
21+
name: Cleanup Build Template
22+
runs-on: ubuntu-latest
23+
steps:
24+
- name: Install E2B CLI
25+
run: npm install -g @e2b/cli
26+
27+
- name: Cleanup E2B template
28+
id: cleanup-template
29+
run: |
30+
e2b template delete -y "${{ inputs.E2B_TESTS_TEMPLATE }}"
31+
env:
32+
E2B_ACCESS_TOKEN: ${{ secrets.E2B_TESTS_ACCESS_TOKEN }}
33+
E2B_DOMAIN: ${{ inputs.E2B_DOMAIN }}

.github/workflows/js_tests.yml

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,13 @@ on:
55
secrets:
66
E2B_API_KEY:
77
required: true
8+
inputs:
9+
E2B_DOMAIN:
10+
required: false
11+
type: string
12+
E2B_TESTS_TEMPLATE:
13+
required: false
14+
type: string
815

916
permissions:
1017
contents: read
@@ -18,7 +25,7 @@ jobs:
1825
runs-on: ubuntu-22.04
1926
steps:
2027
- name: Checkout repository
21-
uses: actions/checkout@v3
28+
uses: actions/checkout@v4
2229

2330
- name: Install pnpm
2431
uses: pnpm/action-setup@v3
@@ -49,16 +56,20 @@ jobs:
4956
run: pnpm test
5057
env:
5158
E2B_API_KEY: ${{ secrets.E2B_API_KEY }}
59+
E2B_DOMAIN: ${{ vars.E2B_DOMAIN }}
60+
E2B_TESTS_TEMPLATE: ${{ inputs.E2B_TESTS_TEMPLATE }}
5261

5362
- name: Install Bun
5463
uses: oven-sh/setup-bun@v2
5564
with:
56-
version: 1.1.x
65+
bun-version: 1.2.15
5766

5867
- name: Run Bun tests
5968
run: pnpm test:bun
6069
env:
6170
E2B_API_KEY: ${{ secrets.E2B_API_KEY }}
71+
E2B_DOMAIN: ${{ vars.E2B_DOMAIN }}
72+
E2B_TESTS_TEMPLATE: ${{ inputs.E2B_TESTS_TEMPLATE }}
6273

6374
- name: Install Deno
6475
uses: denoland/setup-deno@v1
@@ -69,3 +80,5 @@ jobs:
6980
run: pnpm test:deno
7081
env:
7182
E2B_API_KEY: ${{ secrets.E2B_API_KEY }}
83+
E2B_DOMAIN: ${{ vars.E2B_DOMAIN }}
84+
E2B_TESTS_TEMPLATE: ${{ inputs.E2B_TESTS_TEMPLATE }}

.github/workflows/pull_request.yml

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,36 @@ on:
1414
- main
1515

1616
jobs:
17+
build-template:
18+
uses: ./.github/workflows/build_test_template.yml
19+
secrets:
20+
E2B_TESTS_ACCESS_TOKEN: ${{ secrets.E2B_TESTS_ACCESS_TOKEN }}
21+
with:
22+
E2B_DOMAIN: ${{ vars.E2B_DOMAIN }}
1723
js-sdk:
1824
uses: ./.github/workflows/js_tests.yml
25+
needs: build-template
1926
secrets:
2027
E2B_API_KEY: ${{ secrets.E2B_API_KEY }}
28+
with:
29+
E2B_DOMAIN: ${{ vars.E2B_DOMAIN }}
30+
E2B_TESTS_TEMPLATE: ${{ needs.build-template.outputs.template_id }}
2131
python-sdk:
2232
uses: ./.github/workflows/python_tests.yml
33+
needs: build-template
2334
secrets:
2435
E2B_API_KEY: ${{ secrets.E2B_API_KEY }}
36+
with:
37+
E2B_DOMAIN: ${{ vars.E2B_DOMAIN }}
38+
E2B_TESTS_TEMPLATE: ${{ needs.build-template.outputs.template_id }}
39+
cleanup-build-template:
40+
uses: ./.github/workflows/cleanup_build_template.yml
41+
needs: [build-template, js-sdk, python-sdk]
42+
if: always() && !contains(needs.build-template.result, 'failure') && !contains(needs.build-template.result, 'cancelled')
43+
secrets:
44+
E2B_TESTS_ACCESS_TOKEN: ${{ secrets.E2B_TESTS_ACCESS_TOKEN }}
45+
with:
46+
E2B_DOMAIN: ${{ vars.E2B_DOMAIN }}
47+
E2B_TESTS_TEMPLATE: ${{ needs.build-template.outputs.template_id }}
2548
charts-tests:
2649
uses: ./.github/workflows/charts_tests.yml

.github/workflows/python_tests.yml

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,13 @@ on:
55
secrets:
66
E2B_API_KEY:
77
required: true
8+
inputs:
9+
E2B_DOMAIN:
10+
required: false
11+
type: string
12+
E2B_TESTS_TEMPLATE:
13+
required: false
14+
type: string
815

916
permissions:
1017
contents: read
@@ -18,7 +25,7 @@ jobs:
1825
runs-on: ubuntu-22.04
1926
steps:
2027
- name: Checkout repository
21-
uses: actions/checkout@v3
28+
uses: actions/checkout@v4
2229

2330
- name: Set up Python
2431
uses: actions/setup-python@v4
@@ -43,3 +50,5 @@ jobs:
4350
run: poetry run pytest --verbose -x
4451
env:
4552
E2B_API_KEY: ${{ secrets.E2B_API_KEY }}
53+
E2B_DOMAIN: ${{ inputs.E2B_DOMAIN }}
54+
E2B_TESTS_TEMPLATE: ${{ inputs.E2B_TESTS_TEMPLATE }}

.github/workflows/release.yml

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ jobs:
1818
release: ${{ steps.version.outputs.release }}
1919
steps:
2020
- name: Checkout Repo
21-
uses: actions/checkout@v3
21+
uses: actions/checkout@v4
2222

2323
- name: Install pnpm
2424
uses: pnpm/action-setup@v3
@@ -60,7 +60,7 @@ jobs:
6060
template: ${{ steps.template.outputs.release }}
6161
steps:
6262
- name: Checkout Repo
63-
uses: actions/checkout@v3
63+
uses: actions/checkout@v4
6464

6565
- name: Install pnpm
6666
uses: pnpm/action-setup@v3
@@ -117,7 +117,7 @@ jobs:
117117
version: ${{ steps.output_version.outputs.version }}
118118
steps:
119119
- name: Checkout Repo
120-
uses: actions/checkout@v3
120+
uses: actions/checkout@v4
121121

122122
- name: Install pnpm
123123
uses: pnpm/action-setup@v3
@@ -177,9 +177,7 @@ jobs:
177177
(needs.changes.outputs.template == 'true' || needs.changes.outputs.charts == 'true')
178178
steps:
179179
- name: Checkout repository
180-
uses: actions/checkout@v3
181-
with:
182-
fetch-depth: 0
180+
uses: actions/checkout@v4
183181

184182
- name: Set up Docker Buildx
185183
uses: docker/setup-buildx-action@v3
@@ -220,9 +218,7 @@ jobs:
220218
(needs.changes.outputs.template == 'true' || needs.changes.outputs.charts == 'true')
221219
steps:
222220
- name: Checkout repository
223-
uses: actions/checkout@v3
224-
with:
225-
fetch-depth: 0
221+
uses: actions/checkout@v4
226222
- name: Install E2B CLI
227223
run: npm install -g @e2b/cli
228224

@@ -268,9 +264,8 @@ jobs:
268264
private-key: ${{ secrets.VERSION_BUMPER_SECRET }}
269265

270266
- name: Checkout Repo
271-
uses: actions/checkout@v3
267+
uses: actions/checkout@v4
272268
with:
273-
fetch-depth: 0
274269
token: ${{ steps.app-token.outputs.token }}
275270

276271

js/tests/setup.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,18 @@ import { test as base } from 'vitest'
33

44
const timeoutMs = 60_000
55

6+
const template = process.env.E2B_TESTS_TEMPLATE || 'code-interpreter-v1'
7+
68
interface SandboxFixture {
79
sandbox: Sandbox
810
}
911

1012
export const sandboxTest = base.extend<SandboxFixture>({
1113
sandbox: [
1214
async ({}, use) => {
13-
const sandbox = await Sandbox.create({ timeoutMs })
15+
const sandbox = await Sandbox.create(template, {
16+
timeoutMs,
17+
})
1418
try {
1519
await use(sandbox)
1620
} finally {

python/tests/conftest.py

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,13 @@
1111

1212

1313
@pytest.fixture()
14-
def sandbox(debug):
15-
sandbox = Sandbox(timeout=timeout)
14+
def template():
15+
return os.getenv("E2B_TESTS_TEMPLATE", "code-interpreter-v1")
16+
17+
18+
@pytest.fixture()
19+
def sandbox(template, debug):
20+
sandbox = Sandbox(template, timeout=timeout)
1621

1722
try:
1823
yield sandbox
@@ -27,14 +32,14 @@ def sandbox(debug):
2732

2833

2934
@pytest_asyncio.fixture
30-
async def async_sandbox(debug):
31-
sandbox = await AsyncSandbox.create(timeout=timeout)
35+
async def async_sandbox(template, debug):
36+
async_sandbox = await AsyncSandbox.create(template, timeout=timeout)
3237

3338
try:
34-
yield sandbox
39+
yield async_sandbox
3540
finally:
3641
try:
37-
await sandbox.kill()
42+
await async_sandbox.kill()
3843
except:
3944
if not debug:
4045
warning(

0 commit comments

Comments
 (0)