Skip to content

Commit 843aab1

Browse files
committed
fix(ci): use daemon mode (-d) for mockd, wait for import completion
Root cause: background processes (& or nohup) in GitHub Actions run steps get killed between steps. Using mockd's native daemon mode (-d) which forks properly and survives step boundaries. For digital twins with large specs (Stripe 6MB, Twilio 1.8MB, OpenAI 2.5MB), wait loop now checks mock count > 10 before proceeding since imports are processed after daemon reports ready. Timeout 120s.
1 parent 1c81f40 commit 843aab1

1 file changed

Lines changed: 11 additions & 16 deletions

File tree

.github/workflows/ci.yaml

Lines changed: 11 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -43,14 +43,12 @@ jobs:
4343
run: |
4444
CONFIG_DIR=$(dirname ${{ matrix.sample.config }})
4545
cd "$CONFIG_DIR"
46-
nohup mockd start -c mockd.yaml --no-auth --log-level error > /tmp/mockd.log 2>&1 &
47-
echo $! > /tmp/mockd.pid
46+
mockd start -c mockd.yaml --no-auth -d
4847
for i in $(seq 1 30); do
4948
curl -sf http://localhost:4290/health > /dev/null 2>&1 && break
5049
sleep 1
5150
done
5251
curl -sf http://localhost:4290/health
53-
mockd list --json --admin-url http://localhost:4290 | python3 -c "import sys,json; d=json.load(sys.stdin); print(f'Loaded {len(d)} mocks')"
5452
5553
- name: Run test script
5654
run: |
@@ -60,7 +58,7 @@ jobs:
6058
6159
- name: Stop mockd
6260
if: always()
63-
run: pkill -f mockd || true
61+
run: mockd stop 2>/dev/null || true
6462

6563
validate-digital-twins:
6664
name: Validate Digital Twins
@@ -128,25 +126,22 @@ jobs:
128126
run: |
129127
CONFIG_DIR=$(dirname ${{ matrix.sample.config }})
130128
cd "$CONFIG_DIR"
131-
nohup mockd start -c mockd.yaml --no-auth --log-level info > /tmp/mockd.log 2>&1 &
132-
echo $! > /tmp/mockd.pid
133-
# Wait for health + import completion (large specs take 30-60s)
129+
mockd start -c mockd.yaml --no-auth -d
130+
# Wait for health + import completion (large specs take 30-60s on CI)
134131
for i in $(seq 1 120); do
135132
if curl -sf http://localhost:4290/health > /dev/null 2>&1; then
136-
# Health OK — check if mocks loaded (import may still be running)
137-
MOCK_COUNT=$(mockd list --json --admin-url http://localhost:4290 2>/dev/null | python3 -c "import sys,json; print(len(json.load(sys.stdin)))" 2>/dev/null || echo "0")
138-
[ "$MOCK_COUNT" -gt 0 ] && break
133+
MOCK_COUNT=$(mockd list --json 2>/dev/null | python3 -c "import sys,json; print(len(json.load(sys.stdin)))" 2>/dev/null || echo "0")
134+
[ "$MOCK_COUNT" -gt 10 ] && break
139135
fi
140136
sleep 1
141137
done
142-
curl -sf http://localhost:4290/health || { echo "mockd not healthy"; cat /tmp/mockd.log; exit 1; }
143-
MOCK_COUNT=$(mockd list --json --admin-url http://localhost:4290 | python3 -c "import sys,json; d=json.load(sys.stdin); print(len(d))")
144-
echo "Loaded $MOCK_COUNT mocks"
145-
if [ "$MOCK_COUNT" -eq 0 ]; then
146-
echo "=== mockd log (0 mocks loaded) ==="
147-
tail -30 /tmp/mockd.log
138+
if ! curl -sf http://localhost:4290/health; then
139+
echo "mockd not healthy"
140+
cat ~/.mockd/daemon.log 2>/dev/null
148141
exit 1
149142
fi
143+
MOCK_COUNT=$(mockd list --json | python3 -c "import sys,json; d=json.load(sys.stdin); print(len(d))")
144+
echo "Loaded $MOCK_COUNT mocks"
150145
151146
- name: Smoke test — Stripe
152147
if: matrix.sample.name == 'stripe'

0 commit comments

Comments
 (0)