Skip to content

Commit

Permalink
Merge pull request #448 from SethTisue/scala3
Browse files Browse the repository at this point in the history
Scala 3.3.0 (was 2.13.11)
  • Loading branch information
SethTisue authored Jul 11, 2023
2 parents 58a5ddf + e9f0e42 commit cab89fb
Show file tree
Hide file tree
Showing 8 changed files with 86 additions and 236 deletions.
4 changes: 2 additions & 2 deletions build.sbt
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
name := "make-release-notes"

scalaVersion := "2.13.11"
scalacOptions ++= Seq("-feature", "-deprecation", "-Werror")
scalaVersion := "3.3.0"
scalacOptions ++= Seq("-feature", "-deprecation", "-Werror", "-source:future")

libraryDependencies ++= Seq(
"org.pegdown" % "pegdown" % "1.6.0",
Expand Down
72 changes: 0 additions & 72 deletions src/main/scala/CommunityProjects.scala

This file was deleted.

87 changes: 40 additions & 47 deletions src/main/scala/GitInfo.scala
Original file line number Diff line number Diff line change
@@ -1,45 +1,42 @@
import scala.collection.parallel.CollectionConverters._ // for .par
import scala.collection.parallel.CollectionConverters.* // for .par

case class Commit(sha: String, author: String, header: String, body: String) {
case class Commit(sha: String, author: String, header: String, body: String):
def trimmedHeader = header.take(80)
override def toString = " * " + sha + " (" + author + ") " + header + " - " + body.take(5) + " ..."
}

/** Gobal functions for dealing with git. */
object GitHelper {
def processGitCommits(gitDir: java.io.File, previousTag: String, currentTag: String): IndexedSeq[Commit] = {
import sys.process._
/** Global functions for dealing with git. */
object GitHelper:
def processGitCommits(gitDir: java.io.File, previousTag: String, currentTag: String): IndexedSeq[Commit] =
import sys.process.*
val gitFormat = "%h %s" // sha and subject
val log = Process(Seq("git", "--no-pager", "log", s"${previousTag}..${currentTag}", "--format=format:" + gitFormat, "--no-merges", "--topo-order"), gitDir).lazyLines

log.par.map(_.split(" ", 2)).collect {
case Array(sha, title) =>
val (author :: body) = Process(Seq("git", "--no-pager", "show", sha, "--format=format:%aN%n%b", "--quiet"), gitDir).lazyLines.toList
val author :: body =
Process(Seq("git", "--no-pager", "show", sha, "--format=format:%aN%n%b", "--quiet"), gitDir)
.lazyLines.toList: @unchecked
Commit(sha, author, title, body.mkString("\n"))
}.toVector
}

def hasFixins(msg: String): Boolean = (
(msg contains "SI-") /*&& ((msg.toLowerCase contains "fix") || (msg.toLowerCase contains "close"))*/
msg.contains("SI-") /*&& ((msg.toLowerCase contains "fix") || msg.toLowerCase.contains("close"))*/
)

val siPattern = java.util.regex.Pattern.compile("(SI-[0-9]+)")

def fixLinks(commit: Commit)(implicit targetLanguage: TargetLanguage): String = {
def fixLinks(commit: Commit)(implicit targetLanguage: TargetLanguage): String =
val searchString = commit.body + commit.header
val m = siPattern matcher searchString
val m = siPattern.matcher(searchString)
val issues = new collection.mutable.ArrayBuffer[String]
while (m.find()) {
issues += (m group 1)
}
while m.find() do
issues += (m.group(1))
issues map (si => targetLanguage.createHyperLink(s"https://issues.scala-lang.org/browse/$si", si)) mkString ", "
}

def htmlEncode(s: String) = org.apache.commons.text.StringEscapeUtils.escapeHtml4(s)
}

class GitInfo(gitDir: java.io.File, val previousTag: String, val currentTag: String)(implicit targetLanguage: TargetLanguage) {
import GitHelper._
class GitInfo(gitDir: java.io.File, val previousTag: String, val currentTag: String)(implicit targetLanguage: TargetLanguage):
import GitHelper.*
val commits = processGitCommits(gitDir, previousTag, currentTag)

val authors: Seq[(String, Int)] =
Expand All @@ -50,50 +47,46 @@ class GitInfo(gitDir: java.io.File, val previousTag: String, val currentTag: Str
.sortBy(_._2)

val fixCommits =
for {
for
commit <- commits
searchString = commit.body + commit.header
if hasFixins(searchString)
} yield commit
yield commit

private def commitShaLink(sha: String) =
targetLanguage.createHyperLink(s"https://github.com/scala/scala/commit/${sha}", sha)

private def blankLine(): String = targetLanguage.blankLine()
private def header4(msg: String): String = targetLanguage.header4(msg)

def renderCommitterList: String = {
def renderCommitterList: String =
val sb = new StringBuffer
sb append blankLine()
sb append header4("A big thank you to all the contributors!")
sb append targetLanguage.tableHeader("#", "Author")
for ((author, count) <- authors)
sb append targetLanguage.tableRow(count.toString, author)
sb append targetLanguage.tableEnd
sb.append(blankLine())
sb.append(header4("A big thank you to all the contributors!"))
sb.append(targetLanguage.tableHeader("#", "Author"))
for (author, count) <- authors do
sb.append(targetLanguage.tableRow(count.toString, author))
sb.append(targetLanguage.tableEnd)
sb.toString
}

def renderCommitList: String = {
def renderCommitList: String =
val sb = new StringBuffer
sb append blankLine()
sb append header4("Complete commit list!")
sb append targetLanguage.tableHeader("sha", "Title")
for (commit <- commits)
sb append targetLanguage.tableRow(commitShaLink(commit.sha), commit.trimmedHeader)
sb append targetLanguage.tableEnd
sb.append(blankLine())
sb.append(header4("Complete commit list!"))
sb.append(targetLanguage.tableHeader("sha", "Title"))
for commit <- commits do
sb.append(targetLanguage.tableRow(commitShaLink(commit.sha), commit.trimmedHeader))
sb.append(targetLanguage.tableEnd)
sb.toString
}

def renderFixedIssues: String = {
def renderFixedIssues: String =
val sb = new StringBuffer
sb append blankLine()
sb append header4(s"Commits and the issues they fixed since ${previousTag}")
sb append targetLanguage.tableHeader("Issue(s)", "Commit", "Message")
for (commit <- fixCommits)
sb append targetLanguage.tableRow(fixLinks(commit), commitShaLink(commit.sha), commit.trimmedHeader)
sb append targetLanguage.tableEnd
sb append blankLine()
sb.append(blankLine())
sb.append(header4(s"Commits and the issues they fixed since ${previousTag}"))
sb.append(targetLanguage.tableHeader("Issue(s)", "Commit", "Message"))
for commit <- fixCommits do
sb.append(targetLanguage.tableRow(fixLinks(commit), commitShaLink(commit.sha), commit.trimmedHeader))
sb.append(targetLanguage.tableEnd)
sb.append(blankLine())
sb.toString
}

}
9 changes: 0 additions & 9 deletions src/main/scala/IO.scala

This file was deleted.

39 changes: 0 additions & 39 deletions src/main/scala/JiraIssues.scala

This file was deleted.

33 changes: 13 additions & 20 deletions src/main/scala/MakeDownloadPage.scala
Original file line number Diff line number Diff line change
@@ -1,21 +1,21 @@
import java.util.Date
import java.text._
import scala.concurrent._
import scala.concurrent.duration._
import java.text.*
import scala.concurrent.*
import scala.concurrent.duration.*
import ExecutionContext.Implicits.global
import java.nio.file.{Files, Paths}

class MakeDownloadPage(version: String, releaseDate: Date = new Date()) {
def write() = {
class MakeDownloadPage(version: String, releaseDate: Date = new Date()):
def write() =
require(!version.startsWith("v"), "version should *not* start with 'v'")
val fileName = s"${format("yyyy-MM-dd")}-$version.md"
IO.write(new java.io.File(fileName), page)
Files.write(Paths.get(fileName), page.getBytes)
println(s"cp $fileName ../scala-lang/_downloads/")
println("# to prepare your scala-lang PR")
}

// get size of `url` without actually downloading it
def humanSize(url: String): Future[String] = Future {
import scala.sys.process._
def humanSize(url: String): Future[String] = Future:
import scala.sys.process.*
println("## fetching size of "+ url)
scala.util.Try {
val responseHeader = Process(s"curl -m 5 --silent -D - -X HEAD $url").lazyLines
Expand All @@ -26,27 +26,23 @@ class MakeDownloadPage(version: String, releaseDate: Date = new Date()) {
case meh if meh < 1024 => ""
case kilo if kilo < 1024*1024 => f"${bytes.toDouble/1024}%.0fK"
case big => f"${bytes.toDouble/(1024*1024)}%.2fM"
})} match {
})} match
case Some((status, humanSize)) if isGoodStatus(status) =>
humanSize
case _ =>
println(s"## warning: could not fetch $url")
""
}
}

