TryGhost
OSS
Ghost
Moved ghost/core boundary enforcement to dependency-cruiser no ref The frontend/server/shared boundaries were enforced by the custom `ghost/node/no-restricted-require` rule in ghost/core/eslint.config.mjs. That rule is specific to eslint-plugin-ghost and has no equivalent in oxlint, so it blocks the planned ESLint-to-oxlint migration. It also only inspects require() calls, missing ESM imports. The four boundary rules now run on dependency-cruiser, which enforces them on the resolved module graph (require and import) from the repo root. This drops the custom rule and lets the boundaries outlive ESLint. The original burn-down intent — "adding files to this list is an anti-pattern / work down until the list is empty" — and the per-file allowlist categorisation are carried over verbatim from the pre-flat- config .eslintrc.js, having been lost in the flat-config migration. Catching imports as well as requires immediately surfaced one leak the old rule missed: route-settings/activation-bridge.ts imports the frontend routing config, the same crossing validate.js already makes via require(). It is allowlisted alongside validate.js as known, soon-to-be-removed debt. Boundaries stay part of the single `pnpm lint` command: it runs run-many across every eslint lint target plus the boundaries target, so there is no separate lint command to remember. The boundaries target is a cached nx target on the ghost-monorepo root project (scoped inputs so the whole-repo projectRoot glob doesn't defeat caching); it also runs unconditionally in CI and as a lint-staged pre-commit signal. A top-level `pnpm check` runs lint plus tests. The cross-package apps/library model is deliberately out of scope and tabled as a follow-up.
nx run ghost-monorepo:lint:boundaries
Sign in / Sign up
Open main menu
Succeeded
CI Pipeline Execution
nx run ghost-monorepo:lint:boundaries
Click to copy
Linux
4 CPU cores
read-write
access token used
24194765
29134