Vellum/web/scripts/keep-dist.mjs
mithral 3415102d5a Keep web/dist/.gitkeep alive across a build
The build deletes it. vite clears outDir (emptyOutDir: true), and that file is
the only reason //go:embed all:dist compiles in a fresh clone - without it a
clone that has not run a frontend build cannot run go build at all.

Found because it happened: a pnpm build during the transcode work removed the
tracked file, and it showed up as a deletion waiting to be committed. A
developer who ran a build and then staged everything would have broken every
clone silently, and the symptom would appear on someone else's machine.

The build now regenerates it, with the explanation in the file itself so the
next person to see it knows what it is for.
2026-10-12 12:12:02 -04:00

22 lines
1 KiB
JavaScript

// Recreates dist/.gitkeep after a build.
//
// vite clears outDir (emptyOutDir: true in vite.config.ts), which deletes the
// tracked placeholder. Without that file present, //go:embed all:dist in
// web/embed.go fails to compile, so a fresh clone with no frontend build cannot
// run `go build` at all - and a developer who ran `pnpm build` and then
// committed the deletion would silently break every clone.
//
// Writing it here means the file survives a build instead of needing to be
// restored by hand every time.
import { mkdirSync, writeFileSync } from 'node:fs'
mkdirSync('dist', { recursive: true })
writeFileSync(
'dist/.gitkeep',
'# Generated by scripts/keep-dist.mjs after every build.\n' +
'#\n' +
'# Keeps web/dist present so //go:embed all:dist in web/embed.go compiles\n' +
'# in a fresh clone, where the frontend has not been built. Without it the\n' +
'# server logs "web UI not embedded" and serves the API only, which is the\n' +
'# intended behaviour for a clone that has not run `pnpm build`.\n',
)