tailwindcss is unpinned, so the committed static/css/tailwind.css is not reproducible from the repo's own tooling #231
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Found while reviewing #219, which had to regenerate
static/css/tailwind.css.Makefile:53invokes a baretailwindcssfromPATH. There is nopackage.json, no version pin, and no hash pin anywhere. So the committed generated artefact depends entirely on whichever tailwind binary happens to be installed on the machine that ranmake css.Consequences, in order of how much they bite:
Dockerfileorscript/regenerates it, so whatever is in the tree is what users get. A regeneration on a different tailwind version silently changes the shipped stylesheet.make csscan produce different output from identical input, and neither can tell which is correct.<svg>rendered at the 300x150 CSS default on every delivery row. The gate could not catch it because nothing verifies the artefact matches the templates.It also sits against the repo policy of hash-pinning external references, which the
golangci-lintimage digest and thescript/bootstraprelease-archive sha256 pins already follow.Definition of done:
tailwindcssis pinned to an exact version, hash-pinned consistent with how the lint image and bootstrap archives are pinnedmake cssruns it in a container the same way linting does, rather than depending on a host binarystatic/css/tailwind.cssdoes not match what the pinned tailwind produces from the current templates andinput.css— that is the part that would have caught #219's missing classes