This is an automated email from the ASF dual-hosted git repository.

jdaugherty pushed a commit to branch 7.0.x
in repository https://gitbox.apache.org/repos/asf/grails-core.git


The following commit(s) were added to refs/heads/7.0.x by this push:
     new 333a5bf6b1 [skip ci] rework forge cli creation to match grails-cli 
creation
333a5bf6b1 is described below

commit 333a5bf6b1d8ca62b491232123a716bde04cc235
Author: James Daugherty <[email protected]>
AuthorDate: Tue Jul 8 21:06:02 2025 -0400

    [skip ci] rework forge cli creation to match grails-cli creation
---
 grails-forge/grails-cli/build.gradle       |  26 ++++---
 grails-forge/grails-forge-cli/build.gradle | 116 +++++++++++++++--------------
 2 files changed, 78 insertions(+), 64 deletions(-)

diff --git a/grails-forge/grails-cli/build.gradle 
b/grails-forge/grails-cli/build.gradle
index 80056bd423..ca39496d88 100644
--- a/grails-forge/grails-cli/build.gradle
+++ b/grails-forge/grails-cli/build.gradle
@@ -71,7 +71,7 @@ apply {
 TaskProvider<Jar> jarTask = tasks.named('jar', Jar)
 jarTask.configure { Jar it ->
     it.manifest {
-        attributes 'Main-Class': project.property('startMainClass')
+        attributes 'Main-Class': findProperty('startMainClass')
     }
 }
 
@@ -126,22 +126,30 @@ 
project.extensions.getByType(DistributionContainer).configureEach {
 
         from(cliStartScripts) {
             into 'bin'
-            fileMode = 0755
+            it.filePermissions { permissions ->
+                permissions.unix(0755)
+            }
         }
 
         from(shellCliStartScripts) {
             into 'bin'
-            fileMode = 0755
+            it.filePermissions { permissions ->
+                permissions.unix(0755)
+            }
         }
 
         from(forgeCliStartScripts) {
             into 'bin'
-            fileMode = 0755
+            it.filePermissions { permissions ->
+                permissions.unix(0755)
+            }
         }
 
-        
from(rootProject.project(':grails-forge-cli').layout.buildDirectory.file('exploded/bin/grails_forge_cli_completion'))
 {
+        
from(rootProject.project(':grails-forge-cli').layout.buildDirectory.file('build-completion/grails_forge_cli_completion'))
 {
             into 'bin'
-            fileMode = 0755
+            it.filePermissions { permissions ->
+                permissions.unix(0755)
+            }
         }
 
         from(rootProject.layout.projectDirectory.file('../LICENSE')) { it.into 
'' }
@@ -153,19 +161,19 @@ 
project.extensions.getByType(DistributionContainer).configureEach {
 
 def distZipTask = tasks.named('distZip')
 distZipTask.configure {
-    dependsOn cliStartScripts, forgeCliStartScripts, shellCliStartScripts, 
jarTask, shadowJarTask, 
rootProject.project(':grails-forge-cli').tasks.named('exploded')
+    dependsOn cliStartScripts, forgeCliStartScripts, shellCliStartScripts, 
jarTask, shadowJarTask, 
rootProject.project(':grails-forge-cli').tasks.named('buildCompletion')
 }
 tasks.named('build').configure {
     it.dependsOn(distZipTask)
 }
 tasks.named('assemble').configure {
-    it.dependsOn cliStartScripts, forgeCliStartScripts, shellCliStartScripts, 
rootProject.project(':grails-forge-cli').tasks.named('exploded')
+    it.dependsOn cliStartScripts, forgeCliStartScripts, shellCliStartScripts, 
rootProject.project(':grails-forge-cli').tasks.named('buildCompletion')
 }
 tasks.named('installDist').configure {
     it.dependsOn cliStartScripts, forgeCliStartScripts, shellCliStartScripts
 }
 tasks.named('distTar').configure {
-    dependsOn cliStartScripts, forgeCliStartScripts, shellCliStartScripts, 
jarTask, shadowJarTask, 
rootProject.project(':grails-forge-cli').tasks.named('exploded')
+    dependsOn cliStartScripts, forgeCliStartScripts, shellCliStartScripts, 
jarTask, shadowJarTask, 
rootProject.project(':grails-forge-cli').tasks.named('buildCompletion')
 }
 
 sdkman {
diff --git a/grails-forge/grails-forge-cli/build.gradle 
b/grails-forge/grails-forge-cli/build.gradle
index 7322b76209..ca51f4ed8e 100644
--- a/grails-forge/grails-forge-cli/build.gradle
+++ b/grails-forge/grails-forge-cli/build.gradle
@@ -26,7 +26,7 @@ import 
org.grails.forge.internal.tasks.PicocliBuildCompletionTask
 plugins {
     id 'groovy'
     id 'java-library'
-    id 'application'
+    id 'distribution'
     id 'com.gradleup.shadow'
     id 'org.grails.forge.rocker'
 }
@@ -62,6 +62,11 @@ configurations {
     }
 }
 
+ext {
+    cliProject = true
+    startMainClass = 'org.grails.forge.cli.Application'
+}
+
 dependencies {
     annotationProcessor 
platform("io.micronaut:micronaut-bom:$micronautVersion")
     implementation platform("io.micronaut:micronaut-bom:$micronautVersion")
@@ -103,18 +108,10 @@ dependencies {
     testImplementation "org.codehaus.groovy:groovy-test:$groovyVersion"
 }
 
-application {
-    mainClass = 'org.grails.forge.cli.Application'
-}
-
 rocker {
     postProcessing = ['org.grails.forge.rocker.plugin.WhitespaceProcessor']
 }
 
-startScripts {
-    applicationName = 'grails-forge-cli'
-}
-
 apply {
     from rootProject.layout.projectDirectory.file('gradle/java-config.gradle')
     from 
rootProject.layout.projectDirectory.file('gradle/publish-config.gradle')
@@ -124,7 +121,7 @@ apply {
 }
 
 def generateManpageAsciiDoc = tasks.register('generateManpageAsciiDoc', 
GenerateManpageAsciidoc) {
-    mainClass = application.mainClass
+    mainClass = findProperty('startMainClass') as String
     classpath.from(configurations.generateConfig, 
sourceSets.main.runtimeClasspath)
     outputDirectory = layout.buildDirectory.dir('generated-picocli-docs')
 }
@@ -147,74 +144,83 @@ processManPages.configure { Sync it ->
 
 def buildCompletion = tasks.register('buildCompletion', 
PicocliBuildCompletionTask)
 buildCompletion.configure { PicocliBuildCompletionTask it ->
-    it.outputDirectory.set(layout.buildDirectory.dir('bin'))
+    it.outputDirectory.set(layout.buildDirectory.dir('build-completion'))
     it.classpath.from(sourceSets.main.runtimeClasspath)
-    it.mainClass.set(application.mainClass)
+    it.mainClass.set(findProperty('startMainClass'))
 }
 
-distributions {
-    main {
-        contents {
-            from(buildCompletion) {
-                into 'bin'
-            }
-            from(rootProject.layout.projectDirectory.file('LICENSE')) {
-                into ''
-            }
-        }
+TaskProvider<Jar> jarTask = tasks.named('jar', Jar)
+jarTask.configure { Jar it ->
+    it.manifest {
+        attributes 'Main-Class': project.property('startMainClass')
     }
 }
 
-tasks.named('shadowJar', ShadowJar) {
+TaskProvider<Jar> shadowJarTask = tasks.named('shadowJar', ShadowJar)
+shadowJarTask.configure { ShadowJar it ->
+    it.archiveClassifier.set('')
 
     // TODO: This needs reworked so we have one consistent license view, for 
now the disclaimer is shipped so this should suffice until this is fixed.
     it.transform(ApacheLicenseResourceTransformer)
     it.transform(ApacheNoticeResourceTransformer)
     it.exclude('DISCLAIMER', 'license.header', 'licenses/**', 
'META-INF/NOTICE.md', 'META-INF/NOTICE', 'META-INF/NOTICE.md', 
'META-INF/licenses/**', 'META-INF/LICENSE.md')
 
-    mergeServiceFiles()
+    it.mergeServiceFiles()
 }
 
-tasks.named('shadowDistZip') {
-    enabled = false
-}
-tasks.named('shadowDistTar') {
-    enabled = false
+TaskProvider<CreateStartScripts> forgeCliStartScripts = 
tasks.register('createForgeCliStartScripts', CreateStartScripts)
+forgeCliStartScripts.configure { CreateStartScripts t ->
+    t.dependsOn jarTask, shadowJarTask
+    t.outputDir = 
layout.buildDirectory.dir('generated-forge-cli-scripts').get().asFile
+    t.applicationName = 'grails-forge-cli'
+    t.mainClass = findProperty('startMainClass') as String
+    t.classpath = files(shadowJarTask)
 }
 
-tasks.named('distTar') {
-    enabled = false
-}
+project.extensions.getByType(DistributionContainer).configureEach {
+    it.distributionBaseName.set('apache-grails')
+    it.distributionClassifier.set('incubating-bin')
+    it.contents {
+        from(shadowJarTask) {
+            into "lib"
+        }
 
-tasks.register('copyShadowJar', Sync) {
-    from shadowJar.outputs
-    into project.rootProject.layout.buildDirectory.dir('libs')
-    rename { String fileName -> 'cli.jar' }
-}
+        from(layout.buildDirectory.dir('build-completion')) {
+            into 'bin'
+            it.filePermissions { permissions ->
+                permissions.unix(0755)
+            }
+        }
 
-tasks.register('exploded', Sync) {
-    dependsOn('distZip')
-    from(zipTree(distZip.outputs.files.singleFile))
-    into(project.layout.buildDirectory.dir('exploded'))
-    eachFile { FileCopyDetails fcd ->
-        fcd.relativePath = new RelativePath(true, 
fcd.relativePath.segments.drop(1))
-    }
-    onlyIf {
-        distZip.outputs.files.singleFile.exists()
+        from(forgeCliStartScripts) {
+            into 'bin'
+            it.filePermissions { permissions ->
+                permissions.unix(0755)
+            }
+        }
+
+        from(rootProject.layout.projectDirectory.file('../LICENSE')) { it.into 
'' }
+        from(rootProject.layout.projectDirectory.file('../NOTICE')) { it.into 
'' }
+        from(rootProject.layout.projectDirectory.file('../INSTALL')) { it.into 
'' }
+        from(rootProject.layout.projectDirectory.file('../DISCLAIMER')) { 
it.into '' }
     }
 }
 
-tasks.register('cleanup', Delete) {
-    delete(project.rootProject.layout.buildDirectory.file('libs/cli.jar'))
-    delete(project.layout.buildDirectory.dir('dist'))
+def distZipTask = tasks.named('distZip')
+distZipTask.configure {
+    dependsOn(forgeCliStartScripts, jarTask, shadowJarTask, buildCompletion)
 }
-
-tasks.named('clean') {
-    dependsOn 'cleanup'
+tasks.named('distTar').configure {
+    dependsOn(forgeCliStartScripts, jarTask, shadowJarTask, buildCompletion)
 }
-
-tasks.named('assemble') {
-    dependsOn('exploded')
+tasks.named('build').configure {
+    it.dependsOn(distZipTask)
+}
+tasks.named('assemble').configure {
+    dependsOn(distZipTask)
+}
+tasks.named('installDist').configure {
+    it.dependsOn forgeCliStartScripts, buildCompletion
 }
 
 configurations.configureEach {

Reply via email to