Merge branch 'develop' into improvement/JAL-3978_add_gradle_task_to_make_getdown_arch...
[jalview.git] / build.gradle
index b4636bc..ec30174 100644 (file)
@@ -190,12 +190,17 @@ ext {
   testClassesDir = useClover ? cloverTestClassesDir : "${jalviewDir}/${test_output_dir}"
 
   getdownWebsiteDir = string("${jalviewDir}/${getdown_website_dir}/${JAVA_VERSION}")
+  getdownArchiveDir = string("${jalviewDir}/${getdown_archive_dir}")
+  getdownFullArchiveDir = null
+  getdownTextLines = []
+  getdownLaunchJvl = 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
   getdownLauncher = string("${jalviewDir}/${getdown_lib_dir}/${getdown_launcher}")
   getdownAppDistDir = getdown_app_dir_alt
   getdownImagesDir = string("${jalviewDir}/${getdown_images_dir}")
@@ -229,9 +234,11 @@ ext {
 
     case [ "RELEASE", "JALVIEWJS-RELEASE" ]:
     getdownAppDistDir = getdown_app_dir_release
+    getdownSetAppBaseProperty = true
     reportRsyncCommand = true
     install4jSuffix = ""
     install4jInstallerName = "${jalview_name} Installer"
+    getdownArchiveAppBase = getdown_archive_base
     break
 
     case "ARCHIVE":
@@ -279,6 +286,7 @@ ext {
 
     case "TEST-RELEASE":
     reportRsyncCommand = true
+    getdownSetAppBaseProperty = true
     // Don't ignore transpile errors for release build
     if (jalviewjs_ignore_transpile_errors.equals("true")) {
       jalviewjs_ignore_transpile_errors = "false"
@@ -316,6 +324,7 @@ ext {
     case [ "LOCAL", "JALVIEWJS" ]:
     JALVIEW_VERSION = "TEST"
     getdownAppBase = file(getdownWebsiteDir).toURI().toString()
+    getdownArchiveAppBase = file("${jalviewDir}/${getdown_archive_dir}").toURI().toString()
     getdownLauncher = string("${jalviewDir}/${getdown_lib_dir}/${getdown_launcher_local}")
     install4jExtraScheme = "jalviewl"
     break
@@ -325,6 +334,7 @@ ext {
     break
 
   }
+  JALVIEW_VERSION_UNDERSCORES = JALVIEW_VERSION.replaceAll("\\.", "_")
   // override getdownAppBase if requested
   if (findProperty("getdown_appbase_override") != null) {
     // revert to LOCAL if empty string
@@ -1508,7 +1518,6 @@ task getdownWebsite() {
   }
 
   def getdownWebsiteResourceFilenames = []
-  def getdownTextString = ""
   def getdownResourceDir = getdownResourceDir
   def getdownResourceFilenames = []
 
@@ -1530,7 +1539,7 @@ task getdownWebsite() {
     }
     getdownWebsiteResourceFilenames += file(channelPropsFile).getName()
 
-    // set some getdown_txt_ properties then go through all properties looking for getdown_txt_...
+    // set some getdownTxt_ properties then go through all properties looking for getdownTxt_...
     def props = project.properties.sort { it.key }
     if (getdownAltJavaMinVersion != null && getdownAltJavaMinVersion.length() > 0) {
       props.put("getdown_txt_java_min_version", getdownAltJavaMinVersion)
@@ -1554,14 +1563,14 @@ task getdownWebsite() {
     props.put("getdown_txt_ui.name", install4jApplicationName)
 
     // start with appbase
-    getdownTextString += "appbase = ${getdownAppBase}\n"
+    getdownTextLines += "appbase = ${getdownAppBase}"
     props.each{ prop, val ->
       if (prop.startsWith("getdown_txt_") && val != null) {
         if (prop.startsWith("getdown_txt_multi_")) {
           def key = prop.substring(18)
           val.split(",").each{ v ->
-            def line = "${key} = ${v}\n"
-            getdownTextString += line
+            def line = "${key} = ${v}"
+            getdownTextLines += line
           }
         } else {
           // file values rationalised
@@ -1581,15 +1590,15 @@ task getdownWebsite() {
             }
           }
           if (! prop.startsWith("getdown_txt_resource")) {
-            def line = prop.substring(12) + " = ${val}\n"
-            getdownTextString += line
+            def line = prop.substring(12) + " = ${val}"
+            getdownTextLines += line
           }
         }
       }
     }
 
     getdownWebsiteResourceFilenames.each{ filename ->
-      getdownTextString += "resource = ${filename}\n"
+      getdownTextLines += "resource = ${filename}"
     }
     getdownResourceFilenames.each{ filename ->
       copy {
@@ -1606,7 +1615,7 @@ task getdownWebsite() {
           from s
           into "${getdownWebsiteDir}/${getdown_wrapper_script_dir}"
         }
-        getdownTextString += "resource = ${getdown_wrapper_script_dir}/${script}\n"
+        getdownTextLines += "resource = ${getdown_wrapper_script_dir}/${script}"
       }
     }
 
@@ -1623,8 +1632,8 @@ task getdownWebsite() {
     // put jalview.jar first for CLASSPATH and .properties files reasons
     codeFiles.sort{a, b -> ( a.getName() == jalviewJar ? -1 : ( b.getName() == jalviewJar ? 1 : a <=> b ) ) }.each{f ->
       def name = f.getName()
-      def line = "code = ${getdownAppDistDir}/${name}\n"
-      getdownTextString += line
+      def line = "code = ${getdownAppDistDir}/${name}"
+      getdownTextLines += line
       copy {
         from f.getPath()
         into getdownAppDir
@@ -1637,8 +1646,8 @@ task getdownWebsite() {
     def j11libFiles = fileTree(dir: "${jalviewDir}/${j11libDir}", include: ["*.jar"]).getFiles()
     j11libFiles.sort().each{f ->
     def name = f.getName()
-    def line = "code = ${getdown_j11lib_dir}/${name}\n"
-    getdownTextString += line
+    def line = "code = ${getdown_j11lib_dir}/${name}"
+    getdownTextLines += line
     copy {
     from f.getPath()
     into getdownJ11libDir
@@ -1648,19 +1657,19 @@ task getdownWebsite() {
      */
 
     // getdown-launcher.jar should not be in main application class path so the main application can move it when updated.  Listed as a resource so it gets updated.
-    //getdownTextString += "class = " + file(getdownLauncher).getName() + "\n"
-    getdownTextString += "resource = ${getdown_launcher_new}\n"
-    getdownTextString += "class = ${main_class}\n"
+    //getdownTextLines += "class = " + file(getdownLauncher).getName()
+    getdownTextLines += "resource = ${getdown_launcher_new}"
+    getdownTextLines += "class = ${main_class}"
     // Not setting these properties in general so that getdownappbase and getdowndistdir will default to release version in jalview.bin.Cache
     if (getdownSetAppBaseProperty) {
-      getdownTextString += "jvmarg = -Dgetdowndistdir=${getdownAppDistDir}\n"
-      getdownTextString += "jvmarg = -Dgetdownappbase=${getdownAppBase}\n"
+      getdownTextLines += "jvmarg = -Dgetdowndistdir=${getdownAppDistDir}"
+      getdownTextLines += "jvmarg = -Dgetdownappbase=${getdownAppBase}"
     }
 
-    def getdown_txt = file("${getdownWebsiteDir}/getdown.txt")
-    getdown_txt.write(getdownTextString)
+    def getdownTxt = file("${getdownWebsiteDir}/getdown.txt")
+    getdownTxt.write(getdownTextLines.join("\n"))
 
-    def getdownLaunchJvl = getdown_launch_jvl_name + ( (jvlChannelName != null && jvlChannelName.length() > 0)?"-${jvlChannelName}":"" ) + ".jvl"
+    getdownLaunchJvl = getdown_launch_jvl_name + ( (jvlChannelName != null && jvlChannelName.length() > 0)?"-${jvlChannelName}":"" ) + ".jvl"
     def launchJvl = file("${getdownWebsiteDir}/${getdownLaunchJvl}")
     launchJvl.write("appbase=${getdownAppBase}")
 
@@ -1683,7 +1692,7 @@ task getdownWebsite() {
     // files going into the getdown website dir: ./install dir and files
     if (! (CHANNEL.startsWith("ARCHIVE") || CHANNEL.startsWith("DEVELOP"))) {
       copy {
-        from getdown_txt
+        from getdownTxt
         from getdownLauncher
         from "${getdownAppDir}/${getdown_build_properties}"
         if (file(getdownLauncher).getName() != getdown_launcher) {
@@ -1701,7 +1710,7 @@ task getdownWebsite() {
 
     // files going into the getdown files dir: getdown.txt, getdown-launcher.jar, channel-launch.jvl, build_properties
     copy {
-      from getdown_txt
+      from getdownTxt
       from launchJvl
       from getdownLauncher
       from "${getdownWebsiteDir}/${getdown_build_properties}"
@@ -1712,7 +1721,7 @@ task getdownWebsite() {
       into getdownFilesDir
     }
 
-    // and ./resources (not all downloaded by getdown)
+    // and ./resource (not all downloaded by getdown)
     copy {
       from getdownResourceDir
       into "${getdownFilesDir}/${getdown_resource_dir}"
@@ -1782,6 +1791,109 @@ task getdown() {
 }
 
 
+task getdownArchiveBuild() {
+  group = "distribution"
+  description = "Put files in the archive dir to go on the website"
+
+  dependsOn getdownWebsite
+
+  def v = "v${JALVIEW_VERSION_UNDERSCORES}"
+  def vDir = "${getdownArchiveDir}/${v}"
+  getdownFullArchiveDir = "${vDir}/getdown"
+  def vLaunchVersionJvl = "${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
+
+    def getdownArchiveTxt = file("${getdownFullArchiveDir}/getdown.txt")
+    getdownArchiveTxt.getParentFile().mkdirs()
+    def getdownArchiveTextLines = []
+    def getdownFullArchiveAppBase = "${getdownArchiveAppBase}${getdownArchiveAppBase.endsWith("/")?"":"/"}${v}/getdown/"
+
+    // the libdir
+    copy {
+      from "${getdownWebsiteDir}/${getdownAppDistDir}"
+      into "${getdownFullArchiveDir}/${vAltDir}"
+    }
+
+    getdownTextLines.each { line ->
+      line = line.replaceAll("^(?<s>appbase\\s*=\\s*).*", '${s}'+getdownFullArchiveAppBase)
+      line = line.replaceAll("^(?<s>(resource|code)\\s*=\\s*)${getdownAppDistDir}/", '${s}'+vAltDir+"/")
+      line = line.replaceAll("^(?<s>ui.background_image\\s*=\\s*).*\\.png", '${s}'+"${getdown_resource_dir}/jalview_archive_getdown_background.png")
+      line = line.replaceAll("^(?<s>ui.instant_background_image\\s*=\\s*).*\\.png", '${s}'+"${getdown_resource_dir}/jalview_archive_getdown_background_initialising.png")
+      line = line.replaceAll("^(?<s>ui.error_background\\s*=\\s*).*\\.png", '${s}'+"${getdown_resource_dir}/jalview_archive_getdown_background_error.png")
+      line = line.replaceAll("^(?<s>ui.progress_image\\s*=\\s*).*\\.png", '${s}'+"${getdown_resource_dir}/jalview_archive_getdown_progress_bar.png")
+      // remove the existing resource = resource/ or bin/ lines
+      if (! line.matches("resource\\s*=\\s*(resource|bin)/.*")) {
+        getdownArchiveTextLines += line
+      }
+    }
+
+    // the resource dir -- add these files as resource lines in getdown.txt
+    copy {
+      from "${archiveImagesDir}"
+      into "${getdownFullArchiveDir}/${getdown_resource_dir}"
+      eachFile { file ->
+        getdownArchiveTextLines += "resource = ${getdown_resource_dir}/${file.getName()}"
+      }
+    }
+
+    getdownArchiveTxt.write(getdownArchiveTextLines.join("\n"))
+
+    def vLaunchJvl = file(vLaunchVersionJvl)
+    vLaunchJvl.getParentFile().mkdirs()
+    vLaunchJvl.write("appbase=${getdownFullArchiveAppBase}\n")
+    def vLaunchJvlPath = vLaunchJvl.toPath().toAbsolutePath()
+    def jvlLinkPath = file("${vDir}/jalview.jvl").toPath().toAbsolutePath()
+    // for some reason filepath.relativize(fileInSameDirPath) gives a path to "../" which is wrong
+    //java.nio.file.Files.createSymbolicLink(jvlLinkPath, jvlLinkPath.relativize(vLaunchJvlPath));
+    java.nio.file.Files.createSymbolicLink(jvlLinkPath, java.nio.file.Paths.get(".",vLaunchJvl.getName()));
+
+    // 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}"
+      if (file(getdownLauncher).getName() != getdown_launcher) {
+        rename(file(getdownLauncher).getName(), getdown_launcher)
+      }
+      into getdownFullArchiveDir
+    }
+
+  }
+}
+
+task getdownArchiveDigest(type: JavaExec) {
+  group = "distribution"
+  description = "Digest the getdown archive folder"
+
+  dependsOn getdownArchiveBuild
+
+  doFirst {
+    classpath = files(getdownLauncher)
+    args getdownFullArchiveDir
+  }
+  main = "com.threerings.getdown.tools.Digester"
+  inputs.dir(getdownFullArchiveDir)
+  outputs.file("${getdownFullArchiveDir}/digest2.txt")
+}
+
+task getdownArchive() {
+  group = "distribution"
+  description = "Build the website archive dir with getdown digest"
+
+  dependsOn getdownArchiveBuild
+  dependsOn getdownArchiveDigest
+}
+
 tasks.withType(JavaCompile) {
        options.encoding = 'UTF-8'
 }
@@ -1791,6 +1903,7 @@ clean {
   doFirst {
     delete getdownWebsiteDir
     delete getdownFilesDir
+    delete getdownArchiveDir
   }
 }
 
@@ -2043,8 +2156,7 @@ task sourceDist(type: Tar) {
   dependsOn createSourceReleaseProperties
 
 
-  def VERSION_UNDERSCORES = JALVIEW_VERSION.replaceAll("\\.", "_")
-  def outputFileName = "${project.name}_${VERSION_UNDERSCORES}.tar.gz"
+  def outputFileName = "${project.name}_${JALVIEW_VERSION_UNDERSCORES}.tar.gz"
   archiveFileName = outputFileName
   
   compression Compression.GZIP