Conversation
|
Thanks for opening this pull request! The maintainers of this repository would appreciate it if you would create a changelog item based on your changes. |
✅ Snyk checks have passed. No issues have been found so far.
💻 Catch issues earlier using the plugins for VS Code, JetBrains IDEs, Visual Studio, and Eclipse. |
9 tasks
Introduces Nx on top of the existing pnpm workspace, so lint/typecheck/ test can be scoped to only the projects affected by a change instead of running against the whole monorepo on every PR. - Phase 0: add nx (^23.2.1) as a workspace devDependency, nx.json with a targetDefaults entry for test:unit (cache: true), ignore .nx/cache and .nx/workspace-data. No behavior change to any existing script. - Phase 1: register @nx/vitest's inference plugin so every package with a vitest.config.ts gets a real, cached "test" target read directly from its own config, not just the packages that happened to already declare a "test:unit" npm script. Excludes vite.config.common.ts, the root vite.config.ts and vite.cern.config.ts from the plugin's default glob - none of them are test configs, and loading them as one aborts the whole project graph. defaultBase: "master" (bare `nx affected` defaults to a branch named "main"). testMode: "run" so `nx run <project>:test` doesn't default to vitest's watch mode locally. - Phase 2a: register @nx/eslint/plugin for a per-project "lint" target on every project (root `lint` script untouched). - Phase 2b: register @nx/vite/plugin's typecheckTargetName for a per-project "typecheck" target on projects with their own real vite.config.ts (design-system, web-client, web-pkg, web-test-helpers). The ~20 web-app-*/web-runtime projects only have a vitest.config.ts and aren't covered; root `pnpm run check:types` (whole-repo vue-tsc) stays the one check that covers everything. - Phase 3 (CI): adds a `full-run` output to detect-web-changes - true for push to master/stable-* or a `[full-ci]` PR title (unchanged behavior), false for a normal PR, which instead runs `nx affected -t lint` / `nx affected -t test --base=<PR base sha>`. Added fetch-depth: 0 to web-build-test's checkout, needed for `nx affected --base=<sha>` to find that commit. Check types and the full-run unit-test path deliberately stay whole-repo (see inline comments for why). Also: - removes design-system's broken "lint": "lint:stylelint" alias (needed the "lint" name free for the new per-project target; it was never callable as written - "lint:stylelint" isn't a binary - and nothing called it). - makes the design system's webfontloader import fire-and-forget so an in-flight rejection at test teardown doesn't surface as an unhandled rejection under vitest's per-project runs. - pin `typescript` via `pnpm.overrides`. Adding nx's own devDependencies makes pnpm re-resolve the workspace's peer graph, and today's registry now has a typescript 6.x that some peer ranges accept - without the pin, half the vue-peer-dependent packages (pinia, vue-router, vue3-gettext, focus-trap-vue, ...) fork into a second, incompatible module instance. Same pin as the dependency-cycle fix, for an unrelated reason; needed independently here since this branch changes package.json on its own. nx's `dependsOn: ["^target"]` errors outright on a circular task graph, so this only works once the pre-existing web-pkg/design-system/ web-test-helpers dependency cycle is fixed - see fix(web): break web-pkg/design-system/web-test-helpers dependency cycle, which this PR targets rather than master. Verified: nx run-many -t test / lint / typecheck succeed for all projects; nx show projects --affected --files=... resolves correctly for shared config changes; nx affected -t lint --base=<sha> matches pnpm lint; root pnpm lint/check:types/check:format/test:unit/build all still pass unchanged (380 files / 3128 tests).
mzner
added this pull request to stack #13012
September 26, 2026 11:02
mzner
force-pushed
the
chore/introduce-nx-v2
branch
from
September 26, 2026 11:09
3a6a9d2 to
12725ae
Compare
9 tasks
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
Adds Nx as the task runner for
web/, so CI only lints/tests the packages a PR actually touchesinstead of the whole workspace every time.
nx+nx.json, no behavior change on its own@nx/vitestgives every package with avitest.config.tsa real per-projecttesttarget@nx/eslintgives every package a per-projectlinttarget@nx/vitegives the packages with their ownvite.config.ts(design-system, web-client,web-pkg, web-test-helpers) a per-project
typechecktarget. Everything else still relies onthe whole-repo
pnpm check:typesnx affected -t lint/teston normal PRs, and the full whole-repo run onmaster/stable/
[full-ci]— same as beforeSmall side fixes:
lintscript alias — it was broken (tried to exec a script name as abinary) and never actually ran; needed the name free for Nx's own
linttarget anywayunhandled rejection when tests tear down mid-flight
typescriptpin as fix(web): break web-pkg/design-system/web-test-helpers dependency cycle #13010 — this branch touchespackage.jsontoo, so it hits the samepeer-resolution fork independently
Related Issue
Motivation and Context
Every PR to
web/runs the same lint/test/build regardless of what changed. Nx knows thedependency graph, so it can scope CI to just what's affected.
Targets #13010, not master — Nx refuses to build a task graph across a circular dependency,
and
web-pkg/design-system/web-test-helpershad exactly that cycle. Once #13010 merges,GitHub will retarget this PR to master automatically.
How Has This Been Tested?
nx run-many -t test— all 16 projects passpnpm test:unit,pnpm lint,pnpm check:types,pnpm check:format,pnpm build— all pass, unchangednx show projects --affectedcorrectly picks up all test-bearing projects on shared config changesincluding the same pre-existing cycle warning; merged with fix(web): break web-pkg/design-system/web-test-helpers dependency cycle #13010 it reproduces the combined
diff byte for byte
Types of changes
Checklist: