This project builds the Grails Application Forge UI. It is published into apache/grails-website and served at that path. start.grails.org redirects there.
./gradlew build --console=plain
In the new version of npm (v7), by default, npm install will fail when it encounters conflicting peerDependencies. You may see the following error with build command:
> Task :npmInstall npm ERR! code ERESOLVE npm ERR! ERESOLVE could not resolve npm ERR! npm ERR! While resolving: react-materialize@3.9.8 npm ERR! Found: react@17.0.2 npm ERR! node_modules/react npm ERR! react@"^17.0.2" from the root project npm ERR! peer react@"^16.8.0 || ^17.0.0" from @material-ui/core@4.11.4 npm ERR! node_modules/@material-ui/core npm ERR! @material-ui/core@"^4.11.4" from the root project npm ERR! peer @material-ui/core@"^4.0.0" from @material-ui/icons@4.11.2 npm ERR! node_modules/@material-ui/icons npm ERR! @material-ui/icons@"^4.11.2" from the root project npm ERR! 1 more (@material-ui/lab) npm ERR! 12 more (@material-ui/icons, @material-ui/lab, ...) npm ERR! npm ERR! Could not resolve dependency: npm ERR! peer react@"^16.12.0" from react-materialize@3.9.8 npm ERR! node_modules/react-materialize npm ERR! react-materialize@"^3.9.8" from the root project npm ERR! npm ERR! Conflicting peer dependency: react@16.14.0 npm ERR! node_modules/react npm ERR! peer react@"^16.12.0" from react-materialize@3.9.8 npm ERR! node_modules/react-materialize npm ERR! react-materialize@"^3.9.8" from the root project npm ERR! npm ERR! Fix the upstream dependency conflict, or retry npm ERR! this command with --force, or --legacy-peer-deps npm ERR! to accept an incorrect (and potentially broken) dependency resolution. npm ERR! npm ERR! See /Users/behl/.npm/eresolve-report.txt for a full report. npm ERR! A complete log of this run can be found in: npm ERR! /Users/behl/.npm/_logs/2022-12-30T16_02_08_877Z-debug-0.log
This happens due to latest version of Node.js, then you might need to set flag--legacy-peer-deps with npm install command.
cd ./dev-proxy-server npm run start
cd ./app/launch/ npm run start:local
Hosted Forge instances built before endOfSupport existed do not report it. To try the unsupported-version grouping locally, give the proxy server dates per feed channel; null strips the field from a channel that does report one:
cd ./dev-proxy-server FORGE_END_OF_SUPPORT="OLDER=2026-09-30,PREV=2026-10-28,NEXT=null" npm run start
If you want to run against a version of the starter api Grails Starter Api
Outside of this project pull down that repo
git clone git@github.com:apache/grails-core.git cd grails-core/grails-forge export CORS_ALLOWED_ORIGIN=http://localhost:3000 ./gradlew grails-forge-web-netty:run
Then start up a version server to provide that instance
cd ./dev-proxy-server npm run start:starter
You can find the version feed file at ./app/launch/public/grails-version-feed.json. It must be in valid JSON format, so beware of these gotyas!
Keys must be quoted
GOOD
{
"key": "RELEASE",
"baseUrl": "https://latest.grails.org",
"order": 0
}
BAD
{
key: "RELEASE",
baseUrl: "https://latest.grails.org",
order: 0
}
No trailing comma
GOOD
{
"key": "RELEASE",
...
},
{
"key": "NEXT",
...
}
BAD
{
"key": "RELEASE",
...
},
{
"key": "NEXT",
...
},
Each channel in the feed points at a Grails Forge instance, and the UI reads that instance‘s /versions endpoint to learn which Grails version it serves. Forge instances built from grails-core 7.0.18, 7.1.8, 7.2.5, 8.0.1 and later also report endOfSupport, the last day (ISO yyyy-MM-dd) that release line is supported. The date comes from grailsEndOfSupport in that branch’s gradle.properties.
The version list shows supported release lines first, oldest to newest. Lines whose endOfSupport has passed follow under an “Unsupported Versions (n)” disclosure, collapsed by default. Expanding it lists every unsupported line, most recently ended first, with the date support ended, and they all stay selectable. The disclosure opens on its own when the selection lands on an unsupported version, for example from a share link or the keyboard shortcut. It can be collapsed again with an unsupported version selected: that row stays visible and the heading counts what is hidden, for example “(1 more)”. A line stays supported through its endOfSupport day. The date carries no time zone, so it is read as a UTC date and every visitor sees a line end at the same moment. A missing, null or malformed date is treated as “unknown” and shown with the supported versions, which is also what happens for instances that predate the field.
In dev-proxy-server/ there is a run.command file that will expose the proxies of the grails version feed on port 8088. When starting the React app under app/launch use the command:
npm run start:local
This will run the React app while retargetig the version feed for it to localhost:8088.