http://git-wip-us.apache.org/repos/asf/zest-java/blob/1c722f44/buildSrc/src/main/groovy/org/apache/polygene/gradle/doc/ManualPlugin.groovy ---------------------------------------------------------------------- diff --git a/buildSrc/src/main/groovy/org/apache/polygene/gradle/doc/ManualPlugin.groovy b/buildSrc/src/main/groovy/org/apache/polygene/gradle/doc/ManualPlugin.groovy new file mode 100644 index 0000000..f6e9707 --- /dev/null +++ b/buildSrc/src/main/groovy/org/apache/polygene/gradle/doc/ManualPlugin.groovy @@ -0,0 +1,115 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.polygene.gradle.doc + +import groovy.transform.CompileStatic +import org.apache.polygene.gradle.TaskGroups +import org.apache.polygene.gradle.PolygeneExtension +import org.gradle.api.Plugin +import org.gradle.api.Project +import org.gradle.api.Task +import org.gradle.api.tasks.Copy + +@CompileStatic +class ManualPlugin implements Plugin<Project> +{ + static class TaskNames + { + static final String WEBSITE = "website" + static final String ARCHIVE_WEBSITE = "archiveWebsite" + static final String COPY_WEBSITE = "copyWebsite" + static final String MANUALS = "manuals" + } + + @Override + void apply( final Project project ) + { + def zest = project.extensions.getByType( PolygeneExtension ) + project.tasks.create( TaskNames.WEBSITE, DocumentationTask ) { DocumentationTask task -> + task.group = TaskGroups.DOCUMENTATION + task.description = 'Generates documentation website' + task.dependsOn project.rootProject.allprojects.findResults { Project p -> + p.tasks.findByName AsciidocBuildInfoPlugin.TASK_NAME + } + task.onlyIf { isAsciidocInstalled( project, zest ) } + task.docName = 'website' + task.docType = 'article' + } + project.tasks.create( TaskNames.ARCHIVE_WEBSITE, Copy ) { Copy task -> + task.group = TaskGroups.DOCUMENTATION + task.description = 'Copy website to ../polygene-web' + task.dependsOn TaskNames.WEBSITE + task.onlyIf { isAsciidocInstalled( project, zest ) } + if( zest.developmentVersion ) + { + task.into "$project.rootProject.projectDir/../polygene-web/site/content/java/develop" + } + else + { + task.into "$project.rootProject.projectDir/../polygene-web/site/content/java/$project.version" + } + task.from "$project.buildDir/docs/website/" + } + project.tasks.create( TaskNames.COPY_WEBSITE, Copy ) { Copy task -> + task.group = TaskGroups.RELEASE + task.description = 'Copy website to ../polygene-web LATEST' + task.dependsOn TaskNames.ARCHIVE_WEBSITE + task.onlyIf { zest.releaseVersion } + task.from "$project.rootProject.projectDir/../polygene-web/site/content/java/$project.version/" + task.into "$project.rootProject.projectDir/../polygene-web/site/content/java/latest/" + } + project.tasks.create( TaskNames.MANUALS ) { Task task -> + task.group = TaskGroups.DOCUMENTATION + task.description = 'Generates all documentation' + task.dependsOn TaskNames.COPY_WEBSITE + task.onlyIf { isAsciidocInstalled( project, zest ) } + } + } + + private static Boolean asciidocInstalled = null + + // Force when building a release version + // Skip if skipAsciidocIfAbsent property is set + // Skip if asciidoc is not found in PATH when building a development version + private static boolean isAsciidocInstalled( Project project, PolygeneExtension zest ) + { + if( asciidocInstalled == null ) + { + def skipAsciidocIfAbsent = project.findProperty 'skipAsciidocIfAbsent' + if( !skipAsciidocIfAbsent && zest.releaseVersion ) + { + project.logger.info 'Asciidoc tasks forced for building a release version, hope you have Asciidoc installed' + asciidocInstalled = true + } + else + { + def pathDirs = System.getenv( 'PATH' ).split( File.pathSeparator ) + def asciidocCandidates = pathDirs.collect( { String path -> + new File( path, 'asciidoc' ) + } ).flatten() as List<File> + asciidocInstalled = asciidocCandidates.findAll( { it.isFile() } ) + if( !asciidocInstalled ) + { + project.logger.lifecycle 'WARNING Asciidoc not found in PATH, manual tasks will skip\n' + + ' Please install http://www.methods.co.nz/asciidoc/' + } + } + } + return asciidocInstalled + } +}
http://git-wip-us.apache.org/repos/asf/zest-java/blob/1c722f44/buildSrc/src/main/groovy/org/apache/polygene/gradle/doc/XsltTask.groovy ---------------------------------------------------------------------- diff --git a/buildSrc/src/main/groovy/org/apache/polygene/gradle/doc/XsltTask.groovy b/buildSrc/src/main/groovy/org/apache/polygene/gradle/doc/XsltTask.groovy new file mode 100644 index 0000000..19ee6e0 --- /dev/null +++ b/buildSrc/src/main/groovy/org/apache/polygene/gradle/doc/XsltTask.groovy @@ -0,0 +1,105 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.polygene.gradle.doc + +import groovy.transform.CompileStatic +import org.gradle.api.file.EmptyFileVisitor +import org.gradle.api.tasks.SourceTask +import org.gradle.api.tasks.OutputDirectory +import org.gradle.api.tasks.Optional +import org.gradle.api.tasks.InputFile +import org.gradle.api.tasks.TaskAction +import org.gradle.api.file.FileVisitDetails +import javax.xml.transform.TransformerFactory +import javax.xml.transform.stream.StreamResult +import javax.xml.transform.stream.StreamSource + +/** + * Gradle task for running a set of one or more + * files through an XSLT transform. A styleSheet + * file must be specified. The source file(s) are + * configured just like any other source task: + * source <file> + * ...or... + * source <directory> + * ...and then optionally... + * include '*.xml' + * exclude, etc. + * + * One of destDir or destFile must be specified, though if + * there are multiple source files then destFile will just + * keep getting rewritten. + * + * The extension is stripped from the source files and the + * specified extension is appended (whether it is set or not) + * it defaults to no extension. + * + * Example task formatting a check style report: + * + * task checkstyleReport(type: XsltTask, dependsOn: check) { + * source project.checkstyleResultsDir + * include '*.xml' + * + * destDir = project.checkstyleResultsDir + * extension = 'html' + * + * stylesheetFile = file( 'config/checkstyle/checkstyle-noframes.xsl' ) + * } + * + * The above definition requires that the specified XSL file be + * copied in with the other checkstyle configuration files. (The + * file in the example is part of the checkstyle distribution.) + * + */ +@CompileStatic +class XsltTask extends SourceTask +{ + + @OutputDirectory + @Optional + File destDir + + @Optional + String extension + + @InputFile + File stylesheetFile + + @TaskAction + def transform() + { + def factory = TransformerFactory.newInstance() + def transformer = factory.newTransformer( new StreamSource( stylesheetFile ) ); + + getSource().visit( new EmptyFileVisitor() { + @Override + void visitFile( FileVisitDetails fvd ) + { + // Remove the extension from the file name + def name = fvd.file.name.replaceAll( '[.][^\\.]*$', '' ) + if( extension == null ) + { + extension = 'html' + } + name += '.' + extension + def destFile = new File( destDir, name ) + transformer.transform( new StreamSource( fvd.file ), new StreamResult( destFile ) ) + } + } ) + } +} http://git-wip-us.apache.org/repos/asf/zest-java/blob/1c722f44/buildSrc/src/main/groovy/org/apache/polygene/gradle/performance/PerformanceTestsPlugin.groovy ---------------------------------------------------------------------- diff --git a/buildSrc/src/main/groovy/org/apache/polygene/gradle/performance/PerformanceTestsPlugin.groovy b/buildSrc/src/main/groovy/org/apache/polygene/gradle/performance/PerformanceTestsPlugin.groovy new file mode 100644 index 0000000..1b676af --- /dev/null +++ b/buildSrc/src/main/groovy/org/apache/polygene/gradle/performance/PerformanceTestsPlugin.groovy @@ -0,0 +1,62 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.polygene.gradle.performance + +import groovy.transform.CompileStatic +import org.apache.polygene.gradle.TaskGroups +import org.gradle.api.Action +import org.gradle.api.Plugin +import org.gradle.api.Project +import org.gradle.api.plugins.JavaPluginConvention +import org.gradle.api.tasks.bundling.Jar +import org.gradle.api.tasks.testing.Test +import org.gradle.language.base.plugins.LifecycleBasePlugin + +// TODO Add profiling tasks (jfr or honest? flamegraphs?) +// TODO Add simple regression assertions, how? testing against a previous version? +@CompileStatic +class PerformanceTestsPlugin implements Plugin<Project> +{ + static class TaskNames + { + static final String PERFORMANCE_TEST = 'performanceTest' + static final String PERFORMANCE_PROFILE = 'performanceProfile' + static final String PERFORMANCE_CHECK = 'performanceCheck' + } + + @Override + void apply( final Project project ) + { + def sourceSets = project.convention.getPlugin( JavaPluginConvention ).sourceSets + sourceSets.create 'perf' + project.dependencies.add 'perfCompile', sourceSets.getByName( 'main' ).output + project.dependencies.add 'perfCompile', sourceSets.getByName( 'test' ).output + project.dependencies.add 'perfCompile', project.configurations.getByName( 'testCompile' ) + project.dependencies.add 'perfRuntime', project.configurations.getByName( 'testRuntime' ) + project.tasks.getByName( LifecycleBasePlugin.CHECK_TASK_NAME ).dependsOn 'compilePerfJava' + project.tasks.create( TaskNames.PERFORMANCE_TEST, Test, { Test task -> + task.group = TaskGroups.PERFORMANCE + task.description = 'Runs performance tests.' + task.maxParallelForks = 1 + task.forkEvery = 1L + task.testClassesDir = sourceSets.getByName( 'perf' ).output.classesDir + task.classpath = sourceSets.getByName( 'perf' ).runtimeClasspath + task.systemProperty 'jar.path', ( project.tasks.getByName( 'jar' ) as Jar ).archivePath + } as Action<Test> ) + } +} http://git-wip-us.apache.org/repos/asf/zest-java/blob/1c722f44/buildSrc/src/main/groovy/org/apache/polygene/gradle/publish/MavenMetadata.groovy ---------------------------------------------------------------------- diff --git a/buildSrc/src/main/groovy/org/apache/polygene/gradle/publish/MavenMetadata.groovy b/buildSrc/src/main/groovy/org/apache/polygene/gradle/publish/MavenMetadata.groovy new file mode 100644 index 0000000..74c5dcf --- /dev/null +++ b/buildSrc/src/main/groovy/org/apache/polygene/gradle/publish/MavenMetadata.groovy @@ -0,0 +1,281 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.polygene.gradle.publish + +import org.gradle.api.artifacts.maven.MavenDeployer + +class MavenMetadata +{ + static void applyTo( MavenDeployer mavenDeployer ) + { + mavenDeployer.pom { + project { + url 'https://polygene.apache.org/' + organization { + name 'The Apache Software Foundation' + url 'https://apache.org/' + } + inceptionYear '2007' + issueManagement { + system 'jira' + url 'https://issues.apache.org/jira/browse/ZEST' + } + scm { + url "https://github.com/apache/polygene-java" + connection "scm:git:https://git-wip-us.apache.org/repos/asf/polygene-java.git" + developerConnection "scm:git:https://git-wip-us.apache.org/repos/asf/polygene-java.git" + } + licenses { + license { + name 'Apache License, version 2.0.' + url 'http://www.apache.org/licenses/LICENSE-2.0' + } + } + mailingLists { + mailingList { + name 'Users List' + subscribe '[email protected]' + unsubscribe '[email protected]' + post '[email protected]' + archive 'https://mail-archives.apache.org/mod_mbox/polygene-users/' + otherArchives { + otherArchive 'https://www.apache.org/foundation/mailinglists.html#archives' + } + } + mailingList { + name 'Development List' + subscribe '[email protected]' + unsubscribe '[email protected]' + post '[email protected]' + archive 'https://mail-archives.apache.org/mod_mbox/polygene-dev/' + otherArchives { + otherArchive 'https://www.apache.org/foundation/mailinglists.html#archives' + } + } + mailingList { + name 'Commits List' + subscribe '[email protected]' + unsubscribe '[email protected]' + post '[email protected]' + archive 'https://mail-archives.apache.org/mod_mbox/polygene-commits/' + otherArchives { + otherArchive 'https://www.apache.org/foundation/mailinglists.html#archives' + } + } + } + developers { + developer { + id '[email protected]' + name 'Niclas Hedhman' + email '[email protected]' + roles { + role 'Core Team' + } + organizationUrl 'http://polygene.apache.org' + timezone 'UTC+8' + } + developer { + id 'rickardoberg' + name 'Rickard \u00F6berg' + email '[email protected]' + roles { + role 'Core Team' + } + url 'http://www.neotechnology.com' + organization 'Neo Technology AB' + organizationUrl 'http://www.neotechnology.com' + timezone 'UTC+8' + } + developer { + id '[email protected]' + name 'Edward Yakop' + email '[email protected]' + roles { + role 'Core Team' + } + organizationUrl 'http://polygene.apache.org' + timezone 'UTC+8' + } + developer { + id '[email protected]' + name 'Alin Dreghiciu' + email '[email protected]' + roles { + role 'Core Team' + } + organizationUrl 'http://polygene.apache.org' + timezone 'UTC+2' + } + developer { + id 'mesirii' + name 'Michael Hunger' + email '[email protected]' + roles { + role 'Core Team' + } + timezone 'CET' + } + + developer { + id "muhdkamil" + name "Muhd Kamil bin Mohd Baki" + roles { + role 'Platform Team' + } + timezone "UTC+8" + } + + developer { + id "[email protected]" + name "David Leangen" + organization "Bioscene" + email "[email protected]" + roles { + role 'Platform Team' + } + timezone "UTC+9" + } + + developer { + id "[email protected]" + name "Sonny Gill" + email "[email protected]" + roles { + role 'Community Team' + } + timezone "UTC+8" + } + + developer { + id "taowen" + name "Tao Wen" + organization "" + email "[email protected]" + roles { + role 'Community Team' + } + timezone "UTC+8" + } + + developer { + id "thobe" + name "Tobias Ivarsson" + email "[email protected]" + url "http://www.neotechnology.com" + organization "NeoTechnology" + organizationUrl "http://www.neotechnology.com" + roles { + role "Platform Team" + } + timezone "CET" + } + + developer { + id "boon" + name "Lan Boon Ping" + email "[email protected]" + roles { + role 'Platform Team' + } + timezone "UTC+8" + } + + developer { + id "[email protected]" + name "Jan Kronquist" + email "[email protected]" + organization "Jayway" + roles { + role 'Platform Team' + } + timezone "CET" + } + + developer { + id "nmwael" + name "Nino Saturnino Martinez Vazquez Wael" + roles { + role 'Platform Team' + } + timezone "CET" + } + + developer { + id "[email protected]" + name "Peter Neubauer" + email "[email protected]" + roles { + role 'Platform Team' + } + timezone "CET" + } + + developer { + id "rwallace" + name "Richard Wallace" + email "[email protected]" + roles { + role 'Platform Team' + } + timezone "UTC-7" + } + + developer { + id "[email protected]" + name "Sianny Halim" + email "[email protected]" + roles { + role 'Platform Team' + } + timezone "UTC+8" + } + + developer { + id "[email protected]" + name "Paul Merlin" + email "[email protected]" + roles { + role 'Core Team' + } + timezone "CET" + } + + developer { + id "[email protected]" + name "Stanislav Muhametsin" + email "[email protected]" + roles { + role 'Platform Team' + } + timezone "UTC+2" + } + + developer { + id "tonny" + name "Tonny Kohar" + roles { + role "Community Team" + } + email "[email protected]" + timezone "UTC+7" + } + } + } + } + } +} http://git-wip-us.apache.org/repos/asf/zest-java/blob/1c722f44/buildSrc/src/main/groovy/org/apache/polygene/gradle/publish/PublishingPlugin.groovy ---------------------------------------------------------------------- diff --git a/buildSrc/src/main/groovy/org/apache/polygene/gradle/publish/PublishingPlugin.groovy b/buildSrc/src/main/groovy/org/apache/polygene/gradle/publish/PublishingPlugin.groovy new file mode 100644 index 0000000..6d55b9d --- /dev/null +++ b/buildSrc/src/main/groovy/org/apache/polygene/gradle/publish/PublishingPlugin.groovy @@ -0,0 +1,183 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.polygene.gradle.publish + +import groovy.transform.CompileStatic +import org.apache.polygene.gradle.PolygeneExtension +import org.apache.polygene.gradle.release.ReleaseSpecExtension +import org.gradle.api.GradleException +import org.gradle.api.Plugin +import org.gradle.api.Project +import org.gradle.api.artifacts.maven.MavenDeployer +import org.gradle.api.artifacts.maven.MavenDeployment +import org.gradle.api.internal.plugins.DslObject +import org.gradle.api.plugins.MavenRepositoryHandlerConvention +import org.gradle.api.publication.maven.internal.deployer.DefaultGroovyMavenDeployer +import org.gradle.api.publication.maven.internal.deployer.MavenRemoteRepository +import org.gradle.api.tasks.Upload +import org.gradle.plugins.signing.Sign +import org.gradle.plugins.signing.SigningExtension + +/** + * Publishing. + * + * <strong>Configuration</strong> + * + * By default RELEASES are signed, SNAPSHOTS are not. + * Signing can be turned on or off by setting the {@literal uploadSigned} property. + * + * By default RELEASES must satisfy {@link org.apache.polygene.gradle.release.ModuleReleaseSpec}, SNAPSHOT don't. + * This can be turned on or off by setting the {@literal uploadReleaseSpec} property. + * + * By default RELEASES and SNAPSHOTS are uploaded using HTTP. + * Used Wagon can be overridden by setting the {@literal uploadWagon} property. + * + * By default RELEASES and SNAPSHOTS are uploaded to Apache Nexus. + * Target repository can be overridden by setting the {@literal uploadRepository} property. + * + * No username/password is provided by default. + * If needed set them using the uploadUsername and {@literal uploadPassword} properties. + */ +@CompileStatic +class PublishingPlugin implements Plugin<Project> +{ + static final String WAGON_HTTP = 'org.apache.maven.wagon:wagon-http:2.2' + static final String WAGON_SSH = 'org.apache.maven.wagon:wagon-ssh:2.2' + static final String WAGON_WEBDAV = 'org.apache.maven.wagon:wagon-webdav:1.0-beta-2' + + static final String RELEASES_REPOSITORY_NAME = 'apache.releases.https' + static final String RELEASES_REPOSITORY_URL = 'https://repository.apache.org/service/local/staging/deploy/maven2' + static final String SNAPSHOTS_REPOSITORY_NAME = 'apache.snapshots.https' + static final String SNAPSHOTS_REPOSITORY_URL = 'https://repository.apache.org/content/repositories/snapshots' + + static class Config + { + boolean snapshots + boolean releases + boolean signed + boolean releaseSpec + String wagon + String repositoryName + String repositoryUrl + String username + String password + } + + @Override + void apply( final Project project ) + { + Config config = configFor( project ) + applyWagonConfiguration( project, config ) + configureSigning( project, config ) + configureUploadArchives( project, config ) + configureMavenMetadata( project ) + applyMavenPublishAuth( project ) + } + + private static Config configFor( Project project ) + { + def zest = project.extensions.getByType( PolygeneExtension ) + def config = new Config() + config.snapshots = zest.developmentVersion + config.releases = zest.releaseVersion + config.signed = project.findProperty( 'uploadSigned' ) ?: config.releases + config.releaseSpec = project.findProperty( 'uploadReleaseSpec' ) ?: config.releases + config.wagon = project.findProperty( 'uploadWagon' ) ?: WAGON_HTTP + config.repositoryName = project.findProperty( 'uploadRepositoryName' ) ?: + config.releases ? RELEASES_REPOSITORY_NAME : SNAPSHOTS_REPOSITORY_NAME + config.repositoryUrl = project.findProperty( 'uploadRepository' ) ?: + config.releases ? RELEASES_REPOSITORY_URL : SNAPSHOTS_REPOSITORY_URL + config.username = project.findProperty( 'uploadUsername' ) + config.password = project.findProperty( 'uploadPassword' ) + return config + } + + private static void applyWagonConfiguration( Project project, Config config ) + { + project.configurations.create( 'deployersJars' ) + project.dependencies.add( 'deployersJars', config.wagon ) + } + + private static void configureSigning( Project project, Config config ) + { + project.plugins.apply 'signing' + def signing = project.extensions.getByType( SigningExtension ) + signing.required = config.signed + signing.sign project.configurations.getByName( 'archives' ) + def signArchives = project.tasks.getByName( 'signArchives' ) as Sign + signArchives.onlyIf { !project.findProperty( 'skipSigning' ) } + } + + private static void configureUploadArchives( Project project, Config config ) + { + project.plugins.apply 'maven' + def uploadArchives = project.tasks.getByName( 'uploadArchives' ) as Upload + uploadArchives.doFirst { + if( project.version == "0" ) + { + throw new GradleException( "'version' must be given as a system property to perform a release." ) + } + } + uploadArchives.onlyIf { + def notSkipped = !project.hasProperty( 'skipUpload' ) + def approvedProject = project.extensions.getByType( ReleaseSpecExtension ).approvedProjects.contains( project ) + return notSkipped && ( !config.releaseSpec || ( approvedProject || project == project.rootProject ) ) + } + uploadArchives.dependsOn project.tasks.getByName( 'check' ) + def repositoriesConvention = new DslObject( uploadArchives.repositories ) + .getConvention() + .getPlugin( MavenRepositoryHandlerConvention ) + def mavenDeployer = repositoriesConvention.mavenDeployer() as DefaultGroovyMavenDeployer + if( config.signed ) + { + mavenDeployer.beforeDeployment { MavenDeployment deployment -> + project.extensions.getByType( SigningExtension ).signPom( deployment ) + } + } + mavenDeployer.configuration = project.configurations.getByName( 'deployersJars' ) + def repository = new MavenRemoteRepository() + repository.id = config.repositoryName + repository.url = config.repositoryUrl + if( config.username ) + { + repository.authentication.userName = config.username + repository.authentication.password = config.password + } + if( config.releases ) + { + mavenDeployer.repository = repository + } + else + { + mavenDeployer.snapshotRepository = repository + } + } + + private static void configureMavenMetadata( Project project ) + { + def uploadArchives = project.tasks.getByName( 'uploadArchives' ) as Upload + def mavenDeployer = uploadArchives.repositories.getByName( 'mavenDeployer' ) as MavenDeployer + MavenMetadata.applyTo( mavenDeployer ) + } + + private static void applyMavenPublishAuth( final Project project ) + { + // Bug in maven-publish-auth require apply after uploadArchives setup + project.plugins.apply 'maven-publish-auth' + } +} http://git-wip-us.apache.org/repos/asf/zest-java/blob/1c722f44/buildSrc/src/main/groovy/org/apache/polygene/gradle/release/CheckReleaseSpecTask.groovy ---------------------------------------------------------------------- diff --git a/buildSrc/src/main/groovy/org/apache/polygene/gradle/release/CheckReleaseSpecTask.groovy b/buildSrc/src/main/groovy/org/apache/polygene/gradle/release/CheckReleaseSpecTask.groovy new file mode 100644 index 0000000..d1fe082 --- /dev/null +++ b/buildSrc/src/main/groovy/org/apache/polygene/gradle/release/CheckReleaseSpecTask.groovy @@ -0,0 +1,75 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.polygene.gradle.release + +import groovy.transform.CompileStatic +import org.gradle.api.DefaultTask +import org.gradle.api.GradleException +import org.gradle.api.Project +import org.gradle.api.artifacts.ProjectDependency +import org.gradle.api.tasks.TaskAction + +@CompileStatic +class CheckReleaseSpecTask extends DefaultTask +{ + CheckReleaseSpecTask() + { + description = 'Ensure that no releasable module depend on module(s) that don\'t fit the release criteria.' + doFirst { + def approvedProjects = project.extensions.getByType( ReleaseSpecExtension ).approvedProjects + dependsOn approvedProjects.collect { each -> each.configurations.getByName( 'runtime' ) } + } + } + + @TaskAction + void check() + { + Map<Project, Set<ProjectDependency>> notReleasable = [ : ] + def approvedProjects = project.extensions.getByType( ReleaseSpecExtension ).approvedProjects + approvedProjects.each { approvedProject -> + def projectDependencies = approvedProject.configurations.getByName( 'runtime' ).allDependencies.findAll { + it instanceof ProjectDependency + } as Set<ProjectDependency> + projectDependencies.each { dep -> + def depNotReleaseApproved = approvedProjects.findAll { rp -> + rp.group == dep.dependencyProject.group && rp.name == dep.dependencyProject.name + }.isEmpty() + if( depNotReleaseApproved ) + { + if( !notReleasable[ approvedProject ] ) + { + notReleasable[ approvedProject ] = [ ] as Set + } + notReleasable[ approvedProject ] << dep + } + } + } + if( !notReleasable.isEmpty() ) + { + def errorMessage = new StringBuilder() + errorMessage << "At least one releasable module depends on module(s) that don't fit the release criteria!\n" + errorMessage << "\tOffending module -> Non releasable dependencies\n" + notReleasable.each { k, v -> + def noRlsDeps = v.collect { d -> ':' + d.dependencyProject.group + ':' + d.dependencyProject.name } + errorMessage << "\t$k -> ${ noRlsDeps })\n" + } + errorMessage << "Check the dev-status.xml file content in each modules directory." + throw new GradleException( errorMessage.toString() ) + } + } +} http://git-wip-us.apache.org/repos/asf/zest-java/blob/1c722f44/buildSrc/src/main/groovy/org/apache/polygene/gradle/release/ModuleReleaseSpec.groovy ---------------------------------------------------------------------- diff --git a/buildSrc/src/main/groovy/org/apache/polygene/gradle/release/ModuleReleaseSpec.groovy b/buildSrc/src/main/groovy/org/apache/polygene/gradle/release/ModuleReleaseSpec.groovy new file mode 100644 index 0000000..13cbe09 --- /dev/null +++ b/buildSrc/src/main/groovy/org/apache/polygene/gradle/release/ModuleReleaseSpec.groovy @@ -0,0 +1,44 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.polygene.gradle.release; + +import org.gradle.api.Project + +class ModuleReleaseSpec +{ + def boolean satisfiedBy( Project project ) + { + def devStatusFile = new File( project.projectDir, "dev-status.xml" ) + if( !devStatusFile.exists() ) + { + return false + } + def module = new XmlSlurper().parse( devStatusFile ) + def codebase = module.status.codebase.text() + def docs = module.status.documentation.text() + def tests = module.status.unittests.text() + def satisfied = ( codebase == 'none' && docs == 'complete' && tests != 'complete' ) + satisfied |= ( codebase == 'early' && ( docs == 'complete' || docs == 'good') && (tests == 'complete' || tests == 'good' ) ) + satisfied |= ( codebase == 'beta' && (docs == 'complete' || docs == 'good' || docs == 'brief') && (tests == 'complete' || tests == 'good' || tests == 'some') ) + satisfied |= ( codebase == 'stable' ) + satisfied |= ( codebase == 'mature' ) + // TODO Add a task to report this easily + // println "$project.name($satisfied) -> $codebase, $docs, $tests" + return satisfied + } +} http://git-wip-us.apache.org/repos/asf/zest-java/blob/1c722f44/buildSrc/src/main/groovy/org/apache/polygene/gradle/release/ReleaseApprovedProjectsTask.groovy ---------------------------------------------------------------------- diff --git a/buildSrc/src/main/groovy/org/apache/polygene/gradle/release/ReleaseApprovedProjectsTask.groovy b/buildSrc/src/main/groovy/org/apache/polygene/gradle/release/ReleaseApprovedProjectsTask.groovy new file mode 100644 index 0000000..9a93925 --- /dev/null +++ b/buildSrc/src/main/groovy/org/apache/polygene/gradle/release/ReleaseApprovedProjectsTask.groovy @@ -0,0 +1,57 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.polygene.gradle.release + +import groovy.json.JsonBuilder +import groovy.transform.CompileStatic +import org.gradle.api.DefaultTask +import org.gradle.api.file.FileCollection +import org.gradle.api.tasks.InputFiles +import org.gradle.api.tasks.OutputFile +import org.gradle.api.tasks.TaskAction + +/** + * Write paths of release approved projects to a JSON file. + * + * This task sole purpose is proper up-do-date behaviour when changing {@literal dev-status.xml} files. + */ +@CompileStatic +class ReleaseApprovedProjectsTask extends DefaultTask +{ + @InputFiles + FileCollection getDevStatusFiles() + { + return project.files( project.allprojects + .collect( { project -> project.file( 'dev-status.xml' ) } ) + .findAll( { it.exists() } ) ) + } + + @OutputFile + File getJsonApprovedProjects() + { + return new File( new File( project.buildDir, 'release' ), 'approved-projects.json' ) + } + + @TaskAction + void approveProjects() + { + def releaseSpec = project.extensions.getByType( ReleaseSpecExtension ) + jsonApprovedProjects.parentFile.mkdirs() + jsonApprovedProjects.text = new JsonBuilder( releaseSpec.approvedProjects.collect( { it.path } ) ).toPrettyString() + } +} http://git-wip-us.apache.org/repos/asf/zest-java/blob/1c722f44/buildSrc/src/main/groovy/org/apache/polygene/gradle/release/ReleaseSpecExtension.groovy ---------------------------------------------------------------------- diff --git a/buildSrc/src/main/groovy/org/apache/polygene/gradle/release/ReleaseSpecExtension.groovy b/buildSrc/src/main/groovy/org/apache/polygene/gradle/release/ReleaseSpecExtension.groovy new file mode 100644 index 0000000..c5b0887 --- /dev/null +++ b/buildSrc/src/main/groovy/org/apache/polygene/gradle/release/ReleaseSpecExtension.groovy @@ -0,0 +1,40 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.polygene.gradle.release + +import groovy.transform.CompileStatic +import org.gradle.api.Project + +/** + * Provide release approved projects. + * + * There's no up-to-date checking on Gradle extensions. + * Depend on {@link ReleaseApprovedProjectsTask} to get a good up-to-date behavior. + */ +@CompileStatic +class ReleaseSpecExtension +{ + static final String NAME = 'releaseSpec' + Set<Project> approvedProjects + + ReleaseSpecExtension( Project rootProject ) + { + def spec = new ModuleReleaseSpec() + approvedProjects = rootProject.allprojects.findAll( { p -> spec.satisfiedBy( p ) } ) + } +} http://git-wip-us.apache.org/repos/asf/zest-java/blob/1c722f44/buildSrc/src/main/groovy/org/apache/polygene/gradle/release/ReleaseSpecPlugin.groovy ---------------------------------------------------------------------- diff --git a/buildSrc/src/main/groovy/org/apache/polygene/gradle/release/ReleaseSpecPlugin.groovy b/buildSrc/src/main/groovy/org/apache/polygene/gradle/release/ReleaseSpecPlugin.groovy new file mode 100644 index 0000000..34422a9 --- /dev/null +++ b/buildSrc/src/main/groovy/org/apache/polygene/gradle/release/ReleaseSpecPlugin.groovy @@ -0,0 +1,56 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.polygene.gradle.release + +import groovy.transform.CompileStatic +import org.apache.polygene.gradle.TaskGroups +import org.gradle.api.Plugin +import org.gradle.api.Project +import org.gradle.api.Task + +@CompileStatic +class ReleaseSpecPlugin implements Plugin<Project> +{ + static class TaskNames + { + static final String RELEASE_APPROVED_PROJECTS = 'releaseSpecApprovedProjects' + static final String CHECK_RELEASE_SPEC = 'checkReleaseSpec' + } + + @Override + void apply( final Project project ) + { + if( project != project.rootProject ) + { + throw new IllegalStateException( "This plugin is only applicable to the root project" ) + } + applyReleaseSpec( project ) + } + + private static void applyReleaseSpec( Project project ) + { + project.extensions.create( ReleaseSpecExtension.NAME, ReleaseSpecExtension, project.rootProject ) + project.tasks.create( TaskNames.RELEASE_APPROVED_PROJECTS, ReleaseApprovedProjectsTask ) { Task task -> + task.group = TaskGroups.RELEASE + task.description = 'Apply release specification to projects in the build' + } + project.tasks.create( TaskNames.CHECK_RELEASE_SPEC, CheckReleaseSpecTask ) { Task task -> + task.group = TaskGroups.RELEASE_VERIFICATION + } + } +} http://git-wip-us.apache.org/repos/asf/zest-java/blob/1c722f44/buildSrc/src/main/groovy/org/apache/polygene/gradle/tasks/ExecLogged.groovy ---------------------------------------------------------------------- diff --git a/buildSrc/src/main/groovy/org/apache/polygene/gradle/tasks/ExecLogged.groovy b/buildSrc/src/main/groovy/org/apache/polygene/gradle/tasks/ExecLogged.groovy new file mode 100644 index 0000000..01b4e71 --- /dev/null +++ b/buildSrc/src/main/groovy/org/apache/polygene/gradle/tasks/ExecLogged.groovy @@ -0,0 +1,117 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.polygene.gradle.tasks + +import groovy.transform.CompileStatic +import org.gradle.api.Action +import org.gradle.api.GradleException +import org.gradle.api.Project +import org.gradle.api.tasks.AbstractExecTask +import org.gradle.api.tasks.OutputFile +import org.gradle.api.tasks.TaskAction +import org.gradle.internal.logging.ConsoleRenderer +import org.gradle.process.ExecSpec + +@CompileStatic +class ExecLogged extends AbstractExecTask<ExecLogged> +{ + @OutputFile + File stdoutFile = project.file( "$project.buildDir/tmp/${ getName() }/stdout.log" ) + + @OutputFile + File stderrFile = project.file( "$project.buildDir/tmp/${ getName() }/stderr.log" ) + + ExecLogged() + { + super( ExecLogged.class ) + } + + @TaskAction + protected void exec() + { + [ stdoutFile, stderrFile ].each { it.parentFile.mkdirs() } + def outStream = stdoutFile.newOutputStream() + def errStream = stderrFile.newOutputStream() + try + { + super.exec() + } + catch( Exception ex ) + { + throw new GradleException( errorMessage( ex, stdoutFile, stderrFile ), ex ) + } + finally + { + close outStream, errStream + } + } + + static void execLogged( Project project, File stdoutFile, File stderrFile, Action<? super ExecSpec> specAction ) + { + [ stdoutFile, stderrFile ].each { it.parentFile.mkdirs() } + def outStream = stdoutFile.newOutputStream() + def errStream = stderrFile.newOutputStream() + try + { + project.exec { ExecSpec spec -> + specAction.execute( spec ) + spec.standardOutput = outStream + spec.errorOutput = errStream + } + } + catch( Exception ex ) + { + throw new GradleException( errorMessage( ex, stdoutFile, stderrFile ), ex ) + } + finally + { + close outStream, errStream + } + } + + private static void close( Closeable... closeables ) + throws IOException + { + def errors = [ ] as List<IOException> + for( Closeable closeable : closeables ) + { + try + { + closeable.close() + } + catch( IOException ex ) + { + errors.add( ex ) + } + } + if( !errors.empty ) + { + def ex = new IOException( 'Failed to close some' ) + errors.each { ex.addSuppressed it } + throw ex + } + } + + private static String errorMessage( Exception ex, File stdoutFile, File stderrFile ) + { + def consoleRenderer = new ConsoleRenderer() + return "${ ex.message }\n" + + "\tSTDOUT ${ consoleRenderer.asClickableFileUrl( stdoutFile ) }\n" + + "\tSTDERR ${ consoleRenderer.asClickableFileUrl( stderrFile ) }" + } +} http://git-wip-us.apache.org/repos/asf/zest-java/blob/1c722f44/buildSrc/src/main/groovy/org/apache/polygene/gradle/test/AggregatedJacocoReportTask.groovy ---------------------------------------------------------------------- diff --git a/buildSrc/src/main/groovy/org/apache/polygene/gradle/test/AggregatedJacocoReportTask.groovy b/buildSrc/src/main/groovy/org/apache/polygene/gradle/test/AggregatedJacocoReportTask.groovy new file mode 100644 index 0000000..ca10b80 --- /dev/null +++ b/buildSrc/src/main/groovy/org/apache/polygene/gradle/test/AggregatedJacocoReportTask.groovy @@ -0,0 +1,91 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.polygene.gradle.test + +import org.gradle.api.DefaultTask +import org.gradle.api.Project +import org.gradle.api.file.FileCollection +import org.gradle.api.tasks.InputFiles +import org.gradle.api.tasks.OutputDirectory +import org.gradle.api.tasks.TaskAction + +class AggregatedJacocoReportTask extends DefaultTask +{ + @InputFiles + FileCollection getJacocoExecDataDirectories() + { + return project.files( project.subprojects.collect( { Project p -> "${ p.buildDir.path }/jacoco" } ) ) + } + + @OutputDirectory + File getOutputDirectory() + { + return project.file( "$project.buildDir/reports/coverage" ) + } + + @TaskAction + void report() + { + def coveredProjects = project.subprojects.findAll { p -> new File( "${ p.buildDir.path }/jacoco" ).exists() } + def coreProjects = coveredProjects.findAll { p -> p.name.startsWith( 'org.apache.polygene.core' ) } + def libProjects = coveredProjects.findAll { p -> p.name.startsWith( 'org.apache.polygene.lib' ) } + def extProjects = coveredProjects.findAll { p -> p.name.startsWith( 'org.apache.polygene.ext' ) } + def toolsProjects = coveredProjects.findAll { p -> p.name.startsWith( 'org.apache.polygene.tool' ) } + def tutoProjects = coveredProjects.findAll { p -> p.name.startsWith( 'org.apache.polygene.tuto' ) } + def samplesProjects = coveredProjects.findAll { p -> p.name.startsWith( 'org.apache.polygene.sample' ) } + def classpath = project.configurations.getByName( 'jacoco' ).asPath + project.ant { + taskdef name: 'jacocoreport', classname: 'org.jacoco.ant.ReportTask', classpath: classpath + mkdir dir: outputDirectory + jacocoreport { + executiondata { + coveredProjects.collect { p -> fileset( dir: "${ p.buildDir.path }/jacoco" ) { include( name: '*.exec' ) } } + } + structure( name: "Apache Polygene⢠(Java Edition) SDK" ) { + group( name: "Core" ) { + classfiles { coreProjects.collect { p -> fileset dir: "${ p.buildDir.path }/classes/main" } } + sourcefiles { coreProjects.collect { p -> fileset dir: "${ p.projectDir.path }/src/main/java" } } + } + group( name: "Libraries" ) { + classfiles { libProjects.collect { p -> fileset dir: "${ p.buildDir.path }/classes/main" } } + sourcefiles { libProjects.collect { p -> fileset dir: "${ p.projectDir.path }/src/main/java" } } + } + group( name: "Extensions" ) { + classfiles { extProjects.collect { p -> fileset dir: "${ p.buildDir.path }/classes/main" } } + sourcefiles { extProjects.collect { p -> fileset dir: "${ p.projectDir.path }/src/main/java" } } + } + group( name: "Tools" ) { + classfiles { toolsProjects.collect { p -> fileset dir: "${ p.buildDir.path }/classes/main" } } + sourcefiles { toolsProjects.collect { p -> fileset dir: "${ p.projectDir.path }/src/main/java" } } + } + group( name: "Tutorials" ) { + classfiles { tutoProjects.collect { p -> fileset dir: "${ p.buildDir.path }/classes/main" } } + sourcefiles { tutoProjects.collect { p -> fileset dir: "${ p.projectDir.path }/src/main/java" } } + } + group( name: "Samples" ) { + classfiles { samplesProjects.collect { p -> fileset dir: "${ p.buildDir.path }/classes/main" } } + sourcefiles { samplesProjects.collect { p -> fileset dir: "${ p.projectDir.path }/src/main/java" } } + } + } + csv destfile: "${ outputDirectory }/jacoco.csv", encoding: "UTF-8" + xml destfile: "${ outputDirectory }/jacoco.xml", encoding: "UTF-8" + html destdir: outputDirectory, encoding: "UTF-8", locale: "en", footer: "Apache Polygene⢠(Java Edition) SDK" + } + } + } +} http://git-wip-us.apache.org/repos/asf/zest-java/blob/1c722f44/buildSrc/src/main/groovy/org/apache/polygene/gradle/version/VersionClassPlugin.groovy ---------------------------------------------------------------------- diff --git a/buildSrc/src/main/groovy/org/apache/polygene/gradle/version/VersionClassPlugin.groovy b/buildSrc/src/main/groovy/org/apache/polygene/gradle/version/VersionClassPlugin.groovy new file mode 100644 index 0000000..2a99206 --- /dev/null +++ b/buildSrc/src/main/groovy/org/apache/polygene/gradle/version/VersionClassPlugin.groovy @@ -0,0 +1,98 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.polygene.gradle.version + +import groovy.transform.CompileStatic +import org.gradle.api.Project +import org.gradle.api.Plugin +import org.gradle.api.Task +import org.gradle.api.file.SourceDirectorySet +import org.gradle.api.plugins.JavaPlugin +import org.gradle.api.plugins.JavaPluginConvention +import org.gradle.api.tasks.SourceSet +import org.gradle.api.tasks.bundling.Jar + +// TODO:release:perf Placeholder for date for dev versions +// TODO:release:perf Add git data, placeholders for dev versions +@CompileStatic +class VersionClassPlugin implements Plugin<Project> +{ + def void apply( Project project ) + { + project.getPlugins().apply( JavaPlugin.class ) + def genSrc = 'generated-src/version' + def generatedSrcDir = new File( project.buildDir, genSrc ) + + Task makeVersionClassTask = project.task( 'makeVersionClass' ) + makeVersionClassTask.doLast { + def now = new Date() + def tmpGroup = project.name + if( tmpGroup.startsWith( "org.apache.polygene.core" ) ) + { + tmpGroup = tmpGroup - ".core" + } + tmpGroup = tmpGroup.replace( '-', '_' ) + def outFilename = "java/" + tmpGroup.replace( '.', '/' ) + "/BuildVersion.java" + def outFile = new File( generatedSrcDir, outFilename ) + outFile.getParentFile().mkdirs() + def f = new FileWriter( outFile ) + f.write( 'package ' + tmpGroup + ';\n' ) + f.write( """ +/** + * Simple class for storing the version derived from the build system. + * + */ +public interface BuildVersion +{ + /** The version of the project from the gradle build.gradle file. */ + String VERSION = \"""" + project.version + """\"; + + /** The name of the project from the gradle build.gradle file. */ + String NAME = \"""" + project.name + """\"; + + /** The group of the project from the gradle build.gradle file. */ + String GROUP = \"""" + project.group + """\"; + + /** The date this file was generated, usually the last date that the project was modified. */ + String DATE = \"""" + now + """\"; + + /** The full details of the version, including the build date. */ + String DETAILED_VERSION = GROUP + ":" + NAME + ":" + VERSION + " " + DATE; +}\n +""" ) + f.close() + } + def sourceSets = project.convention.getPlugin( JavaPluginConvention ).sourceSets + sourceSets.create( "version" ) { SourceSet sourceSet -> + sourceSet.java { SourceDirectorySet dirSet -> + dirSet.srcDir project.buildDir.name + '/' + genSrc + '/java' + } + } + makeVersionClassTask.getInputs().files( sourceSets.getByName( 'main' ).allSource ) + makeVersionClassTask.getOutputs().file( generatedSrcDir ) + if( project.getBuildFile() != null && project.getBuildFile().exists() ) + { + makeVersionClassTask.getInputs().files( project.getBuildFile() ) + } + project.getTasks().getByName( 'compileJava' ).dependsOn( 'compileVersionJava' ) + project.getTasks().getByName( 'compileVersionJava' ).dependsOn( 'makeVersionClass' ) + project.getTasks().getByName( 'jar' ) { Jar task -> + task.from sourceSets.getByName( 'version' ).output + } + } +} http://git-wip-us.apache.org/repos/asf/zest-java/blob/1c722f44/buildSrc/src/main/groovy/org/apache/zest/gradle/AllProjectsPlugin.groovy ---------------------------------------------------------------------- diff --git a/buildSrc/src/main/groovy/org/apache/zest/gradle/AllProjectsPlugin.groovy b/buildSrc/src/main/groovy/org/apache/zest/gradle/AllProjectsPlugin.groovy deleted file mode 100644 index 57a0ba3..0000000 --- a/buildSrc/src/main/groovy/org/apache/zest/gradle/AllProjectsPlugin.groovy +++ /dev/null @@ -1,208 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.zest.gradle - -import groovy.transform.CompileStatic -import org.apache.zest.gradle.dependencies.DependenciesPlugin -import org.apache.zest.gradle.publish.PublishingPlugin -import org.gradle.api.JavaVersion -import org.gradle.api.Plugin -import org.gradle.api.Project -import org.gradle.api.plugins.JavaPluginConvention -import org.gradle.api.tasks.compile.JavaCompile -import org.gradle.api.tasks.javadoc.Javadoc -import org.gradle.api.tasks.testing.Test -import org.gradle.api.tasks.testing.logging.TestExceptionFormat -import org.gradle.external.javadoc.StandardJavadocDocletOptions -import org.nosphere.honker.gradle.HonkerExtension -import org.nosphere.honker.gradle.HonkerGenDependenciesTask -import org.nosphere.honker.gradle.HonkerGenLicenseTask -import org.nosphere.honker.gradle.HonkerGenNoticeTask -import org.nosphere.honker.gradle.HonkerLicenseOverrideCandidate - -@CompileStatic -class AllProjectsPlugin implements Plugin<Project> -{ - @Override - void apply( final Project project ) - { - project.defaultTasks = [ 'classes', 'test' ] - project.group = project.name == 'org.apache.zest' ? - 'org.apache.zest' : - project.name.substring( 0, project.name.lastIndexOf( '.' ) ) - - applyDefaultVersion( project ) - applyPolygeneExtension( project ) - - configureJava( project ) - project.plugins.apply DependenciesPlugin - configureJavadoc( project ) - configureTest( project ) - if( CodeProjectsPlugin.isCodeProject( project ) ) - { - project.plugins.apply CodeProjectsPlugin - } - configureDependencyReport( project ) - configureHonker( project ) - project.plugins.apply PublishingPlugin - } - - private static void applyDefaultVersion( Project project ) - { - if( project.version == 'unspecified' ) - { - project.version = System.properties.version ?: '0' - } - } - - private static void applyPolygeneExtension( Project project ) - { - project.extensions.create( "zest", PolygeneExtension, project ) - } - - private static void configureJava( Project project ) - { - project.plugins.apply 'java' - def javaConvention = project.convention.getPlugin( JavaPluginConvention ) - javaConvention.targetCompatibility = JavaVersion.VERSION_1_8 - javaConvention.sourceCompatibility = JavaVersion.VERSION_1_8 - project.tasks.withType( JavaCompile ) { JavaCompile task -> - task.options.encoding = 'UTF-8' - // Deprecation warnings for all compilations - task.options.compilerArgs << "-Xlint:deprecation" - // Unchecked warnings for non-test core compilations - if( 'org.apache.zest.core' == project.group && !task.name.toLowerCase( Locale.US ).contains( 'test' ) ) - { - task.options.compilerArgs << "-Xlint:unchecked" - } - } - } - - private static void configureJavadoc( Project project ) - { - project.tasks.withType( Javadoc ) { Javadoc task -> - def options = task.options as StandardJavadocDocletOptions - options.encoding = 'UTF-8' - options.docEncoding = 'UTF-8' - options.charSet = 'UTF-8' - options.noTimestamp = true - options.links = [ - 'http://docs.oracle.com/javase/8/docs/api/', - 'https://stleary.github.io/JSON-java/', - 'http://junit.org/junit4/javadoc/latest/' - ] - // exclude '**/internal/**' - } - } - - private static void configureTest( Project project ) - { - // Match --max-workers and Test maxParallelForks, use 1 if parallel is disabled - def parallel = project.gradle.startParameter.parallelProjectExecutionEnabled - def maxTestWorkers = ( parallel ? project.gradle.startParameter.maxWorkerCount : 1 ) as int - // The space in the directory name is intentional - def allTestsDir = project.file( "$project.buildDir/tmp/test files" ) - project.tasks.withType( Test ) { Test testTask -> - testTask.onlyIf { !project.hasProperty( 'skipTests' ) } - testTask.testLogging.info.exceptionFormat = TestExceptionFormat.FULL - testTask.maxHeapSize = '1g' - testTask.maxParallelForks = maxTestWorkers - testTask.systemProperties = [ 'proxySet' : System.properties[ 'proxySet' ], - 'proxyHost': System.properties[ 'proxyHost' ], - 'proxyPort': System.properties[ 'proxyPort' ] ] - testTask.reports.html.enabled = true - def testDir = new File( allTestsDir, testTask.name ) - def workDir = new File( testDir, 'work' ) - def tmpDir = new File( testDir, 'tmp' ) - def homeDir = new File( testDir, 'home' ) - testTask.workingDir = workDir - testTask.systemProperties << ( [ - 'user.dir' : workDir.absolutePath, - 'java.io.tmpdir': tmpDir.absolutePath, - 'home.dir' : homeDir.absolutePath - ] as Map<String, Object> ) - testTask.environment << ( [ - 'HOME' : homeDir.absolutePath, - 'USERPROFILE': homeDir.absolutePath - ] as Map<String, Object> ) - testTask.doFirst { Test task -> - [ workDir, tmpDir, homeDir ]*.mkdirs() - } - testTask.doLast { Test task -> - if( !task.state.failure ) - { - project.delete testDir - } - } - } - } - - // Dependency Report generate only the runtime configuration - // The report is packaged in the SDK distributions - private static void configureDependencyReport( Project project ) - { - project.plugins.apply 'project-report' - // TODO Fails with no task found - // def dependencyReport = project.tasks.getByName( 'dependencyReport' ) as DependencyReportTask - // dependencyReport.configurations = [ project.configurations.getByName( 'runtime' ) ] as Set - } - - private static void configureHonker( Project project ) - { - project.plugins.apply 'org.nosphere.honker' - def honkerGenDependencies = project.tasks.getByName( 'honkerGenDependencies' ) as HonkerGenDependenciesTask - def honkerGenLicense = project.tasks.getByName( 'honkerGenLicense' ) as HonkerGenLicenseTask - def honkerGenNotice = project.tasks.getByName( 'honkerGenNotice' ) as HonkerGenNoticeTask - def javaConvention = project.convention.getPlugin( JavaPluginConvention ) - def mainSourceSet = javaConvention.sourceSets.getByName( 'main' ) - mainSourceSet.output.dir( [ builtBy: honkerGenDependencies ] as Map<String, Object>, - honkerGenDependencies.outputDir ) - mainSourceSet.output.dir( [ builtBy: honkerGenLicense ] as Map<String, Object>, - honkerGenLicense.outputDir ) - mainSourceSet.output.dir( [ builtBy: honkerGenNotice ] as Map<String, Object>, - honkerGenNotice.outputDir ) - def honker = project.extensions.getByType( HonkerExtension ) - // Project License, applied to all submodules - honker.license 'Apache 2' - // Dependencies (transitive or not) with no license information, overriding them - honker.licenseOverride { HonkerLicenseOverrideCandidate candidate -> - if( candidate.group == 'asm' || candidate.module == 'prefuse-core' ) - { - candidate.license = 'BSD 3-Clause' - } - if( candidate.group == 'javax.websocket' - || candidate.group == 'javax.xml.bind' ) - { - candidate.license = 'CDDL' - } - if( candidate.group == 'org.apache.httpcomponents' - || candidate.group == 'net.java.dev.jna' - || candidate.group == 'lucene' - || candidate.group == 'jdbm' - || candidate.group == 'org.osgi' - || candidate.group.startsWith( 'org.restlet' ) ) - { - candidate.license = 'Apache 2' - } - } - honkerGenNotice.header = 'Apache Polygene' - honkerGenNotice.footer = 'This product includes software developed at\n' + - 'The Apache Software Foundation (http://www.apache.org/).\n' - project.tasks.getByName( 'check' ).dependsOn project.tasks.getByName( 'honkerCheck' ) - } -} http://git-wip-us.apache.org/repos/asf/zest-java/blob/1c722f44/buildSrc/src/main/groovy/org/apache/zest/gradle/CodeProjectsPlugin.groovy ---------------------------------------------------------------------- diff --git a/buildSrc/src/main/groovy/org/apache/zest/gradle/CodeProjectsPlugin.groovy b/buildSrc/src/main/groovy/org/apache/zest/gradle/CodeProjectsPlugin.groovy deleted file mode 100644 index 7225fb9..0000000 --- a/buildSrc/src/main/groovy/org/apache/zest/gradle/CodeProjectsPlugin.groovy +++ /dev/null @@ -1,146 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.zest.gradle - -import groovy.transform.CompileStatic -import org.apache.zest.gradle.dependencies.DependenciesDeclarationExtension -import org.apache.zest.gradle.doc.AsciidocBuildInfoPlugin -import org.apache.zest.gradle.version.VersionClassPlugin -import org.gradle.api.Plugin -import org.gradle.api.Project -import org.gradle.api.plugins.JavaPluginConvention -import org.gradle.api.plugins.osgi.OsgiManifest -import org.gradle.api.tasks.javadoc.Javadoc -import org.gradle.jvm.tasks.Jar -import org.gradle.testing.jacoco.plugins.JacocoPluginExtension -import org.gradle.testing.jacoco.tasks.JacocoReport - -@CompileStatic -class CodeProjectsPlugin implements Plugin<Project> -{ - static boolean isCodeProject( Project project ) - { - [ 'src/main/java', 'src/test/java', - 'src/main/groovy', 'src/test/groovy' ].collect { path -> - new File( "$project.projectDir/$path" ) - }.any { dir -> dir.isDirectory() } - } - - @Override - void apply( final Project project ) - { - project.plugins.apply VersionClassPlugin - project.plugins.apply AsciidocBuildInfoPlugin - - configureJar( project ) - configureSupplementaryArchives( project ) - - configureJacoco( project ) - configureCheckstyle( project ) - } - - private static void configureJar( Project project ) - { - project.plugins.apply 'osgi' - def jar = project.tasks.getByName( 'jar' ) as Jar - def manifest = jar.manifest as OsgiManifest - manifest.attributes( [ - license : 'http://www.apache.org/licenses/LICENSE-2.0.txt', - docURL : 'https://zest.apache.org/', - description: project.description ?: - 'Apache Polygene⢠(Java Edition) is a platform for Composite Oriented Programming', - vendor : 'The Apache Software Foundation, https://www.apache.org', - ] ) - manifest.instruction '-debug', 'true' - } - - private static void configureSupplementaryArchives( Project project ) - { - def javaConvention = project.convention.getPlugin( JavaPluginConvention ) - def sourceJar = project.tasks.create( 'sourceJar', Jar ) { Jar task -> - task.description = 'Builds -sources.jar' - task.classifier = 'sources' - task.from javaConvention.sourceSets.getByName( 'main' ).allSource - } - def testSourceJar = project.tasks.create( 'testSourceJar', Jar ) { Jar task -> - task.description = 'Builds -testsources.jar' - task.classifier = 'testsources' - task.from javaConvention.sourceSets.getByName( 'test' ).allSource - } - def javadoc = project.tasks.getByName( 'javadoc' ) as Javadoc - def javadocJar = project.tasks.create( 'javadocJar', Jar ) { Jar task -> - task.description = 'Builds -javadoc.jar' - task.classifier = 'javadoc' - task.from javadoc.destinationDir - task.dependsOn javadoc - } - project.artifacts.add( 'archives', sourceJar ) - project.artifacts.add( 'archives', testSourceJar ) - project.artifacts.add( 'archives', javadocJar ) - } - - private static void configureJacoco( Project project ) - { - def dependencies = project.rootProject.extensions.getByType( DependenciesDeclarationExtension ) - project.plugins.apply 'jacoco' - def jacoco = project.extensions.getByType( JacocoPluginExtension ) - jacoco.toolVersion = dependencies.buildToolsVersions.jacoco - project.tasks.withType( JacocoReport ) { JacocoReport task -> - task.group = TaskGroups.VERIFICATION - task.description = 'Generates test coverage report.' - } - } - - private static void configureCheckstyle( Project project ) - { - // project.plugins.apply 'checkstyle' - // if( name == "org.apache.zest.core.runtime" ) - // { - // checkstyleMain { - // configFile = new File( "$rootProject.projectDir.absolutePath/etc/zest-runtime-checkstyle.xml" ) - // ignoreFailures = true - // } - // } - // else - // { - // checkstyleMain { - // configFile = new File( rootProject.projectDir.absolutePath.toString() + '/etc/zest-api-checkstyle.xml' ) - // ignoreFailures = true - // reporting.baseDir = "$rootProject.reporting.baseDir/checkstyle" - // } - // } - // checkstyleTest { - // configFile = new File( "$rootProject.projectDir.absolutePath/etc/zest-tests-checkstyle.xml" ) - // ignoreFailures = true - // } - // - // checkstyleVersion { - // configFile = new File( "$rootProject.projectDir.absolutePath/etc/zest-tests-checkstyle.xml" ) - // ignoreFailures = true - // } - // // Create checkstyle report - // task checkstyleReport( type: XsltTask, dependsOn: check ) { - // source project.checkstyle.reportsDir - // include '*.xml' - // destDir = file( "build/reports/checkstyle/" ) - // extension = 'html' - // stylesheetFile = file( "$rootProject.projectDir/etc/checkstyle-noframes.xsl" ) - // } - // - } -} http://git-wip-us.apache.org/repos/asf/zest-java/blob/1c722f44/buildSrc/src/main/groovy/org/apache/zest/gradle/RootProjectPlugin.groovy ---------------------------------------------------------------------- diff --git a/buildSrc/src/main/groovy/org/apache/zest/gradle/RootProjectPlugin.groovy b/buildSrc/src/main/groovy/org/apache/zest/gradle/RootProjectPlugin.groovy deleted file mode 100644 index 47e5404..0000000 --- a/buildSrc/src/main/groovy/org/apache/zest/gradle/RootProjectPlugin.groovy +++ /dev/null @@ -1,262 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.zest.gradle - -import groovy.transform.CompileStatic -import org.apache.rat.gradle.RatTask -import org.apache.zest.gradle.dependencies.DependenciesDeclarationExtension -import org.apache.zest.gradle.dist.DistributionPlugin -import org.apache.zest.gradle.release.ReleaseSpecExtension -import org.apache.zest.gradle.release.ReleaseSpecPlugin -import org.apache.zest.gradle.test.AggregatedJacocoReportTask -import org.gradle.api.GradleException -import org.gradle.api.Plugin -import org.gradle.api.Project -import org.gradle.api.Task -import org.gradle.api.artifacts.Configuration -import org.gradle.api.plugins.JavaPluginConvention -import org.gradle.api.tasks.Copy -import org.gradle.api.tasks.javadoc.Javadoc -import org.gradle.api.tasks.testing.Test -import org.gradle.api.tasks.testing.TestReport -import org.gradle.external.javadoc.StandardJavadocDocletOptions - -@CompileStatic -class RootProjectPlugin implements Plugin<Project> -{ - static final String PROJECT_TITLE = 'Apache Polygene⢠(Java Edition) SDK' - static final String PROJECT_DESCRIPTION = 'Apache Polygene⢠(Java Edition) is a framework for domain centric ' + - 'application development, including evolved concepts from AOP, DI and DDD.' - - static class TaskNames - { - static final String GO_OFFLINE = 'goOffline' - static final String GLOBAL_TEST_REPORT = 'globalTestReport' - static final String JAVADOCS = 'javadocs' - static final String ARCHIVE_JAVADOCS = 'archiveJavadocs' - static final String BUILD_ALL = 'buildAll' - } - - @Override - void apply( Project project ) - { - project.plugins.apply ReleaseSpecPlugin - - applyProjectMetadata( project ) - applyHelperTasks( project ) - applyPlugins( project ) - - configureJacoco( project ) - configureTestReport( project ) - configureJavadocs( project ) - configureRat( project ) - - project.plugins.apply DistributionPlugin - configureReleaseTask( project ) - } - - private static void applyProjectMetadata( Project project ) - { - def extraProperties = project.extensions.extraProperties - extraProperties.set 'title', PROJECT_TITLE - extraProperties.set 'description', PROJECT_DESCRIPTION - } - - private static void applyHelperTasks( Project project ) - { - project.tasks.create( TaskNames.GO_OFFLINE ) { Task task -> - task.group = TaskGroups.HELP - task.description = 'Resolves all dependencies configuration' - task.doLast { - def allConfigurations = project.allprojects.collect { Project each -> - each.configurations - }.flatten() as Set<Configuration> - allConfigurations*.resolvedConfiguration - } - } - def buildAll = project.tasks.create( TaskNames.BUILD_ALL ) - buildAll.group = TaskGroups.BUILD - buildAll.description = 'Builds all' - buildAll.dependsOn 'javadocs', 'check', 'jar', - project.subprojects.collect { p -> p.tasks.getByName( 'dependencyReport' ) }, - project.subprojects.collect { p -> p.tasks.getByName( 'assemble' ) }, - ':org.apache.zest.manual:website' - } - - private static void applyPlugins( Project project ) - { - project.plugins.apply 'org.nosphere.apache.rat' - } - - private static void configureJacoco( Project project ) - { - def dependencies = project.rootProject.extensions.getByType( DependenciesDeclarationExtension ) - project.configurations.create( 'jacoco' ) - project.dependencies.add( 'jacoco', "org.jacoco:org.jacoco.ant:${ dependencies.buildToolsVersions.jacoco }" ) - def task = project.tasks.create( 'coverageReport', AggregatedJacocoReportTask ) { AggregatedJacocoReportTask task -> - task.group = TaskGroups.VERIFICATION - task.description = 'Generates global coverage report' - task.dependsOn project.subprojects.collect( { Project p -> p.tasks.getByName( 'test' ) } ) - } - project.tasks.getByName( 'check' ).dependsOn task - } - - private static void configureTestReport( Project project ) - { - project.tasks.create( TaskNames.GLOBAL_TEST_REPORT, TestReport ) { TestReport task -> - task.group = TaskGroups.VERIFICATION - task.description = 'Generates global test report' - task.destinationDir = project.file( "$project.buildDir/reports/tests" ) - task.reportOn project.subprojects.collect { it.tasks.getByName( 'test' ) } - } - def test = project.tasks.getByName( 'test' ) as Test - test.dependsOn project.subprojects.collect { it.tasks.getByName( 'test' ) } - test.dependsOn project.tasks.getByName( TaskNames.GLOBAL_TEST_REPORT ) - test.reports.html.enabled = false - } - - private static void configureJavadocs( Project project ) - { - def zest = project.extensions.getByType( PolygeneExtension ) - def releaseSpec = project.extensions.getByType( ReleaseSpecExtension ) - project.tasks.create( TaskNames.JAVADOCS, Javadoc ) { Javadoc task -> - task.group = TaskGroups.DOCUMENTATION - task.description = 'Builds the whole SDK public Javadoc' - task.dependsOn ReleaseSpecPlugin.TaskNames.RELEASE_APPROVED_PROJECTS - def options = task.options as StandardJavadocDocletOptions - options.docFilesSubDirs = true - options.encoding = "UTF-8" - options.overview = "${ project.projectDir }/src/javadoc/overview.html" - task.title = "${ PROJECT_TITLE } ${ project.version }" - def apiSources = releaseSpec.approvedProjects.findAll { approved -> - ( approved.name.startsWith( 'org.apache.zest.core' ) && - !approved.name.startsWith( 'org.apache.zest.core.runtime' ) ) || - approved.name.startsWith( 'org.apache.zest.library' ) || - approved.name.startsWith( 'org.apache.zest.extension' ) || - approved.name.startsWith( 'org.apache.zest.tool' ) - } - task.source apiSources.collect { each -> - each.convention.getPlugin( JavaPluginConvention ).sourceSets.getByName( 'main' ).allJava - } - task.destinationDir = project.file( "${ project.convention.getPlugin( JavaPluginConvention ).docsDir }/javadocs" ) - task.classpath = project.files( apiSources.collect { apiProject -> - apiProject.convention.getPlugin( JavaPluginConvention ).sourceSets.getByName( 'main' ).compileClasspath - } ) - options.group( [ - "Core API" : [ "org.apache.zest.api", - "org.apache.zest.api.*" ], - "Core Bootstrap": [ "org.apache.zest.bootstrap", - "org.apache.zest.bootstrap.*" ], - "Core SPI" : [ "org.apache.zest.spi", - "org.apache.zest.spi.*" ], - "Libraries" : [ "org.apache.zest.library.*" ], - "Extensions" : [ "org.apache.zest.valueserialization.*", - "org.apache.zest.entitystore.*", - "org.apache.zest.index.*", - "org.apache.zest.metrics.*", - "org.apache.zest.cache.*", - "org.apache.zest.migration", - "org.apache.zest.migration.*" ], - "Tools" : [ "org.apache.zest.tools.*", - "org.apache.zest.envisage", - "org.apache.zest.envisage.*" ], - "Test Support" : [ "org.apache.zest.test", - "org.apache.zest.test.*" ] - ] ) - } - project.tasks.create( TaskNames.ARCHIVE_JAVADOCS, Copy ) { Copy task -> - task.group = TaskGroups.DOCUMENTATION - task.description = 'Copy SDK public Javadoc to ../zest-web' - task.dependsOn TaskNames.JAVADOCS - task.from 'build/docs/javadoc/' - if( zest.developmentVersion ) - { - task.into( "$project.projectDir/../zest-web/site/content/java/develop/javadocs/" ) - } - else - { - task.into( "$project.projectDir/../zest-web/site/content/java/$project.version/javadocs/" ) - } - } - } - - private static void configureRat( Project project ) - { - def rat = project.tasks.getByName( 'rat' ) as RatTask - rat.group = TaskGroups.VERIFICATION - rat.onlyIf { project.version != '0' } - rat.excludes = [ - '**/.DS_Store/**', '**/._*', - // Git Files - '**/.git/**', '**/.gitignore', - // Gradle Files - 'gradle/wrapper/**', '**/gradlew', '**/gradlew.bat', '**/.gradle/**', - // Build Output - '**/build/**', '**/derby.log', 'out/**', - // IDE Files - '**/.idea/**', '**/*.iml', '**/*.ipr', '**/*.iws', - '**/.settings/**', '**/.classpath', '**/.project', - '**/.gradletasknamecache', '**/private/cache/**', - '**/.nb-gradle-properties', '**/.nb-gradle/**', - // JSON files are not allowed to have comments, according to http://www.json.org/ and http://www.ietf.org/rfc/rfc4627.txt - '**/*.json', - // Various Text Resources - '**/README.*', '**/README*.*', '**/TODO', - '**/src/main/resources/**/*.txt', - '**/src/test/resources/**/*.txt', - 'libraries/rest-server/src/main/resources/**/*.htm', - 'libraries/rest-server/src/main/resources/**/*.atom', - 'tools/qidea/src/main/resources/**/*.ft', - 'tools/qidea/src/main/resources/**/*.template', - // Graphic Resources - '**/*.svg', '**/*.gif', '**/*.png', '**/*.jpg', '**/*.psd', - // Keystores - '**/*.jceks', - // Syntax Highlighter - MIT - 'manual/**/sh*.css', 'manual/**/sh*.js', - // jQuery & plugins - MIT - 'manual/**/jquery*.js', - // W3C XML Schemas - W3C Software License - 'samples/rental/src/main/resources/*.xsd', - // Polygene Generator Heroes Templates - MIT - 'tools/generator-zest/app/templates/Heroes/**', - // templates that will become the user's source files, should not have license headers - 'tools/shell/src/dist/etc/templates/**', - ] - } - - private static void configureReleaseTask( Project project ) - { - def zest = project.extensions.getByType( PolygeneExtension ) - def release = project.tasks.create( 'release' ) - release.description = 'Builds, tests and uploads the release artifacts' - release.group = TaskGroups.RELEASE - release.doFirst { - if( zest.developmentVersion ) - { - throw new GradleException( "Cannot release development version $project.version, use '-Dversion=X.Y.Z'" ) - } - } - release.dependsOn 'checkReleaseSpec', - 'rat', - 'archiveJavadocs', - ':org.apache.zest.manual:copyWebsite', - project.allprojects.collect { it.tasks.getByName( 'uploadArchives' ) }, - 'dist' - } -} http://git-wip-us.apache.org/repos/asf/zest-java/blob/1c722f44/buildSrc/src/main/groovy/org/apache/zest/gradle/TaskGroups.groovy ---------------------------------------------------------------------- diff --git a/buildSrc/src/main/groovy/org/apache/zest/gradle/TaskGroups.groovy b/buildSrc/src/main/groovy/org/apache/zest/gradle/TaskGroups.groovy deleted file mode 100644 index 53a5b5e..0000000 --- a/buildSrc/src/main/groovy/org/apache/zest/gradle/TaskGroups.groovy +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.zest.gradle - -import org.gradle.api.plugins.ApplicationPlugin -import org.gradle.api.plugins.BasePlugin -import org.gradle.api.plugins.HelpTasksPlugin -import org.gradle.api.plugins.JavaBasePlugin -import org.gradle.language.base.plugins.LifecycleBasePlugin - -class TaskGroups -{ - static final String HELP = HelpTasksPlugin.HELP_GROUP - static final String BUILD = LifecycleBasePlugin.BUILD_GROUP - static final String VERIFICATION = LifecycleBasePlugin.VERIFICATION_GROUP - static final String DOCUMENTATION = JavaBasePlugin.DOCUMENTATION_GROUP - static final String DISTRIBUTION = ApplicationPlugin.APPLICATION_GROUP - static final String DISTRIBUTION_VERIFICATION = 'distribution verification' - static final String PERFORMANCE = 'performance' - static final String PERFORMANCE_VERIFICATION = 'performance verification' - static final String RELEASE = 'release' - static final String RELEASE_VERIFICATION = 'release verification' - static final String UPLOAD = BasePlugin.UPLOAD_GROUP - static final String SAMPLES = 'samples' -}
