Files
roboco/remotion-renderer/ensure-browser.mjs
T

23 lines
1.2 KiB
JavaScript

// Build-time only: verify Chrome Headless Shell is installed so a
// container's first real render isn't also the first time it fetches a
// browser. Run once as a Docker RUN step after `pnpm install` (see
// docker/remotion.Dockerfile).
//
// The actual download is performed by puppeteer's postinstall (approved in
// pnpm-workspace.yaml), which lands chrome-headless-shell in
// ~/.cache/puppeteer/chrome-headless-shell/ — the cache
// @hyperframes/engine's resolveHeadlessShellPath scans at render time. This
// script just verifies the binary is present and fails loud if not, so a
// broken/missed download surfaces at image build time, not mid-render.
import { resolveHeadlessShellPath } from "@hyperframes/engine";
const shellPath = await resolveHeadlessShellPath();
if (!shellPath) {
console.error(
"Chrome Headless Shell not found in ~/.cache/puppeteer/chrome-headless-shell/. " +
"puppeteer's postinstall (approved in pnpm-workspace.yaml) should have downloaded it — " +
"re-run `pnpm install` or run `npx @puppeteer/browsers install chrome-headless-shell@stable`.",
);
process.exit(1);
}
console.log(`Chrome Headless Shell ready at ${shellPath}.`);