Skip to content

Commit 6a6dfdd

Browse files
authored
ci: check generated pages (#696)
1 parent 8404f4c commit 6a6dfdd

3 files changed

Lines changed: 45 additions & 0 deletions

File tree

‎.github/workflows/ci.yml‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ jobs:
7171
node-version: "24"
7272
cache: "pnpm"
7373
- run: pnpm install --frozen-lockfile
74+
- run: pnpm check:generated
7475
- run: pnpm build
7576
env:
7677
MPP_SECRET_KEY: ${{ secrets.MPP_SECRET_KEY || 'ci-placeholder-key' }}

‎package.json‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,12 @@
77
"build": "node scripts/generate-discovery.ts && node scripts/build-diagrams.ts && node scripts/copy-vocs-theme.ts && node scripts/generate-cli-help.ts && node scripts/generate-og-descriptions.ts && vite build",
88
"check": "biome check --write",
99
"check:ci": "biome check",
10+
"check:generated": "pnpm generate:pages && git diff --exit-code -- src/pages.gen.ts",
1011
"check:sdk-drift": "npx tsx .github/actions/sdk-drift-check/check-sdk-drift.ts",
1112
"check:types": "tsc --noEmit",
1213
"dev": "node scripts/generate-discovery.ts && vite dev",
1314
"generate:discovery": "node scripts/generate-discovery.ts",
15+
"generate:pages": "node scripts/generate-pages.ts",
1416
"preinstall": "pnpx only-allow pnpm",
1517
"prepare": "pnpm simple-git-hooks",
1618
"preview": "vite preview",

‎scripts/generate-pages.ts‎

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
import { existsSync, readFileSync, writeFileSync } from "node:fs";
2+
import { createRequire } from "node:module";
3+
import { dirname, resolve } from "node:path";
4+
import { pathToFileURL } from "node:url";
5+
6+
const root = resolve(import.meta.dirname, "..");
7+
const pagesDir = resolve(root, "src/pages");
8+
const outputPath = resolve(root, "src/pages.gen.ts");
9+
10+
const require = createRequire(import.meta.url);
11+
const vocsEntry = require.resolve("vocs");
12+
const typegenPath = resolve(
13+
dirname(vocsEntry),
14+
"waku/internal/patches/vite-plugins/fs-router-typegen.js",
15+
);
16+
17+
const { generateFsRouterTypes } = (await import(
18+
pathToFileURL(typegenPath).href
19+
)) as {
20+
generateFsRouterTypes: (
21+
pagesDir: string,
22+
) => Promise<string | null | undefined>;
23+
};
24+
25+
if (!existsSync(pagesDir)) {
26+
throw new Error(`Pages directory not found: ${pagesDir}`);
27+
}
28+
29+
const generated = await generateFsRouterTypes(pagesDir);
30+
if (!generated) {
31+
throw new Error("Failed to generate src/pages.gen.ts");
32+
}
33+
34+
const current = existsSync(outputPath)
35+
? readFileSync(outputPath, "utf-8")
36+
: undefined;
37+
38+
if (current !== generated) {
39+
writeFileSync(outputPath, generated, "utf-8");
40+
}
41+
42+
console.log("Generated src/pages.gen.ts");

0 commit comments

Comments
 (0)