|
38 | 38 | # Run smoketests |
39 | 39 | for ID in $RALPH_IDS; do |
40 | 40 | echo "Starting smoketest for RALPH_ID=$ID" |
41 | | - docker run --rm -e RALPH_ID=$ID -d \ |
| 41 | + docker run --platform linux/amd64 --rm -e RALPH_ID=$ID -d \ |
42 | 42 | -u $(id -u):$(id -g) \ |
43 | 43 | -e HOME=/tmp/home \ |
44 | | - -v "$LABS:/app/labs" \ |
45 | | - -v "$LABS/tools/ralph/smoketest:/app/smoketest" \ |
| 44 | + -v "$LABS:/app/labs:z" \ |
| 45 | + -v "$LABS/tools/ralph/smoketest:/app/smoketest:z" \ |
| 46 | + --cap-add=SYS_ADMIN \ |
| 47 | + --security-opt seccomp=unconfined \ |
| 48 | + --shm-size=2g \ |
46 | 49 | --name ralph_$ID \ |
47 | 50 | ellyxir/ralph |
48 | 51 |
|
49 | 52 | # Copy Claude credentials into container's writable /tmp/home |
50 | 53 | # Each container gets its own copy to avoid conflicts |
51 | 54 | docker exec ralph_$ID mkdir -p /tmp/home/.claude |
52 | 55 | docker cp ~/.claude.json ralph_$ID:/tmp/home/.claude.json |
53 | | - docker cp ~/.claude/.credentials.json ralph_$ID:/tmp/home/.claude/.credentials.json |
| 56 | + |
| 57 | + # Handle credentials based on platform |
| 58 | + if [[ "$OSTYPE" == "darwin"* ]]; then |
| 59 | + # macOS: Extract credentials from keychain |
| 60 | + echo "Extracting credentials from macOS keychain..." |
| 61 | + CREDS=$(security find-generic-password -s "Claude Code-credentials" -w 2>/dev/null) |
| 62 | + if [ -n "$CREDS" ]; then |
| 63 | + echo "$CREDS" | docker exec -i ralph_$ID tee /tmp/home/.claude/.credentials.json > /dev/null |
| 64 | + echo "Credentials copied from keychain for ralph_$ID" |
| 65 | + else |
| 66 | + echo "Warning: Could not find credentials in keychain for ralph_$ID" |
| 67 | + fi |
| 68 | + else |
| 69 | + # Linux/other: Copy from file |
| 70 | + docker cp ~/.claude/.credentials.json ralph_$ID:/tmp/home/.claude/.credentials.json |
| 71 | + fi |
54 | 72 |
|
55 | 73 | # Configure Claude MCP server for Playwright |
56 | 74 | # Container runs as host user with HOME=/tmp/home |
|
0 commit comments