Skip to content

Upgrade to Grails 8.0.0 - #32

Merged
jdaugherty merged 6 commits into
8.0.xfrom
grails-8.0.0
Oct 8, 2026
Merged

jdaugherty merged 6 commits into
8.0.xfrom
grails-8.0.0

Conversation

@jdaugherty

@jdaugherty jdaugherty commented Oct 8, 2026 •

Copy link
Copy Markdown
Contributor

Moves 8.0.x from Grails 8.0.0-RC2 to the 8.0.0 release, and picks up the items the Grails 8 upgrade guide still flagged.

Changes

  • Grails 8.0.0 and Gradle 9.8.1. The plugin's own wrapper (used by build.sh / LOCALDEPLOYMENT.md) now matches the root wrapper byte-for-byte.
  • Upgrade guide leftovers
    • grails { springDependencyManagement = false } → bom = null (the old flag is deprecated; behavior is identical and the published POM is unchanged).
    • Removed the explicit console 'org.apache.grails:grails-console' from the plugin and app; Grails 8 provisions it onto grailsCli.
    • The app's error.gsp read javax.servlet.error.exception, which Servlet 6 never sets; it now reads the jakarta. attribute.
  • asset-pipeline 5.2.2, the version Grails 8.0.1 manages, ahead of the 8.0.0 BOM's 5.2.0, for the Gradle plugin and the app runtime. It lives in gradle.properties as assetPipelineVersion; drop it once grailsVersion is 8.0.1.
  • Gradle 10 prep. Replaced the deprecated space-assignment syntax in build.gradle and gradle/test-config.gradle.
  • npm. In-range bumps for @codemirror/language, state, view and handlebars, plus non-breaking audit fixes (brace-expansion, probe-image-size, source-map-js). @codemirror/commands and legacy-modes stay put because no newer webjars exist, and jasmine stays on 5.x for the jsdom runner.
  • CI. Node 20.5.1 → 24.21.0 (Node 20 is EOL, and jsdom 30 needs ≥24.15), actions/setup-java v5 → v6, and the pre-release action now points at apache/grails-github-actions (the post-release step already did).

Testing

  • ./gradlew clean check assemble --no-build-cache on Liberica 21.0.12: all 47 plugin specs pass.
  • npx gulp grailsRelease and npm test on Node 24.20.0: all 33 JS specs pass.
  • plugin/gradlew --version reports 9.8.1.
  • The sample app was not booted.

Known leftovers

  • 15 npm advisories remain in build-only tooling (braces / sprintf-js via gulp, del and gulp-wrap). Neither has a patched release; npm's suggested fix is a downgrade to gulp 3.
  • A Gradle deprecation (a Provider used where a boolean is expected; it becomes an error in Gradle 11) comes from Grails' own GSP Gradle plugin (GroovyPagePlugin.groovy:299), not this repo.
  • softprops/action-gh-release is still pinned to v2.2.2; v3 is available but the release path is untested here.

🤖 Generated with Claude Code

Bump grailsVersion from 8.0.0-RC2 to the 8.0.0 release.

Move the Gradle wrapper to 9.8.1, the current patch of the 9.8 line Grails
8.0.0 is built with. The plugin's own wrapper, which build.sh and
LOCALDEPLOYMENT.md build from, is regenerated to match the root one
byte-for-byte, including the jar and gradlew.bat it had kept from 9.6.1.
Replace grails { springDependencyManagement = false } with bom = null in
the plugin. Grails 8 deprecated the old flag; it is still honored as an
alias, so the published POM is unchanged — it carries only the runtime
webjars, versioned from the BOM.

Drop the explicit console("org.apache.grails:grails-console") from the
plugin and the app. Grails 8 provisions grails-console onto the grailsCli
configuration, which the console and shell tasks draw from.

Read jakarta.servlet.error.exception rather than javax.servlet.error.exception
in the app's error page. Servlet 6 only sets the jakarta attribute, so the
fallback branch could never render the exception.
Gradle 9.8 deprecates setting properties with the space syntax
(url '...', version x, theme 'mocha') and removes it in Gradle 10.
Switch the root build and the test-logger configuration to '=' assignments.
Refresh @codemirror/language, @codemirror/state, @codemirror/view and
handlebars to the latest within their existing ranges, and apply npm audit
fixes for three high severity advisories in the build/test toolchain
(brace-expansion, probe-image-size, source-map-js). All are
devDependencies; nothing ships to consumers.

@codemirror/commands stays at 6.11.0 and @codemirror/legacy-modes at
6.5.1: npm has newer releases but no matching webjars, and the editor loads
them from webjars. jasmine stays on 5.x for the jsdom runner.

The remaining advisories (braces, sprintf-js and their dependents through
gulp, del and gulp-wrap) have no patched release on the affected lines.
Node 20 is end of life, and jsdom 30 requires ^22.22.2 || ^24.15.0 ||
>=26.0.0, so the pinned 20.5.1 is out of range. Pin the current 24 LTS,
24.21.0, in both workflows; the release build keeps an exact version for
reproducibility.

Bump actions/setup-java to v6, and reference the pre-release action as
apache/grails-github-actions, where grails/github-actions now redirects
and where the post-release step already points.
Take asset-pipeline 5.2.2, the version Grails 8.0.1 manages, ahead of the
5.2.0 the Grails 8.0.0 BOMs select, for both the Gradle plugin in buildSrc
and the app's runtime. The version lives in gradle.properties as
assetPipelineVersion; drop it once grailsVersion moves to 8.0.1.
@jdaugherty
jdaugherty merged commit b53db3f into 8.0.x Oct 8, 2026
2 checks passed
@jdaugherty
jdaugherty deleted the grails-8.0.0 branch October 8, 2026 13:05
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.

1 participant