FYI: Here are the PRs for this change:

https://github.com/apache/grails-core/pull/14735
https://github.com/apache/grails-forge/pull/575

See the PR descriptions for how it all works and how to test.

On Sat, May 10, 2025 at 3:03 AM Gianluca Sartori <g.sart...@gmail.com>
wrote:

> Okay I understand. My proposal was to not broaden the scope for Grails
> 7. From my point of view the most important thing is to make it work
> with the intelliJ IDEA plugin. That to me has a higher impact from a
> communication side than a technical one.
>
> We are still fighting the "Grails is dead" thing...
>
> Gianluca Sartori
> --
> https://dueuno.com
>
> On Fri, 9 May 2025 at 16:09, James Daugherty
> <jdaughe...@jdresources.net.invalid> wrote:
> >
> > Unfortunately since we still ship shell, we have to do something here.
> My
> > proposal is how we can move forward with integrating both and long term
> > look at removing shell again.
> >
> >
> > Mattias & James F both have also run across caching issues that can lead
> to
> > failures too.  I would like to propose we stop installing to the user
> home
> > and create a .grails under the project directory.  This would prevent
> > failures when working across multiple versions.  It would also make this
> > way easier to test and mimic gradle’s behavior.
> >
> >
> >
> > On Wed, May 7, 2025 at 3:07 PM Gianluca Sartori <g.sart...@gmail.com>
> wrote:
> >
> > > Hi James & James,
> > >
> > > I never took advantage of the live feature of the grails console, out
> > > of curiosity do you know what is/are the main use case/s for it?
> > >
> > > On the overall topic, I am not much into it because after the profile
> > > feature removal we created a project template we use to build new
> > > Dueuno Elements projects. In the end it's easier to maintain and it
> > > just requires a package rename and a find all/replace for the project
> > > name within files.
> > >
> > > Michael Yan developed a way to build project templates using Ant
> > > scripts, if I remember correctly. To build a custom project template I
> > > would personally prefer a script that gives the freedom to do whatever
> > > is required (maybe download stuff from a private company repository)
> > > instead of a customizable tool which by design is limited.
> > >
> > > Given all the work required to "unify" the different CLI projects
> > > though, I would suggest we release Grails 7 making sure it works with
> > > the IntelliJ Grails Plugin but without a rework of the CLI. We may
> > > address the topic for Grails 8 with more peace of mind, what do you
> > > think?
> > >
> > > Cheers,
> > > Gianluca Sartori
> > > --
> > > https://dueuno.com
> > >
> > > Gianluca Sartori
> > > --
> > > https://dueuno.com
> > >
> > >
> > > On Wed, 7 May 2025 at 15:48, James Fredley <jamesfred...@apache.org>
> > > wrote:
> > > >
> > > > James,
> > > >
> > > > Thank you for walking through this with me yesterday.
> > > >
> > > > If we look at the collective features and functionality provided
> across
> > > these tools (grails-shell-cli, grails-wrapper, profiles,
> grails-forge-cli,
> > > grails-forge-api, start.grails.org, IntelliJ Grails Plugin
> > > grails-shell-cli integration):
> > > >
> > > > 1. grails project generation, before the the project exists
> > > > 2. grails component generation within an existing grails application
> > > such as domains, services, tests, etc.
> > > > 3. execution of grails scripts, including from plugins, such as
> > > list-plugins or dbm-update
> > > >
> > > > I think the following are important to maintain from a feature and
> > > historical/backwards compatibility standpoint.  The implementation can
> and
> > > should be changed, modernized and simplified and most importantly
> > > consolidated, where possible.
> > > >
> > > > ./grails can start the process which performs all three of the items
> > > above
> > > > ./grailsw can start the process which performs 2 and 3, within an
> > > existing application
> > > >
> > > > maintaining an interactive mode on these is a nice to have
> > > >
> > > > grails-shell-cli and grails-forge-cli have cli autocomplete, with
> > > grails-forge-cli being more advanced.  We should maintain this.
> > > >
> > > > Some of what is provided by these tools overlaps with Gradle features
> > > and tasks or even directly calls Gradle.  Where possible and logical,
> we
> > > should continue to move in that direction while maintaining simple
> command
> > > syntax and without requiring complex end project changes.
> > > >
> > > > grails-wrapper and the IntelliJ Grails Plugin both call the
> > > grails-shell-cli when executing grails scripts.  So there are at leas 3
> > > ways to get to grails-shell-cli today.  I think keeping these is
> important,
> > > but any simplification or consolidation of code will make maintenance
> much
> > > easier.
> > > >
> > > > profiles and grails-forge-core both handle initial grails application
> > > generation and some grails component generation.  grails-forge-core is
> more
> > > advanced and has had substantially more effort applied in recent
> years.  My
> > > opinion is that profiles should exist for Grails 7.0.x, but likely be
> > > deprecated for 7.1.x and then profiles should fold into
> grails-forge-core
> > > for Grails 8.x.x.  As part of this, we need to make it easier to extend
> > > grails-forge like has been done historically with profiles, so
> companies
> > > can have custom grails-forge features.
> > > >
> > > > With all that said, I am on board with this proposal of changes.
> > > >
> > > > James
> > > >
> > > > On 2025/05/06 16:35:16 James Daugherty wrote:
> > > > > Hi Everyone,
> > > > >
> > > > > James F & I have been discussing the ASF release process.  I've
> > > previously
> > > > > mentioned that we have to have reproducible builds to use GitHub
> > > actions.
> > > > > We have made the discovery that it's impossible to have
> reproducible
> > > builds
> > > > > in forge due to this bug:
> https://github.com/oracle/graal/issues/291
> > > > >  Moreover, upon investigation, the shipped binary size of the
> > > > > grails-forge-cli is 81mb.  The jar files are only 40mb.  For this
> > > reason,
> > > > > we want to propose we ship the jar files instead to be compliant
> with
> > > > > Apache's requirements.
> > > > >
> > > > > With that said, what follows is what we've found & what we want to
> > > change
> > > > > so that we have:
> > > > > 1. reproducible builds
> > > > > 2. flexibility to call either forge or shell
> > > > > 3. keep shipped binary sizes to a minimum (bandwidth saving)
> > > > >
> > > > > My thought process follows, and a set of requirements to implement
> > > what we
> > > > > need to achieve these calls.  Please review and provide feedback.
> > > > >
> > > > >
> > > > > Thoughts & Proposal:
> > > > > ------------------------------------------------------
> > > > > * Following project structures today:
> > > > > 1. Single Project
> > > > > 2. Multi Project Grails Builds
> > > > > 3. Multi Project Mixed Framework Builds
> > > > >
> > > > > * a `Grails` shell script has to be at the root
> > > > > - executing that shell script needs to divert to either the
> > > > > grails-shell-cli or the grails-forge-cli
> > > > > - alternatively we can have a basic application that passes
> through to
> > > > > either of them
> > > > >
> > > > > * How to find the root directory
> > > > > - look for gradle.properties
> > > > >
> > > > > * Where to put binaries
> > > > > - .grails/$grailsVersion/lib
> > > > >
> > > > > * We ship "a" grails wrapper still with the project?
> > > > > - yes, called grailsw or grailsw.bat
> > > > >
> > > > > * How do we ship the micronaut libraires?
> > > > > - currently 81mb of the binary, but 40gig
> > > > >
> > > > > * Proposal: keep grails-wrapper in grails-core
> > > > > - purpose of this project is to download a given
> `grails-wrapper-impl`
> > > > > project jar so that we don't distribute large file sizes (saving
> money)
> > > > > - forge will use this
> > > > > - sdkman will use grails-wrapper-impl
> > > > > - grails-wrapper will write to .grails directory
> > > > >
> > > > > * Proposal: change grails-wrapper-impl to be able to delegate to
> one
> > > or the
> > > > > other
> > > > > - wrapper will be changed to look for a .grails directory and that
> > > > > directory will contain all of the jar files for shell-cli or
> forge-cli
> > > > >
> > > > > * Proposed grails structure
> > > > > gradle.properties <- will be required, grails-wrapper will look for
> > > this
> > > > > file to determine the grails version instead of the latest
> > > > > .grails <- folder for libs that get downloaded from grailsw
> invocation.
> > > > > grails-wrapper.jar <- this is the grails-wrapper project's jar
> file, it
> > > > > will be at the root instead of in .grails
> > > > > grailsw <- this will be the grails-wrapper-impl project
> > > > > grailsw.bat <-  bat verison of grailsw
> > > > >
> > > > > ------------------------------------------------------------
> > > > >
> > > > > Required changes then are:
> > > > > 1. move `grails-wrapper-impl` to grails forge since it will need
> both
> > > forge
> > > > > + grails shell
> > > > > 2. change the name of the shell script for `grails-wrapper-impl`
> to be
> > > > > `grails`
> > > > > 3. change the name of the shell script for `grails-forge-cli` to
> > > > > `grails-forge-cli` instead of `grails`
> > > > > 4. change the name of the shell script for `grails-shell-cli` to
> > > > > `grails-shell-cli` instead of `grails`
> > > > > 5. enhance `grails-wrapper` in core to download the grails version
> > > found in
> > > > > the current project via the gradle.properties (or parent folders
> until
> > > one
> > > > > is found)
> > > > > 6. enhance `grails-wrapper` to save to .grails directory in project
> > > root
> > > > > 7. enhance `grails-wrapper-impl` to invoke grails-shell-cli or to
> > > invoke
> > > > > grails-forge-cli; add `-t/--type [forge|shell]` as the option.
> > > Default to
> > > > > `-t shell`
> > > > > 8. the binaries shipped for sdkman will be `grails-wrapper-impl` -
> > > which
> > > > > will include forge & shell
> > > > > 9. ship `grails-shell-cli` and `grails-forge-cli` scripts in
> addition
> > > to
> > > > > `grails` script for sdkman
> > > > > 10. enhance grails-wrapper-impl to have bash completion for
> --forge,
> > > maybe
> > > > > some basics for shell (out of scope for all of shell)
> > > > >
> > > > > Other thoughts:
> > > > > 1. you have to keep forge separate from grails-core because to
> extend
> > > to
> > > > > forge, you have to fork it.
> > > > > 2. for release voting we'll always build both grails-core &
> > > grails-forge
> > > > > together. We will vote on them together too.
> > > > >
> > > > > Short term:
> > > > > 1. have compatibility for both grails-shell-cli & grails-forge-cli
> via
> > > the
> > > > > grails-wrapper-impl gradle project in grails-core
> > > > > 2. have the option to use either shell or forge because we ship the
> > > > > original commands & our delegator (grails-wrapper-impl) can call
> > > either via
> > > > > a flag
> > > > >
> > > > > Long term:
> > > > > 1. change grails-forge-cli to be grails-wrapper-impl
> > > > > 2. enhance forge to be extendable so that it does not have to be
> forked
> > > > > like it does today (i.e. similar to the way profiles work)
> > > > >
> > > > >
> > > > > -James
> > > > >
> > >
>

Reply via email to