fix(e2e): add debugging and container logging to diagnose CI failures
- Separate pretest (start containers) from test (run playwright) steps - Add container log collection step that runs on failure - Add verbose logging to pretest.mjs for better failure diagnosis - Use PULSE_E2E_SKIP_DOCKER and PULSE_E2E_SKIP_PLAYWRIGHT_INSTALL flags
This commit is contained in:
parent
bb2b1d7fb1
commit
f523d8ba3e
2 changed files with 56 additions and 5 deletions
20
.github/workflows/test-e2e.yml
vendored
20
.github/workflows/test-e2e.yml
vendored
|
|
@ -54,12 +54,32 @@ jobs:
|
|||
docker build -t pulse-mock-github:test ./tests/integration/mock-github-server
|
||||
docker build -t pulse:test -f Dockerfile .
|
||||
|
||||
- name: Start test containers
|
||||
working-directory: tests/integration
|
||||
env:
|
||||
PULSE_E2E_BOOTSTRAP_TOKEN: 0123456789abcdef0123456789abcdef0123456789abcdef
|
||||
PULSE_E2E_SKIP_PLAYWRIGHT_INSTALL: "true"
|
||||
run: node scripts/pretest.mjs
|
||||
|
||||
- name: Run E2E suite
|
||||
working-directory: tests/integration
|
||||
env:
|
||||
PULSE_E2E_BOOTSTRAP_TOKEN: 0123456789abcdef0123456789abcdef0123456789abcdef
|
||||
PULSE_E2E_SKIP_DOCKER: "true"
|
||||
PULSE_E2E_SKIP_PLAYWRIGHT_INSTALL: "true"
|
||||
run: npm test
|
||||
|
||||
- name: Collect container logs
|
||||
if: always()
|
||||
working-directory: tests/integration
|
||||
run: |
|
||||
echo "=== Docker containers ==="
|
||||
docker ps -a
|
||||
echo "=== Pulse test server logs ==="
|
||||
docker logs pulse-test-server 2>&1 || echo "No pulse-test-server container"
|
||||
echo "=== Mock GitHub server logs ==="
|
||||
docker logs pulse-mock-github 2>&1 || echo "No pulse-mock-github container"
|
||||
|
||||
- name: Upload Playwright report
|
||||
if: always()
|
||||
uses: actions/upload-artifact@v4
|
||||
|
|
|
|||
|
|
@ -65,11 +65,42 @@ const composeArgs = ['compose', '-f', 'docker-compose.test.yml', 'up', '-d'];
|
|||
const legacyComposeArgs = ['-f', 'docker-compose.test.yml', 'up', '-d'];
|
||||
const useDockerCompose = !(await canRun('docker', ['compose', 'version']));
|
||||
|
||||
if (useDockerCompose) {
|
||||
await run('docker-compose', legacyComposeArgs);
|
||||
} else {
|
||||
await run('docker', composeArgs);
|
||||
console.log('[pretest] Starting docker compose...');
|
||||
try {
|
||||
if (useDockerCompose) {
|
||||
console.log('[pretest] Using legacy docker-compose command');
|
||||
await run('docker-compose', legacyComposeArgs);
|
||||
} else {
|
||||
console.log('[pretest] Using modern docker compose command');
|
||||
await run('docker', composeArgs);
|
||||
}
|
||||
console.log('[pretest] Docker compose completed successfully');
|
||||
} catch (error) {
|
||||
console.error('[pretest] Docker compose failed:', error.message);
|
||||
// Try to get container logs for debugging
|
||||
try {
|
||||
await run('docker', ['logs', 'pulse-test-server'], { stdio: 'inherit' });
|
||||
} catch {
|
||||
// ignore
|
||||
}
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
const baseURL = (process.env.PULSE_BASE_URL || 'http://localhost:7655').replace(/\/+$/, '');
|
||||
await waitForHealth(`${baseURL}/api/health`);
|
||||
console.log(`[pretest] Waiting for health check at ${baseURL}/api/health...`);
|
||||
|
||||
try {
|
||||
await waitForHealth(`${baseURL}/api/health`);
|
||||
console.log('[pretest] Health check passed!');
|
||||
} catch (error) {
|
||||
console.error('[pretest] Health check failed:', error.message);
|
||||
// Try to get container logs for debugging
|
||||
console.log('[pretest] Attempting to retrieve container logs...');
|
||||
try {
|
||||
console.log('[pretest] === pulse-test-server logs ===');
|
||||
await run('docker', ['logs', 'pulse-test-server'], { stdio: 'inherit' });
|
||||
} catch {
|
||||
console.log('[pretest] Could not retrieve pulse-test-server logs');
|
||||
}
|
||||
process.exit(1);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue