Skip to content

chore(repo): bump node to 26 and update mise tool versions#35604

Open
FrozenPandaz wants to merge 5 commits intomasterfrom
claude/update-mise-pnpm-versions-9masY
Open

chore(repo): bump node to 26 and update mise tool versions#35604
FrozenPandaz wants to merge 5 commits intomasterfrom
claude/update-mise-pnpm-versions-9masY

Conversation

@FrozenPandaz
Copy link
Copy Markdown
Contributor

Current Behavior

mise.toml and several workflow files pin older tool versions:

  • node 24.11.0
  • java 24
  • maven 3.9.11
  • rust 1.90.0
  • vale 3.13.1
  • Several workflows hard-code node-version: '24' and the nightly e2e
    matrix uses '24.0.0'.

Expected Behavior

Tool versions are bumped to current latest stable releases, and the
hard-coded Node 24 references in workflows are updated to match the
new Node 26 default.

mise.toml changes:

  • node 24.11.0 → 26.0.0
  • java 24 → 26
  • maven 3.9.11 → 3.9.15
  • rust 1.90.0 → 1.95.0
  • vale 3.13.1 → 3.14.1

Workflow changes (Node 24 → 26):

  • .github/workflows/banner-monitor.yml
  • .github/workflows/generate-embeddings.yml
  • .github/workflows/issue-notifier.yml
  • .github/workflows/pr-title-validation.yml
  • .github/workflows/nightly/process-matrix.ts (matrix 24.0.026.0.0)

Left untouched intentionally:

  • publish.yml NODE_VERSION: 22.16.0, openjdk21, and dotnet-9.0-sdk
    references — these are pinned to specific versions for the release
    pipeline / native binary builds and shouldn't be moved without a
    separate decision.
  • e2e-matrix.yml matrix node_version: 20 / 22 entries — these
    intentionally test against supported Node LTS versions.
  • bun = "1.3" and pnpm@10.28.2 — not part of this bump (out of
    scope per request).

Related Issue(s)

N/A


Generated by Claude Code

Update mise.toml: node 24.11.0 -> 26.0.0, java 24 -> 26, maven 3.9.11
-> 3.9.15, rust 1.90.0 -> 1.95.0, vale 3.13.1 -> 3.14.1.

Bump hard-coded node-version: '24' references in workflows
(banner-monitor, generate-embeddings, issue-notifier,
pr-title-validation) and the nightly e2e matrix (process-matrix.ts)
to '26' to match.

https://claude.ai/code/session_01J2rRAQgqVkLXraa6rmp9T2
@FrozenPandaz FrozenPandaz requested a review from a team as a code owner May 6, 2026 22:14
@FrozenPandaz FrozenPandaz requested a review from AgentEnder May 6, 2026 22:14
@netlify
Copy link
Copy Markdown

netlify Bot commented May 6, 2026

Deploy Preview for nx-dev ready!

Name Link
🔨 Latest commit 24155a2
🔍 Latest deploy log https://app.netlify.com/projects/nx-dev/deploys/69fbee10f228c300086a0116
😎 Deploy Preview https://deploy-preview-35604--nx-dev.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

@netlify
Copy link
Copy Markdown

netlify Bot commented May 6, 2026

Deploy Preview for nx-docs ready!

Name Link
🔨 Latest commit 24155a2
🔍 Latest deploy log https://app.netlify.com/projects/nx-docs/deploys/69fbee10e564dd000894b4f7
😎 Deploy Preview https://deploy-preview-35604--nx-docs.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

@nx-cloud
Copy link
Copy Markdown
Contributor

nx-cloud Bot commented May 6, 2026

View your CI Pipeline Execution ↗ for commit 24155a2

Command Status Duration Result
nx affected --targets=lint,test,build,e2e,e2e-c... ❌ Failed 3m 19s View ↗
nx run-many -t check-imports check-lock-files c... ✅ Succeeded 3s View ↗
nx-cloud record -- pnpm nx-cloud conformance:check ✅ Succeeded 59s View ↗
nx build workspace-plugin ✅ Succeeded 2m 21s View ↗
nx-cloud record -- nx sync:check ✅ Succeeded 24s View ↗
nx-cloud record -- nx format:check ✅ Succeeded 2s View ↗

☁️ Nx Cloud last updated this comment at 2026-05-07 01:53:19 UTC

nx-cloud[bot]

This comment was marked as outdated.

Restore node 24 entries in workflow matrix lists so 26 is added
alongside, not replacing it.

https://claude.ai/code/session_01J2rRAQgqVkLXraa6rmp9T2
Comment on lines +13 to +22
@@ -19,7 +19,7 @@ jobs:
- name: Install Node.js
uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0
with:
node-version: '24'
node-version: '26'
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Matrix inconsistency: The strategy matrix defines both ['24', '26'] (line 13), which would create 2 jobs, but the setup-node step hardcodes node-version: '26' (line 22). This means both matrix jobs will use Node 26 instead of testing with both versions.

The setup-node step should reference the matrix variable:

node-version: ${{ matrix.node-version }}

Alternatively, if only Node 26 testing is desired, remove the matrix entirely and keep just node-version: ['26'] on line 13.

Suggested change
node-version: ['24', '26']
steps:
- name: Checkout
- name: Install Node.js
uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0
with:
node-version: ${{ matrix.node-version }}

Spotted by Graphite

Fix in Graphite


Is this helpful? React 👍 or 👎 to let us know.

Single-element node-version arrays (generate-embeddings.yml,
process-matrix.ts macos and windows entries) get replaced with 26.
The multi-version linux nightly matrix keeps 24 and gains 26 as an
additional entry.

https://claude.ai/code/session_01J2rRAQgqVkLXraa6rmp9T2
os_timeout: 60,
package_managers: ['npm', 'pnpm', 'yarn'],
node_versions: ['20.19.0', '22.13.0', '24.0.0'],
node_versions: ['20.19.0', '22.13.0', '24.0.0', '26.0.0'],
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Inconsistent Node version update strategy. This line adds '26.0.0' to the array (keeping '24.0.0'), while line 84 replaces '24.0.0' with '26.0.0' for MacOS. This will expand the Linux test matrix from 3 to 4 Node versions (running 12 combinations instead of 9 per package manager), significantly increasing CI time and costs.

Based on the PR description using "→" notation and the MacOS replacement pattern, this should likely be:

node_versions: ['20.19.0', '22.13.0', '26.0.0'],

If testing against Node 24 is still required, then line 84 should also keep '24.0.0' for consistency.

Suggested change
node_versions: ['20.19.0', '22.13.0', '24.0.0', '26.0.0'],
node_versions: ['20.19.0', '22.13.0', '26.0.0'],

Spotted by Graphite

Fix in Graphite


Is this helpful? React 👍 or 👎 to let us know.

…upport

