X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=build.gradle;h=9b2fe276ebab4ef1e5562e8f570e79f9250a1199;hb=cbe954b4b4f24366ee1bd11aabe231e4da57fd43;hp=105612405ae00414e7003db2f8ca812f62381803;hpb=639bc5f3126d65cc1de8992b9a0fa0cfb993a9ff;p=jalview.git diff --git a/build.gradle b/build.gradle index 1056124..9b2fe27 100644 --- a/build.gradle +++ b/build.gradle @@ -9,6 +9,7 @@ import org.gradle.util.ConfigureUtil import org.gradle.plugins.ide.eclipse.model.Output import org.gradle.plugins.ide.eclipse.model.Library import java.security.MessageDigest +import java.util.regex.Matcher import groovy.transform.ExternalizeMethods import groovy.util.XmlParser import groovy.xml.XmlUtil @@ -37,6 +38,7 @@ buildscript { dependencies { classpath "com.vladsch.flexmark:flexmark-all:0.62.0" classpath "org.jsoup:jsoup:1.14.3" + classpath "com.eowise:gradle-imagemagick:0.5.1" } } @@ -48,7 +50,7 @@ plugins { id "com.diffplug.gradle.spotless" version "3.28.0" id 'com.github.johnrengelman.shadow' version '4.0.3' 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.dorongold.task-tree' version '2.1.0' // only needed to display task dependency tree with gradle task1 [task2 ...] taskTree id 'com.palantir.git-version' version '0.13.0' apply false } @@ -108,8 +110,12 @@ ext { getdownChannelName = CHANNEL.toLowerCase() // default to "default". Currently only has different cosmetics for "develop", "release", "default" propertiesChannelName = ["develop", "release", "test-release", "jalviewjs", "jalviewjs-release" ].contains(getdownChannelName) ? getdownChannelName : "default" + channelDirName = propertiesChannelName // Import channel_properties - channelDir = string("${jalviewDir}/${channel_properties_dir}/${propertiesChannelName}") + if (getdownChannelName.startsWith("develop-")) { + channelDirName = "develop-SUFFIX" + } + channelDir = string("${jalviewDir}/${channel_properties_dir}/${channelDirName}") channelGradleProperties = string("${channelDir}/channel_gradle.properties") channelPropsFile = string("${channelDir}/${resource_dir}/${channel_props}") overrideProperties(channelGradleProperties, false) @@ -138,6 +144,7 @@ ext { if (findProperty("JALVIEW_VERSION")==null || "".equals(JALVIEW_VERSION)) { JALVIEW_VERSION = releaseProps.get("jalview.version") } + println("JALVIEW_VERSION is set to '${JALVIEW_VERSION}'") // this property set when running Eclipse headlessly j2sHeadlessBuildProperty = string("net.sf.j2s.core.headlessbuild") @@ -197,6 +204,8 @@ ext { testSourceDir = useClover ? cloverTestInstrDir : testDir testClassesDir = useClover ? cloverTestClassesDir : "${jalviewDir}/${test_output_dir}" + channelSuffix = "" + backgroundImageText = false getdownChannelDir = string("${getdown_website_dir}/${propertiesChannelName}") getdownAppBaseDir = string("${jalviewDir}/${getdownChannelDir}/${JAVA_VERSION}") getdownArchiveDir = string("${jalviewDir}/${getdown_archive_dir}") @@ -214,12 +223,15 @@ ext { getdownLauncher = string("${jalviewDir}/${getdown_lib_dir}/${getdown_launcher}") getdownAppDistDir = getdown_app_dir_alt getdownImagesDir = string("${jalviewDir}/${getdown_images_dir}") + getdownImagesBuildDir = string("${buildDir}/imagemagick/getdown") getdownSetAppBaseProperty = false // whether to pass the appbase and appdistdir to the application reportRsyncCommand = false jvlChannelName = CHANNEL.toLowerCase() install4jSuffix = CHANNEL.substring(0, 1).toUpperCase() + CHANNEL.substring(1).toLowerCase(); // BUILD -> Build install4jDMGDSStore = "${install4j_images_dir}/${install4j_dmg_ds_store}" - install4jDMGBackgroundImage = "${install4j_images_dir}/${install4j_dmg_background}" + install4jDMGBackgroundImageDir = "${install4j_images_dir}" + install4jDMGBackgroundImageBuildDir = "build/imagemagick/install4j" + install4jDMGBackgroundImageFile = "${install4j_dmg_background}" install4jInstallerName = "${jalview_name} Non-Release Installer" install4jExecutableName = install4j_executable_name install4jExtraScheme = "jalviewx" @@ -286,6 +298,23 @@ ext { install4jExtraScheme = "jalviewa" break + case ~/^DEVELOP-([\.\-\w]*)$/: + def suffix = Matcher.lastMatcher[0][1] + reportRsyncCommand = true + getdownSetAppBaseProperty = true + JALVIEW_VERSION=JALVIEW_VERSION+"-d${suffix}-${buildDate}" + install4jSuffix = "Develop ${suffix}" + install4jExtraScheme = "jalviewd" + install4jInstallerName = "${jalview_name} Develop ${suffix} Installer" + getdownChannelName = string("develop-${suffix}") + getdownChannelDir = string("${getdown_website_dir}/${getdownChannelName}") + getdownAppBaseDir = string("${jalviewDir}/${getdownChannelDir}/${JAVA_VERSION}") + getdownDir = string("${getdownChannelName}/${JAVA_VERSION}") + getdownAppBase = string("${getdown_channel_base}/${getdownDir}") + channelSuffix = string(suffix) + backgroundImageText = true + break + case "DEVELOP": reportRsyncCommand = true getdownSetAppBaseProperty = true @@ -513,6 +542,14 @@ ext { helpSourceDir = string("${helpParentDir}/${help_dir}") helpFile = string("${helpBuildDir}/${help_dir}/help.jhm") + convertBinary = null + convertBinaryExpectedLocation = imagemagick_convert + if (convertBinaryExpectedLocation.startsWith("~/")) { + convertBinaryExpectedLocation = System.getProperty("user.home") + convertBinaryExpectedLocation.substring(1) + } + if (file(convertBinaryExpectedLocation).exists()) { + convertBinary = convertBinaryExpectedLocation + } relativeBuildDir = file(jalviewDirAbsolutePath).toPath().relativize(buildDir.toPath()) jalviewjsBuildDir = string("${relativeBuildDir}/jalviewjs") @@ -1406,14 +1443,52 @@ def getMdSections(String content) { return sections } + +task copyHelp(type: Copy) { + def inputDir = helpSourceDir + def outputDir = "${helpBuildDir}/${help_dir}" + from(inputDir) { + include('**/*.txt') + include('**/*.md') + include('**/*.html') + include('**/*.hs') + include('**/*.xml') + include('**/*.jhm') + filter(ReplaceTokens, + beginToken: '$$', + endToken: '$$', + tokens: [ + 'Version-Rel': JALVIEW_VERSION, + 'Year-Rel': getDate("yyyy") + ] + ) + } + from(inputDir) { + exclude('**/*.txt') + exclude('**/*.md') + exclude('**/*.html') + exclude('**/*.hs') + exclude('**/*.xml') + exclude('**/*.jhm') + } + into outputDir + + inputs.dir(inputDir) + outputs.files(helpFile) + outputs.dir(outputDir) +} + + task releasesTemplates { group "help" description "Recreate whatsNew.html and releases.html from markdown files and templates in help" + dependsOn copyHelp + def releasesTemplateFile = file("${jalviewDir}/${releases_template}") def whatsnewTemplateFile = file("${jalviewDir}/${whatsnew_template}") - def releasesHtmlFile = file("${helpSourceDir}/${releases_html}") - def whatsnewHtmlFile = file("${helpSourceDir}/${whatsnew_html}") + def releasesHtmlFile = file("${helpBuildDir}/${help_dir}/${releases_html}") + def whatsnewHtmlFile = file("${helpBuildDir}/${help_dir}/${whatsnew_html}") def releasesMdDir = "${jalviewDir}/${releases_dir}" def whatsnewMdDir = "${jalviewDir}/${whatsnew_dir}" @@ -1475,18 +1550,18 @@ task releasesTemplates { } firstPart = false } - def displayDate = releaseFilesDates[rFile].format("d MMMMM yyyy") - - def lm = null - def rContentProcessed = "" - rContent.eachLine { line -> - if (lm = line =~ /^(\s*-)(\s*)(.*)$/) { - line = "${lm[0][1]}${lm[0][3]}${lm[0][2]}" - } else if (lm = line =~ /^###([^#]+.*)$/) { - line = "_${lm[0][1].trim()}_" - } - rContentProcessed += line + "\n" + def displayDate = releaseFilesDates[rFile].format("dd/MM/yyyy") + + def lm = null + def rContentProcessed = "" + rContent.eachLine { line -> + if (lm = line =~ /^(\s*-)(\s*)(.*)$/) { + line = "${lm[0][1]}${lm[0][3]}${lm[0][2]}" + } else if (lm = line =~ /^###([^#]+.*)$/) { + line = "_${lm[0][1].trim()}_" } + rContentProcessed += line + "\n" + } def rContentSections = getMdSections(rContentProcessed) def rVersion = versionTemplate @@ -1515,13 +1590,19 @@ task releasesTemplates { releasesHtmlFile.text = releasesTemplate if (whatsnewMdFile.exists()) { + def wnDisplayDate = releaseFilesDates[releaseMdFile] != null ? releaseFilesDates[releaseMdFile].format("dd MMMM yyyy") : "" def whatsnewMd = hugoTemplateSubstitutions(whatsnewMdFile.text) Node whatsnewNode = parser.parse(whatsnewMd) String whatsnewHtml = renderer.render(whatsnewNode) whatsnewHtml = whatsnewTemplateFile.text.replaceAll("__WHATS_NEW__", whatsnewHtml) whatsnewHtmlFile.text = hugoTemplateSubstitutions(whatsnewHtml, - [:] + [ + VERSION: JALVIEW_VERSION, + DISPLAY_DATE: wnDisplayDate + ] ) + } else if (gradle.taskGraph.hasTask(":linkCheck")) { + whatsnewHtmlFile.text = "Development build " + getDate("yyyy-MM-dd HH:mm:ss") } } @@ -1535,43 +1616,6 @@ task releasesTemplates { } -task copyHelp(type: Copy) { - dependsOn releasesTemplates - - def inputDir = helpSourceDir - def outputDir = "${helpBuildDir}/${help_dir}" - from(inputDir) { - include('**/*.txt') - include('**/*.md') - include('**/*.html') - include('**/*.hs') - include('**/*.xml') - include('**/*.jhm') - filter(ReplaceTokens, - beginToken: '$$', - endToken: '$$', - tokens: [ - 'Version-Rel': JALVIEW_VERSION, - 'Year-Rel': getDate("yyyy") - ] - ) - } - from(inputDir) { - exclude('**/*.txt') - exclude('**/*.md') - exclude('**/*.html') - exclude('**/*.hs') - exclude('**/*.xml') - exclude('**/*.jhm') - } - into outputDir - - inputs.dir(inputDir) - outputs.files(helpFile) - outputs.dir(outputDir) -} - - task copyResources(type: Copy) { group = "build" description = "Copy (and make text substitutions in) the resources dir to the build area" @@ -1611,7 +1655,19 @@ task copyChannelResources(type: Copy) { def inputDir = "${channelDir}/${resource_dir}" def outputDir = resourcesBuildDir - from inputDir + from(inputDir) { + include(channel_props) + filter(ReplaceTokens, + beginToken: '__', + endToken: '__', + tokens: [ + 'SUFFIX': channelSuffix + ] + ) + } + from(inputDir) { + exclude(channel_props) + } into outputDir inputs.dir(inputDir) @@ -1632,6 +1688,7 @@ task createBuildProperties(type: WriteProperties) { property "BUILD_DATE", getDate("HH:mm:ss dd MMMM yyyy") property "VERSION", JALVIEW_VERSION property "INSTALLATION", INSTALLATION+" git-commit:"+gitHash+" ["+gitBranch+"]" + property "JAVA_COMPILE_VERSION", JAVA_INTEGER_VERSION if (getdownSetAppBaseProperty) { property "GETDOWNAPPBASE", getdownAppBase property "GETDOWNAPPDISTDIR", getdownAppDistDir @@ -1669,6 +1726,7 @@ task prepare { dependsOn buildResources dependsOn copyDocs dependsOn copyHelp + dependsOn releasesTemplates dependsOn convertMdFiles dependsOn buildIndices } @@ -1741,7 +1799,7 @@ task linkCheck(type: JavaExec) { def helpLinksCheckerOutFile = file("${jalviewDir}/${utils_dir}/HelpLinksChecker.out") classpath = files("${jalviewDir}/${utils_dir}") main = "HelpLinksChecker" - workingDir = jalviewDir + workingDir = "${helpBuildDir}" args = [ "${helpBuildDir}/${help_dir}", "-nointernet" ] def outFOS = new FileOutputStream(helpLinksCheckerOutFile, false) // false == don't append @@ -1861,10 +1919,59 @@ shadowJar { minimize() } +task getdownImagesCopy() { + inputs.dir getdownImagesDir + outputs.dir getdownImagesBuildDir + + doFirst { + copy { + from(getdownImagesDir) { + include("*getdown*.png") + } + into getdownImagesBuildDir + } + } +} + +task getdownImagesProcess() { + dependsOn getdownImagesCopy + + doFirst { + if (backgroundImageText) { + if (convertBinary == null) { + throw new StopExecutionException("No ImageMagick convert binary installed at '${convertBinaryExpectedLocation}'") + } + if (!project.hasProperty("getdown_background_image_text_suffix_cmd")) { + throw new StopExecutionException("No property 'getdown_background_image_text_suffix_cmd' defined. See channel_gradle.properties for channel ${CHANNEL}") + } + fileTree(dir: getdownImagesBuildDir, include: "*background*.png").getFiles().each { file -> + exec { + executable convertBinary + args = [ + file.getPath(), + '-font', getdown_background_image_text_font, + '-fill', getdown_background_image_text_colour, + '-draw', sprintf(getdown_background_image_text_suffix_cmd, channelSuffix), + '-draw', sprintf(getdown_background_image_text_commit_cmd, "git-commit: ${gitHash}"), + '-draw', sprintf(getdown_background_image_text_date_cmd, getDate("yyyy-MM-dd HH:mm:ss")), + file.getPath() + ] +println("CMD=${commandLine}") + } + } + } + } +} + +task getdownImages() { + dependsOn getdownImagesProcess +} task getdownWebsite() { group = "distribution" description = "Create the getdown minimal app folder, and website folder for this version of jalview. Website folder also used for offline app installer" + + dependsOn getdownImages if (buildDist) { dependsOn makeDist } @@ -1887,6 +1994,13 @@ task getdownWebsite() { copy { from channelPropsFile + filter(ReplaceTokens, + beginToken: '__', + endToken: '__', + tokens: [ + 'SUFFIX': channelSuffix + ] + ) into getdownAppBaseDir } getdownWebsiteResourceFilenames += file(channelPropsFile).getName() @@ -1902,13 +2016,13 @@ task getdownWebsite() { if (getdownAltMultiJavaLocation != null && getdownAltMultiJavaLocation.length() > 0) { props.put("getdown_txt_multi_java_location", getdownAltMultiJavaLocation) } - if (getdownImagesDir != null && file(getdownImagesDir).exists()) { - props.put("getdown_txt_ui.background_image", "${getdownImagesDir}/${getdown_background_image}") - props.put("getdown_txt_ui.instant_background_image", "${getdownImagesDir}/${getdown_instant_background_image}") - props.put("getdown_txt_ui.error_background", "${getdownImagesDir}/${getdown_error_background}") - props.put("getdown_txt_ui.progress_image", "${getdownImagesDir}/${getdown_progress_image}") - props.put("getdown_txt_ui.icon", "${getdownImagesDir}/${getdown_icon}") - props.put("getdown_txt_ui.mac_dock_icon", "${getdownImagesDir}/${getdown_mac_dock_icon}") + if (getdownImagesBuildDir != null && file(getdownImagesBuildDir).exists()) { + props.put("getdown_txt_ui.background_image", "${getdownImagesBuildDir}/${getdown_background_image}") + props.put("getdown_txt_ui.instant_background_image", "${getdownImagesBuildDir}/${getdown_instant_background_image}") + props.put("getdown_txt_ui.error_background", "${getdownImagesBuildDir}/${getdown_error_background}") + props.put("getdown_txt_ui.progress_image", "${getdownImagesBuildDir}/${getdown_progress_image}") + props.put("getdown_txt_ui.icon", "${getdownImagesBuildDir}/${getdown_icon}") + props.put("getdown_txt_ui.mac_dock_icon", "${getdownImagesBuildDir}/${getdown_mac_dock_icon}") } props.put("getdown_txt_title", jalview_name) @@ -2364,12 +2478,59 @@ task cleanInstallersDataFiles { } } +task install4jDMGBackgroundImageCopy { + inputs.file "${install4jDMGBackgroundImageDir}/${install4jDMGBackgroundImageFile}" + outputs.dir "${install4jDMGBackgroundImageBuildDir}" + doFirst { + copy { + from(install4jDMGBackgroundImageDir) { + include(install4jDMGBackgroundImageFile) + } + into install4jDMGBackgroundImageBuildDir + } + } +} + +task install4jDMGBackgroundImageProcess { + dependsOn install4jDMGBackgroundImageCopy + + doFirst { + if (backgroundImageText) { + if (convertBinary == null) { + throw new StopExecutionException("No ImageMagick convert binary installed at '${convertBinaryExpectedLocation}'") + } + if (!project.hasProperty("install4j_background_image_text_suffix_cmd")) { + throw new StopExecutionException("No property 'install4j_background_image_text_suffix_cmd' defined. See channel_gradle.properties for channel ${CHANNEL}") + } + fileTree(dir: install4jDMGBackgroundImageBuildDir, include: "*.png").getFiles().each { file -> + exec { + executable convertBinary + args = [ + file.getPath(), + '-font', install4j_background_image_text_font, + '-fill', install4j_background_image_text_colour, + '-draw', sprintf(install4j_background_image_text_suffix_cmd, channelSuffix), + '-draw', sprintf(install4j_background_image_text_commit_cmd, "git-commit: ${gitHash}"), + '-draw', sprintf(install4j_background_image_text_date_cmd, getDate("yyyy-MM-dd HH:mm:ss")), + file.getPath() + ] + } + } + } + } +} + +task install4jDMGBackgroundImage { + dependsOn install4jDMGBackgroundImageProcess +} + task installerFiles(type: com.install4j.gradle.Install4jTask) { group = "distribution" description = "Create the install4j installers" dependsOn getdown dependsOn copyInstall4jTemplate dependsOn cleanInstallersDataFiles + dependsOn install4jDMGBackgroundImage projectFile = install4jConfFile @@ -2412,7 +2573,7 @@ task installerFiles(type: com.install4j.gradle.Install4jTask) { 'INTERNAL_ID': install4jInternalId, 'WINDOWS_APPLICATION_ID': install4jWinApplicationId, 'MACOS_DMG_DS_STORE': install4jDMGDSStore, - 'MACOS_DMG_BG_IMAGE': install4jDMGBackgroundImage, + 'MACOS_DMG_BG_IMAGE': "${install4jDMGBackgroundImageBuildDir}/${install4jDMGBackgroundImageFile}", 'WRAPPER_LINK': getdownWrapperLink, 'BASH_WRAPPER_SCRIPT': getdown_bash_wrapper_script, 'POWERSHELL_WRAPPER_SCRIPT': getdown_powershell_wrapper_script,