def isGoodStatus(status: String): Boolean =
Seq("200 OK", "302 found", "HTTP/2 200").exists(status.contains)

def resourceArchive(cls: String, name: String, ext: String, desc: String): Future[String] = {
def resourceArchive(cls: String, name: String, ext: String, desc: String): Future[String] =
val fileName = s"$name-$version.$ext"
val fullUrl = s"https://downloads.lightbend.com/scala/$version/$fileName"
resource(cls, fileName, desc, fullUrl, fullUrl)
}

def resource(cls: String, fileName: String, desc: String, fullUrl: String, urlForSize: String): Future[String] = {
def resource(cls: String, fileName: String, desc: String, fullUrl: String, urlForSize: String): Future[String] =
humanSize(urlForSize) map (size => s"""[$cls, "$fileName", "$fullUrl", "$desc", "$size"]""")
}

def defaultClass = """"-non-main-sys""""
def unixClass = """"-main-unixsys""""
Expand Down Expand Up @@ -74,8 +70,7 @@ class MakeDownloadPage(version: String, releaseDate: Date = new Date()) {
)).map(_.mkString(",\n ")), 30.seconds)

// note: first and last lines must be exactly "---"
def page: String = {
s"""---
def page: String = s"""---
title: Scala $version
start: ${format("dd MMMM yyyy")}
layout: downloadpage
Expand All @@ -90,5 +85,3 @@ resources: [
]
---
"""
}
}
Loading

0 comments on commit cab89fb

Please sign in to comment.