fix: sync new OG images to output during incremental builds

During watcher/incremental builds, .cache/og is in watchIgnores so
Eleventy's passthrough copy doesn't pick up newly generated OG images.
After OG generation, manually copy any new .png files from .cache/og/
to _site/og/ so they're immediately available to serve.

Confab-Link: http://localhost:8080/sessions/956f4251-b4a9-4bc9-b214-53402ad1fe63
This commit is contained in:
Ricardo
2026-03-02 16:04:31 +01:00
parent a39b20375d
commit 4fb7e2e92e

View File

@@ -11,7 +11,7 @@ import registerUnfurlShortcode, { getCachedCard, prefetchUrl } from "./lib/unfur
import matter from "gray-matter";
import { createHash } from "crypto";
import { execFileSync } from "child_process";
import { readFileSync, readdirSync, existsSync, mkdirSync, writeFileSync } from "fs";
import { readFileSync, readdirSync, existsSync, mkdirSync, writeFileSync, copyFileSync } from "fs";
import { resolve, dirname } from "path";
import { fileURLToPath } from "url";
@@ -932,6 +932,25 @@ export default function (eleventyConfig) {
stdio: "inherit",
env: { ...process.env, NODE_OPTIONS: "" },
});
// Sync new OG images to output directory.
// During incremental builds, .cache/og is in watchIgnores so Eleventy's
// passthrough copy won't pick up newly generated images. Copy them manually.
const ogCacheDir = resolve(cacheDir, "og");
const ogOutputDir = resolve(__dirname, "_site", "og");
if (existsSync(ogCacheDir) && existsSync(resolve(__dirname, "_site"))) {
mkdirSync(ogOutputDir, { recursive: true });
let synced = 0;
for (const file of readdirSync(ogCacheDir)) {
if (file.endsWith(".png") && !existsSync(resolve(ogOutputDir, file))) {
copyFileSync(resolve(ogCacheDir, file), resolve(ogOutputDir, file));
synced++;
}
}
if (synced > 0) {
console.log(`[og] Synced ${synced} new image(s) to output`);
}
}
} catch (err) {
console.error("[og] Image generation failed:", err.message);
}