Files
wehub-resource-sync b3a7f98e5a
CI / E2E Cloudflare (4/8) (push) Failing after 0s
CI / E2E Cloudflare (8/8) (push) Failing after 1s
CI / Lint (push) Failing after 1s
Auto Extract / Extract (push) Failing after 4s
CI / Version Check (push) Failing after 9s
CI / Integration Tests (push) Failing after 1s
CI / E2E tests (1/8) (push) Failing after 1s
CI / E2E tests (2/8) (push) Failing after 2s
CI / E2E tests (3/8) (push) Failing after 2s
CI / Browser Tests (push) Failing after 1s
CI / E2E tests (5/8) (push) Failing after 1s
CI / E2E Cloudflare (2/8) (push) Failing after 2s
CI / Typecheck (push) Failing after 1s
CI / Changeset Validation (push) Failing after 2s
CI / E2E Cloudflare (5/8) (push) Failing after 1s
CI / E2E Cloudflare (6/8) (push) Failing after 1s
CI / E2E Cloudflare (7/8) (push) Failing after 1s
CodeQL / Analyze (javascript-typescript) (push) Failing after 1s
Format / Format (push) Failing after 0s
CodeQL / Analyze (actions) (push) Failing after 4s
CI / E2E tests (4/8) (push) Failing after 1s
CI / E2E tests (6/8) (push) Failing after 1s
CI / E2E tests (7/8) (push) Failing after 2s
CI / E2E tests (8/8) (push) Failing after 1s
CI / E2E Cloudflare (1/8) (push) Failing after 1s
CI / E2E Cloudflare (3/8) (push) Failing after 2s
Preview Releases / Publish Preview (push) Failing after 0s
zizmor / Run zizmor (push) Failing after 1s
Release / Release (push) Failing after 2s
CI / Smoke Tests (push) Failing after 5m36s
CI / Tests (push) Failing after 6m36s
Release / Sync Templates (push) Has been skipped
CI / E2E Tests (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:23:53 +08:00

67 lines
2.1 KiB
TypeScript

/**
* Playwright global teardown.
*
* Kills the dev server, removes the temp data directory,
* and cleans up the node_modules symlink if we created it.
*/
import { existsSync, readFileSync, readdirSync, rmSync, unlinkSync } from "node:fs";
import { tmpdir } from "node:os";
import { join, resolve, dirname } from "node:path";
import { fileURLToPath } from "node:url";
const SERVER_INFO_PATH = join(tmpdir(), "emdash-pw-server.json");
const __dirname = dirname(fileURLToPath(import.meta.url));
const ROOT = resolve(__dirname, "..");
const FIXTURE_DIR = resolve(ROOT, "e2e/fixture");
export default async function globalTeardown(): Promise<void> {
if (!existsSync(SERVER_INFO_PATH)) return;
try {
const info = JSON.parse(readFileSync(SERVER_INFO_PATH, "utf-8"));
// Kill the server process
try {
process.kill(info.pid, "SIGTERM");
await new Promise((r) => setTimeout(r, 1000));
try {
process.kill(info.pid, 0); // Check if alive
process.kill(info.pid, "SIGKILL");
} catch {
// Already dead
}
} catch {
// Process may already be dead
}
// Remove temp data directory (database + media files)
if (info.tempDataDir && existsSync(info.tempDataDir)) {
rmSync(info.tempDataDir, { recursive: true, force: true });
}
// Clean up artifacts from whichever fixture was run (Node or Cloudflare).
const fixtureDir = typeof info.workDir === "string" ? info.workDir : FIXTURE_DIR;
// Build artifacts and miniflare (D1/R2) state.
for (const dir of [".astro", ".wrangler"]) {
const path = join(fixtureDir, dir);
if (existsSync(path)) rmSync(path, { recursive: true, force: true });
}
// Clean up generated .emdash subdirs (uploads, etc.) but preserve seed.json
const emdashDir = join(fixtureDir, ".emdash");
if (existsSync(emdashDir)) {
for (const entry of readdirSync(emdashDir)) {
if (entry === "seed.json") continue;
const entryPath = join(emdashDir, entry);
rmSync(entryPath, { recursive: true, force: true });
}
}
} finally {
unlinkSync(SERVER_INFO_PATH);
}
console.log("[pw] Server stopped and temp directory cleaned up.");
}