JAL-3989 moved getdown build dirs to build/website/docroot/getdown/CHANNEL, build...
[jalview.git] / build.gradle
index 09efce1..3573ac7 100644 (file)
@@ -23,6 +23,9 @@ import com.vladsch.flexmark.ext.gfm.strikethrough.StrikethroughExtension
 import com.vladsch.flexmark.ext.autolink.AutolinkExtension
 import com.vladsch.flexmark.ext.anchorlink.AnchorLinkExtension
 import com.vladsch.flexmark.ext.toc.TocExtension
+import com.google.common.hash.HashCode
+import com.google.common.hash.Hashing
+import com.google.common.io.Files
 
 buildscript {
   repositories {
@@ -191,18 +194,20 @@ ext {
   testSourceDir = useClover ? cloverTestInstrDir : testDir
   testClassesDir = useClover ? cloverTestClassesDir : "${jalviewDir}/${test_output_dir}"
 
-  getdownWebsiteDir = string("${jalviewDir}/${getdown_website_dir}/${JAVA_VERSION}")
+  getdownChannelDir = string("${getdown_website_dir}/${propertiesChannelName}")
+  getdownAppBaseDir = string("${jalviewDir}/${getdownChannelDir}/${JAVA_VERSION}")
   getdownArchiveDir = string("${jalviewDir}/${getdown_archive_dir}")
   getdownFullArchiveDir = null
   getdownTextLines = []
   getdownLaunchJvl = null
+  getdownVersionLaunchJvl = null
   buildDist = true
   buildProperties = null
 
   // the following values might be overridden by the CHANNEL switch
   getdownDir = string("${getdownChannelName}/${JAVA_VERSION}")
   getdownAppBase = string("${getdown_channel_base}/${getdownDir}")
-  getdownArchiveAppBase = null
+  getdownArchiveAppBase = getdown_archive_base
   getdownLauncher = string("${jalviewDir}/${getdown_lib_dir}/${getdown_launcher}")
   getdownAppDistDir = getdown_app_dir_alt
   getdownImagesDir = string("${jalviewDir}/${getdown_images_dir}")
@@ -242,7 +247,6 @@ ext {
     reportRsyncCommand = true
     install4jSuffix = ""
     install4jInstallerName = "${jalview_name} Installer"
-    getdownArchiveAppBase = getdown_archive_base
     break
 
     case "ARCHIVE":
@@ -263,7 +267,7 @@ ext {
     case "ARCHIVELOCAL":
     getdownChannelName = string("archive/${JALVIEW_VERSION}")
     getdownDir = string("${getdownChannelName}/${JAVA_VERSION}")
-    getdownAppBase = file(getdownWebsiteDir).toURI().toString()
+    getdownAppBase = file(getdownAppBaseDir).toURI().toString()
     if (!file("${ARCHIVEDIR}/${package_dir}").exists()) {
       throw new GradleException("Must provide an ARCHIVEDIR value to produce an archive distribution")
     } else {
@@ -327,7 +331,7 @@ ext {
 
     case [ "LOCAL", "JALVIEWJS" ]:
     JALVIEW_VERSION = "TEST"
-    getdownAppBase = file(getdownWebsiteDir).toURI().toString()
+    getdownAppBase = file(getdownAppBaseDir).toURI().toString()
     getdownArchiveAppBase = file("${jalviewDir}/${getdown_archive_dir}").toURI().toString()
     getdownLauncher = string("${jalviewDir}/${getdown_lib_dir}/${getdown_launcher_local}")
     install4jExtraScheme = "jalviewl"
@@ -340,11 +344,12 @@ ext {
 
   }
   JALVIEW_VERSION_UNDERSCORES = JALVIEW_VERSION.replaceAll("\\.", "_")
+  hugoDataJsonFile = file("${jalviewDir}/${hugo_build_dir}/data/installers/installers-${JALVIEW_VERSION_UNDERSCORES}.json")
   // override getdownAppBase if requested
   if (findProperty("getdown_appbase_override") != null) {
     // revert to LOCAL if empty string
     if (string(getdown_appbase_override) == "") {
-      getdownAppBase = file(getdownWebsiteDir).toURI().toString()
+      getdownAppBase = file(getdownAppBaseDir).toURI().toString()
       getdownLauncher = string("${jalviewDir}/${getdown_lib_dir}/${getdown_launcher_local}")
     } else if (string(getdown_appbase_override).startsWith("file://")) {
       getdownAppBase = string(getdown_appbase_override)
@@ -388,10 +393,10 @@ ext {
                                     .toLowerCase()
 
   getdownWrapperLink = install4jUnixApplicationFolder // e.g. "jalview_local"
-  getdownAppDir = string("${getdownWebsiteDir}/${getdownAppDistDir}")
-  //getdownJ11libDir = "${getdownWebsiteDir}/${getdown_j11lib_dir}"
-  getdownResourceDir = string("${getdownWebsiteDir}/${getdown_resource_dir}")
-  getdownInstallDir = string("${getdownWebsiteDir}/${getdown_install_dir}")
+  getdownAppDir = string("${getdownAppBaseDir}/${getdownAppDistDir}")
+  //getdownJ11libDir = "${getdownAppBaseDir}/${getdown_j11lib_dir}"
+  getdownResourceDir = string("${getdownAppBaseDir}/${getdown_resource_dir}")
+  getdownInstallDir = string("${getdownAppBaseDir}/${getdown_install_dir}")
   getdownFilesDir = string("${jalviewDir}/${getdown_files_dir}/${JAVA_VERSION}/")
   getdownFilesInstallDir = string("${getdownFilesDir}/${getdown_install_dir}")
   /* compile without modules -- using classpath libraries
@@ -1527,7 +1532,7 @@ task getdownWebsite() {
 
   doFirst {
     // clean the getdown website and files dir before creating getdown folders
-    delete getdownWebsiteDir
+    delete getdownAppBaseDir
     delete getdownFilesDir
 
     copy {
@@ -1539,7 +1544,7 @@ task getdownWebsite() {
 
     copy {
       from channelPropsFile
-      into getdownWebsiteDir
+      into getdownAppBaseDir
     }
     getdownWebsiteResourceFilenames += file(channelPropsFile).getName()
 
@@ -1617,7 +1622,7 @@ task getdownWebsite() {
       if (s.exists()) {
         copy {
           from s
-          into "${getdownWebsiteDir}/${getdown_wrapper_script_dir}"
+          into "${getdownAppBaseDir}/${getdown_wrapper_script_dir}"
         }
         getdownTextLines += "resource = ${getdown_wrapper_script_dir}/${script}"
       }
@@ -1670,18 +1675,18 @@ task getdownWebsite() {
       getdownTextLines += "jvmarg = -Dgetdownappbase=${getdownAppBase}"
     }
 
-    def getdownTxt = file("${getdownWebsiteDir}/getdown.txt")
+    def getdownTxt = file("${getdownAppBaseDir}/getdown.txt")
     getdownTxt.write(getdownTextLines.join("\n"))
 
     getdownLaunchJvl = getdown_launch_jvl_name + ( (jvlChannelName != null && jvlChannelName.length() > 0)?"-${jvlChannelName}":"" ) + ".jvl"
-    def launchJvl = file("${getdownWebsiteDir}/${getdownLaunchJvl}")
+    def launchJvl = file("${getdownAppBaseDir}/${getdownLaunchJvl}")
     launchJvl.write("appbase=${getdownAppBase}")
 
     // files going into the getdown website dir: getdown-launcher.jar
     copy {
       from getdownLauncher
       rename(file(getdownLauncher).getName(), getdown_launcher_new)
-      into getdownWebsiteDir
+      into getdownAppBaseDir
     }
 
     // files going into the getdown website dir: getdown-launcher(-local).jar
@@ -1690,7 +1695,7 @@ task getdownWebsite() {
       if (file(getdownLauncher).getName() != getdown_launcher) {
         rename(file(getdownLauncher).getName(), getdown_launcher)
       }
-      into getdownWebsiteDir
+      into getdownAppBaseDir
     }
 
     // files going into the getdown website dir: ./install dir and files
@@ -1717,8 +1722,8 @@ task getdownWebsite() {
       from getdownTxt
       from launchJvl
       from getdownLauncher
-      from "${getdownWebsiteDir}/${getdown_build_properties}"
-      from "${getdownWebsiteDir}/${channel_props}"
+      from "${getdownAppBaseDir}/${getdown_build_properties}"
+      from "${getdownAppBaseDir}/${channel_props}"
       if (file(getdownLauncher).getName() != getdown_launcher) {
         rename(file(getdownLauncher).getName(), getdown_launcher)
       }
@@ -1735,7 +1740,7 @@ task getdownWebsite() {
   if (buildDist) {
     inputs.dir("${jalviewDir}/${package_dir}")
   }
-  outputs.dir(getdownWebsiteDir)
+  outputs.dir(getdownAppBaseDir)
   outputs.dir(getdownFilesDir)
 }
 
@@ -1766,9 +1771,9 @@ task getdownDigest(type: JavaExec) {
     classpath = files(getdownLauncher)
   }
   main = "com.threerings.getdown.tools.Digester"
-  args getdownWebsiteDir
-  inputs.dir(getdownWebsiteDir)
-  outputs.file("${getdownWebsiteDir}/digest2.txt")
+  args getdownAppBaseDir
+  inputs.dir(getdownAppBaseDir)
+  outputs.file("${getdownAppBaseDir}/digest2.txt")
 }
 
 
@@ -1778,7 +1783,7 @@ task getdown() {
   dependsOn getdownDigest
   doLast {
     if (reportRsyncCommand) {
-      def fromDir = getdownWebsiteDir + (getdownWebsiteDir.endsWith('/')?'':'/')
+      def fromDir = getdownAppBaseDir + (getdownAppBaseDir.endsWith('/')?'':'/')
       def toDir = "${getdown_rsync_dest}/${getdownDir}" + (getdownDir.endsWith('/')?'':'/')
       println "LIKELY RSYNC COMMAND:"
       println "mkdir -p '$toDir'\nrsync -avh --delete '$fromDir' '$toDir'"
@@ -1804,15 +1809,12 @@ task getdownArchiveBuild() {
   def v = "v${JALVIEW_VERSION_UNDERSCORES}"
   def vDir = "${getdownArchiveDir}/${v}"
   getdownFullArchiveDir = "${vDir}/getdown"
-  def vLaunchVersionJvl = "${vDir}/jalview-${v}.jvl"
+  getdownVersionLaunchJvl = "${vDir}/jalview-${v}.jvl"
+
   def vAltDir = "alt_${v}"
   def archiveImagesDir = "${jalviewDir}/${channel_properties_dir}/old/images"
 
   doFirst {
-    if (getdownArchiveAppBase == null) {
-      throw new StopExecutionException("Cannot create getdownArchive for CHANNEL=${CHANNEL}")
-    }
-
     // cleanup old "old" dir
     delete getdownArchiveDir
 
@@ -1823,7 +1825,7 @@ task getdownArchiveBuild() {
 
     // the libdir
     copy {
-      from "${getdownWebsiteDir}/${getdownAppDistDir}"
+      from "${getdownAppBaseDir}/${getdownAppDistDir}"
       into "${getdownFullArchiveDir}/${vAltDir}"
     }
 
@@ -1851,7 +1853,7 @@ task getdownArchiveBuild() {
 
     getdownArchiveTxt.write(getdownArchiveTextLines.join("\n"))
 
-    def vLaunchJvl = file(vLaunchVersionJvl)
+    def vLaunchJvl = file(getdownVersionLaunchJvl)
     vLaunchJvl.getParentFile().mkdirs()
     vLaunchJvl.write("appbase=${getdownFullArchiveAppBase}\n")
     def vLaunchJvlPath = vLaunchJvl.toPath().toAbsolutePath()
@@ -1863,9 +1865,9 @@ task getdownArchiveBuild() {
     // files going into the getdown files dir: getdown.txt, getdown-launcher.jar, channel-launch.jvl, build_properties
     copy {
       from getdownLauncher
-      from "${getdownWebsiteDir}/${getdownLaunchJvl}"
-      from "${getdownWebsiteDir}/${getdown_launcher_new}"
-      from "${getdownWebsiteDir}/${channel_props}"
+      from "${getdownAppBaseDir}/${getdownLaunchJvl}"
+      from "${getdownAppBaseDir}/${getdown_launcher_new}"
+      from "${getdownAppBaseDir}/${channel_props}"
       if (file(getdownLauncher).getName() != getdown_launcher) {
         rename(file(getdownLauncher).getName(), getdown_launcher)
       }
@@ -1905,7 +1907,7 @@ tasks.withType(JavaCompile) {
 
 clean {
   doFirst {
-    delete getdownWebsiteDir
+    delete getdownAppBaseDir
     delete getdownFilesDir
     delete getdownArchiveDir
   }
@@ -2011,12 +2013,11 @@ clean {
 task cleanInstallersDataFiles {
   def installersOutputTxt = file("${jalviewDir}/${install4jBuildDir}/output.txt")
   def installersSha256 = file("${jalviewDir}/${install4jBuildDir}/sha256sums")
-  def VERSION_UNDERSCORES = JALVIEW_VERSION.replaceAll("\\.", "_")
-  def installersJsonFile = file("${jalviewDir}/${install4jBuildDir}/installers-${VERSION_UNDERSCORES}.json")
+  def hugoDataJsonFile = file("${jalviewDir}/${install4jBuildDir}/installers-${JALVIEW_VERSION_UNDERSCORES}.json")
   doFirst {
     delete installersOutputTxt
     delete installersSha256
-    delete installersJsonFile
+    delete hugoDataJsonFile
   }
 }
 
@@ -2075,7 +2076,7 @@ task installerFiles(type: com.install4j.gradle.Install4jTask) {
     'WRAPPER_SCRIPT_BIN_DIR': getdown_wrapper_script_dir,
     'INSTALLER_NAME': install4jInstallerName,
     'INSTALL4J_UTILS_DIR': install4j_utils_dir,
-    'GETDOWN_WEBSITE_DIR': getdown_website_dir,
+    'GETDOWN_CHANNEL_DIR': getdownChannelDir,
     'GETDOWN_FILES_DIR': getdown_files_dir,
     'GETDOWN_RESOURCE_DIR': getdown_resource_dir,
     'GETDOWN_DIST_DIR': getdownAppDistDir,
@@ -2124,7 +2125,7 @@ task installerFiles(type: com.install4j.gradle.Install4jTask) {
   }
   //verbose=true
 
-  inputs.dir(getdownWebsiteDir)
+  inputs.dir(getdownAppBaseDir)
   inputs.file(install4jConfFile)
   inputs.file("${install4jDir}/${install4j_info_plist_file_associations}")
   inputs.dir(macosJavaVMDir)
@@ -2132,70 +2133,66 @@ task installerFiles(type: com.install4j.gradle.Install4jTask) {
   outputs.dir("${jalviewDir}/${install4j_build_dir}/${JAVA_VERSION}")
 }
 
-def writeInstallersJsonFile(File installersOutputTxt, File installersSha256, File installersJsonFile) {
-  if (!installersOutputTxt.exists()) {
-    throw new GradleException("Required input file '${installersOutputTxt.getPath()}' doesn't exist.")
-    return null;
-  }
-  if (install4jCheckSums && (!installersSha256)) {
-    throw new GradleException("Required input file '${installersSha256.getPath()}' doesn't exist.")
-    return null;
-  }
-  def hash = ["channel":getdownChannelName,"date":getDate("yyyy-MM-dd HH:mm:ss")]
-  def idHash = [:]
-  installersOutputTxt.readLines().each { def line ->
-    if (line.startsWith("#")) {
-      return;
-    }
-    line.replaceAll("\n","")
-    def vals = line.split("\t")
-    def filename = vals[3]
-    def filesize = file(filename).length()
-    filename = filename.replaceAll(/^.*\//, "")
-    hash[vals[0]] = [ "id" : vals[0], "os" : vals[1], "name" : vals[2], "file" : filename, "filesize" : filesize ]
-    idHash."${filename}" = vals[0]
-  }
-  if (install4jCheckSums) {
-    installersSha256.readLines().each { def line ->
+def getDataHash(File myFile) {
+  HashCode hash = Files.asByteSource(myFile).hash(Hashing.sha256())
+  return myFile.exists()
+  ? [
+      "file" : myFile.getName(),
+      "filesize" : myFile.length(),
+      "sha256" : hash.toString()
+    ]
+  : null
+}
+
+def writeDataJsonFile(File installersOutputTxt, File installersSha256, File dataJsonFile) {
+  def hash = [
+    "channel" : getdownChannelName,
+    "date" : getDate("yyyy-MM-dd HH:mm:ss"),
+    "git-commit" : "${gitHash} [${gitBranch}]",
+    "version" : JALVIEW_VERSION
+  ]
+  // install4j installer files
+  if (installersOutputTxt.exists()) {
+    def idHash = [:]
+    installersOutputTxt.readLines().each { def line ->
       if (line.startsWith("#")) {
         return;
       }
       line.replaceAll("\n","")
-      def vals = line.split(/\s+\*?/)
-      def filename = vals[1]
-      def innerHash = (hash.(idHash."${filename}"))."sha256" = vals[0]
+      def vals = line.split("\t")
+      def filename = vals[3]
+      def filesize = file(filename).length()
+      filename = filename.replaceAll(/^.*\//, "")
+      hash[vals[0]] = [ "id" : vals[0], "os" : vals[1], "name" : vals[2], "file" : filename, "filesize" : filesize ]
+      idHash."${filename}" = vals[0]
+    }
+    if (install4jCheckSums && installersSha256.exists()) {
+      installersSha256.readLines().each { def line ->
+        if (line.startsWith("#")) {
+          return;
+        }
+        line.replaceAll("\n","")
+        def vals = line.split(/\s+\*?/)
+        def filename = vals[1]
+        def innerHash = (hash.(idHash."${filename}"))."sha256" = vals[0]
+      }
     }
   }
-  return installersJsonFile.write(new JsonBuilder(hash).toPrettyString())
-}
-
-
-/*
-ALSO COMPILE AND ADD IN TO THE JSON FILE INFO FOR EXECUTABLE JAR, VERSION JVL FILE, SOURCE TAR FILE
-*/
-
-
 
-
-
-
-task makeInstallersJsonFile {
-  dependsOn installerFiles
-
-  def installersOutputTxt = file("${jalviewDir}/${install4jBuildDir}/output.txt")
-  def installersSha256 = file("${jalviewDir}/${install4jBuildDir}/sha256sums")
-  def VERSION_UNDERSCORES = JALVIEW_VERSION.replaceAll("\\.", "_")
-  def installersJsonFile = file("${jalviewDir}/${install4jBuildDir}/installers-${VERSION_UNDERSCORES}.json")
-
-  inputs.file(installersOutputTxt)
-  if (install4jCheckSums) {
-    inputs.file(installersSha256)
-  }
-  outputs.file(installersJsonFile)
-
-  doFirst {
-    writeInstallersJsonFile(installersOutputTxt, installersSha256, installersJsonFile)
+  [
+    "JAR": shadowJar.archiveFile, // executable JAR
+    "JVL": getdownVersionLaunchJvl, // version JVL
+    "SOURCE": sourceDist.archiveFile // source TGZ
+  ].each { key, value ->
+    def file = file(value)
+    if (file.exists()) {
+      def fileHash = getDataHash(file)
+      if (fileHash != null) {
+        hash."${key}" = fileHash;
+      }
+    }
   }
+  return dataJsonFile.write(new JsonBuilder(hash).toPrettyString())
 }
 
 task staticMakeInstallersJsonFile {
@@ -2206,13 +2203,12 @@ task staticMakeInstallersJsonFile {
     if (output == null || sha256 == null || json == null) {
       throw new GradleException("Must provide paths to all of output.txt, sha256sums, and output.json with '-Pi4j_output=... -Pi4j_sha256=... -Pi4j_json=...")
     }
-    writeInstallersJsonFile(file(output), file(sha256), file(json))
+    writeDataJsonFile(file(output), file(sha256), file(json))
   }
 }
 
 task installers {
   dependsOn installerFiles
-  dependsOn makeInstallersJsonFile
 }
 
 
@@ -2321,7 +2317,9 @@ task sourceDist(type: Tar) {
     exclude ("utils/InstallAnywhere")
 
     exclude (getdown_files_dir)
-    exclude (getdown_website_dir)
+    // getdown_website_dir and getdown_archive_dir moved to build/website/docroot/getdown
+    //exclude (getdown_website_dir)
+    //exclude (getdown_archive_dir)
 
     // exluding these as not using jars as modules yet
     exclude ("${j11modDir}/**/*.jar")
@@ -2350,6 +2348,41 @@ task sourceDist(type: Tar) {
   }
 }
 
+task dataInstallersJson {
+  group "website"
+  description "Create the installers-VERSION.json data file for installer files created"
+
+  def installersOutputTxt = file("${jalviewDir}/${install4jBuildDir}/output.txt")
+  def installersSha256 = file("${jalviewDir}/${install4jBuildDir}/sha256sums")
+
+  if (installersOutputTxt.exists()) {
+    inputs.file(installersOutputTxt)
+  }
+  if (install4jCheckSums && installersSha256.exists()) {
+    inputs.file(installersSha256)
+  }
+  [
+    shadowJar.archiveFile, // executable JAR
+    getdownVersionLaunchJvl, // version JVL
+    sourceDist.archiveFile // source TGZ
+  ].each { fileName ->
+    if (file(fileName).exists()) {
+      inputs.file(fileName)
+    }
+  }
+
+  outputs.file(hugoDataJsonFile)
+
+  doFirst {
+    writeDataJsonFile(installersOutputTxt, installersSha256, hugoDataJsonFile)
+  }
+}
+
+dataInstallersJson.mustRunAfter installers
+dataInstallersJson.mustRunAfter shadowJar
+dataInstallersJson.mustRunAfter sourceDist
+dataInstallersJson.mustRunAfter getdownArchive
+
 
 task helppages {
   dependsOn copyHelp