The GitHub Actions job "End to End" on 
grails-core.git/test/8.0.x-legacy-command-e2e has succeeded.
Run started by GitHub user jdaugherty (triggered by jdaugherty).

Head commit for run:
312e8bf6f823e9f67bc9553ab63b5400360ab749 / James Daugherty 
<[email protected]>
Move legacy command compatibility tests into an end-to-end build

Addresses the outstanding review feedback on the Grails 7 command
compatibility layer.

Build placement. The Grails 7 fixture needs Java 17 - the minimum for a
Grails 7 app, so the binary matches what a real Grails 7 plugin is built
with - but expressing that as a Gradle toolchain put an unprovisionable
JDK requirement into the core build's task graph. Nothing in the repo
provisions a 17 (no foojay resolver, no toolchainManagement, no
org.gradle.java.installations.*), and because the fixture jar was an
implementation dependency, `./gradlew build -PskipTests` reached it - so
the build failed on the JDK the project documents in .sdkmanrc and in the
reproducible-build container. CI only passed because the runner images
happen to ship a 17 that Gradle auto-detects.

The three projects now live in a new top-level end-to-end build, so the
root build no longer reaches them. Each half declares its JDK in its own
.sdkmanrc instead of a toolchain, and a dedicated workflow provisions
both, reading the versions out of those files.

Resolution goes through published artifacts rather than project
substitution, which is what makes these tests end-to-end: they consume
grails-core the way an application does, through real poms and module
metadata. The repository is the same build/local-maven that grails-forge
points its generated applications at, populated by
publishAllPublicationsToTestCaseMavenRepoRepository in both the root and
grails-gradle builds. settings.gradle scopes it with exclusiveContent so
a remote snapshot cannot quietly satisfy an org.apache.grails request and
leave the suite testing something other than the working tree.

That also disposes of the CLI companion problem rather than working
around it. grails-core-cli is a secondary capability of :grails-core, not
a project, so composite substitution cannot express it and hits a
capability self-conflict - but it is a first-class published module whose
metadata CliPublishingSupport already rewrites for external consumers, so
resolving from the repository gets it for free.

The Grails 7 fixture stays outside all of this as a standalone build
under its own JDK, consumed as a prebuilt jar.

Trait-derived command names. Every legacy command in the tree overrode
getName()/getDescription(), so the trait's default derivation - what
create-command generated on Grails 7, and therefore what most published
Grails 7 commands rely on for their registration key - had no coverage.
Adds a third precompiled command declaring neither getter.

Factory resource failures are no longer silent. loadFactoryDeclarations
dropped a malformed resource with no log line at any level, and it backs
modern grails-cli.factories discovery, so one bad file lost every one of
a plugin's Grails 8 commands and providers. It now warns with the
resource URL and cause, keeping the per-resource isolation.

skipBootstrap resolution is covered. The lookup moves into a static
helper so the adapter-target case - where reading the flag off the
adapter instead of its target would let BootStrap run during dbm-update -
is guarded by a test.

Also drops a duplicated fixture version pin in the integration spec and
corrects comments describing the fixture as an included composite build.

Report URL: https://github.com/apache/grails-core/actions/runs/30415097294

With regards,
GitHub Actions via GitBox

Reply via email to