BlueMap/BlueMapCore/build.gradle.kts
Carey Metcalfe 1eb9982357
Allow the build to work in cases where the current repo has no tags (#434)
When forking the project on GitHub there is an option to only fork the
main repo branch. This means that the forked repo will not have any tags
in it which currently causes the build system to fail.

This change adds a fallback in the case that there are no tags to
building a version named "-dev-dirty".
2023-05-19 12:14:31 +02:00

154 lines
4.2 KiB
Plaintext

import java.io.IOException
import java.util.concurrent.TimeoutException
plugins {
java
`java-library`
`maven-publish`
id("com.diffplug.spotless") version "6.1.2"
}
fun String.runCommand(): String = ProcessBuilder(split("\\s(?=(?:[^'\"`]*(['\"`])[^'\"`]*\\1)*[^'\"`]*$)".toRegex()))
.directory(projectDir)
.redirectOutput(ProcessBuilder.Redirect.PIPE)
.redirectError(ProcessBuilder.Redirect.PIPE)
.start()
.apply {
if (!waitFor(10, TimeUnit.SECONDS)) {
throw TimeoutException("Failed to execute command: '" + this@runCommand + "'")
}
}
.run {
val error = errorStream.bufferedReader().readText().trim()
if (error.isNotEmpty()) {
throw IOException(error)
}
inputStream.bufferedReader().readText().trim()
}
val gitHash = "git rev-parse --verify HEAD".runCommand()
val clean = "git status --porcelain".runCommand().isEmpty()
val lastTag = if ("git tag".runCommand().isEmpty()) "" else "git describe --tags --abbrev=0".runCommand()
val lastVersion = if (lastTag.isEmpty()) "dev" else lastTag.substring(1) // remove the leading 'v'
val commits = "git rev-list --count $lastTag..HEAD".runCommand()
println("Git hash: $gitHash" + if (clean) "" else " (dirty)")
group = "de.bluecolored.bluemap.core"
version = lastVersion +
(if (commits == "0") "" else "-$commits") +
(if (clean) "" else "-dirty")
System.setProperty("bluemap.version", version.toString())
println("Version: $version")
val javaTarget = 11
java {
sourceCompatibility = JavaVersion.toVersion(javaTarget)
targetCompatibility = JavaVersion.toVersion(javaTarget)
}
repositories {
mavenCentral()
maven {
setUrl("https://jitpack.io")
}
}
@Suppress("GradlePackageUpdate")
dependencies {
api ("com.github.ben-manes.caffeine:caffeine:2.8.5")
api ("org.apache.commons:commons-lang3:3.6")
api ("commons-io:commons-io:2.5")
api ("org.spongepowered:configurate-hocon:4.1.2")
api ("org.spongepowered:configurate-gson:4.1.2")
api ("com.github.Querz:NBT:4.0")
api ("org.apache.commons:commons-dbcp2:2.9.0")
api ("io.airlift:aircompressor:0.24")
api ("de.bluecolored.bluemap.api:BlueMapAPI")
compileOnly ("org.jetbrains:annotations:23.0.0")
testImplementation ("org.junit.jupiter:junit-jupiter:5.8.2")
testRuntimeOnly ("org.junit.jupiter:junit-jupiter-engine:5.8.2")
}
spotless {
java {
target ("src/*/java/**/*.java")
licenseHeaderFile("../HEADER")
indentWithSpaces()
trimTrailingWhitespace()
}
}
tasks.withType(JavaCompile::class).configureEach {
options.apply {
encoding = "utf-8"
}
}
tasks.withType(AbstractArchiveTask::class).configureEach {
isReproducibleFileOrder = true
isPreserveFileTimestamps = false
}
tasks.test {
useJUnitPlatform()
}
tasks.processResources {
outputs.upToDateWhen { false }
from("src/main/resources") {
include("de/bluecolored/bluemap/version.json")
duplicatesStrategy = DuplicatesStrategy.INCLUDE
expand (
"version" to project.version,
"gitHash" to gitHash + if (clean) "" else " (dirty)",
)
}
}
//resource Extensions
val resourceIds: Array<String> = arrayOf(
"1_13", "1_15", "1_16", "1_18"
)
tasks.register("zipResourceExtensions") {
resourceIds.forEach {
dependsOn("zipResourceExtensions$it")
}
}
resourceIds.forEach {
zipResourcesTask(it)
}
fun zipResourcesTask(resourceId: String) {
tasks.register ("zipResourceExtensions$resourceId", type = Zip::class) {
from(fileTree("src/main/resourceExtensions/mc$resourceId"))
archiveFileName.set("resourceExtensions.zip")
destinationDirectory.set(file("src/main/resources/de/bluecolored/bluemap/mc$resourceId/"))
outputs.upToDateWhen{ false }
}
}
//always update the zip before build
tasks.processResources {
dependsOn("zipResourceExtensions")
}
publishing {
publications {
create<MavenPublication>("maven") {
groupId = project.group.toString()
artifactId = project.name
version = project.version.toString()
from(components["java"])
}
}
}