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
67 lines
2.1 KiB
TypeScript
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.");
|
|
}
|