Clone this repo:
  1. 04b1447 Merge pull request #186 from apache/feature/unsupported-versions by James Daugherty · 8 days ago main
  2. 8e79206 Key the disclosure auto-open on the selected version by James Daugherty · 8 days ago feature/unsupported-versions
  3. 69a7725 Point the group disclosure at the rows it controls by James Daugherty · 8 days ago
  4. 402a990 Read end of support dates as UTC by James Daugherty · 8 days ago
  5. ba35a08 Interpolate Lang messages even after a plain lookup by James Daugherty · 8 days ago

Grails Application Forge UI

Build Status

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.

To build the site for CI run:

./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.

For local development mimicking production launch site:

  • To bypass CORS restrictions, Launch the Local Version / Proxy Server
cd ./dev-proxy-server
npm run start
  • Start the dev build of the site
cd ./app/launch/
npm run start:local

Simulating end of support dates

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

Running a Grails Forge API locally to dev against

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

Updating The Version feed

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",
        ...
    },
    

Supported and unsupported versions

Grails Version list with supported lines and a collapsed Unsupported Versions disclosure

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.

Running the React app without changing grails-version-feed.json

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.