@@ -3,52 +3,70 @@ name: e2e
33on :
44 push :
55 branches : [main]
6+ paths :
7+ - " integrations/**"
8+ - " apps/dojo/**"
9+ - " middlewares/**"
10+ - " pnpm-lock.yaml"
11+ - " pnpm-workspace.yaml"
12+ - " .github/workflows/dojo-e2e.yml"
13+ - " sdks/python/**"
14+ - " sdks/typescript/**"
615 pull_request :
716 branches : [main]
17+ paths :
18+ - " apps/dojo/**"
19+ - " integrations/**"
20+ - " middlewares/**"
21+ - " pnpm-lock.yaml"
22+ - " pnpm-workspace.yaml"
23+ - " .github/workflows/dojo-e2e.yml"
24+ - " sdks/python/**"
25+ - " sdks/typescript/**"
826
927jobs :
10- e2e :
11- name : ${{ matrix.suite }}
28+ dojo :
29+ name : dojo / ${{ matrix.suite }}
1230 runs-on : depot-ubuntu-24.04
1331 strategy :
1432 fail-fast : false
1533 matrix :
1634 include :
1735 - suite : a2a-middleware
1836 test_path : tests/a2aMiddlewareTests
19- services : ["dojo","a2a-middleware"]
37+ services : ["dojo", "a2a-middleware"]
2038 wait_on : http://localhost:9999,tcp:localhost:8011,tcp:localhost:8012,tcp:localhost:8013,tcp:localhost:8014
2139 - suite : adk-middleware
2240 test_path : tests/adkMiddlewareTests
23- services : ["dojo","adk-middleware"]
41+ services : ["dojo", "adk-middleware"]
2442 wait_on : http://localhost:9999,tcp:localhost:8010
2543 - suite : agno
2644 test_path : tests/agnoTests
27- services : ["dojo","agno"]
45+ services : ["dojo", "agno"]
2846 wait_on : http://localhost:9999,tcp:localhost:8002
2947 - suite : crew-ai
3048 test_path : tests/crewAITests
31- services : ["dojo","crew-ai"]
49+ services : ["dojo", "crew-ai"]
3250 wait_on : http://localhost:9999,tcp:localhost:8003
3351 - suite : langgraph-python
3452 test_path : tests/langgraphPythonTests
35- services : ["dojo","langgraph-platform-python"]
53+ services : ["dojo", "langgraph-platform-python"]
3654 wait_on : http://localhost:9999,tcp:localhost:8005
3755 - suite : langgraph-typescript
3856 test_path : tests/langgraphTypescriptTests
39- services : ["dojo","langgraph-platform-typescript"]
57+ services : ["dojo", "langgraph-platform-typescript"]
4058 wait_on : http://localhost:9999,tcp:localhost:8006
4159 - suite : langgraph-fastapi
4260 test_path : tests/langgraphFastAPITests
43- services : ["dojo","langgraph-fastapi"]
61+ services : ["dojo", "langgraph-fastapi"]
4462 wait_on : http://localhost:9999,tcp:localhost:8004
4563 - suite : llama-index
4664 test_path : tests/llamaIndexTests
47- services : ["dojo","llama-index"]
65+ services : ["dojo", "llama-index"]
4866 wait_on : http://localhost:9999,tcp:localhost:8007
4967 - suite : mastra
5068 test_path : tests/mastraTests
51- services : ["dojo","mastra"]
69+ services : ["dojo", "mastra"]
5270 wait_on : http://localhost:9999,tcp:localhost:8008
5371 - suite : mastra-agent-local
5472 test_path : tests/mastraAgentLocalTests
@@ -60,125 +78,125 @@ jobs:
6078 wait_on : http://localhost:9999
6179 - suite : pydantic-ai
6280 test_path : tests/pydanticAITests
63- services : ["dojo","pydantic-ai"]
81+ services : ["dojo", "pydantic-ai"]
6482 wait_on : http://localhost:9999,tcp:localhost:8009
6583 - suite : server-starter
6684 test_path : tests/serverStarterTests
67- services : ["dojo","server-starter"]
85+ services : ["dojo", "server-starter"]
6886 wait_on : http://localhost:9999,tcp:localhost:8000
6987 - suite : server-starter-all
7088 test_path : tests/serverStarterAllFeaturesTests
71- services : ["dojo","server-starter-all"]
89+ services : ["dojo", "server-starter-all"]
7290 wait_on : http://localhost:9999,tcp:localhost:8001
7391 # - suite: vercel-ai-sdk
7492 # test_path: tests/vercelAISdkTests
7593 # services: ["dojo"]
7694 # wait_on: http://localhost:9999
7795
7896 steps :
79- - name : Checkout code
80- uses : actions/checkout@v4
81-
82- - name : Set up Node.js
83- uses : actions/setup-node@v4
84- with :
85- node-version : ' 22'
86-
87- - name : Install pnpm
88- uses : pnpm/action-setup@v4
89- with :
90- version : 10.13.1
91-
92- # Now that pnpm is available, cache its store to speed installs
93- - name : Resolve pnpm store path
94- id : pnpm-store
95- run : echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV
96-
97- - name : Cache pnpm store
98- uses : actions/cache@v4
99- with :
100- path : ${{ env.STORE_PATH }}
101- key : ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
102- restore-keys : |
103- ${{ runner.os }}-pnpm-store-
104-
105- # Cache Python tool caches and virtualenvs; restore only to avoid long saves
106- - name : Cache Python dependencies (restore-only)
107- id : cache-python
108- uses : actions/cache/restore@v4
109- with :
110- path : |
111- ~/.cache/pip
112- ~/.cache/pypoetry
113- ~/.cache/uv
114- **/.venv
115- key : ${{ runner.os }}-pydeps-${{ hashFiles('**/poetry.lock', '**/pyproject.toml') }}
116- restore-keys : |
117- ${{ runner.os }}-pydeps-
118-
119- - name : Install Poetry
120- uses : snok/install-poetry@v1
121- with :
122- version : latest
123- virtualenvs-create : true
124- virtualenvs-in-project : true
125-
126- - name : Install uv
127- uses : astral-sh/setup-uv@v6
128-
129- - name : Install dependencies
130- run : pnpm install --frozen-lockfile
131-
132- - name : Prepare dojo for e2e
133- working-directory : apps/dojo
134- if : ${{ join(matrix.services, ',') != '' }}
135- run : node ./scripts/prep-dojo-everything.js --only ${{ join(matrix.services, ',') }}
136-
137- - name : Install e2e dependencies
138- working-directory : apps/dojo/e2e
139- run : |
140- pnpm install
141-
142- - name : write langgraph env files
143- working-directory : integrations/langgraph
144- env :
145- OPENAI_API_KEY : ${{ secrets.OPENAI_API_KEY }}
146- LANGSMITH_API_KEY : ${{ secrets.LANGSMITH_API_KEY }}
147- if : ${{ contains(join(matrix.services, ','), 'langgraph-fastapi') || contains(join(matrix.services, ','), 'langgraph-platform-python') || contains(join(matrix.services, ','), 'langgraph-platform-typescript') }}
148- run : |
149- echo "OPENAI_API_KEY=${OPENAI_API_KEY}" > python/examples/.env
150- echo "LANGSMITH_API_KEY=${LANGSMITH_API_KEY}" >> python/examples/.env
151- echo "OPENAI_API_KEY=${OPENAI_API_KEY}" > typescript/examples/.env
152- echo "LANGSMITH_API_KEY=${LANGSMITH_API_KEY}" >> typescript/examples/.env
153-
154- - name : Run dojo+agents
155- uses : JarvusInnovations/background-action@v1
156- env :
157- OPENAI_API_KEY : ${{ secrets.OPENAI_API_KEY }}
158- LANGSMITH_API_KEY : ${{ secrets.LANGSMITH_API_KEY }}
159- GOOGLE_API_KEY : ${{ secrets.GOOGLE_API_KEY }}
160- if : ${{ join(matrix.services, ',') != '' && contains(join(matrix.services, ','), 'dojo') }}
161- with :
97+ - name : Checkout code
98+ uses : actions/checkout@v4
99+
100+ - name : Set up Node.js
101+ uses : actions/setup-node@v4
102+ with :
103+ node-version : " 22"
104+
105+ - name : Install pnpm
106+ uses : pnpm/action-setup@v4
107+ with :
108+ version : 10.13.1
109+
110+ # Now that pnpm is available, cache its store to speed installs
111+ - name : Resolve pnpm store path
112+ id : pnpm-store
113+ run : echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV
114+
115+ - name : Cache pnpm store
116+ uses : actions/cache@v4
117+ with :
118+ path : ${{ env.STORE_PATH }}
119+ key : ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
120+ restore-keys : |
121+ ${{ runner.os }}-pnpm-store-
122+
123+ # Cache Python tool caches and virtualenvs; restore only to avoid long saves
124+ - name : Cache Python dependencies (restore-only)
125+ id : cache-python
126+ uses : actions/cache/restore@v4
127+ with :
128+ path : |
129+ ~/.cache/pip
130+ ~/.cache/pypoetry
131+ ~/.cache/uv
132+ **/.venv
133+ key : ${{ runner.os }}-pydeps-${{ hashFiles('**/poetry.lock', '**/pyproject.toml') }}
134+ restore-keys : |
135+ ${{ runner.os }}-pydeps-
136+
137+ - name : Install Poetry
138+ uses : snok/install-poetry@v1
139+ with :
140+ version : latest
141+ virtualenvs-create : true
142+ virtualenvs-in-project : true
143+
144+ - name : Install uv
145+ uses : astral-sh/setup-uv@v6
146+
147+ - name : Install dependencies
148+ run : pnpm install --frozen-lockfile
149+
150+ - name : Prepare dojo for e2e
151+ working-directory : apps/dojo
152+ if : ${{ join(matrix.services, ',') != '' }}
153+ run : node ./scripts/prep-dojo-everything.js --only ${{ join(matrix.services, ',') }}
154+
155+ - name : Install e2e dependencies
156+ working-directory : apps/dojo/e2e
157+ run : |
158+ pnpm install
159+
160+ - name : write langgraph env files
161+ working-directory : integrations/langgraph
162+ env :
163+ OPENAI_API_KEY : ${{ secrets.OPENAI_API_KEY }}
164+ LANGSMITH_API_KEY : ${{ secrets.LANGSMITH_API_KEY }}
165+ if : ${{ contains(join(matrix.services, ','), 'langgraph-fastapi') || contains(join(matrix.services, ','), 'langgraph-platform-python') || contains(join(matrix.services, ','), 'langgraph-platform-typescript') }}
162166 run : |
163- node ../scripts/run-dojo-everything.js --only ${{ join(matrix.services, ',') }}
167+ echo "OPENAI_API_KEY=${OPENAI_API_KEY}" > python/examples/.env
168+ echo "LANGSMITH_API_KEY=${LANGSMITH_API_KEY}" >> python/examples/.env
169+ echo "OPENAI_API_KEY=${OPENAI_API_KEY}" > typescript/examples/.env
170+ echo "LANGSMITH_API_KEY=${LANGSMITH_API_KEY}" >> typescript/examples/.env
171+
172+ - name : Run dojo+agents
173+ uses : JarvusInnovations/background-action@v1
174+ env :
175+ OPENAI_API_KEY : ${{ secrets.OPENAI_API_KEY }}
176+ LANGSMITH_API_KEY : ${{ secrets.LANGSMITH_API_KEY }}
177+ GOOGLE_API_KEY : ${{ secrets.GOOGLE_API_KEY }}
178+ if : ${{ join(matrix.services, ',') != '' && contains(join(matrix.services, ','), 'dojo') }}
179+ with :
180+ run : |
181+ node ../scripts/run-dojo-everything.js --only ${{ join(matrix.services, ',') }}
182+ working-directory : apps/dojo/e2e
183+ wait-on : ${{ matrix.wait_on }}
184+ wait-for : 300000
185+
186+ - name : Run tests – ${{ matrix.suite }}
164187 working-directory : apps/dojo/e2e
165- wait-on : ${{ matrix.wait_on }}
166- wait-for : 300000
167-
168- - name : Run tests – ${{ matrix.suite }}
169- working-directory : apps/dojo/e2e
170- env :
171- BASE_URL : http://localhost:9999
172- PLAYWRIGHT_SUITE : ${{ matrix.suite }}
173- run : |
174- pnpm test -- ${{ matrix.test_path }}
175-
176- - name : Upload traces – ${{ matrix.suite }}
177- if : always() # Uploads artifacts even if tests fail
178- uses : actions/upload-artifact@v4
179- with :
180- name : ${{ matrix.suite }}-playwright-traces
181- path : |
182- apps/dojo/e2e/test-results/${{ matrix.suite }}/**/*
183- apps/dojo/e2e/playwright-report/**/*
184- retention-days : 7
188+ env :
189+ BASE_URL : http://localhost:9999
190+ PLAYWRIGHT_SUITE : ${{ matrix.suite }}
191+ run : |
192+ pnpm test -- ${{ matrix.test_path }}
193+
194+ - name : Upload traces – ${{ matrix.suite }}
195+ if : always() # Uploads artifacts even if tests fail
196+ uses : actions/upload-artifact@v4
197+ with :
198+ name : ${{ matrix.suite }}-playwright-traces
199+ path : |
200+ apps/dojo/e2e/test-results/${{ matrix.suite }}/**/*
201+ apps/dojo/e2e/playwright-report/**/*
202+ retention-days : 7
0 commit comments