buildscript { apply from: '../gradle/repository.gradle' repositories repositoryConfig dependencies { classpath 'apache:commons-codec:1.10', 'owasp:dependency-check-gradle:3.1.2', 'paleozogt:symzip-plugin:0.10.1' } } apply plugin: org.owasp.dependencycheck.gradle.DependencyCheckPlugin apply plugin: "org.paleozogt.symzip" dependencyCheck { failBuildOnCVSS = 7 // 0 - 4 = low, 4 - 7 = medium, 7 - 9 = high, 9-10 = critical suppressionFile = "owasp_suppressing_false_positives.xml" analyzers{ assemblyEnabled = false } proxy { server = 'proxy.ethz.ch' port = 3128 } } evaluationDependsOn(':commonbase') evaluationDependsOn(':common') evaluationDependsOn(':openbis_api') evaluationDependsOn(':openbis-common') evaluationDependsOn(':authentication') evaluationDependsOn(':dbmigration') evaluationDependsOn(':openbis') evaluationDependsOn(':datastore_server') evaluationDependsOn(':screening') evaluationDependsOn(':rtd_yeastx') evaluationDependsOn(':deep_sequencing_unit') evaluationDependsOn(':plasmid') evaluationDependsOn(':big_data_link_server') evaluationDependsOn(':openbis_ng_ui') apply from: '../gradle/javaproject.gradle' apply from: 'query-api.gradle' apply from: 'screening-api.gradle' apply from: 'clients.gradle' apply from: 'admin-console.gradle' apply plugin: 'war' archivesBaseName = 'openBIS-server-standard-technologies' configurations.create('gwt') configurations.create('zipping') configurations.create('datastore_server') configurations.create('javadoc_sources') configurations.create('javadoc_compilation') def jettyVersion = '9.4.30' dependencies { compile project(':screening') providedCompile 'google:gwt-user:2.4' providedRuntime "eclipse:jetty-deploy:${jettyVersion}.v20200611@jar", "eclipse:jetty-xml:${jettyVersion}.v20200611@jar", "eclipse:jetty-webapp:${jettyVersion}.v20200611@jar", "eclipse:jetty-servlet:${jettyVersion}.v20200611@jar", "eclipse:jetty-security:${jettyVersion}.v20200611@jar", "eclipse:jetty-server:${jettyVersion}.v20200611@jar", "eclipse:jetty-continuation:${jettyVersion}.v20200611@jar" gwt 'reveregroup:gwt-image-loader:1.1.4', 'google:gwt-dev:2.4' zipping "eclipse:jetty-distribution:${jettyVersion}@zip" datastore_server project(':deep_sequencing_unit'), project(':rtd_yeastx'), project(':screening'), project(':plasmid'), 'bioformats:bioformats:6.5.1', 'imagej:ij:1.43u', 'cisd:cisd-openbis-knime-server:13.6.0.r29301', 'apache:xml-apis:1.3.03', 'slf4j:slf4j:1.6.2', 'slf4j:slf4j-log4j12:1.6.2', 'sybit:image-viewer:0.3.6' javadoc_sources project(path:':commonbase', configuration: 'archives'), project(path:':common', configuration: 'archives'), project(path:':openbis_api', configuration: 'archives'), project(path:':openbis-common', configuration: 'archives'), project(path:':openbis', configuration: 'archives'), project(path:':datastore_server', configuration: 'archives'), project(path:':screening', configuration: 'archives'), 'sis:sis-base:18.09.0:sources', 'cisd:cisd-args4j:9.11.2:sources', 'cisd:cisd-hotdeploy:13.01.0:sources' javadoc_compilation project(path:':screening') testCompile (project(path: ':openbis', configuration: 'tests')) { exclude group: 'google', module: 'gwt-user' } } sourceSets { test { resources { srcDirs = ['source/java', 'sourceTest/java'] } } } def gwtBuildDir = "${project.buildDir}/gwt" def gwtCacheBuildDir = "${project.buildDir}/gwt-unitCache" def gwtModuleName = 'ch.systemsx.cisd.openbis.OpenBIS' def gwtModuleBuildDir = "${gwtBuildDir}/${gwtModuleName}" def gwtArchivePath = 'resource' def gwtArchiveFileName = 'gwt.tar.gz' task compileGwt (dependsOn: classes, type: JavaExec) { ext.buildDir = gwtBuildDir def extraDir = "${project.buildDir}/extra" // inputs.source sourceSets.main.java.srcDirs // inputs.dir sourceSets.main.output.resourcesDir outputs.dir buildDir doFirst { file(buildDir).mkdirs() } main = 'com.google.gwt.dev.Compiler' classpath { [ sourceSets.main.java.srcDirs, project(":openbis").sourceSets.main.java.srcDirs, project(":openbis").sourceSets.main.output.resourcesDir, project(":openbis").sourceSets.main.output.classesDirs, project(":openbis").sourceSets.main.compileClasspath, project(":common").sourceSets.main.java.srcDirs, project(":openbis_api").sourceSets.main.java.srcDirs, project(":screening").sourceSets.main.java.srcDirs, project(":screening").sourceSets.main.output.resourcesDir, configurations.gwt ] } args = [ gwtModuleName, '-war', buildDir, '-logLevel', 'INFO', '-localWorkers', '2', '-compileReport', '-extra', extraDir, ] maxHeapSize = '1024m' systemProperty "javax.xml.parsers.SAXParserFactory", "org.apache.xerces.jaxp.SAXParserFactoryImpl" } task buildCoreUIPackageUsingJDK8(type: Tar, dependsOn: compileGwt) { from gwtBuildDir destinationDirectory = file(gwtArchivePath) archiveFileName = gwtArchiveFileName compression = Compression.GZIP doLast { // Cleanup, the rest of the build should not use these delete gwtBuildDir delete gwtCacheBuildDir } } task untarGwt(type: Copy) { from tarTree(resources.gzip("${gwtArchivePath}/${gwtArchiveFileName}")) into gwtBuildDir } task copyOpenbisStaticResources(type: Copy, dependsOn: untarGwt) { from "${project(':openbis').projectDir}/source/java/ch/systemsx/cisd/openbis/public" into gwtModuleBuildDir } ext.classpathEntries = files( project(':openbis').file('source/java/applicationContext.xml'), project(':openbis').file('source/java/dbConfigurationContext.xml'), project(':openbis').file('source/java/ehcache.xml'), project(':openbis').file('source/java/genericApplicationContext.xml'), project(':openbis').file('source/java/hibernateContext.xml'), project(':openbis').file('source/java/schema-for-xslt20.xsd'), project(':openbis').file('source/java/XMLSchema.xsd'), project(':screening').file('source/java/screening-applicationContext.xml'), project(':screening').file('source/java/screening-dssApplicationContext.xml'), project(':screening').file('source/java/screening-plugin-applicationContext.xml'), project(':common').file('source/java/genericCommonContext.xml'), 'source/java/standard-technologies-applicationContext.xml' ) ext.zipEntries = files( project(':openbis').file('dist/server/check.sh'), project(':openbis').file('dist/server/configure.sh'), project(':openbis').file('dist/server/export-master-data.py'), project(':openbis').file('dist/server/export-master-data.sh'), project(':openbis').file('dist/server/install.sh'), project(':openbis').file('dist/server/openBIS.keystore'), project(':openbis').file('dist/server/openbis.conf'), project(':openbis').file('dist/server/passwd.sh'), project(':openbis').file('dist/server/register-master-data.sh'), project(':openbis').file('dist/server/setup-env'), project(':openbis').file('dist/server/shutdown.sh'), project(':openbis').file('dist/server/startup.sh'), project(':openbis').file('dist/server/status.sh'), project(':openbis').file('dist/server/version.sh'), project(':openbis').file('dist/server/watchdog.sh'), project(':openbis').fileTree(dir: 'dist/server').matching { include 'base/**' }, file('dist/server/service.properties'), file('dist/server/web-client.properties') ) task checkFilesExist { inputs.files files(classpathEntries, zipEntries) doLast { classpathEntries.each { x -> assert x.exists() } zipEntries.each { x -> assert x.exists() } } } war.dependsOn untarGwt war.dependsOn copyOpenbisStaticResources war.dependsOn checkFilesExist war.dependsOn signWebStartJars war { rootSpec.eachFile { file -> if (file.name.startsWith('cisd-cifex') || file.name.startsWith('datastore_server') || file.name.startsWith('bioformats') || file.name.startsWith('cisd-image-readers') ) { file.exclude() } } from "${project.buildDir}/gwt/ch.systemsx.cisd.openbis.OpenBIS" from signedJarsFolder webXml = file('resource/server/web.xml') webInf { from "${project.buildDir}/gwt/WEB-INF", project(':openbis').file('resource/server/bis-common.xml'), file('resource/server/spring-servlet.xml'), file('resource/server/jetty-web.xml'), project(':common').file('resource/server/web-common.xml') } from (classpathEntries) { into("WEB-INF/classes") } from('dist/server'){ into("WEB-INF/classes") include "etc/log.xml" } from('targets/dist'){ into("WEB-INF/classes") include 'BUILD*INFO' rename 'BUILD.*INFO', 'BUILD-openbis.INFO' } from('../screening/source'){ into("WEB-INF/classes") include "sql/**/*.sql" exclude "sql/imaging/postgresql/_ERD" } from('../openbis/source'){ into("WEB-INF/classes") include "sql/**/*.sql" exclude "sql/generic/_ERD" duplicatesStrategy 'exclude' } } def downloadCorePlugin(url, pluginname) { def file = project(':openbis').file("../openbis_standard_technologies/targets/downloads/${pluginname}.zip") if (file.exists() == false || System.currentTimeMillis() - file.lastModified() > 3600000) { file.getParentFile().mkdirs() ext.executeFunction('curl', [url, '-sLk', '-o', file.getAbsolutePath()]) ext.executeFunction('unzip', ['-uqo', file.getAbsolutePath(), '-d', '../openbis_standard_technologies/targets/downloads/']) } } import org.paleozogt.gradle.zip.SymZip; task zipCorePlugins(type: SymZip) { includeEmptyDirs = false archiveName 'core-plugins.zip' downloadCorePlugin('https://github.com/aarpon/obit_flow_core_technology/archive/release/20.x.zip', 'flow') downloadCorePlugin('https://github.com/aarpon/obit_microscopy_core_technology/archive/release/20.x.zip', 'microscopy') downloadCorePlugin('https://github.com/aarpon/obit_shared_core_technology/archive/release/20.x.zip', 'shared') from project(':screening').fileTree(dir: 'source/core-plugins', includes:['screening/**', 'screening-optional/**'], excludes:['**/dss/**', '**/package-to-dist']) from project(':deep_sequencing_unit').fileTree(dir: 'source/core-plugins', includes:['illumina-ngs/**'], excludes:['**/dss/**', '**/package-to-dist']) from fileTree(dir: 'targets/downloads/obit_flow_core_technology-release-20.x/core-plugins', includes:['flow/**']) from fileTree(dir: 'targets/downloads/obit_microscopy_core_technology-release-20.x/core-plugins', includes:['microscopy/**']) from fileTree(dir: 'targets/downloads/obit_shared_core_technology-release-20.x/core-plugins', includes:['shared/**']) from 'dist/core-plugins' from 'dist/server/core-plugins.properties' into 'core-plugins' } def generateMD5(final file) { java.security.MessageDigest digest = java.security.MessageDigest.getInstance("MD5") file.withInputStream(){is-> byte[] buffer = new byte[8192] int read = 0 while( (read = is.read(buffer)) > 0) { digest.update(buffer, 0, read); } } byte[] md5sum = digest.digest() BigInteger bigInt = new BigInteger(1, md5sum) return bigInt.toString(16) } task checksums { ext.destFile = new File(buildDir, 'configuration.MD5') ext.inputFiles = war.getSource().filter({file -> file.name.endsWith('xml') || file.name.endsWith('.conf') || file.name.endsWith('.properties')}) inputs.files inputFiles outputs.file destFile doLast { if (destFile.exists()) { destFile.delete() } destFile.createNewFile() def configFiles = classpathEntries.filter({file -> file.name.endsWith('xml') || file.name.endsWith('.conf') || file.name.endsWith('.properties')}) configFiles.each {file -> destFile.text += generateMD5(file)+" webapps/openbis/WEB-INF/classes/"+file.name+"\n" } configFiles = war.getSource().filter({file -> file.name.endsWith('xml') || file.name.endsWith('.conf') || file.name.endsWith('.properties')}).minus(classpathEntries) configFiles.each {file -> destFile.text += generateMD5(file)+" webapps/openbis/WEB-INF/"+file.name+"\n" } } } checksums.dependsOn war task createJettyVersionFile { ext.versionFile = new File(buildDir, 'jetty-version.txt') outputs.file versionFile doLast { versionFile.text = "${jettyVersion}" } } task zip(type: Zip, dependsOn: createJettyVersionFile) { from createJettyVersionFile from war from zipEntries from checksums from configurations.zipping from zipCorePlugins.archivePath from zipAdminConsole.archivePath rename 'jetty-distribution(.*).zip', 'jetty.zip' rename 'openBIS(.*).war', 'openBIS.war' } zip.dependsOn war zip.dependsOn zipCorePlugins zip.dependsOn zipAdminConsole zip.dependsOn checksums task zipDss(type: Zip, dependsOn: signWebStartJars) { baseName 'datastore_server-standard-technologies' includeEmptyDirs true from (configurations.datastore_server) { into 'datastore_server/lib' exclude '**/antlr*.jar' exclude '**/fastutil*.jar' exclude '**/gwt*.jar' exclude '**/gxt*.jar' exclude '**/hibernate*.jar' exclude '**/jmock*.jar' exclude '**/junit*.jar' exclude '**/lucene*.jar' exclude '**/restrictions*.jar' exclude '**/testng*.jar' rename 'common-.*jar', 'common.jar' rename 'commonbase-.*jar', 'commonbase.jar' } from (signedJarsFolder) { into 'datastore_server/lib/dss_upload_gui' exclude openbisClientJarName exclude dssCliClientJarName } from (project(':datastore_server').fileTree(dir: 'dist', includes: ['**/*'], excludes:['dss_client.sh', 'etc/**'])) { into 'datastore_server'; } from (project(':datastore_server').files('dist/etc/datastore_server.conf', 'dist/etc/openBIS.keystore')) { into 'datastore_server/etc'; } from (fileTree(dir: 'dist', includes: ['etc/service.properties', 'etc/log.xml'])) { into 'datastore_server' } from (project(':screening').file('dist/etc/tabular-data-graph.properties')) { into 'datastore_server/etc'; } } task zipBdlServer(type: Zip, dependsOn: project(':big_data_link_server').tasks.distZip) { baseName 'big_data_link_server' from zipTree('../big_data_link_server/build/distributions/big_data_link_server.zip') } task pybisZip(type: Zip) { baseName 'pybis' from '../pybis/' } task obisZip(type: Zip) { baseName 'obis' from '../obis/' } task clientsAndApis(type: Zip, dependsOn: [dssClientZip, queryApiZip, apiV3Zip, screeningApiZip, pybisZip, obisZip]) { baseName 'openBIS-clients-and-APIs' from dssClientZip.archivePath from queryApiZip.archivePath from apiV3Zip.archivePath from screeningApiZip.archivePath from pybisZip.archivePath from obisZip.archivePath from ('dist/client/readme.txt') rename { filename -> if (filename.startsWith('pybis-')) { def contentOfSetUpFile = zipTree(pybisZip.archivePath).getFiles().findAll {it.path.endsWith('src/python/setup.py') }.iterator().next().text def pybisVersion = ( contentOfSetUpFile =~ /version.*=.*'(.*)'/)[0][1] 'pybis-' + pybisVersion + '.zip' } else { filename } } } task deleteOpenbisNgUi(type: Delete) { delete 'dist/core-plugins/openbis-ng-ui' } task copyOpenbisNgUiToCorePlugins(type: Copy, dependsOn: [deleteOpenbisNgUi, ':openbis_ng_ui:build']) { from project(':openbis_ng_ui').file('build/core-plugins') into file('dist/core-plugins') } zipCorePlugins.dependsOn copyOpenbisNgUiToCorePlugins task generateJavadoc(type: Javadoc) { source = configurations.javadoc_sources.collect { zipTree(it).matching { include "**/ch/ethz/sis/openbis/generic/asapi/**/*.java" include "**/ch/ethz/sis/openbis/generic/dssapi/**/*.java" include "**/ch/systemsx/cisd/**/api/**/*.java" include "**/ch/systemsx/cisd/common/annotation/*.java" include "**/ch/systemsx/cisd/base/**/*.java" include "**/OpenBISScreeningML.java" include "**/ch/systemsx/cisd/**/etlserver/TopLevelDataSetRegistratorGlobalState.java" include "**/ch/systemsx/cisd/**/etlserver/registrator/*.java" include "**/ch/systemsx/cisd/common/mail/*.java" }} classpath = configurations.javadoc_compilation maxMemory = "1024m" options.addStringOption("source", "1.8") } build.dependsOn zip build.dependsOn zipDss build.dependsOn zipBdlServer build.dependsOn clientsAndApis build.dependsOn dssUploadGuiStandaloneZip build.dependsOn dssUploadGuiStandaloneJar build.dependsOn generateJavadoc