Skip to content

Commit ee8243b

Browse files
committed
Relax CI e2e readiness gating and capture renderer logs
1 parent 3d4dced commit ee8243b

2 files changed

Lines changed: 20 additions & 4 deletions

File tree

.github/workflows/test.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,4 +122,5 @@ jobs:
122122
path: |
123123
extension-repo/e2e-tests/playwright-report/
124124
extension-repo/e2e-tests/test-results/
125+
extension-repo/e2e-tests/test-results/renderer-dev-server.log
125126
retention-days: 7

e2e-tests/global-setup.ts

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,9 @@ function waitForPort(port: number, timeout: number): Promise<void> {
149149
export default async function globalSetup(_config: FullConfig): Promise<void> {
150150
const extensionRoot = path.resolve(__dirname, '..');
151151
const coreDir = path.resolve(__dirname, '../../paranext-core');
152+
const testResultsDir = path.join(extensionRoot, 'e2e-tests/test-results');
153+
fs.mkdirSync(testResultsDir, { recursive: true });
154+
const rendererLogPath = path.join(testResultsDir, 'renderer-dev-server.log');
152155

153156
// Fail fast if Platform.Bible is already running (single-instance lock will
154157
// cause Playwright's Electron instance to exit immediately)
@@ -204,9 +207,10 @@ export default async function globalSetup(_config: FullConfig): Promise<void> {
204207
console.log(`Renderer dev server already running on port ${RENDERER_PORT}.`);
205208
} else {
206209
console.log('Starting paranext-core renderer dev server...');
210+
const rendererLogFd = fs.openSync(rendererLogPath, 'w');
207211
const devServer = spawn('npm', ['run', 'start:renderer'], {
208212
cwd: coreDir,
209-
stdio: 'ignore',
213+
stdio: ['ignore', rendererLogFd, rendererLogFd],
210214
shell: true,
211215
detached: true,
212216
env: { ...process.env, ELECTRON_RUN_AS_NODE: undefined, SKIP_START_MAIN: '1' },
@@ -224,9 +228,20 @@ export default async function globalSetup(_config: FullConfig): Promise<void> {
224228
console.log(
225229
`Port ${RENDERER_PORT} is accepting connections. Waiting for webpack compilation...`,
226230
);
227-
// Wait for the renderer index to serve successfully so Electron does not attach during
228-
// an in-progress compilation window.
229-
await waitForHttpOk(`http://127.0.0.1:${RENDERER_PORT}/index.html`, 300_000);
231+
// Wait for webpack-dev-middleware to begin serving renderer assets before launching Electron.
232+
// In CI we degrade to a warning if this probe times out, since the dev server can still finish
233+
// compiling shortly after Electron starts.
234+
try {
235+
await waitForHttpOk(`http://127.0.0.1:${RENDERER_PORT}/dist/renderer.dev.js`, 120_000);
236+
} catch (error) {
237+
if (!process.env.CI) throw error;
238+
const message =
239+
error instanceof Error ? error.message : 'Unknown renderer readiness probe failure';
240+
console.warn(
241+
`Renderer HTTP readiness probe timed out in CI: ${message}. Continuing with port-only readiness.`,
242+
);
243+
console.warn(`Renderer dev server logs: ${rendererLogPath}`);
244+
}
230245
console.log('Renderer dev server is ready.');
231246
}
232247
}

0 commit comments

Comments
 (0)