Compare commits

...

10 Commits

Author SHA1 Message Date
Cursor Agent
0b194baf55
ci: drop PR sleep gate; self-hosted queue already serializes work
Co-authored-by: cynarAI <cynarAI@users.noreply.github.com>
2026-10-08 19:55:47 +00:00
Cursor Agent
1ba0b4e6f9
ci: delay Web E2E until PR image validate window elapses
Replace flaky gh polling with a PR-only wait job (35 min) so Vite does
not share the host with buildkit validate on single-runner setups.

Co-authored-by: cynarAI <cynarAI@users.noreply.github.com>
2026-10-08 06:57:14 +00:00
Cursor Agent
b5249acbd1
ci: wait for image validate using PR head SHA
gh run list keys off the branch head commit, not the merge ref GITHUB_SHA
used in workflow_call Playwright jobs.

Co-authored-by: cynarAI <cynarAI@users.noreply.github.com>
2026-10-08 03:23:09 +00:00
Cursor Agent
f2613a9a90
ci: fix workflow_call permissions for Playwright validate wait
Co-authored-by: cynarAI <cynarAI@users.noreply.github.com>
2026-10-08 02:15:06 +00:00
Cursor Agent
6a0b3f6992
ci: run validate wait when Playwright is workflow_call
Co-authored-by: cynarAI <cynarAI@users.noreply.github.com>
2026-10-08 01:49:05 +00:00
Cursor Agent
de2a9376a8
ci: grant actions:read for Playwright validate wait on PRs
Co-authored-by: cynarAI <cynarAI@users.noreply.github.com>
2026-10-08 01:48:33 +00:00
Cursor Agent
68134518fc
ci: start Web E2E after PR image validate finishes
Docker validate and Vite E2E on the same self-hosted host left signup
flakes; poll publish-server-image for this commit before Playwright starts.

Co-authored-by: cynarAI <cynarAI@users.noreply.github.com>
2026-10-08 01:27:35 +00:00
Cursor Agent
f35ba6f81c
ci: drop cross-workflow heavy pool lock that cancelled Web E2E
Queued Playwright jobs were cancelled on self-hosted while waiting on
evoo-self-hosted-heavy. Keep validate matrix max-parallel: 1 for buildkit.

Co-authored-by: cynarAI <cynarAI@users.noreply.github.com>
2026-10-08 00:19:53 +00:00
Cursor Agent
54db56d92c
style: format harness health wait for Biome
Co-authored-by: cynarAI <cynarAI@users.noreply.github.com>
2026-10-08 00:05:50 +00:00
Cursor Agent
cb759100bd
test(e2e): tolerate cold CI startup for signup and Playwright
Self-hosted runs can compile Vite and warm the API slowly after image
validate; extend health, dev-server, signup, and job timeouts so Product
CI is not cancelled mid-suite.

Co-authored-by: cynarAI <cynarAI@users.noreply.github.com>
2026-10-07 23:53:32 +00:00
5 changed files with 9 additions and 10 deletions

View File

@ -54,9 +54,9 @@ jobs:
playwright:
name: Web E2E
runs-on: [self-hosted, evoo-ci, Linux]
timeout-minutes: 30
timeout-minutes: 60
concurrency:
group: ${{ inputs.publish_report && 'playwright-publication' || 'evoo-self-hosted-heavy' }}
group: ${{ inputs.publish_report && 'playwright-publication' || format('playwright-{0}', github.run_id) }}
cancel-in-progress: false
steps:
- uses: actions/checkout@v5

View File

@ -53,10 +53,6 @@ jobs:
if: github.event_name == 'pull_request'
runs-on: [self-hosted, evoo-ci, Linux]
timeout-minutes: 90
# Same pool as Web E2E; image builds starve the dev servers Playwright needs.
concurrency:
group: evoo-self-hosted-heavy
cancel-in-progress: false
permissions:
contents: read
strategy:

View File

@ -226,14 +226,16 @@ export async function signup(
name: string,
testInfo?: TestInfo,
) {
const headingTimeout = process.env.CI ? 15_000 : 5_000;
const retryTimeout = process.env.CI ? 120_000 : 45_000;
await expect(async () => {
await page.goto("/sign-up", { waitUntil: "domcontentloaded" });
await expect(
page.getByRole("heading", { name: /Create your evOo|Dein evOo erstellen/i }),
).toBeVisible({
timeout: 5_000,
timeout: headingTimeout,
});
}).toPass({ timeout: 45_000 });
}).toPass({ timeout: retryTimeout });
if (testInfo) await captureScreenshot(page, testInfo, "01-sign-up");
await page.getByPlaceholder(/Your name|Dein Name/i).fill(name);
await page.getByPlaceholder(/Your email address|Deine E-Mail-Adresse/i).fill(email);

View File

@ -1,6 +1,7 @@
import { defineConfig, devices } from "@playwright/test";
import { isRealSandboxProvider } from "./e2e/helpers";
const ci = Boolean(process.env.CI);
const webPort = Number(process.env.WEB_PORT ?? 5173);
const baseURL = process.env.PLAYWRIGHT_BASE_URL ?? `http://127.0.0.1:${webPort}`;
const realSandbox = isRealSandboxProvider();
@ -32,6 +33,6 @@ export default defineConfig({
command: "pnpm dev",
url: baseURL,
reuseExistingServer: !process.env.CI,
timeout: 120_000,
timeout: ci ? 180_000 : 120_000,
},
});

View File

@ -256,7 +256,7 @@ async function main() {
port: apiPort,
hostname: "127.0.0.1",
});
await waitForHealth(`http://127.0.0.1:${apiPort}/health`, 15_000);
await waitForHealth(`http://127.0.0.1:${apiPort}/health`, process.env.CI ? 30_000 : 15_000);
try {
execSync("rm -rf apps/web/node_modules/.vite node_modules/.vite", {