feat: import Chinese-localized Buzz source snapshot
Docker image / Build (linux/amd64) (push) Has been cancelled
Docker image / Build (linux/arm64) (push) Has been cancelled
Docker image / Merge release multi-arch manifest (push) Has been cancelled
Docker image / Merge debug multi-arch manifest (push) Has been cancelled
Docker image / Build public push gateway (linux/amd64) (push) Has been cancelled
Docker image / Build public push gateway (linux/arm64) (push) Has been cancelled
Docker image / Publish public push gateway image (push) Has been cancelled
Sprig image / Build (linux/amd64) (push) Has been cancelled
Sprig image / Build (linux/arm64) (push) Has been cancelled
Sprig image / Merge multi-arch manifest (push) Has been cancelled
Harbor Buzz Orchestra / Python tests and lint (push) Has been cancelled
CI / Detect Changed Paths (push) Has been cancelled
CI / Rust Lint (push) Has been cancelled
CI / Unit Tests (push) Has been cancelled
CI / Desktop Core (push) Has been cancelled
CI / Desktop Smoke E2E (1) (push) Has been cancelled
CI / Desktop Smoke E2E (2) (push) Has been cancelled
CI / Desktop Smoke E2E (3) (push) Has been cancelled
CI / Desktop Smoke E2E (4) (push) Has been cancelled
CI / Desktop (push) Has been cancelled
CI / Desktop E2E Relay (push) Has been cancelled
CI / Desktop E2E Integration (1/2) (push) Has been cancelled
CI / Desktop E2E Integration (2/2) (push) Has been cancelled
CI / Desktop E2E Integration (push) Has been cancelled
CI / Backend Integration (relay e2e) (push) Has been cancelled
CI / Relay E2E (push) Has been cancelled
CI / Web (push) Has been cancelled
CI / Mobile (push) Has been cancelled
CI / Security (push) Has been cancelled
CI / Dead Token Reference Guard (push) Has been cancelled
CI / Server Cross-Compile (aarch64-unknown-linux-musl) (push) Has been cancelled
CI / Server Cross-Compile (x86_64-unknown-linux-musl) (push) Has been cancelled
CI / Windows Rust (x86_64-pc-windows-msvc) (push) Has been cancelled
CI / Desktop Build (macOS) (push) Has been cancelled
helm chart / lint + unittest + render matrix (push) Has been cancelled
helm chart / install on kind (gated) (push) Has been cancelled
helm chart / publish chart to GHCR (push) Has been cancelled
Mesh Lifecycle / Relay-Driven Mesh Lifecycle Smoke (push) Has been cancelled
Sprig / Build (aarch64-unknown-linux-musl) (push) Has been cancelled
Sprig / Build (x86_64-unknown-linux-musl) (push) Has been cancelled
Sprig / Publish rolling release (push) Has been cancelled
Sprig / Publish tagged release (push) Has been cancelled

Signed-off-by: cls_宁波本机 <908705107@qq.com>
This commit is contained in:
2026-08-13 18:34:25 +08:00
parent 61c3fa1df9
commit 9dfa06ffee
3785 changed files with 1085458 additions and 2 deletions
+82
View File
@@ -0,0 +1,82 @@
import { request } from "@playwright/test";
const tylerPubkey =
"e5ebc6cdb579be112e336cc319b5989b4bb6af11786ea90dbe52b5f08d741b34";
const isCi = Boolean(process.env.CI);
// Multi-tenant: the relay resolves each request's tenant from its Host header
// against the communities host map and fails closed (404) on an unmapped host.
// The seed maps host 'localhost:3000' (matching the relay's RELAY_URL) — and
// `localhost` != `127.0.0.1` to normalize_host — so this readiness check must
// hit `localhost:3000`, not `127.0.0.1:3000`, or every /query 404s. This also
// matches the rest of the desktop e2e suite (e2eBridge.ts / bridge.ts), which
// already default to localhost.
const relayBaseUrl = process.env.BUZZ_E2E_RELAY_URL ?? "http://localhost:3000";
const seedTimeoutMs = Number.parseInt(
process.env.BUZZ_E2E_SEED_TIMEOUT_MS ?? (isCi ? "60000" : "25000"),
10,
);
const requestTimeoutMs = Number.parseInt(
process.env.BUZZ_E2E_SEED_REQUEST_TIMEOUT_MS ?? (isCi ? "5000" : "2000"),
10,
);
const retryDelayMs = Number.parseInt(
process.env.BUZZ_E2E_SEED_RETRY_DELAY_MS ?? "1000",
10,
);
function delay(ms: number) {
return new Promise((resolve) => {
setTimeout(resolve, ms);
});
}
export async function assertRelaySeeded() {
const context = await request.newContext();
const deadline = Date.now() + seedTimeoutMs;
let lastFailure = "no checks attempted";
try {
while (Date.now() < deadline) {
try {
// The setup script inserts test data directly into the DB tables.
// The relay reconciles these at startup by emitting kind:39000/39002
// events. Query kind:39000 (channel metadata) via the HTTP bridge
// and check for the expected "general" channel.
const response = await context.post(`${relayBaseUrl}/query`, {
headers: {
"X-Pubkey": tylerPubkey,
"Content-Type": "application/json",
},
data: [{ kinds: [39000], limit: 200 }],
timeout: requestTimeoutMs,
});
if (!response.ok()) {
lastFailure = `HTTP ${response.status()} from POST /query`;
} else {
const events = (await response.json()) as Array<{
tags: string[][];
}>;
const hasGeneral = events.some((event) =>
event.tags.some((tag) => tag[0] === "name" && tag[1] === "general"),
);
if (hasGeneral) {
return;
}
lastFailure = `seed data: got ${events.length} channels but no "general" — relay may still be reconciling`;
}
} catch (error) {
lastFailure =
error instanceof Error ? error.message : "unknown relay check error";
}
await delay(retryDelayMs);
}
throw new Error(
`Relay test data was not ready after ${seedTimeoutMs}ms. Last check: ${lastFailure}. Start the relay and run scripts/setup-desktop-test-data.sh.`,
);
} finally {
await context.dispose();
}
}