JAL-4004 gradle releasesTemplates builds releases.html
[jalview.git] / build.gradle
index 17aec88..958343b 100644 (file)
@@ -2589,6 +2589,9 @@ def getMdSections(String content) {
       sectionContent += line+"\n"
     }
   }
+  if (sectionContent != null) {
+    sections[sectionName] = sectionContent
+  }
   return sections
 }
 
@@ -2611,34 +2614,66 @@ task releasesTemplates {
     def m = releasesTemplate =~ /(?s)__VERSION_LOOP_START__(.*)__VERSION_LOOP_END__/
     def versionTemplate = m[0][1]
 
-    def versions = ""
-    releaseFiles.each { rFile ->
+    MutableDataSet options = new MutableDataSet()
+
+    def extensions = new ArrayList<>()
+    options.set(Parser.EXTENSIONS, extensions)
+    options.set(Parser.HTML_BLOCK_COMMENT_ONLY_FULL_LINE, true)
+
+    Parser parser = Parser.builder(options).build()
+    HtmlRenderer renderer = HtmlRenderer.builder(options).build()
+
+    def actualVersions = releaseFiles.collect { rf ->
+      def (rfMap, rfContent) = mdFileComponents(rf)
+      return rfMap.version
+    }
+    def versionsHtml = ""
+    def linkedVersions = []
+    releaseFiles.reverse().each { rFile ->
       def (rMap, rContent) = mdFileComponents(rFile)
 
-      def vm = JALVIEW_VERSION =~ /^(.+)\.(\d+)$/
-      def branchVersion = m[0][1]
-      def minorVersion = m[0][2]
+      def versionLink = ""
+      def partialVersion = ""
+      def firstPart = true
+      rMap.version.split("\\.").each { part ->
+        def displayPart = ( firstPart ? "" : "." ) + part
+        partialVersion += displayPart
+        if (
+            linkedVersions.contains(partialVersion)
+            || ( actualVersions.contains(partialVersion) && partialVersion != rMap.version )
+            ) {
+          versionLink += displayPart
+        } else {
+          versionLink += "<a id=\"Jalview.${partialVersion}\">${displayPart}</a>"
+          linkedVersions += partialVersion
+        }
+        firstPart = false
+      }
       def displayDate = releaseFilesDates[rFile].format("d MMMMM yyyy")
 
       def rContentSections = getMdSections(rContent)
-
       def rVersion = versionTemplate
       if (rVersion != "") {
+        Node newFeaturesNode = parser.parse(rContentSections["new_features"])
+        String newFeaturesHtml = renderer.render(newFeaturesNode)
+        Node issuesResolvedNode = parser.parse(rContentSections["issues_resolved"])
+        String issuesResolvedHtml = renderer.render(issuesResolvedNode)
         rVersion = hugoTemplateSubstitutions(rVersion,
           [
-            BRANCH_VERSION: branchVersion,
-            MINOR_VERSION: minorVersion,
+            VERSION: rMap.version,
+            VERSION_LINK: versionLink,
             DISPLAY_DATE: displayDate,
-            NEW_FEATURES: rContentSections["new_features"],
-            KNOWN_ISSUES: rContentSections["known_issues"]
+            NEW_FEATURES: newFeaturesHtml,
+            ISSUES_RESOLVED: issuesResolvedHtml
           ]
         )
+        versionsHtml += rVersion
       }
-
-      println("RVERSION='$rVersion'")
-
-
     }
+
+    releasesTemplate = releasesTemplate.replaceAll("(?s)__VERSION_LOOP_START__.*__VERSION_LOOP_END__", versionsHtml)
+    releasesTemplate = hugoTemplateSubstitutions(releasesTemplate)
+    releasesHtmlFile.text = releasesTemplate
   }
 
   inputs.file(releasesTemplateFile)