X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=build.gradle;h=ec3017431564ecc23d1aad1da450e0377c8ea186;hb=a1cb36ade41d94aa93dd5b023e942c48f7e19de1;hp=17407a9b3cc1ba69c7e03fa93dc25c44a880c36f;hpb=3dd93fb0694a3375dedb4ad5f9596a1781b30caa;p=jalview.git diff --git a/build.gradle b/build.gradle index 17407a9..ec30174 100644 --- a/build.gradle +++ b/build.gradle @@ -40,9 +40,9 @@ plugins { id 'eclipse' id "com.diffplug.gradle.spotless" version "3.28.0" id 'com.github.johnrengelman.shadow' version '4.0.3' - id 'com.install4j.gradle' version '8.0.10' + id 'com.install4j.gradle' version '9.0.6' id 'com.dorongold.task-tree' version '1.5' // only needed to display task dependency tree with gradle task1 [task2 ...] taskTree - id 'com.palantir.git-version' version '0.12.3' + id 'com.palantir.git-version' version '0.13.0' apply false } repositories { @@ -103,6 +103,7 @@ ext { // Import channel_properties channelDir = string("${jalviewDir}/${channel_properties_dir}/${propertiesChannelName}") channelGradleProperties = string("${channelDir}/channel_gradle.properties") + channelPropsFile = string("${channelDir}/${resource_dir}/${channel_props}") overrideProperties(channelGradleProperties, false) // local build environment properties // can be "projectDir/local.properties" @@ -114,7 +115,7 @@ ext { // Import releaseProps from the RELEASE file // or a file specified via JALVIEW_RELEASE_FILE if defined // Expect jalview.version and target release branch in jalview.release - def releaseProps = new Properties(); + releaseProps = new Properties(); def releasePropFile = findProperty("JALVIEW_RELEASE_FILE"); def defaultReleasePropFile = "${jalviewDirAbsolutePath}/RELEASE"; try { @@ -189,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}") @@ -228,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": @@ -278,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" @@ -315,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 @@ -324,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 @@ -382,9 +393,21 @@ ext { modules_compileClasspath = fileTree(dir: "${jalviewDir}/${j11modDir}", include: ["*.jar"]) modules_runtimeClasspath = modules_compileClasspath */ - def details = versionDetails() - gitHash = details.gitHash - gitBranch = details.branchName + + gitHash = "SOURCE" + gitBranch = "Source" + try { + apply plugin: "com.palantir.git-version" + def details = versionDetails() + gitHash = details.gitHash + gitBranch = details.branchName + } catch(org.gradle.api.internal.plugins.PluginApplicationException e) { + println("Not in a git repository. Using git values from RELEASE properties file.") + gitHash = releaseProps.getProperty("git.hash") + gitBranch = releaseProps.getProperty("git.branch") + } catch(java.lang.RuntimeException e1) { + throw new GradleException("Error with git-version plugin. Directory '.git' exists but versionDetails() cannot be found.") + } println("Using a ${CHANNEL} profile.") @@ -449,11 +472,11 @@ ext { jreInstallsDir = System.getProperty("user.home") + jreInstallsDir.substring(1) } macosJavaVMDir = string("${jreInstallsDir}/jre-${JAVA_INTEGER_VERSION}-mac-x64/jre") - macosJavaVMTgz = string("${jreInstallsDir}/tgz/jre-${JAVA_INTEGER_VERSION}-mac-x64.tar.gz") windowsJavaVMDir = string("${jreInstallsDir}/jre-${JAVA_INTEGER_VERSION}-windows-x64/jre") - windowsJavaVMTgz = string("${jreInstallsDir}/tgz/jre-${JAVA_INTEGER_VERSION}-windows-x64.tar.gz") linuxJavaVMDir = string("${jreInstallsDir}/jre-${JAVA_INTEGER_VERSION}-linux-x64/jre") - linuxJavaVMTgz = string("${jreInstallsDir}/tgz/jre-${JAVA_INTEGER_VERSION}-linux-x64.tar.gz") + macosJavaVMTgz = string("${jreInstallsDir}/tgz/jre_${JAVA_INTEGER_VERSION}_mac_x64.tar.gz") + windowsJavaVMTgz = string("${jreInstallsDir}/tgz/jre_${JAVA_INTEGER_VERSION}_windows_x64.tar.gz") + linuxJavaVMTgz = string("${jreInstallsDir}/tgz/jre_${JAVA_INTEGER_VERSION}_linux_x64.tar.gz") install4jDir = string("${jalviewDir}/${install4j_utils_dir}") install4jConfFileName = string("jalview-install4j-conf.install4j") install4jConfFile = file("${install4jDir}/${install4jConfFileName}") @@ -1495,7 +1518,6 @@ task getdownWebsite() { } def getdownWebsiteResourceFilenames = [] - def getdownTextString = "" def getdownResourceDir = getdownResourceDir def getdownResourceFilenames = [] @@ -1511,7 +1533,13 @@ task getdownWebsite() { } getdownWebsiteResourceFilenames += "${getdownAppDistDir}/${getdown_build_properties}" - // set some getdown_txt_ properties then go through all properties looking for getdown_txt_... + copy { + from channelPropsFile + into getdownWebsiteDir + } + getdownWebsiteResourceFilenames += file(channelPropsFile).getName() + + // 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) @@ -1535,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 @@ -1562,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 { @@ -1587,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}" } } @@ -1600,10 +1628,12 @@ task getdownWebsite() { codeFiles += f } } - codeFiles.sort().each{f -> + def jalviewJar = jar.archiveFileName.getOrNull() + // 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 @@ -1616,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 @@ -1627,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}") @@ -1662,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) { @@ -1680,17 +1710,18 @@ 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}" + from "${getdownWebsiteDir}/${channel_props}" if (file(getdownLauncher).getName() != getdown_launcher) { rename(file(getdownLauncher).getName(), getdown_launcher) } into getdownFilesDir } - // and ./resources (not all downloaded by getdown) + // and ./resource (not all downloaded by getdown) copy { from getdownResourceDir into "${getdownFilesDir}/${getdown_resource_dir}" @@ -1760,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("^(?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' } @@ -1769,6 +1903,7 @@ clean { doFirst { delete getdownWebsiteDir delete getdownFilesDir + delete getdownArchiveDir } } @@ -1808,6 +1943,12 @@ task copyInstall4jTemplate { } } + // disable install screen for OSX dmg (for 2.11.2.0) + install4jConfigXml.'**'.macosArchive.each { macosArchive -> + macosArchive.attributes().remove('executeSetupApp') + macosArchive.attributes().remove('setupAppId') + } + // turn off checksum creation for LOCAL channel def e = install4jConfigXml.application[0] if (CHANNEL == "LOCAL") { @@ -1988,6 +2129,22 @@ spotless { } } +task createSourceReleaseProperties(type: WriteProperties) { + group = "distribution" + description = "Create the source RELEASE properties file" + + def sourceTarBuildDir = "${buildDir}/sourceTar" + def sourceReleasePropertiesFile = "${sourceTarBuildDir}/RELEASE" + outputFile (sourceReleasePropertiesFile) + + doFirst { + releaseProps.each{ key, val -> property key, val } + property "git.branch", gitBranch + property "git.hash", gitHash + } + + outputs.file(outputFile) +} task sourceDist(type: Tar) { group "distribution" @@ -1995,9 +2152,11 @@ task sourceDist(type: Tar) { dependsOn createBuildProperties dependsOn convertMdFiles + dependsOn eclipseAllPreferences + 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 @@ -2019,6 +2178,7 @@ task sourceDist(type: Tar) { "*locales/**", "utils/InstallAnywhere", "**/*.log", + "RELEASE", ] def PROCESS_FILES=[ "AUTHORS", @@ -2028,7 +2188,6 @@ task sourceDist(type: Tar) { "FEATURETODO", "LICENSE", "**/README", - "RELEASE", "THIRDPARTYLIBS", "TESTNG", "build.gradle", @@ -2043,7 +2202,9 @@ task sourceDist(type: Tar) { "**/*.sh", ] def INCLUDE_FILES=[ - ".settings/org.eclipse.jdt.core.jalview.prefs", + ".classpath", + ".settings/org.eclipse.buildship.core.prefs", + ".settings/org.eclipse.jdt.core.prefs" ] from(jalviewDir) { @@ -2090,6 +2251,10 @@ task sourceDist(type: Tar) { }) } + def sourceTarBuildDir = "${buildDir}/sourceTar" + from(sourceTarBuildDir) { + // this includes the appended RELEASE properties file + } }