mirror of
https://github.com/SquidDev-CC/CC-Tweaked
synced 2025-10-22 17:37:38 +00:00

Just ran[^1] over the codebase. Turns out we'd duplicated one of the changelog entries entirely - I suspect due to a version merge gone wrong! [^1]: https://github.com/crate-ci/typos/
65 lines
2.1 KiB
Kotlin
65 lines
2.1 KiB
Kotlin
package cc.tweaked.gradle
|
|
|
|
import org.gradle.api.DefaultTask
|
|
import org.gradle.api.GradleException
|
|
import org.gradle.api.file.RegularFileProperty
|
|
import org.gradle.api.provider.Property
|
|
import org.gradle.api.tasks.*
|
|
import org.gradle.language.base.plugins.LifecycleBasePlugin
|
|
|
|
/**
|
|
* Checks the `changelog.md` and `whatsnew.md` files are well-formed.
|
|
*/
|
|
@CacheableTask
|
|
abstract class CheckChangelog : DefaultTask() {
|
|
init {
|
|
group = LifecycleBasePlugin.VERIFICATION_GROUP
|
|
description = "Verifies the changelog and whatsnew file are consistent."
|
|
}
|
|
|
|
@get:Input
|
|
abstract val version: Property<String>
|
|
|
|
@get:InputFile
|
|
@get:PathSensitive(PathSensitivity.NONE)
|
|
abstract val changelog: RegularFileProperty
|
|
|
|
@get:InputFile
|
|
@get:PathSensitive(PathSensitivity.NONE)
|
|
abstract val whatsNew: RegularFileProperty
|
|
|
|
@TaskAction
|
|
fun check() {
|
|
val version = version.get()
|
|
|
|
var ok = true
|
|
|
|
// Check we're targeting the current version
|
|
var whatsNew = whatsNew.get().asFile.readLines()
|
|
if (whatsNew[0] != "New features in CC: Tweaked $version") {
|
|
ok = false
|
|
logger.error("Expected `whatsnew.md' to target $version.")
|
|
}
|
|
|
|
// Check "read more" exists and trim it
|
|
val idx = whatsNew.indexOfFirst { it == "Type \"help changelog\" to see the full version history." }
|
|
if (idx == -1) {
|
|
ok = false
|
|
logger.error("Must mention the changelog in whatsnew.md")
|
|
} else {
|
|
whatsNew = whatsNew.slice(0 until idx)
|
|
}
|
|
|
|
// Check whatsnew and changelog match.
|
|
val expectedChangelog = sequenceOf("# ${whatsNew[0]}") + whatsNew.slice(1 until whatsNew.size).asSequence()
|
|
val changelog = changelog.get().asFile.readLines()
|
|
val mismatch = expectedChangelog.zip(changelog.asSequence()).filter { (a, b) -> a != b }.firstOrNull()
|
|
if (mismatch != null) {
|
|
ok = false
|
|
logger.error("whatsnew and changelog are not in sync")
|
|
}
|
|
|
|
if (!ok) throw GradleException("Could not check release")
|
|
}
|
|
}
|