X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=build.gradle;h=437c43a57da9ae2f762eda3e560913b220cfa434;hb=ce59cf0845b1420b9382d91e4df1de78c00885d1;hp=a917a0df69f19cf79f27888cb6d60b1c220016bc;hpb=816524fc72f16bbd9bdaadfccbd6214bd2acafa2;p=jalview.git diff --git a/build.gradle b/build.gradle index a917a0d..437c43a 100644 --- a/build.gradle +++ b/build.gradle @@ -51,9 +51,8 @@ plugins { id 'java' id 'application' id 'eclipse' - id "com.diffplug.spotless" version "6.18.0" //.gradle.spotless" "3.28.0" - id 'com.github.johnrengelman.shadow' version '8.1.1' // was 4.0.3 id "com.diffplug.gradle.spotless" version "3.28.0" + id 'com.github.johnrengelman.shadow' version '6.0.0' id 'com.install4j.gradle' version '10.0.3' id 'com.dorongold.task-tree' version '2.1.1' // only needed to display task dependency tree with gradle task1 [task2 ...] taskTree id 'com.palantir.git-version' version '0.13.0' apply false @@ -194,7 +193,6 @@ ext { testDir = string("${jalviewDir}/${bareTestSourceDir}") classesDir = string("${jalviewDir}/${classes_dir}") - outputDir = file(classesDir) // clover useClover = clover.equals("true") @@ -1285,15 +1283,15 @@ def mdFileComponents(File mdFile, def dateOnly=false) { } if (inFrontMatter) { def m = null - if (m == line =~ /^date:\s*(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2})/) { + if (m = line =~ /^date:\s*(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2})/) { map["date"] = new Date().parse("yyyy-MM-dd HH:mm:ss", m[0][1]) - } else if (m == line =~ /^date:\s*(\d{4}-\d{2}-\d{2})/) { + } else if (m = line =~ /^date:\s*(\d{4}-\d{2}-\d{2})/) { map["date"] = new Date().parse("yyyy-MM-dd", m[0][1]) - } else if (m == line =~ /^channel:\s*(\S+)/) { + } else if (m = line =~ /^channel:\s*(\S+)/) { map["channel"] = m[0][1] - } else if (m == line =~ /^version:\s*(\S+)/) { + } else if (m = line =~ /^version:\s*(\S+)/) { map["version"] = m[0][1] - } else if (m == line =~ /^\s*([^:]+)\s*:\s*(\S.*)/) { + } else if (m = line =~ /^\s*([^:]+)\s*:\s*(\S.*)/) { map[ m[0][1] ] = m[0][2] } if (dateOnly && map["date"] != null) { @@ -1352,7 +1350,7 @@ task hugoTemplates { def inSection = false changes.eachLine { line -> def m = null - if (m == line =~ /^##([^#].*)$/) { + if (m = line =~ /^##([^#].*)$/) { if (inSection) { changesHugo += "\n\n" } @@ -1362,7 +1360,7 @@ task hugoTemplates { section = section.replaceAll(/[^a-z0-9_\-]/, "") changesHugo += "
\n\n" inSection = true - } else if (m == line =~ /^(\s*-\s*)(.*?)()?\s*$/) { + } else if (m = line =~ /^(\s*-\s*)(.*?)()?\s*$/) { def comment = m[0][2].trim() if (comment != "") { comment = comment.replaceAll('"', """) @@ -1432,7 +1430,7 @@ def getMdSections(String content) { def sectionName = null content.eachLine { line -> def m = null - if (m == line =~ /^##([^#].*)$/) { + if (m = line =~ /^##([^#].*)$/) { if (sectionName != null) { sections[sectionName] = sectionContent sectionName = null @@ -1488,7 +1486,6 @@ task copyHelp(type: Copy) { } -/* task releasesTemplates { group "help" description "Recreate whatsNew.html and releases.html from markdown files and templates in help" @@ -1565,9 +1562,9 @@ task releasesTemplates { def lm = null def rContentProcessed = "" rContent.eachLine { line -> - if (lm == line =~ /^(\s*-)(\s*)(.*)$/) { + if (lm = line =~ /^(\s*-)(\s*)(.*)$/) { line = "${lm[0][1]}${lm[0][3]}${lm[0][2]}" - } else if (lm == line =~ /^###([^#]+.*)$/) { + } else if (lm = line =~ /^###([^#]+.*)$/) { line = "_${lm[0][1].trim()}_" } rContentProcessed += line + "\n" @@ -1625,7 +1622,6 @@ task releasesTemplates { outputs.file(whatsnewHtmlFile) } -*/ task copyResources(type: Copy) { group = "build" @@ -1687,7 +1683,6 @@ task copyChannelResources(type: Copy) { task createBuildProperties(type: WriteProperties) { dependsOn copyResources - dependsOn copyChannelResources group = "build" description = "Create the ${buildProperties} file" @@ -1711,7 +1706,6 @@ task createBuildProperties(type: WriteProperties) { task buildIndices(type: JavaExec) { dependsOn copyHelp - //dependsOn releasesTemplates classpath = sourceSets.main.compileClasspath main = "com.sun.java.help.search.Indexer" workingDir = "${helpBuildDir}/${help_dir}" @@ -1739,25 +1733,18 @@ task prepare { dependsOn buildResources dependsOn copyDocs dependsOn copyHelp - //dependsOn releasesTemplates + dependsOn releasesTemplates dependsOn convertMdFiles dependsOn buildIndices } -// random block of dependencies compileJava.dependsOn prepare run.dependsOn compileJava -//run.dependsOn prepare -compileTestJava.dependsOn compileJava // -compileTestJava.dependsOn buildIndices // -processResources.dependsOn copyChannelResources // -processResources.dependsOn copyResources // -processResources.dependsOn createBuildProperties // -processResources.dependsOn copyDocs // -processResources.dependsOn convertMdFiles // -processResources.dependsOn copyHelp // -processResources.dependsOn buildIndices // +compileTestJava.dependsOn compileJava + + + test { group = "Verification" description = "Runs all testTaskN tasks)" @@ -1782,6 +1769,7 @@ task testTask0(type: Test) { preserveOrder true useDefaultListeners=true } + timeout = Duration.ofMinutes(15) } /* separated tests */ @@ -1794,6 +1782,30 @@ task testTask1(type: Test) { preserveOrder true useDefaultListeners=true } + timeout = Duration.ofMinutes(5) +} + +task testTask2(type: Test) { + group = "Verification" + description = "Tests that need to be isolated from the main test run" + useTestNG() { + includeGroups name + excludeGroups testng_excluded_groups.split(",") + preserveOrder true + useDefaultListeners=true + } + timeout = Duration.ofMinutes(5) +} +task testTask3(type: Test) { + group = "Verification" + description = "Tests that need to be isolated from the main test run" + useTestNG() { + includeGroups name + excludeGroups testng_excluded_groups.split(",") + preserveOrder true + useDefaultListeners=true + } + timeout = Duration.ofMinutes(5) } /* insert more testTaskNs here -- change N to next digit or other string */ @@ -1810,6 +1822,7 @@ task testTaskN(type: Test) { } */ + /* * adapted from https://medium.com/@wasyl/pretty-tests-summary-in-gradle-744804dd676c * to summarise test results from all Test tasks @@ -1843,10 +1856,16 @@ tasks.withType(Test).matching {t -> t.getName().startsWith("testTask")}.all { te showExceptions true showCauses true showStackTraces true - + if (test_output) { + showStandardStreams true + } info.events = [ TestLogEvent.FAILED ] } + if (OperatingSystem.current().isMacOsX()) { + testTask.systemProperty "apple.awt.UIElement", "true" + testTask.environment "JAVA_TOOL_OPTIONS", "-Dapple.awt.UIElement=true" + } ignoreFailures = true // Always try to run all tests for all modules @@ -2018,7 +2037,6 @@ private static void printResults(allResults) { /* END of test tasks results summary */ -/* task compileLinkCheck(type: JavaCompile) { options.fork = true classpath = files("${jalviewDir}/${utils_dir}") @@ -2053,7 +2071,6 @@ task linkCheck(type: JavaExec) { inputs.dir(helpBuildDir) outputs.file(helpLinksCheckerOutFile) } -*/ // import the pubhtmlhelp target @@ -2068,14 +2085,10 @@ task cleanPackageDir(type: Delete) { } } -// block of dependencies -//compileTestJava.dependsOn compileLinkCheck // -//copyChannelResources.dependsOn compileLinkCheck // -//convertMdFiles.dependsOn compileLinkCheck // jar { dependsOn prepare - dependsOn //linkCheck + dependsOn linkCheck manifest { attributes "Main-Class": main_class, @@ -2086,7 +2099,7 @@ jar { } def outputDir = "${jalviewDir}/${package_dir}" - outputDir = file(outputDir) + destinationDirectory = file(outputDir) archiveFileName = rootProject.name+".jar" duplicatesStrategy "EXCLUDE" @@ -2142,25 +2155,59 @@ task cleanDist { } +task launcherJar(type: Jar) { + manifest { + attributes ( + "Main-Class": shadow_jar_main_class, + "Implementation-Version": JALVIEW_VERSION, + "Application-Name": applicationName + ) + } +} + shadowJar { group = "distribution" description = "Create a single jar file with all dependency libraries merged. Can be run with java -jar" if (buildDist) { dependsOn makeDist } - from ("${jalviewDir}/${libDistDir}") { - include("*.jar") - } + + def jarFiles = fileTree(dir: "${jalviewDir}/${libDistDir}", include: "*.jar", exclude: "regex.jar").getFiles() + def groovyJars = jarFiles.findAll {it1 -> file(it1).getName().startsWith("groovy-swing")} + def otherJars = jarFiles.findAll {it2 -> !file(it2).getName().startsWith("groovy-swing")} + from groovyJars + from otherJars + manifest { - attributes "Implementation-Version": JALVIEW_VERSION, - "Application-Name": applicationName + // shadowJar manifest must inheritFrom another Jar task. Can't set attributes here. + inheritFrom(project.tasks.launcherJar.manifest) + } + // we need to include the groovy-swing Include-Package for it to run in the shadowJar + doFirst { + def jarFileManifests = [] + groovyJars.each { jarFile -> + def mf = zipTree(jarFile).getFiles().find { it.getName().equals("MANIFEST.MF") } + if (mf != null) { + jarFileManifests += mf + } + } + manifest { + from (jarFileManifests) { + eachEntry { details -> + if (!details.key.equals("Import-Package")) { + details.exclude() + } + } + } + } } duplicatesStrategy "INCLUDE" + // this mainClassName is mandatory but gets ignored due to manifest created in doFirst{}. Set the Main-Class as an attribute in launcherJar instead mainClassName = shadow_jar_main_class mergeServiceFiles() - archiveClassifier = "all-"+JALVIEW_VERSION+"-j"+JAVA_VERSION + classifier = "all-"+JALVIEW_VERSION+"-j"+JAVA_VERSION minimize() } @@ -2211,9 +2258,9 @@ task getdownImages() { dependsOn getdownImagesProcess } -task getdownWebsite() { +task getdownWebsiteBuild() { 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" + description = "Create the getdown minimal app folder, and website folder for this version of jalview. Website folder also used for offline app installer. No digest is created." dependsOn getdownImages if (buildDist) { @@ -2325,7 +2372,7 @@ task getdownWebsite() { from s into "${getdownAppBaseDir}/${getdown_wrapper_script_dir}" } - getdownTextLines += "resource = ${getdown_wrapper_script_dir}/${script}" + getdownTextLines += "xresource = ${getdown_wrapper_script_dir}/${script}" } } @@ -2467,7 +2514,9 @@ task getdownDigestDir(type: JavaExec) { task getdownDigest(type: JavaExec) { group = "distribution" description = "Digest the getdown website folder" - dependsOn getdownWebsite + + dependsOn getdownWebsiteBuild + doFirst { classpath = files(getdownLauncher) } @@ -2500,12 +2549,19 @@ task getdown() { } } +task getdownWebsite { + group = "distribution" + description = "A task to create the whole getdown channel website dir including digest file" + + dependsOn getdownWebsiteBuild + dependsOn getdownDigest +} task getdownArchiveBuild() { group = "distribution" description = "Put files in the archive dir to go on the website" - dependsOn getdownWebsite + dependsOn getdownWebsiteBuild def v = "v${JALVIEW_VERSION_UNDERSCORES}" def vDir = "${getdownArchiveDir}/${v}" @@ -2552,6 +2608,14 @@ task getdownArchiveBuild() { } } + // the wrapper scripts dir + if ( file("${getdownAppBaseDir}/${getdown_wrapper_script_dir}").exists() ) { + copy { + from "${getdownAppBaseDir}/${getdown_wrapper_script_dir}" + into "${getdownFullArchiveDir}/${getdown_wrapper_script_dir}" + } + } + getdownArchiveTxt.write(getdownArchiveTextLines.join("\n")) def vLaunchJvl = file(getdownVersionLaunchJvl) @@ -3015,6 +3079,7 @@ task sourceDist(type: Tar) { into project.name def EXCLUDE_FILES=[ + "dist/*", "build/*", "bin/*", "test-output/",