@@ -11,9 +11,6 @@ name: Fresh Install Tests
1111# so test tooling churn doesn't cause false positives.
1212
1313on :
14- push :
15- branches :
16- - package-upgrades
1714 schedule :
1815 - cron : " 0 2 * * *" # Daily at 02:00 UTC
1916 workflow_dispatch : # Allow manual runs
6764 echo "Updating prod deps for: $FILTERS"
6865 eval pnpm update --prod $FILTERS
6966
67+ - id : dedupe_deps
68+ name : Dedupe transitive dependencies
69+ # After bumping the publishable packages' prod deps, collapse any
70+ # duplicate transitive resolutions (e.g. @tiptap/core + @tiptap/pm)
71+ # that would otherwise differ between the updated publishable packages
72+ # and the un-updated examples/playground. Without this, TypeScript
73+ # treats the two copies' exports as unrelated types and example-editor
74+ # fails to build (TS2322 on Extension<any, any> vs AnyExtension).
75+ # Dedupe only rewrites the lockfile — it does NOT modify package.json,
76+ # so the examples' "@blocknote/*": "latest" specs (which is what
77+ # CodeSandbox users see) stay intact.
78+ run : pnpm dedupe
79+
7080 - id : build_packages
7181 name : Build packages
7282 run : pnpm run build
@@ -106,6 +116,8 @@ jobs:
106116 failed_step="Install dependencies"
107117 elif [ "${{ steps.update_prod_deps.outcome }}" = "failure" ]; then
108118 failed_step="Update prod deps of published packages"
119+ elif [ "${{ steps.dedupe_deps.outcome }}" = "failure" ]; then
120+ failed_step="Dedupe transitive dependencies"
109121 elif [ "${{ steps.build_packages.outcome }}" = "failure" ]; then
110122 failed_step="Build packages"
111123 elif [ "${{ steps.run_unit_tests.outcome }}" = "failure" ]; then
0 commit comments