e2e: scope the FrankBook-Pro leg to its own trigger-gated Playwright project
The 11-admin spec walked links that terminate on FrankBook-Pro (192.168.0.112), which sleeps when idle — every deploy gate timed out there (measured 2026-10-05, two deploy windows). Split: the frankbook links move to tests/e2e/specs/19-frankbook.spec.ts under a frankbook project that run.sh excludes by default and deploy.sh triggers ONLY when a frankbook blast-radius path changed (the spec, frankbook-pro/, the homepage registry, the Caddyfile arr vhosts). deploy.sh computes the trigger from the same BASE..HEAD revision range the plan uses.
This commit is contained in:
1 parent
77decb545e
commit
9c508218e9
6 files changed
+158
-7
No files matched your search
@@ -24,10 +24,28 @@ test("admin panel renders admin-category services", async ({ page }) => {
|
||||
test("admin open links reach their apps through SSO", async ({ page }) => {
|
||||
test.setTimeout(240_000);
|
||||
// Expected link count comes from the live registry (admin showLink=true
|
||||
// entries, now including the *arr vhosts that use their own auth).
|
||||
const registry: { name: string; category: string; showLink: boolean }[] =
|
||||
await (await page.request.get("/services.json")).json();
|
||||
// entries, now including the *arr vhosts that use their own auth). The
|
||||
// frankbook-hosted links (probe on 192.168.0.112) are NOT walked here:
|
||||
// they terminate on FrankBook-Pro, which sleeps when idle, so their walk
|
||||
// lives in 19-frankbook.spec.ts (frankbook project — excluded from the
|
||||
// default e2e run and from the deploy gate unless a frankbook trigger
|
||||
// path changed; see tests/e2e/run.sh and scripts/deploy.sh).
|
||||
const registry: {
|
||||
name: string;
|
||||
category: string;
|
||||
showLink: boolean;
|
||||
url: string;
|
||||
probe: string;
|
||||
}[] = await (await page.request.get("/services.json")).json();
|
||||
const expectedAdminLinks = registry.filter((s) => s.category === "admin" && s.showLink).length;
|
||||
const frankbookUrls = registry
|
||||
.filter(
|
||||
(s) =>
|
||||
s.category === "admin" &&
|
||||
s.showLink &&
|
||||
((s.probe ?? "").startsWith("192.168.0.112") || s.url.includes("192.168.0.112")),
|
||||
)
|
||||
.map((s) => new URL(s.url).origin);
|
||||
await page.goto("/admin/");
|
||||
await expect(page.locator("#grid a.open")).toHaveCount(expectedAdminLinks);
|
||||
const hrefs = await page.locator("#grid a.open").evaluateAll((els) =>
|
||||
@@ -35,6 +53,7 @@ test("admin open links reach their apps through SSO", async ({ page }) => {
|
||||
);
|
||||
|
||||
for (const href of hrefs) {
|
||||
if (frankbookUrls.includes(new URL(href).origin)) continue; // 19-frankbook walks these
|
||||
const target = new URL(href);
|
||||
await page.goto(href);
|
||||
// Every guarded vhost runs its own Anubis proof-of-work on first visit.
|
||||
|
||||
Reference in new issue
Block a user