Repository navigation
Expand file tree
/
Copy pathdocker-compose.yml
More file actions
109 lines (107 loc) · 4.94 KB
/
Copy pathdocker-compose.yml
File metadata and controls
109 lines (107 loc) · 4.94 KB
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
##
# Run the Linux E2E flow locally on macOS via Docker.
#
# This mirrors the `e2e-linux` job in `.github/workflows/e2e.yml` so any
# fix that turns the local run green is what CI will run too:
# - same image: ghcr.io/tinyhumansai/openhuman_ci:latest
# - same Xvfb + dbus bootstrap (via e2e/docker-entrypoint.sh)
# - same runner: app/scripts/e2e-run-session.sh (Appium chromium driver
# attached to CEF on :19222), NOT the retired tauri-driver path.
#
# Usage:
# # Build the E2E app once (slow — produces the CEF bundle):
# docker compose -f e2e/docker-compose.yml run --rm e2e \
# bash -lc "pnpm install --frozen-lockfile && pnpm --filter openhuman-app test:e2e:build"
#
# # Then run a spec (smoke / mega-flow / etc):
# docker compose -f e2e/docker-compose.yml run --rm e2e \
# bash -lc "bash app/scripts/e2e-run-session.sh test/e2e/specs/mega-flow.spec.ts mega-flow"
#
# # Or run the full suite:
# docker compose -f e2e/docker-compose.yml run --rm e2e \
# bash -lc "bash app/scripts/e2e-run-session.sh"
#
# Notes:
# - The repo is bind-mounted at /workspace so builds + edits round-trip.
# - Rust target/ and pnpm/npm caches live in named volumes so warm
# re-runs are fast.
# - Appium 3 + appium-chromium-driver are installed on first entry by
# the entrypoint (cached into the npm volume after that).
#
services:
e2e:
image: ${OPENHUMAN_CI_IMAGE:-ghcr.io/tinyhumansai/openhuman_ci:latest}
# Use the bind-mounted local bootstrap (Xvfb + dbus + Appium + pnpm).
# The image's baked-in /docker-entrypoint.sh is the CI version; the
# local wrapper additionally lazy-installs Appium and JS deps so a
# fresh checkout becomes runnable with one command.
entrypoint: ["/workspace/e2e/docker-local-bootstrap.sh"]
# Default to an interactive shell so the user can `docker compose run`
# without an explicit command. CI-style one-shot invocations override
# this on the command line.
command: ["bash", "-l"]
working_dir: /workspace
volumes:
- ../:/workspace
- e2e-cargo-registry:/usr/local/cargo/registry
- e2e-cargo-git:/usr/local/cargo/git
- e2e-rust-target:/workspace/target
- e2e-tauri-target:/workspace/app/src-tauri/target
- e2e-pnpm-store:/root/.local/share/pnpm/store
- e2e-npm-global:/usr/lib/node_modules
# pnpm falls back to a project-local store (./.pnpm-store) when the
# global store and the destination node_modules sit on different
# devices — which is exactly our case (named volume vs bind mount).
# The bind-mount filesystem is slow + flaky for the millions of
# tiny copies pnpm performs (ENOENT mid-copy), so park the
# project-local store on its own named volume too.
- e2e-pnpm-project-store:/workspace/.pnpm-store
# Isolate node_modules per-platform: the host (macOS arm64) and the
# container (Linux x64) install different native binaries (rolldown,
# esbuild, sharp, …). Sharing node_modules over the bind mount means
# one platform's binaries clobber the other and the build fails with
# `Cannot find module '@rolldown/binding-linux-x64-gnu'` (or the
# darwin equivalent when running on the host). Named volumes keep
# each platform's tree separate.
- e2e-node-modules:/workspace/node_modules
- e2e-app-node-modules:/workspace/app/node_modules
- e2e-playwright-cache:/root/.cache/ms-playwright
# CEF binary download cache — cef-dll-sys writes to ~/Library/Caches/tauri-cef
# inside the container. Without a named volume this is lost between runs and
# every new container re-downloads the ~400 MB CEF archive (which also fails
# when the container has no outbound DNS / TLS access to the CDN).
- e2e-cef-cache:/root/Library/Caches/tauri-cef
environment:
- DISPLAY=:99
<
4F83
div>
- CI=true
# Appium chromium driver downloads a chromedriver matching CEF's
# Chromium version; cache it next to the repo so re-runs are fast.
- WDIO_CHROMEDRIVER_CACHE=/workspace/.cache/chromedriver
# CEF spawns a lot of helper processes; the default IPC namespace
# sometimes runs out of shm. Bump it to match what GitHub-hosted
# ubuntu-22.04 runners give CEF.
shm_size: 2gb
# Rust inference provider E2E tests (wiremock-based, no live LLM needed).
# Run: docker compose -f e2e/docker-compose.yml run --rm inference-e2e
inference-e2e:
image: ${OPENHUMAN_CI_IMAGE:-ghcr.io/tinyhumansai/openhuman_ci:latest}
working_dir: /workspace
volumes:
- ../:/workspace
- e2e-cargo-registry:/usr/local/cargo/registry
- e2e-cargo-git:/usr/local/cargo/git
- e2e-rust-target:/workspace/target
entrypoint: ["bash", "-lc"]
command: ["./scripts/test-rust-inference-e2e.sh"]
volumes:
e2e-cargo-registry:
e2e-cargo-git:
e2e-rust-target:
e2e-tauri-target:
e2e-pnpm-store:
e2e-npm-global:
e2e-node-modules:
e2e-app-node-modules:
e2e-playwright-cache:
e2e-pnpm-project-store:
e2e-cef-cache: