From 32504ac62e27ce8849ab331a10b7cc3d0c2322b2 Mon Sep 17 00:00:00 2001 From: Ben Soares Date: Fri, 18 Mar 2022 16:55:17 +0000 Subject: [PATCH] JAL-3978 New tasks to build archive 'old' dir with appropriate getdown resources, JVL file and digest --- .gitignore | 1 + build.gradle | 157 ++++++++++++++++---- gradle.properties | 2 + src/jalview/bin/Cache.java | 16 +- src/jalview/util/ChannelProperties.java | 1 + utils/channels/default/resources/channel.props | 1 + utils/channels/develop/resources/channel.props | 1 + utils/channels/jalviewjs/resources/channel.props | 1 + .../images}/jalview_archive_getdown_background.png | Bin 77083 -> 77083 bytes .../images}/jalview_archive_getdown_background.xcf | Bin 1384998 -> 1384998 bytes .../jalview_archive_getdown_background_error.png | Bin 82622 -> 82622 bytes ...iew_archive_getdown_background_initialising.png | Bin 80554 -> 80554 bytes .../jalview_archive_getdown_progress_bar.png | Bin 6284 -> 6284 bytes utils/channels/old/images/jalview_logo.png | Bin 0 -> 13819 bytes utils/channels/release/resources/channel.props | 1 + .../channels/test-release/resources/channel.props | 1 + 16 files changed, 147 insertions(+), 35 deletions(-) rename utils/channels/{archive => old/images}/jalview_archive_getdown_background.png (100%) rename utils/channels/{archive => old/images}/jalview_archive_getdown_background.xcf (100%) rename utils/channels/{archive => old/images}/jalview_archive_getdown_background_error.png (100%) rename utils/channels/{archive => old/images}/jalview_archive_getdown_background_initialising.png (100%) rename utils/channels/{archive => old/images}/jalview_archive_getdown_progress_bar.png (100%) create mode 100644 utils/channels/old/images/jalview_logo.png diff --git a/.gitignore b/.gitignore index cd56818..b1e3609 100644 --- a/.gitignore +++ b/.gitignore @@ -27,6 +27,7 @@ TESTNG /getdown/website /getdown/full_app /getdown/files +/getdown/old /getdown/src/getdown/*/target/ /getdown/src/getdown/core/src/main/java/com/threerings/getdown/data/Build.java /getdown/src/getdown/launcher/dependency-reduced-pom.xml diff --git a/build.gradle b/build.gradle index cee3ed8..8bf9f78 100644 --- a/build.gradle +++ b/build.gradle @@ -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 @@ -1496,7 +1506,6 @@ task getdownWebsite() { } def getdownWebsiteResourceFilenames = [] - def getdownTextString = "" def getdownResourceDir = getdownResourceDir def getdownResourceFilenames = [] @@ -1518,7 +1527,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) @@ -1542,14 +1551,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 @@ -1569,15 +1578,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 { @@ -1594,7 +1603,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}" } } @@ -1611,8 +1620,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 @@ -1625,8 +1634,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 @@ -1636,19 +1645,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}") @@ -1671,7 +1680,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) { @@ -1689,7 +1698,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}" @@ -1700,7 +1709,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}" @@ -1770,16 +1779,108 @@ task getdown() { } -task getdownArchive() { +task getdownArchiveBuild() { group = "distribution" - description = "Create the archive dir to go on the website" + 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("^(?appbase\\s*=\\s*).*", '${s}'+getdownFullArchiveAppBase) + line = line.replaceAll("^(?(resource|code)\\s*=\\s*)${getdownAppDistDir}/", '${s}'+vAltDir+"/") + line = line.replaceAll("^(?ui.background_image\\s*=\\s*).*\\.png", '${s}'+"${getdown_resource_dir}/jalview_archive_getdown_background.png") + line = line.replaceAll("^(?ui.instant_background_image\\s*=\\s*).*\\.png", '${s}'+"${getdown_resource_dir}/jalview_archive_getdown_background_initialising.png") + line = line.replaceAll("^(?ui.error_background\\s*=\\s*).*\\.png", '${s}'+"${getdown_resource_dir}/jalview_archive_getdown_background_error.png") + line = line.replaceAll("^(?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' @@ -1790,6 +1891,7 @@ clean { doFirst { delete getdownWebsiteDir delete getdownFilesDir + delete getdownArchiveDir } } @@ -2023,8 +2125,7 @@ task sourceDist(type: Tar) { dependsOn createBuildProperties dependsOn convertMdFiles - 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 diff --git a/gradle.properties b/gradle.properties index ae8e8ac..fb925b5 100644 --- a/gradle.properties +++ b/gradle.properties @@ -60,6 +60,7 @@ jalview_name = Jalview getdown_local = false getdown_website_dir = getdown/website +getdown_archive_dir = getdown/old getdown_resource_dir = resource getdown_files_dir = getdown/files getdown_lib_dir = getdown/lib @@ -148,6 +149,7 @@ OSX_ALTOOLPASS = CHANNEL=LOCAL getdown_channel_base = https://www.jalview.org/getdown +getdown_archive_base = https://www.jalview.org/old getdown_app_dir_release = release getdown_app_dir_alt = alt getdown_app_dir_java = jre diff --git a/src/jalview/bin/Cache.java b/src/jalview/bin/Cache.java index ac8a183..22a6b69 100755 --- a/src/jalview/bin/Cache.java +++ b/src/jalview/bin/Cache.java @@ -42,7 +42,6 @@ import java.util.Locale; import java.util.Properties; import java.util.StringTokenizer; import java.util.TreeSet; -import java.util.regex.Pattern; import javax.swing.LookAndFeel; import javax.swing.UIManager; @@ -1154,8 +1153,11 @@ public class Cache { return; } - String line = prefix + (value != null ? value : defaultValue) + suffix; - sb.append(line); + if (prefix != null) + sb.append(prefix); + sb.append(value == null ? defaultValue : value); + if (suffix != null) + sb.append(suffix); } /** @@ -1199,11 +1201,11 @@ public class Cache sb.append(" ("); sb.append(lafClass); sb.append(")\n"); - // Not displayed in release version ( determined by possible version number - // regex 9[9.]*9[.-_a9]* ) - if (Pattern.matches("^\\d[\\d\\.]*\\d[\\.\\-\\w]*$", - Cache.getDefault("VERSION", "TEST"))) + if (Console.isDebugEnabled() + || !"release".equals(ChannelProperties.getProperty("channel"))) { + appendIfNotNull(sb, "Channel: ", + ChannelProperties.getProperty("channel"), "\n", null); appendIfNotNull(sb, "Getdown appdir: ", System.getProperty("getdownappdir"), "\n", null); appendIfNotNull(sb, "Getdown appbase: ", diff --git a/src/jalview/util/ChannelProperties.java b/src/jalview/util/ChannelProperties.java index 50d6fc6..4832588 100644 --- a/src/jalview/util/ChannelProperties.java +++ b/src/jalview/util/ChannelProperties.java @@ -77,6 +77,7 @@ public class ChannelProperties defaultProps.put("default_appbase", "https://www.jalview.org/getdown/release/1.8"); defaultProps.put("preferences.filename", ".jalview_properties"); + defaultProps.put("channel", "none"); // load channel_properties Properties tryChannelProps = new Properties(); diff --git a/utils/channels/default/resources/channel.props b/utils/channels/default/resources/channel.props index 15b162f..2b2672a 100644 --- a/utils/channels/default/resources/channel.props +++ b/utils/channels/default/resources/channel.props @@ -17,3 +17,4 @@ uod_banner.30=/images/UoD_banner-30.png uod_banner.32=/images/UoD_banner-32.png default_appbase=https://www.jalview.org/getdown/release/1.8 preferences.filename=.jalview_nonrelease_properties +channel=default diff --git a/utils/channels/develop/resources/channel.props b/utils/channels/develop/resources/channel.props index 8af68fa..a3d2350 100644 --- a/utils/channels/develop/resources/channel.props +++ b/utils/channels/develop/resources/channel.props @@ -17,3 +17,4 @@ uod_banner.30=/images/UoD_banner-30.png uod_banner.32=/images/UoD_banner-32.png default_appbase=https://www.jalview.org/getdown/develop/11 preferences.filename=.jalview_develop_properties +channel=develop diff --git a/utils/channels/jalviewjs/resources/channel.props b/utils/channels/jalviewjs/resources/channel.props index 8195dc8..af989f5 100644 --- a/utils/channels/jalviewjs/resources/channel.props +++ b/utils/channels/jalviewjs/resources/channel.props @@ -17,3 +17,4 @@ uod_banner.30=/images/UoD_banner-30.png uod_banner.32=/images/UoD_banner-32.png default_appbase=https://www.jalview.org/getdown/release/1.8 preferences.filename=.jalview_properties +channel=jalviewjs diff --git a/utils/channels/archive/jalview_archive_getdown_background.png b/utils/channels/old/images/jalview_archive_getdown_background.png similarity index 100% rename from utils/channels/archive/jalview_archive_getdown_background.png rename to utils/channels/old/images/jalview_archive_getdown_background.png diff --git a/utils/channels/archive/jalview_archive_getdown_background.xcf b/utils/channels/old/images/jalview_archive_getdown_background.xcf similarity index 100% rename from utils/channels/archive/jalview_archive_getdown_background.xcf rename to utils/channels/old/images/jalview_archive_getdown_background.xcf diff --git a/utils/channels/archive/jalview_archive_getdown_background_error.png b/utils/channels/old/images/jalview_archive_getdown_background_error.png similarity index 100% rename from utils/channels/archive/jalview_archive_getdown_background_error.png rename to utils/channels/old/images/jalview_archive_getdown_background_error.png diff --git a/utils/channels/archive/jalview_archive_getdown_background_initialising.png b/utils/channels/old/images/jalview_archive_getdown_background_initialising.png similarity index 100% rename from utils/channels/archive/jalview_archive_getdown_background_initialising.png rename to utils/channels/old/images/jalview_archive_getdown_background_initialising.png diff --git a/utils/channels/archive/jalview_archive_getdown_progress_bar.png b/utils/channels/old/images/jalview_archive_getdown_progress_bar.png similarity index 100% rename from utils/channels/archive/jalview_archive_getdown_progress_bar.png rename to utils/channels/old/images/jalview_archive_getdown_progress_bar.png diff --git a/utils/channels/old/images/jalview_logo.png b/utils/channels/old/images/jalview_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..74bafbe14c3e7a1a0dab55ac4564ff5a6a0b8d60 GIT binary patch literal 13819 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 literal 0 HcmV?d00001 diff --git a/utils/channels/release/resources/channel.props b/utils/channels/release/resources/channel.props index abdfd3f..4866099 100644 --- a/utils/channels/release/resources/channel.props +++ b/utils/channels/release/resources/channel.props @@ -17,3 +17,4 @@ uod_banner.30=/images/UoD_banner-30.png uod_banner.32=/images/UoD_banner-32.png default_appbase=https://www.jalview.org/getdown/release/1.8 preferences.filename=.jalview_properties +channel=release diff --git a/utils/channels/test-release/resources/channel.props b/utils/channels/test-release/resources/channel.props index e337bf8..bd538dc 100644 --- a/utils/channels/test-release/resources/channel.props +++ b/utils/channels/test-release/resources/channel.props @@ -17,3 +17,4 @@ uod_banner.30=/images/UoD_banner-30.png uod_banner.32=/images/UoD_banner-32.png default_appbase=https://www.jalview.org/getdown/test-release/1.8 preferences.filename=.jalview_test_properties +channel=test-release -- 1.7.10.2