306 lines
12 KiB
Groovy
306 lines
12 KiB
Groovy
/*
|
|
* Hibernate, Relational Persistence for Idiomatic Java
|
|
*
|
|
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
|
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
|
*/
|
|
apply plugin: 'base'
|
|
apply plugin: 'idea'
|
|
apply plugin: 'distribution'
|
|
|
|
buildDir = "target"
|
|
|
|
idea.module {
|
|
}
|
|
|
|
|
|
final File documentationDir = mkdir( "${project.buildDir}/documentation" );
|
|
|
|
final String[] versionComponents = version.split( '\\.' );
|
|
final String majorVersion = versionComponents[0];
|
|
final String majorMinorVersion = versionComponents[0] + '.' + versionComponents[1];
|
|
|
|
final File stagingDir = mkdir( "${project.buildDir}/staging" );
|
|
final File documentationUploadStagingDir = mkdir( new File( stagingDir, "docs" ) );
|
|
final File versionedDocumentationDir = mkdir( new File( new File( documentationUploadStagingDir, "orm" ), majorMinorVersion ) );
|
|
|
|
/**
|
|
* Assembles all documentation into the {buildDir}/documentation directory.
|
|
*
|
|
* Depends on building the docs
|
|
*/
|
|
task assembleDocumentation(type: Task, dependsOn: [rootProject.project( 'documentation' ).tasks.buildDocs]) {
|
|
description = 'Assembles all documentation into the {buildDir}/documentation directory'
|
|
|
|
doLast {
|
|
// copy documentation outputs into target/documentation.
|
|
// * this is used in building the dist bundles
|
|
// * it is also used as a base to build a staged directory for documentation upload
|
|
copy {
|
|
from "${rootProject.project( 'documentation' ).buildDir}/docbook/publish"
|
|
into documentationDir
|
|
}
|
|
copy {
|
|
from "${rootProject.project( 'documentation' ).buildDir}/asciidoc"
|
|
into documentationDir
|
|
}
|
|
copy {
|
|
from "${rootProject.project( 'documentation' ).buildDir}/javadocs"
|
|
into "${documentationDir}/javadocs"
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Stages the documentation into a version specific directory in preparation for uploading them to the JBoss
|
|
* doc server. Essentially copies the output from the {buildDir}/documentation directory (output of the
|
|
* assembleDocumentation task) into a version-specific directory
|
|
*/
|
|
task stageDocumentationForUpload(type: Copy, dependsOn: assembleDocumentation) {
|
|
description = 'Stages the documentation in preparation for uploading to the JBoss doc server'
|
|
|
|
from documentationDir
|
|
into versionedDocumentationDir
|
|
|
|
doLast {
|
|
if ( ! version.endsWith( 'SNAPSHOT' ) ) {
|
|
final File currentSymLinkContainerDir = new File( documentationUploadStagingDir, 'stable' )
|
|
currentSymLinkContainerDir.mkdirs();
|
|
ant.symlink(
|
|
action: 'delete',
|
|
link: "${currentSymLinkContainerDir.absolutePath}/orm"
|
|
)
|
|
ant.symlink(
|
|
action: 'single',
|
|
link: "${currentSymLinkContainerDir.absolutePath}/orm",
|
|
resource: "../orm/${majorMinorVersion}"
|
|
)
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Upload the documentation to the JBoss doc server
|
|
*/
|
|
task uploadDocumentation(type:Exec, dependsOn: stageDocumentationForUpload) {
|
|
description = "Uploads documentation to the JBoss doc server"
|
|
|
|
final String url = 'filemgmt.jboss.org:/docs_htdocs/hibernate/';
|
|
|
|
executable 'rsync'
|
|
args '-avz', '--links', '--protocol=28', "${documentationUploadStagingDir.absolutePath}/", url
|
|
|
|
doFirst {
|
|
if ( version.endsWith( "SNAPSHOT" ) ) {
|
|
logger.error( "Cannot perform upload of SNAPSHOT documentation" );
|
|
throw new RuntimeException( "Cannot perform upload of SNAPSHOT documentation" );
|
|
}
|
|
else {
|
|
logger.lifecycle( "Uploading documentation [{$url}]..." )
|
|
}
|
|
}
|
|
|
|
doLast {
|
|
logger.lifecycle( 'Done uploading documentation' )
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
* Configuration of the distribution plugin, used to build release bundle as both ZIP and TGZ
|
|
*/
|
|
distributions {
|
|
main {
|
|
baseName = 'hibernate-release'
|
|
contents {
|
|
from rootProject.file( 'lgpl.txt' )
|
|
from rootProject.file( 'changelog.txt' )
|
|
from rootProject.file( 'hibernate_logo.gif' )
|
|
|
|
into('lib/required') {
|
|
from parent.project( 'hibernate-core' ).configurations.provided.files { dep -> dep.name == 'jta' }
|
|
from parent.project( 'hibernate-core' ).configurations.runtime
|
|
from parent.project( 'hibernate-core' ).configurations.archives.allArtifacts.files.filter{ file -> !file.name.endsWith('-sources.jar') }
|
|
// for now,
|
|
from parent.project( 'hibernate-core' ).configurations.provided.files { dep -> dep.name == 'javassist' }
|
|
}
|
|
|
|
into('lib/java8') {
|
|
from parent.project( 'hibernate-java8' ).configurations.archives.allArtifacts.files.filter{ file -> !file.name.endsWith('-sources.jar') }
|
|
}
|
|
|
|
into( 'lib/jpa' ) {
|
|
from parent.project( 'hibernate-entitymanager' ).configurations.archives.allArtifacts.files.filter{ file -> !file.name.endsWith('-sources.jar') }
|
|
}
|
|
|
|
into( 'lib/jpa-metamodel-generator' ) {
|
|
from parent.project( 'hibernate-jpamodelgen' ).configurations.archives.allArtifacts.files.filter{ file -> !file.name.endsWith('-sources.jar') }
|
|
}
|
|
|
|
into( 'lib/envers' ) {
|
|
from(
|
|
( parent.project( 'hibernate-envers' ).configurations.archives.allArtifacts.files.filter{ file -> !file.name.endsWith('-sources.jar') }
|
|
+ parent.project( 'hibernate-envers' ).configurations.runtime )
|
|
- parent.project( 'hibernate-core' ).configurations.runtime
|
|
- parent.project( 'hibernate-core' ).configurations.archives.allArtifacts.files
|
|
- parent.project( 'hibernate-entitymanager' ).configurations.runtime
|
|
- parent.project( 'hibernate-entitymanager' ).configurations.archives.allArtifacts.files
|
|
)
|
|
}
|
|
|
|
into( 'lib/osgi' ) {
|
|
from(
|
|
( parent.project( 'hibernate-osgi' ).configurations.archives.allArtifacts.files.filter{ file -> !file.name.endsWith('-sources.jar') }
|
|
+ parent.project( 'hibernate-osgi' ).configurations.runtime )
|
|
- parent.project( 'hibernate-core' ).configurations.runtime
|
|
- parent.project( 'hibernate-core' ).configurations.archives.allArtifacts.files
|
|
- parent.project( 'hibernate-entitymanager' ).configurations.runtime
|
|
- parent.project( 'hibernate-entitymanager' ).configurations.archives.allArtifacts.files
|
|
)
|
|
}
|
|
|
|
// todo : this closure is problematic as it does not write into the hibernate-release-$project.version directory
|
|
// due to http://issues.gradle.org/browse/GRADLE-1450
|
|
[ 'hibernate-c3p0', 'hibernate-proxool', 'hibernate-ehcache', 'hibernate-infinispan' ].each { feature ->
|
|
final String shortName = feature.substring( 'hibernate-'.length() );
|
|
// WORKAROUND http://issues.gradle.org/browse/GRADLE-1450
|
|
// into('lib/optional/' + shortName) {
|
|
owner.into('lib/optional/' + shortName) {
|
|
from (
|
|
( parent.project( feature ).configurations.archives.allArtifacts.files.filter{ file -> !file.name.endsWith('-sources.jar') }
|
|
+ parent.project( feature ).configurations.runtime )
|
|
- parent.project( 'hibernate-core' ).configurations.runtime
|
|
- parent.project( 'hibernate-core' ).configurations.archives.allArtifacts.files
|
|
)
|
|
}
|
|
}
|
|
|
|
into('documentation') {
|
|
from documentationDir
|
|
}
|
|
|
|
into( 'project' ) {
|
|
from ( rootProject.projectDir ) {
|
|
exclude( '.git' )
|
|
exclude( '.gitignore' )
|
|
exclude( 'changelog.txt' )
|
|
exclude( 'lgpl.txt' )
|
|
exclude( 'hibernate_logo.gif' )
|
|
exclude( 'tagRelease.sh' )
|
|
exclude( 'gradlew' )
|
|
exclude( 'gradlew.bat' )
|
|
exclude( 'wrapper/*' )
|
|
exclude( '**/.gradle/**' )
|
|
exclude( '**/target/**' )
|
|
exclude( '.idea' )
|
|
exclude( '**/*.ipr' )
|
|
exclude( '**/*.iml' )
|
|
exclude( '**/*.iws' )
|
|
exclude( '**/atlassian-ide-plugin.xml' )
|
|
exclude( '**/.classpath' )
|
|
exclude( '**/.project' )
|
|
exclude( '**/.settings' )
|
|
exclude( '**/.nbattrs' )
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
distZip.dependsOn assembleDocumentation
|
|
distTar.dependsOn assembleDocumentation
|
|
distTar {
|
|
compression = Compression.GZIP
|
|
}
|
|
|
|
/**
|
|
* "virtual" task for building both types of dist bundles
|
|
*/
|
|
task buildBundles(type: Task, dependsOn: [distZip,distTar]) {
|
|
description = "Builds all release bundles"
|
|
}
|
|
|
|
task uploadBundles(type: Exec, dependsOn: buildBundles) {
|
|
description = "Uploads release bundles to SourceForge"
|
|
|
|
final String url = "frs.sourceforge.net:/home/frs/project/hibernate/hibernate-orm/${version}";
|
|
|
|
executable 'rsync'
|
|
args '-vr', '-e ssh', "${project.buildDir}/distributions/", url
|
|
|
|
doFirst {
|
|
if ( version.endsWith( "SNAPSHOT" ) ) {
|
|
logger.error( "Cannot perform upload of SNAPSHOT documentation" );
|
|
throw new RuntimeException( "Cannot perform upload of SNAPSHOT bundles" )
|
|
}
|
|
else {
|
|
logger.lifecycle( "Uploading release bundles [${url}]..." )
|
|
}
|
|
}
|
|
|
|
doLast {
|
|
logger.lifecycle( 'Done uploading release bundles' )
|
|
}
|
|
}
|
|
|
|
|
|
// Full release related tasks ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
task cleanAllSubProjects(type: Task) {
|
|
description = 'Performs clean on all sub-projects'
|
|
}
|
|
|
|
task testAllSubProjects(type: Task) {
|
|
description = 'Performs test on all sub-projects'
|
|
}
|
|
|
|
task publishAllSubProjects(type: Task) {
|
|
description = 'Performs publish on all sub-projects'
|
|
}
|
|
|
|
task buildAllSubProjects(type: Task, dependsOn: [testAllSubProjects,publishAllSubProjects])
|
|
|
|
task uploadReleaseArtifacts(type: Task, dependsOn: [uploadDocumentation, uploadBundles])
|
|
|
|
task announce(type: Task) { doFirst { println 'Hear ye, hear ye...' } }
|
|
|
|
task release(type: Task, dependsOn: [buildAllSubProjects, uploadReleaseArtifacts, announce]) {
|
|
description = "Coordinates all release tasks; does not perform a clean first (see cleanAndRelease task)"
|
|
}
|
|
|
|
task cleanAndRelease(type: Task, dependsOn: [cleanAllSubProjects, release]) {
|
|
description = "Coordinates all release tasks *including clean*"
|
|
}
|
|
|
|
|
|
// must-run-afters ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
buildAllSubProjects.mustRunAfter cleanAllSubProjects
|
|
|
|
publishAllSubProjects.mustRunAfter testAllSubProjects
|
|
publishAllSubProjects.mustRunAfter cleanAllSubProjects
|
|
|
|
uploadReleaseArtifacts.mustRunAfter buildAllSubProjects
|
|
|
|
announce.mustRunAfter uploadReleaseArtifacts
|
|
|
|
|
|
// sub-project task dependencies ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
rootProject.subprojects { Project subproject ->
|
|
final Task subprojectCleanTask = subproject.tasks.findByPath( 'clean' );
|
|
if ( subprojectCleanTask != null ) {
|
|
cleanAllSubProjects.dependsOn subprojectCleanTask
|
|
}
|
|
|
|
final Task subprojectTestTask = subproject.tasks.findByPath( 'test' );
|
|
if ( subprojectTestTask != null ) {
|
|
testAllSubProjects.dependsOn subprojectTestTask
|
|
}
|
|
|
|
final Task subprojectPublishTask = subproject.tasks.findByPath( 'publish' );
|
|
if ( subprojectPublishTask != null ) {
|
|
publishAllSubProjects.dependsOn subprojectPublishTask
|
|
}
|
|
}
|