Gradle 8.14.x has known issues with Java 25+ and would fail under
the bumped Java 26 toolchain (gradle/gradle#35111). Gradle 9.5.0
adds the required Java 26 runtime support.

Regenerated via ./gradlew wrapper --gradle-version 9.5.0
--distribution-type bin. The 8.14.3 build emitted deprecation
warnings during the wrapper task ("incompatible with Gradle 9.0"),
so build scripts may need follow-up fixes before nightly e2e on
Java 26 is fully green.

https://claude.ai/code/session_01J2rRAQgqVkLXraa6rmp9T2
nx-cloud[bot]

This comment was marked as outdated.

The com.github.johnrengelman.shadow fork is unmaintained and breaks on
Gradle 9 due to fileMode and mainClassName API removals. com.gradleup
.shadow is the maintained continuation; 9.4.1 is the latest stable and
requires Gradle 9+.

batch-runner already uses application { mainClass.set(...) } and does
not touch fileMode, so no consumer-side changes are needed.

https://claude.ai/code/session_01J2rRAQgqVkLXraa6rmp9T2
Copy link
Copy Markdown
Contributor

@nx-cloud nx-cloud Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nx Cloud is proposing a fix for your failed CI:

We updated the Kotlin Maven plugin version from 1.9.22 to 2.1.0 in pom.xml so the compiler can parse Java 26 version strings, and updated NxProjectExtension and NxTaskExtension to use MapProperty<String, Any> (non-nullable) to satisfy the tightened type bounds introduced in Gradle 9.5.0. These changes unblock both failing tasks without altering any business logic or user-facing DSL behavior.

Warning

We could not verify this fix.

Suggested Fix changes
diff --git a/packages/gradle/project-graph/src/main/kotlin/dev/nx/gradle/NxProjectExtension.kt b/packages/gradle/project-graph/src/main/kotlin/dev/nx/gradle/NxProjectExtension.kt
index 18023cd9..0d42265d 100644
--- a/packages/gradle/project-graph/src/main/kotlin/dev/nx/gradle/NxProjectExtension.kt
+++ b/packages/gradle/project-graph/src/main/kotlin/dev/nx/gradle/NxProjectExtension.kt
@@ -39,7 +39,7 @@ import org.gradle.api.provider.MapProperty
  */
 open class NxProjectExtension @Inject constructor(objects: ObjectFactory) {
   /** JSON root for project-level Nx config */
-  val json: MapProperty<String, Any?> = objects.mapProperty(String::class.java, Any::class.java)
+  val json: MapProperty<String, Any> = objects.mapProperty(String::class.java, Any::class.java)
 
   // DSL methods for building JSON config
 
@@ -65,7 +65,7 @@ open class NxProjectExtension @Inject constructor(objects: ObjectFactory) {
     json.put(key, arr)
   }
 
-  fun merge(map: Map<String, Any?>) = json.putAll(asJsonMap(map))
+  fun merge(map: Map<String, Any?>) = asJsonMap(map).forEach { (k, v) -> v?.let { json.put(k, it) } }
 }
 
 /**
diff --git a/packages/gradle/project-graph/src/main/kotlin/dev/nx/gradle/NxTaskExtension.kt b/packages/gradle/project-graph/src/main/kotlin/dev/nx/gradle/NxTaskExtension.kt
index e4a13fd4..287fed7e 100644
--- a/packages/gradle/project-graph/src/main/kotlin/dev/nx/gradle/NxTaskExtension.kt
+++ b/packages/gradle/project-graph/src/main/kotlin/dev/nx/gradle/NxTaskExtension.kt
@@ -41,7 +41,7 @@ import org.gradle.api.provider.MapProperty
  */
 open class NxTaskExtension @Inject constructor(objects: ObjectFactory) {
   /** JSON root for task-level Nx config */
-  val json: MapProperty<String, Any?> = objects.mapProperty(String::class.java, Any::class.java)
+  val json: MapProperty<String, Any> = objects.mapProperty(String::class.java, Any::class.java)
 
   // DSL methods for building JSON config
 
@@ -67,7 +67,7 @@ open class NxTaskExtension @Inject constructor(objects: ObjectFactory) {
     json.put(key, arr)
   }
 
-  fun merge(map: Map<String, Any?>) = json.putAll(asJsonMap(map))
+  fun merge(map: Map<String, Any?>) = asJsonMap(map).forEach { (k, v) -> v?.let { json.put(k, it) } }
 }
 
 /** Type-safe accessor for the nx extension in Kotlin DSL. */
diff --git a/pom.xml b/pom.xml
index e3ea3854..792d958a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -51,7 +51,7 @@
     <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
 
     <!-- Dependency Versions -->
-    <kotlin.version>1.9.22</kotlin.version>
+    <kotlin.version>2.1.0</kotlin.version>
     <maven.version>4.0.0-rc-5</maven.version>
     <maven.plugin.tools.version>3.11.0</maven.plugin.tools.version>
     <jackson.version>2.16.1</jackson.version>

🔔 Heads up, your workspace has pending recommendations ↗ to auto-apply fixes for similar failures.

Apply fix via Nx Cloud  Reject fix via Nx Cloud


Or Apply changes locally with:

npx nx-cloud apply-locally Wcy7-XJPo

Apply fix locally with your editor ↗   View interactive diff ↗



🎓 Learn more about Self-Healing CI on nx.dev

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants