Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
*/

import java.time.Instant
import java.time.LocalDate
import java.time.ZoneOffset
import java.time.format.DateTimeFormatter

Expand All @@ -26,7 +27,9 @@ ext {
.map(Long::parseLong)
.map(Instant::ofEpochSecond)
.orElseGet(Instant::now)
formattedBuildDate = DateTimeFormatter.ISO_INSTANT.format(buildInstant)
formattedBuildDate = System.getenv("SOURCE_DATE_EPOCH") ?
DateTimeFormatter.ISO_INSTANT.format(buildInstant) :
DateTimeFormatter.ISO_DATE.format(LocalDate.ofInstant(buildInstant as Instant, ZoneOffset.UTC))
buildDate = (buildInstant as Instant).atZone(ZoneOffset.UTC) // for reproducible builds

grailsVersion = projectVersion
Expand Down
2 changes: 1 addition & 1 deletion grails-data-docs/guide-developer/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ def asciidoctorAttributes = [
]

tasks.named('asciidoctor', AsciidoctorTask) { AsciidoctorTask it ->
inputs.dir project.layout.projectDirectory.dir('src/main/docs')
inputs.dir(project.layout.projectDirectory.dir('src/main/docs')).withPropertyName('docsSrcDir').withPathSensitivity(PathSensitivity.RELATIVE)
outputs.dir project.layout.buildDirectory.dir('docs')

it.jvm {
Expand Down
2 changes: 1 addition & 1 deletion grails-data-docs/guide-rx/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ def asciidoctorAttributes = [
]

tasks.named('asciidoctor', AsciidoctorTask) { AsciidoctorTask it ->
inputs.dir project.layout.projectDirectory.dir('src/main/docs')
inputs.dir(project.layout.projectDirectory.dir('src/main/docs')).withPropertyName('docsSrcDir').withPathSensitivity(PathSensitivity.RELATIVE)
outputs.dir project.layout.buildDirectory.dir('docs')

it.jvm {
Expand Down
2 changes: 1 addition & 1 deletion grails-data-docs/guide-whats-new/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ def asciidoctorAttributes = [
]

tasks.named('asciidoctor', AsciidoctorTask) { AsciidoctorTask it ->
inputs.dir project.layout.projectDirectory.dir('src/main/docs')
inputs.dir(project.layout.projectDirectory.dir('src/main/docs')).withPropertyName('docsSrcDir').withPathSensitivity(PathSensitivity.RELATIVE)
outputs.dir project.layout.buildDirectory.dir('docs')

it.jvm {
Expand Down
2 changes: 1 addition & 1 deletion grails-data-docs/stage/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ combinedGroovydoc.configure { Groovydoc task ->
task.classpath = files(sources.collect{ SourceSet it -> it.compileClasspath.filter(File.&isDirectory) }.flatten().unique())
task.destinationDir = project.layout.buildDirectory.dir('data-api/api').get().asFile

task.inputs.files(task.source)
task.inputs.files(task.source).withPropertyName("groovyDocSrc").withPathSensitivity(PathSensitivity.RELATIVE)
task.outputs.dir(task.destinationDir)
}

Expand Down
5 changes: 2 additions & 3 deletions grails-data-hibernate5/docs/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ dependencies {
}

tasks.named('asciidoctor', AsciidoctorTask) { AsciidoctorTask it ->
it.inputs.dir layout.projectDirectory.dir('src/docs/asciidoc')
it.inputs.dir(layout.projectDirectory.dir('src/docs/asciidoc')).withPropertyName('docsSrcDir').withPathSensitivity(PathSensitivity.RELATIVE)
it.outputs.dir layout.buildDirectory.dir('asciidoc/manual')

it.jvm {
Expand All @@ -83,8 +83,7 @@ tasks.named('asciidoctor', AsciidoctorTask) { AsciidoctorTask it ->
'pluginVersion': projectVersion,
'groupId': project.group,
'artifactId': project.name,
'sourcedir': "$project.rootDir",
'migrationPluginExamplesDir': rootProject.findProject(':grails-data-hibernate5-dbmigration').layout.projectDirectory.dir('src/integration-test/resources').asFile.absolutePath,
'migrationPluginExamplesDir': project.layout.projectDirectory.dir('src/docs/asciidoc/databaseMigration').asFile.relativePath(rootProject.findProject(':grails-data-hibernate5-dbmigration').layout.projectDirectory.asFile),
'migrationPluginGroupId': rootProject.findProject(':grails-data-hibernate5-dbmigration').group,
'migrationPluginArtifactId': rootProject.findProject(':grails-data-hibernate5-dbmigration').name,
'liquibaseHibernate5Version': liquibaseHibernate5Version
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ NOTE: All the above configs can be used for multiple datasources
If secondary dataSource named "second" is configured in application.yml
[source,yaml]
----
include::{migrationPluginExamplesDir}/application-multiple-datasource.yml[lines=11..29]
include::{migrationPluginExamplesDir}/src/integration-test/resources/application-multiple-datasource.yml[lines=11..29]
----

The configuration for this data source would be:
Expand Down
22 changes: 12 additions & 10 deletions grails-data-mongodb/docs/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ dependencies {
tasks.named('asciidoctor', AsciidoctorTask) { AsciidoctorTask it ->
dependsOn('resolveMongodbVersion')

it.inputs.dir project.layout.projectDirectory.dir('src/docs/asciidoc')
it.inputs.dir(project.layout.projectDirectory.dir('src/docs/asciidoc')).withPropertyName('docsSrcDir').withPathSensitivity(PathSensitivity.RELATIVE)
it.outputs.dir layout.buildDirectory.dir('asciidoc/manual')

it.jvm {
Expand All @@ -86,15 +86,17 @@ tasks.named('asciidoctor', AsciidoctorTask) { AsciidoctorTask it ->
it.sourceDir layout.projectDirectory.dir('src/docs/asciidoc')
it.outputDir = layout.buildDirectory.dir('asciidoc/manual')
it.attributes = [
'experimental' : 'true',
'compat-mode' : 'true',
'toc' : 'left',
'icons' : 'font',
'reproducible' : '',
'version' : projectVersion,
'pluginVersion' : projectVersion,
'mongoDriverVersion': resolveMongodbVersion.resolved,
'sourcedir' : "$project.rootDir"
'experimental' : 'true',
'compat-mode' : 'true',
'toc' : 'left',
'icons' : 'font',
'reproducible' : '',
'version' : projectVersion,
'pluginVersion' : projectVersion,
'mongoDriverVersion' : resolveMongodbVersion.resolved,
'grailsTestExamplesMongodbBaseDir' : project.layout.projectDirectory.dir('src/docs/asciidoc').asFile.relativePath(rootProject.findProject(':grails-test-examples-mongodb-base').layout.projectDirectory.asFile),
'grailsTestExamplesMongodbHibernate5Dir' : project.layout.projectDirectory.dir('src/docs/asciidoc').asFile.relativePath(rootProject.findProject(':grails-test-examples-mongodb-hibernate5').layout.projectDirectory.asFile),
'grailsDataMongodbCoreDir' : project.layout.projectDirectory.dir('src/docs/asciidoc/querying').asFile.relativePath(rootProject.findProject(':grails-data-mongodb-core').layout.projectDirectory.asFile)
]
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,9 @@ If you wish to execute a native MongoDB query you can use the `find` method that

[source,groovy]
----
include::{sourcedir}/gorm/src/test/groovy/grails/gorm/tests/FindNativeSpec.groovy[tags=nativeImport]
include::{grailsDataMongodbCoreDir}/src/test/groovy/grails/gorm/tests/FindNativeSpec.groovy[tags=nativeImport]
...
include::{sourcedir}/gorm/src/test/groovy/grails/gorm/tests/FindNativeSpec.groovy[tags=nativeFind,indent=0]
include::{grailsDataMongodbCoreDir}/src/test/groovy/grails/gorm/tests/FindNativeSpec.groovy[tags=nativeFind,indent=0]
----

The `find` method will return a https://api.mongodb.com/java/current/com/mongodb/client/FindIterable.html[FindIterable] instance that you can then use to further customize via https://api.mongodb.com/java/current/com/mongodb/client/model/Filters.html[filters], https://api.mongodb.com/java/current/com/mongodb/client/model/Sorts.html[sorting] and https://api.mongodb.com/java/current/com/mongodb/client/model/Projections.html[projections].
Expand All @@ -37,7 +37,7 @@ The `find` method will return instances of your domain class for each query. If

[source,groovy]
----
include::{sourcedir}/gorm/src/test/groovy/grails/gorm/tests/FindNativeSpec.groovy[tags=nativeImport]
include::{grailsDataMongodbCoreDir}/src/test/groovy/grails/gorm/tests/FindNativeSpec.groovy[tags=nativeImport]
...
include::{sourcedir}/gorm/src/test/groovy/grails/gorm/tests/FindNativeSpec.groovy[tags=collectionFind,indent=0]
include::{grailsDataMongodbCoreDir}/src/test/groovy/grails/gorm/tests/FindNativeSpec.groovy[tags=collectionFind,indent=0]
----
8 changes: 4 additions & 4 deletions grails-data-mongodb/docs/src/docs/asciidoc/testing.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -28,19 +28,19 @@ It is preferable to use testcontainers to automatically run MongoDB in a contain

[source,groovy]
----
include::{sourcedir}/examples/base/src/test/groovy/functional/tests/EmbeddedMongoClient.groovy[]
include::{grailsTestExamplesMongodbBaseDir}/src/test/groovy/functional/tests/EmbeddedMongoClient.groovy[]
----

[source,groovy]
----
include::{sourcedir}/examples/base/src/test/groovy/functional/tests/LocalMongoUnitSpec.groovy[tags=structure]
include::{grailsTestExamplesMongodbBaseDir}/src/test/groovy/functional/tests/LocalMongoUnitSpec.groovy[tags=structure]
----

You can also use your own low-level `MongoClient` instance, as shown in the following example:

[source,groovy]
----
include::{sourcedir}/examples/base/src/test/groovy/functional/tests/BookUnitSpec.groovy[]
include::{grailsTestExamplesMongodbBaseDir}/src/test/groovy/functional/tests/BookUnitSpec.groovy[]
----

Note that the default implementation is to scan your classpath searching for domain classes, from the package defined
Expand All @@ -49,5 +49,5 @@ is large, classpath scanning may be slow, so it's better to override the method

[source,groovy]
----
include::{sourcedir}/examples/hibernate5/src/test/groovy/functional/tests/BookFongoSpec.groovy[tags=getDomainClasses,indent=0]
include::{grailsTestExamplesMongodbHibernate5Dir}/src/test/groovy/functional/tests/BookFongoSpec.groovy[tags=getDomainClasses,indent=0]
----
12 changes: 8 additions & 4 deletions grails-doc/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ combinedGroovydoc.configure { Groovydoc gdoc ->
gdoc.classpath = files(sources.collect { SourceSet it -> it.compileClasspath.filter(File.&isDirectory) }.flatten().unique())
gdoc.destinationDir = project.layout.buildDirectory.dir('combined-api/api').get().asFile

gdoc.inputs.files(gdoc.source)
gdoc.inputs.files(gdoc.source).withPropertyName("groovyDocSrc").withPathSensitivity(PathSensitivity.RELATIVE)
gdoc.outputs.dir(gdoc.destinationDir)
}

Expand Down Expand Up @@ -190,19 +190,23 @@ publishGuideTask.configure { PublishGuideTask publish ->
'GrailsVersion' : projectVersion,
'version' : projectVersion,
'gormVersion' : projectVersion,
'cacheExampleSourceDir' : rootProject.layout.projectDirectory.dir('grails-test-examples/cache').asFile,
'hibernate5Version' : getVersion("hibernate-core-jakarta"),
'spockVersion' : getVersion("spock-core"),
'testingSupportVersion' : getVersion("grails-testing-support-core"),
'grailsGradlePluginVersion': getVersion("grails-gradle-plugins"),
'sourcedir' : rootProject.layout.projectDirectory.asFile,
'functionalSourceDir' : rootProject.layout.projectDirectory.asFile,
'gparsdocs' : "https://gpars.org/$gparsVersion/groovydoc",
'rxjavadocs' : 'https://reactivex.io/RxJava/1.x/javadoc',
'rxjava2docs' : 'https://reactivex.io/RxJava/2.x/javadoc',
'tags' : '../ref/Tags'
] as Map<String, String>
}
publish.propertiesWithFilePaths = project.provider {
[
'cacheExampleSourceDir': rootProject.layout.projectDirectory.dir('grails-test-examples/cache').asFile,
'sourcedir' : rootProject.layout.projectDirectory.asFile,
'functionalSourceDir' : rootProject.layout.projectDirectory.asFile
] as Map<String, String>
}
}

def createReleaseDropdownTask = tasks.register('createReleaseDropdown', CreateReleaseDropDownTask)
Expand Down
5 changes: 4 additions & 1 deletion grails-forge/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
*/

import java.time.Instant
import java.time.LocalDate
import java.time.ZoneOffset
import java.time.format.DateTimeFormatter

Expand All @@ -31,7 +32,9 @@ ext {
.map(Long::parseLong)
.map(Instant::ofEpochSecond)
.orElseGet(Instant::now) as Instant
formattedBuildDate = DateTimeFormatter.ISO_INSTANT.format(buildInstant)
formattedBuildDate = System.getenv("SOURCE_DATE_EPOCH") ?
DateTimeFormatter.ISO_INSTANT.format(buildInstant) :
DateTimeFormatter.ISO_DATE.format(LocalDate.ofInstant(buildInstant as Instant, ZoneOffset.UTC))
buildDate = (buildInstant as Instant).atZone(ZoneOffset.UTC) // for reproducible builds
isCiBuild = System.getenv().containsKey('CI')
}
Expand Down
5 changes: 4 additions & 1 deletion grails-gradle/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
*/

import java.time.Instant
import java.time.LocalDate
import java.time.ZoneOffset
import java.time.format.DateTimeFormatter

Expand Down Expand Up @@ -48,7 +49,9 @@ ext {
.map(Long::parseLong)
.map(Instant::ofEpochSecond)
.orElseGet(Instant::now)
formattedBuildDate = DateTimeFormatter.ISO_INSTANT.format(buildInstant)
formattedBuildDate = System.getenv("SOURCE_DATE_EPOCH") ?
DateTimeFormatter.ISO_INSTANT.format(buildInstant) :
DateTimeFormatter.ISO_DATE.format(LocalDate.ofInstant(buildInstant as Instant, ZoneOffset.UTC))
buildDate = (buildInstant as Instant).atZone(ZoneOffset.UTC) // for reproducible builds

isReleaseVersion = Boolean.parseBoolean(System.getenv('GRAILS_PUBLISH_RELEASE'))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,14 @@ class PublishGuideTask extends DefaultTask {
@Input
final MapProperty<String, Object> properties

@Internal
// Used to relativize file paths in getRelativizedPropertiesWithFilePaths()
final DirectoryProperty rootProjectDir

@Internal
// Properties in this map contain file paths. @internal allows to exclude it from the cache key, instead the getRelativizedPropertiesWithFilePaths() is considered as @Input to enable cache relocatability
final MapProperty<String, File> propertiesWithFilePaths

@Optional
@Input
final Property<Boolean> asciidoc
Expand Down Expand Up @@ -85,6 +93,8 @@ class PublishGuideTask extends DefaultTask {
language = objects.property(String).convention(null as String)
sourceRepo = objects.property(String)
properties = objects.mapProperty(String, Object).convention([:])
rootProjectDir = objects.directoryProperty().convention(project.rootProject.layout.projectDirectory)
propertiesWithFilePaths = objects.mapProperty(String, File).convention([:])
asciidoc = objects.property(Boolean).convention(true)
propertiesFiles = objects.fileCollection()
sourceDir = objects.directoryProperty().convention(project.layout.projectDirectory.dir("src"))
Expand All @@ -94,6 +104,14 @@ class PublishGuideTask extends DefaultTask {
group = 'documentation'
}

@Optional
@Input
Map<String, String> getRelativizedPropertiesWithFilePaths() {
return propertiesWithFilePaths.get().collectEntries { key, file ->
return [key, rootProjectDir.get().getAsFile().toPath().relativize(file.toPath()).toString()]
}
}

@TaskAction
def publishGuide() {
Properties combinedProperties = new Properties()
Expand All @@ -115,6 +133,7 @@ class PublishGuideTask extends DefaultTask {
}
}
combinedProperties.putAll(properties.get())
combinedProperties.putAll(propertiesWithFilePaths.get())

File apiDir = targetDir.get().asFile
apiDir.deleteDir()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ import org.gradle.api.Project
import org.gradle.api.artifacts.Dependency
import org.gradle.api.file.Directory
import org.gradle.api.file.DirectoryProperty
import org.gradle.api.file.FileTree
import org.gradle.api.file.FileVisitDetails
import org.gradle.api.file.RegularFile
import org.gradle.api.file.RegularFileProperty
Expand Down Expand Up @@ -104,6 +105,12 @@ class ProfileCompilerTask extends AbstractCompile {
@Input
final ListProperty<String> profileExtendsDefault

@PathSensitive(PathSensitivity.RELATIVE)
@Override
FileTree getSource() {
return super.getSource();
}

// commands map to source property

@Inject
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import groovy.transform.CompileStatic
import org.gradle.api.Action
import org.gradle.api.file.ConfigurableFileCollection
import org.gradle.api.file.DirectoryProperty
import org.gradle.api.file.FileTree
import org.gradle.api.model.ObjectFactory
import org.gradle.api.provider.Property
import org.gradle.api.provider.SetProperty
Expand Down Expand Up @@ -81,6 +82,12 @@ abstract class AbstractGroovyTemplateCompileTask extends AbstractCompile {
@Input
final SetProperty<String> projectPackageNames

@PathSensitive(PathSensitivity.RELATIVE)
@Override
FileTree getSource() {
return super.getSource();
}

private ExecOperations execOperations

@Inject
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,9 @@ abstract class GroovyPageForkCompileTask extends AbstractCompile {

private ExecOperations execOperations

@OutputDirectory
final DirectoryProperty destinationDirectory

@Inject
GroovyPageForkCompileTask(ExecOperations execOperations, ObjectFactory objectFactory) {
this.execOperations = execOperations
Expand All @@ -87,6 +90,7 @@ abstract class GroovyPageForkCompileTask extends AbstractCompile {
project.layout.projectDirectory.file('grails-app/conf/application.yml'),
project.layout.projectDirectory.file('grails-app/conf/application.groovy')
)
destinationDirectory = objectFactory.directoryProperty().convention(project.layout.buildDirectory.dir('gsp-classes/main'))
}


Expand Down
Loading