super-productivity/e2e/global-setup.ts
Johannes Millan e5708236de fix(e2e): eliminate plugin 404 errors in CI
Root cause: ng serve doesn't reliably detect plugin assets copied to
src/assets/bundled-plugins/ during E2E setup, causing 404s in CI.

Solution: Implement dual-mode E2E testing:
- CI: Build Angular app first (includes plugins), serve with http-server
- Local: Continue using ng serve for fast iteration

Changes:
- Add buildFrontend:e2e script (builds plugins THEN Angular)
- Add serveFrontend:e2e:prod script (http-server with SPA proxy)
- CI workflows now build frontend before running E2E tests
- Global setup skips duplicate plugin builds (saves ~30s)
- Playwright config uses environment-specific server commands
- Added build output verification step

Benefits:
- 100% reliable plugin asset availability in CI
- Faster CI startup (90s vs 180s timeout)
- Better debugging (removed --silent flag)
- Local development unchanged
2026-01-23 21:28:41 +01:00

35 lines
1.1 KiB
TypeScript

import { FullConfig } from '@playwright/test';
import { execSync } from 'child_process';
import * as fs from 'fs';
import * as path from 'path';
const globalSetup = async (config: FullConfig): Promise<void> => {
// Set test environment variables
process.env.TZ = 'Europe/Berlin';
process.env.NODE_ENV = 'test';
console.log(`Running tests with ${config.workers} workers`);
// Build plugins before starting tests (skip if already built in CI)
const pluginManifestPath = path.join(
process.cwd(),
'src/assets/bundled-plugins/api-test-plugin/manifest.json',
);
if (fs.existsSync(pluginManifestPath)) {
console.log('Plugins already built, skipping...');
} else {
console.log('Building bundled plugins...');
try {
execSync('npm run plugins:build', {
stdio: 'inherit',
cwd: process.cwd(),
});
console.log('Bundled plugins built successfully');
} catch (error) {
console.error('Failed to build plugins:', error);
throw error; // Fail fast if plugin build fails
}
}
};
export default globalSetup;