- .renderTable() = """
| Release Name | Channel | Version | IntelliJ IDEA Version | Release Date |
|--------------|---------|---------|-----------------------|--------------|
""" + sortedByDescending { it.version.toLooseVersion() }.joinToString("\n") {
val names = it.name.removePrefix("Android Studio").trim().split("|")
val channel = it.channel.run { "![$this][${this.lowercase()}]" }
val localDate = LocalDate.parse(it.date, DateTimeFormatter.ofPattern("MMMM d, yyyy", Locale.US))
val date = DateTimeFormatter.ofPattern("MMM d, yyyy", Locale.US).format(localDate).replace(" ", " ")
val version = "**${it.version}**
${it.build.replaceFirst("AI-", "AI‑")}
"
val platform = "**${it.platformVersion}**${it.platformBuild}
"
val tableName: String = when {
names.size == 2 -> "${names[0]}
${names[1]}
"
else -> "${names[0]}"
}
"| $tableName | $channel | $version | $platform | $date |"
}
fun String.toLooseVersion() = split('.').map { it.take(4).toInt() }.let {
val (major, minor, patch) = it + 0
SemVer(major, minor, patch)
}
fun file(path: String) = File(System.getenv("GITHUB_WORKSPACE") ?: "../../").resolve(path).also(File::createNewFile)
@Root(strict = false, name = "content")
data class Content(
@field:Attribute
var version: Int = 1,
@field:ElementList(inline = true, entry = "item")
var items: List- = mutableListOf(),
)
data class Item(
@field:Element
var name: String = "",
@field:Element
var build: String = "",
@field:Element
var version: String = "",
@field:Element
var channel: String = "",
@field:Element
var platformBuild: String? = null,
@field:Element
var platformVersion: String? = null,
@field:Element
var date: String = "",
@field:ElementList(inline = true, entry = "download")
var downloads: List = mutableListOf(),
)
data class Download(
@field:Element
var link: String = "",
@field:Element
var size: String = "",
@field:Element
var checksum: String = "",
)