azkaban-aplcache

Refactor of gradle distribution code (#731) * Refactor of

9/13/2016 3:47:44 PM

Details

diff --git a/azkaban-common/build.gradle b/azkaban-common/build.gradle
index 78c04ce..79faaf8 100644
--- a/azkaban-common/build.gradle
+++ b/azkaban-common/build.gradle
@@ -1,12 +1,3 @@
-configurations {
-  all {
-    transitive = false
-  }
-  errorprone {
-    transitive = true
-  }
-}
-
 apply plugin: 'c'
 model {
   components {
@@ -25,24 +16,18 @@ model {
 
 dependencies {
   compile('com.google.guava:guava:13.0.1')
-  compile('com.h2database:h2:1.3.170')
-  compile('commons-codec:commons-codec:1.9')
   compile('commons-collections:commons-collections:3.2.2')
-  compile('commons-configuration:commons-configuration:1.8')
   compile('commons-dbcp:commons-dbcp:1.4')
   compile('commons-dbutils:commons-dbutils:1.5')
   compile('commons-fileupload:commons-fileupload:1.2.1')
   compile('commons-io:commons-io:2.4')
   compile('commons-lang:commons-lang:2.6')
-  compile('commons-logging:commons-logging:1.1.1')
-  compile('commons-pool:commons-pool:1.6')
   compile('javax.mail:mail:1.4.5')
   compile('javax.servlet:servlet-api:2.5')
   compile('joda-time:joda-time:2.0')
   compile('log4j:log4j:1.2.16')
   compile('mysql:mysql-connector-java:5.1.28')
   compile('net.sf.jopt-simple:jopt-simple:4.3')
-  compile('org.apache.commons:commons-email:1.2')
   compile('org.apache.commons:commons-jexl:2.1.1')
   compile('org.apache.commons:commons-math3:3.0')
   compile('org.apache.httpcomponents:httpclient:4.3.1')
@@ -52,7 +37,6 @@ dependencies {
   compile('org.codehaus.jackson:jackson-mapper-asl:1.9.5')
   compile('org.mortbay.jetty:jetty:6.1.26')
   compile('org.mortbay.jetty:jetty-util:6.1.26')
-  compile('org.slf4j:slf4j-api:1.6.1')
   compile('org.quartz-scheduler:quartz:2.2.1')
 
   testCompile(project(':azkaban-test').sourceSets.test.output)
diff --git a/azkaban-execserver/build.gradle b/azkaban-execserver/build.gradle
index 0d02240..4642da6 100644
--- a/azkaban-execserver/build.gradle
+++ b/azkaban-execserver/build.gradle
@@ -1,56 +1,29 @@
-configurations {
-  all {
-    transitive = false
-  }
-  errorprone {
-    transitive = true
-  }
-}
+apply plugin: 'distribution'
 
 dependencies {
   compile(project(':azkaban-common'))
-  compile('commons-io:commons-io:2.4')
-  compile('javax.servlet:servlet-api:2.5')
-  compile('joda-time:joda-time:2.0')
-  compile('log4j:log4j:1.2.16')
-  compile('commons-logging:commons-logging:1.1.1')
-  compile('org.apache.httpcomponents:httpclient:4.3.1')
-  compile('org.apache.httpcomponents:httpcore:4.3')
-  compile('org.mortbay.jetty:jetty:6.1.26')
-  compile('org.mortbay.jetty:jetty-util:6.1.26')
-  compile('org.codehaus.jackson:jackson-core-asl:1.9.5')
-  compile('org.codehaus.jackson:jackson-mapper-asl:1.9.5')
 
   testCompile('junit:junit:4.11')
   testCompile('org.hamcrest:hamcrest-all:1.3')
   testCompile(project(':azkaban-common').sourceSets.test.output)
 }
 
-task createDirs() << {
-  file('build/package/extlib').mkdirs()
-  file('build/package/plugins').mkdirs()
-}
-
-task copyDeps(type: Copy, dependsOn: 'build') {
-  from(project(':azkaban-common').configurations.compile)
-  from(configurations.compile)
-  into('build/package/lib')
-}
-
-task copyLibs(type: Copy, dependsOn: 'build') {
-  from('build/libs')
-  into('build/package/lib')
-}
-
-task copyPackage(type: Copy) {
-  from('src/package')
-  into('build/package')
-}
-
-task copy(dependsOn: [
-        'createVersionFile',
-        'createDirs',
-        'copyDeps',
-        'copyLibs',
-        'copyPackage']) {
+distributions {
+  main {
+    contents {
+      from('src/main/bash') {
+        into 'bin'
+        fileMode = 0755
+      }
+      from('src/main/resources/conf') {
+        into 'conf'
+      }
+      from(configurations.runtime) {
+        into 'lib'
+      }
+      from(jar) {
+        into 'lib'
+      }
+    }
+  }
 }
diff --git a/azkaban-migration/build.gradle b/azkaban-migration/build.gradle
index 743c1fc..3f6c120 100644
--- a/azkaban-migration/build.gradle
+++ b/azkaban-migration/build.gradle
@@ -1,40 +1,23 @@
-configurations {
-  all {
-    transitive = false
-  }
-  errorprone {
-    transitive = true
-  }
-}
+apply plugin: 'distribution'
+
 
 dependencies {
   compile(project(':azkaban-common'))
-  compile('commons-io:commons-io:2.4')
-  compile('commons-dbcp:commons-dbcp:1.4')
-  compile('commons-dbutils:commons-dbutils:1.5')
-  compile('joda-time:joda-time:2.0')
-  compile('log4j:log4j:1.2.16')
-}
-
-task copyLibs(type: Copy, dependsOn: 'build') {
-  from('build/libs')
-  into('build/package/lib')
 }
 
-task copyDeps(type: Copy, dependsOn: 'build') {
-  from(project(':azkaban-common').configurations.compile)
-  from(configurations.compile)
-  into('build/package/lib')
-}
-
-task copyPackage(type: Copy) {
-  from('src/package')
-  into('build/package')
-}
-
-task copy(dependsOn: [
-        'createVersionFile',
-        'copyLibs',
-        'copyDeps',
-        'copyPackage']) {
+distributions {
+  main {
+    contents {
+      from('src/main/bash') {
+        into 'bin'
+        fileMode = 0755
+      }
+      from(configurations.runtime) {
+        into 'lib'
+      }
+      from(jar) {
+        into 'lib'
+      }
+    }
+  }
 }
diff --git a/azkaban-soloserver/build.gradle b/azkaban-soloserver/build.gradle
index fbfdc3a..173d374 100644
--- a/azkaban-soloserver/build.gradle
+++ b/azkaban-soloserver/build.gradle
@@ -1,45 +1,38 @@
+apply plugin: 'distribution'
+
 dependencies {
   compile(project(':azkaban-common'))
   compile(project(':azkaban-webserver'))
   compile(project(':azkaban-execserver'))
 }
 
-task createDirs() << {
-  file('build/package/extlib').mkdirs()
-  file('build/package/plugins').mkdirs()
-}
-
-task copyDeps(type: Copy, dependsOn: 'build') {
-  from(configurations.compile)
-  into('build/package/lib')
-}
-
-task copyLibs(type: Copy, dependsOn: 'build') {
-  from('build/libs')
-  into('build/package/lib')
-}
-
-task copyPackage(type: Copy) {
-  from('src/package')
-  into('build/package')
-}
-
-task copyWeb(type: Copy, dependsOn: ':azkaban-webserver:copy') {
-  from(project(':azkaban-webserver').files('build/package/web'))
-  into('build/package/web')
-}
-
-task copySql(type: Copy) {
-  from(project(':azkaban-sql').files('src/sql'))
-  into('build/package/sql')
-}
+installDist.dependsOn ':azkaban-webserver:installDist'
+distTar.dependsOn ':azkaban-webserver:installDist'
+distZip.dependsOn ':azkaban-webserver:installDist'
 
-task copy(dependsOn: [
-        'createVersionFile',
-        'createDirs',
-        'copyDeps',
-        'copyLibs',
-        'copyPackage',
-        'copyWeb',
-        'copySql']) {
+distributions {
+  main {
+    contents {
+      from('src/main/bash') {
+        into 'bin'
+        fileMode = 0755
+      }
+      from ('src/main/resources/conf') {
+        into 'conf'
+      }
+      from(configurations.runtime) {
+        into 'lib'
+      }
+      from(jar) {
+        into 'lib'
+      }
+      from(project(':azkaban-sql').files('src/sql')) {
+        into('sql')
+      }
+      // Get the files from sub-dir of distribution of another sub-project
+      from(new File(tasks.getByPath(':azkaban-webserver:installDist').destinationDir, 'web')) {
+        into 'web'
+      }
+    }
+  }
 }
diff --git a/azkaban-sql/build.gradle b/azkaban-sql/build.gradle
index 04039b5..874a3c4 100644
--- a/azkaban-sql/build.gradle
+++ b/azkaban-sql/build.gradle
@@ -1,3 +1,10 @@
+apply plugin: 'distribution'
+
+/**
+ * concat task
+ * Concatenate all the sql queries / files (except update.*.sql) and collect it into a single
+ * SQL file.
+ */
 task concat() << {
   ext.destFile = 'build/sql/create-all-sql-' + version + '.sql';
   ant.concat(destfile: destFile, fixlastline: 'yes') {
@@ -8,3 +15,16 @@ task concat() << {
     }
   }
 }
+
+installDist.dependsOn concat
+distTar.dependsOn concat
+distZip.dependsOn concat
+
+distributions {
+  main {
+    contents {
+      from('src/sql')
+      from("$buildDir/sql")
+    }
+  }
+}
diff --git a/azkaban-webserver/build.gradle b/azkaban-webserver/build.gradle
index 2801f9b..531d2d8 100644
--- a/azkaban-webserver/build.gradle
+++ b/azkaban-webserver/build.gradle
@@ -1,67 +1,34 @@
-plugins {
-    id 'com.craigburke.bower-installer' version '2.5.1'
-}
-
-bower {
-    installBase = 'bower' // <1>
-
-    'moment'('2.14.1'){
-      source 'min/moment.min.js' >> '/'
-    }
-
-    'moment-timezone'('0.5.5') {
-      source 'builds/moment-timezone-with-data-2010-2020.min.js'  >> '/'
-    }
-
-    'eonasdan-bootstrap-datetimepicker'('4.0.0') {
-      source 'build/js/*.min.js'  >> '/'
-      excludes 'jquery'
+buildscript {
+  repositories {
+    mavenCentral()
+    maven {
+      url 'https://plugins.gradle.org/m2/'
     }
+  }
+  dependencies {
+    classpath 'com.linkedin:gradle-dustjs-plugin:1.0.0'
+    classpath 'de.obqo.gradle:gradle-lesscss-plugin:1.0-1.3.3'
+  }
+}
 
-    'later'('1.2.0'){
-      source 'later.min.js' >> '/'
-    }
+plugins {
+    id 'com.craigburke.bower-installer' version '2.5.1'
 }
 
 apply plugin: 'lesscss'
 apply plugin: 'dustjs'
+apply plugin: 'distribution'
 
 ext.pegasusVersion = '1.15.7'
 
 configurations {
-  all {
-    transitive = false
-  }
-  generateRestli {
-    transitive = true
-  }
-  errorprone {
-    transitive = true
-  }
+  generateRestli
 }
 
 dependencies {
   compile(project(':azkaban-common'))
-  compile('com.linkedin.parseq:parseq:1.3.7')
-  compile('com.linkedin.pegasus:data:' + pegasusVersion)
-  compile('com.linkedin.pegasus:gradle-plugins:' + pegasusVersion)
-  compile('com.linkedin.pegasus:li-jersey-uri:' + pegasusVersion)
-  compile('com.linkedin.pegasus:pegasus-common:' + pegasusVersion)
-  compile('com.linkedin.pegasus:restli-common:' + pegasusVersion)
   compile('com.linkedin.pegasus:restli-server:' + pegasusVersion)
-  compile('com.linkedin.pegasus:r2:' + pegasusVersion)
-  compile('com.fasterxml.jackson.core:jackson-core:2.3.2')
-  compile('commons-lang:commons-lang:2.6')
-  compile('commons-io:commons-io:2.4')
-  compile('commons-fileupload:commons-fileupload:1.2.1')
-  compile('javax.servlet:servlet-api:2.5')
-  compile('joda-time:joda-time:2.0')
-  compile('log4j:log4j:1.2.16')
-  compile('net.sf.jopt-simple:jopt-simple:4.3')
-  compile('org.apache.velocity:velocity:1.7')
   compile('org.apache.velocity:velocity-tools:2.0')
-  compile('org.mortbay.jetty:jetty:6.1.26')
-  compile('org.mortbay.jetty:jetty-util:6.1.26')
 
   testCompile('commons-collections:commons-collections:3.2.2')
   testCompile('junit:junit:4.11')
@@ -85,6 +52,28 @@ sourceSets {
   }
 }
 
+bower {
+  installBase = 'bower' // <1>
+
+  'moment'('2.14.1'){
+    source 'min/moment.min.js' >> '/'
+  }
+
+  'moment-timezone'('0.5.5') {
+    source 'builds/moment-timezone-with-data-2010-2020.min.js'  >> '/'
+  }
+
+  'eonasdan-bootstrap-datetimepicker'('4.0.0') {
+    source 'build/js/*.min.js'  >> '/'
+    excludes 'jquery'
+  }
+
+  'later'('1.2.0'){
+    source 'later.min.js' >> '/'
+  }
+}
+clean.dependsOn 'bowerClean'
+
 task restliTemplateGenerator(type: JavaExec) {
   mkdir 'src/restli/generatedJava'
 
@@ -119,56 +108,39 @@ dustjs {
   dest = 'build/dust'
 }
 
-task createDirs() << {
-  file('build/package/extlib').mkdirs()
-  file('build/package/plugins').mkdirs()
-}
+installDist.dependsOn 'lesscss'
 
-task copyWeb(type: Copy) {
-  from('src/web')
-  into('build/package/web')
-}
-
-task copyLess(type: Copy, dependsOn: ['lesscss', 'copyWeb']) {
-  from('build/less')
-  into('build/package/web/css')
-}
-
-task copyDust(type: Copy, dependsOn: ['dustjs', 'copyWeb']) {
-  from('build/dust')
-  into('build/package/web/js')
-}
-
-task copyJSLibs(type: Copy, dependsOn: ['bowerInstall', 'dustjs', 'copyWeb']) {
-  from('bower/')
-  into('build/package/web/js')
-}
-
-task copyDeps(type: Copy, dependsOn: 'build') {
-  from(project(':azkaban-common').configurations.compile)
-  from(configurations.compile)
-  into('build/package/lib')
-}
-
-task copyLibs(type: Copy, dependsOn: 'build') {
-  from('build/libs')
-  into('build/package/lib')
-}
-
-task copyPackage(type: Copy) {
-  from('src/package')
-  into('build/package')
-}
-
-task copy(dependsOn: [
-        'createVersionFile',
-        'createDirs',
-        'copyLess',
-        'copyDust',
-        'copyDeps',
-        'copyJSLibs',
-        'copyLibs',
-        'copyPackage']) {
+distributions {
+  main {
+    contents {
+      from('src/main/bash') {
+        into 'bin'
+        fileMode = 0755
+      }
+      from ('src/main/resources/conf') {
+        into 'conf'
+      }
+      from(configurations.runtime) {
+        into 'lib'
+      }
+      from(jar) {
+        into 'lib'
+      }
+      from ('src/web') {
+        into 'web'
+      }
+      from (lesscss.dest) {
+        into 'web/css'
+      }
+      from (dustjs) {
+        into 'web/js'
+      }
+      from ('bower') {
+        into 'web/js'
+      }
+      from (bowerInstall) {
+        into 'web/js'
+      }
+    }
+  }
 }
-
-clean.dependsOn 'bowerClean'

build.gradle 129(+18 -111)

diff --git a/build.gradle b/build.gradle
index d798528..51af06f 100644
--- a/build.gradle
+++ b/build.gradle
@@ -7,15 +7,12 @@ buildscript {
   }
   dependencies {
     classpath 'com.cinnober.gradle:semver-git:2.2.1'
-    classpath 'com.linkedin:gradle-dustjs-plugin:1.0.0'
-    classpath 'de.obqo.gradle:gradle-lesscss-plugin:1.0-1.3.3'
     classpath 'net.ltgt.gradle:gradle-errorprone-plugin:0.0.8'
   }
 }
 
 apply plugin: 'com.cinnober.gradle.semver-git'
 apply plugin: 'idea'
-apply plugin: 'distribution'
 
 allprojects {
   repositories {
@@ -24,18 +21,6 @@ allprojects {
   }
 }
 
-/**
- * Helper that calls a command and returns the output.
- */
-def cmdCaller = { commandln ->
-  def stdout = new ByteArrayOutputStream()
-  exec {
-    commandLine commandln
-    standardOutput = stdout
-  }
-  return stdout.toString().trim()
-}
-
 subprojects {
   apply plugin: 'java'
   apply plugin: 'idea'
@@ -49,26 +34,27 @@ subprojects {
     resolutionStrategy.force 'com.google.errorprone:error_prone_core:2.0.5'
   }
 
-  /**
-   * Gets the version name from the latest Git tag
-   */
-  task createVersionFile() << {
-    String gitCommitHash = cmdCaller(['git', 'rev-parse', 'HEAD']);
-    String gitRepo = cmdCaller(['git', 'config', '--get', 'remote.origin.url']);
-    def date = new Date()
-    def formattedDate = date.format('yyyy-MM-dd hh:mm zzz')
-
-    String versionStr = version + '\n' +
-        gitCommitHash + '\n' +
-        gitRepo + '\n' +
-        formattedDate + '\n'
+  plugins.withType(JavaPlugin) {
+    // Set the Title and Version fields in the jar
+    jar {
+      manifest {
+        attributes (
+                'Implementation-Title': project.name,
+                'Implementation-Version': project.version,
+        )
+      }
+    }
+  }
 
-    File versionFile = file('build/package/azkaban.version')
-    versionFile.parentFile.mkdirs()
-    versionFile.write(versionStr)
+  // Common distribution plugin settings for sub-modules
+  plugins.withType(DistributionPlugin) {
+    distTar {
+      compression = Compression.GZIP
+      extension = 'tar.gz'
+    }
   }
 
-  /*
+  /**
    * Print test execution summary when informational logging is enabled.
    */
   test {
@@ -89,85 +75,6 @@ subprojects {
   }
 }
 
-distributions {
-  migration {
-    baseName = 'azkaban-migration'
-    contents {
-      from { project(':azkaban-migration').file('build/package') }
-    }
-  }
-
-  webserver {
-    baseName = 'azkaban-web-server'
-    contents {
-      from { project(':azkaban-webserver').file('build/package') }
-    }
-  }
-
-  execserver {
-    baseName = 'azkaban-exec-server'
-    contents {
-      from { project(':azkaban-execserver').file('build/package') }
-    }
-  }
-
-  soloserver {
-    baseName = 'azkaban-solo-server'
-    contents {
-      from { project(':azkaban-soloserver').files('build/package') }
-    }
-  }
-
-  sql {
-    baseName = 'azkaban-sql'
-    contents {
-      from { project(':azkaban-sql').file('src/sql') }
-      from { project(':azkaban-sql').file('build/sql') }
-    }
-  }
-}
-
-// Set up dependencies for distribution tasks.
-//
-// N.B. The extension for the Tar tasks is set since the Gradle Distribution
-//      plugin uses the .tar file extension for GZipped Tar files by default.
-//
-// N.B. When the distribution tasks are run, azkaban-execserver,
-//      azkaban-webserver, azkaban-migration, and azkaban-soloserver only
-//      have a dependency on the azkaban-common build artifacts. As a result,
-//      the full :azkaban-common:build task is not run, meaning that the
-//      tests are skipped. Thus, the dependency on :azkaban-common:build
-//      is set here so that the azkaban-common unit tests are run when running
-//      the dist tasks.
-
-migrationDistTar.dependsOn ':azkaban-common:build', ':azkaban-migration:copy'
-migrationDistTar.compression = Compression.GZIP
-migrationDistTar.extension = 'tar.gz'
-migrationDistZip.dependsOn ':azkaban-common:build', ':azkaban-migration:copy'
-
-webserverDistTar.dependsOn ':azkaban-common:build', ':azkaban-webserver:copy'
-webserverDistTar.compression = Compression.GZIP
-webserverDistTar.extension = 'tar.gz'
-webserverDistZip.dependsOn ':azkaban-common:build', ':azkaban-webserver:copy'
-
-execserverDistTar.dependsOn ':azkaban-common:build', ':azkaban-execserver:copy'
-execserverDistTar.compression = Compression.GZIP
-execserverDistTar.extension = 'tar.gz'
-execserverDistZip.dependsOn ':azkaban-common:build', ':azkaban-execserver:copy'
-
-soloserverDistTar.dependsOn ':azkaban-common:build', ':azkaban-soloserver:copy'
-soloserverDistTar.compression = Compression.GZIP
-soloserverDistTar.extension = 'tar.gz'
-soloserverDistZip.dependsOn ':azkaban-common:build', ':azkaban-soloserver:copy'
-
-sqlDistTar.dependsOn ':azkaban-sql:concat'
-sqlDistTar.compression = Compression.GZIP
-sqlDistTar.extension = 'tar.gz'
-sqlDistZip.dependsOn ':azkaban-sql:concat'
-
-distTar.dependsOn migrationDistTar, webserverDistTar, execserverDistTar, soloserverDistTar, sqlDistTar
-distZip.dependsOn migrationDistZip, webserverDistZip, execserverDistZip, soloserverDistZip, sqlDistZip
-
 /**
  * Gradle wrapper task.
  */