From: Ben Soares Date: Thu, 5 Jan 2023 20:07:00 +0000 (+0000) Subject: JAL-4111 Use ImageMagick to add commit and build time text to DMG and getdown splash... X-Git-Tag: Release_2_11_3_0~26 X-Git-Url: http://source.jalview.org/gitweb/?a=commitdiff_plain;h=cbe954b4b4f24366ee1bd11aabe231e4da57fd43;p=jalview.git JAL-4111 Use ImageMagick to add commit and build time text to DMG and getdown splash images --- diff --git a/build.gradle b/build.gradle index e6b7e33..9b2fe27 100644 --- a/build.gradle +++ b/build.gradle @@ -38,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" } } @@ -113,7 +114,6 @@ ext { // Import channel_properties if (getdownChannelName.startsWith("develop-")) { channelDirName = "develop-SUFFIX" - println("SET propertiesChannelName to '${propertiesChannelName}'") } channelDir = string("${jalviewDir}/${channel_properties_dir}/${channelDirName}") channelGradleProperties = string("${channelDir}/channel_gradle.properties") @@ -204,7 +204,8 @@ ext { testSourceDir = useClover ? cloverTestInstrDir : testDir testClassesDir = useClover ? cloverTestClassesDir : "${jalviewDir}/${test_output_dir}" - channelSuffix = null + channelSuffix = "" + backgroundImageText = false getdownChannelDir = string("${getdown_website_dir}/${propertiesChannelName}") getdownAppBaseDir = string("${jalviewDir}/${getdownChannelDir}/${JAVA_VERSION}") getdownArchiveDir = string("${jalviewDir}/${getdown_archive_dir}") @@ -222,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" @@ -308,6 +312,7 @@ ext { getdownDir = string("${getdownChannelName}/${JAVA_VERSION}") getdownAppBase = string("${getdown_channel_base}/${getdownDir}") channelSuffix = string(suffix) + backgroundImageText = true break case "DEVELOP": @@ -537,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") @@ -1906,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 } @@ -1954,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) @@ -2416,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 @@ -2464,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, diff --git a/gradle.properties b/gradle.properties index acb65e9..e84802f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -172,6 +172,8 @@ getdown_rsync_dest = /Volumes/jalview/docroot/getdown reportRsyncCommand = RUNRSYNC=false +imagemagick_convert = ~/buildtools/imagemagick/bin/convert + bamboo_channelbase = https://builds.jalview.org/browse bamboo_planKey = bamboo_getdown_channel_suffix = /latest/artifact/shared/getdown-channel diff --git a/utils/channels/develop-SUFFIX/channel_gradle.properties b/utils/channels/develop-SUFFIX/channel_gradle.properties index 6e239c4..d98d91b 100644 --- a/utils/channels/develop-SUFFIX/channel_gradle.properties +++ b/utils/channels/develop-SUFFIX/channel_gradle.properties @@ -30,3 +30,16 @@ install4j_png_icon_file = jalview_develop_logo.png install4j_background = jalview_develop_logo_background_fade-640x480.png install4j_dmg_background = jalview_develop_dmg_background-72dpi.png install4j_dmg_ds_store = jalview_develop_dmg_DS_Store + +getdown_background_image_text_font = utils/fonts/Roboto.ttf +getdown_background_image_text_colour = #b4b4b4 +getdown_background_image_text_suffix_cmd = scale 4,4 text 102,36.3 '%s' +getdown_background_image_text_commit_cmd = text 408,168 '%s' +getdown_background_image_text_date_cmd = text 408,188 '%s' + +install4j_background_image_text_font = utils/fonts/Roboto.ttf +install4j_background_image_text_colour = #b4b4b4 +install4j_background_image_text_suffix_cmd = scale 2.4,2.4 text 81,91 '%s' +install4j_background_image_text_commit_cmd = text 18,250 '%s' +install4j_background_image_text_date_cmd = text 18,270 '%s' + diff --git a/utils/fonts/FiraSans-Regular.otf b/utils/fonts/FiraSans-Regular.otf new file mode 100755 index 0000000..fad0098 Binary files /dev/null and b/utils/fonts/FiraSans-Regular.otf differ diff --git a/utils/fonts/Roboto.ttf b/utils/fonts/Roboto.ttf new file mode 100644 index 0000000..0a1657d Binary files /dev/null and b/utils/fonts/Roboto.ttf differ