Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,7 @@ $RECYCLE.BIN/

# Gradle
.gradle
.kotlin
build/

# Gradle Patch
Expand Down
82 changes: 11 additions & 71 deletions api/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
@file:Suppress("GroovyAssignabilityCheck")

import net.minecraftforge.licenser.LicenseExtension
import net.minecraftforge.licenser.LicenseProperties
import org.gradle.kotlin.dsl.closureOf

plugins {
`java-library`
`maven-publish`
}

tasks.withType<JavaCompile> {
options.release.set(21)
options.encoding = "UTF-8"
alias(libs.plugins.gradle.licenser)
alias(libs.plugins.gradle.spotbugs)
id("net.elytrium.checkstyle")
id("net.elytrium.java.version")
id("net.elytrium.licence")
id("net.elytrium.module.info")
id("net.elytrium.publish")
id("net.elytrium.revision")
id("net.elytrium.spotbugs")
}

dependencies {
Expand All @@ -25,70 +25,10 @@ dependencies {
compileOnly(libs.tool.spotbugs.annotations)
}

extensions.configure<LicenseExtension> {
matching(
"**/mcprotocollib/**",
closureOf<LicenseProperties> {
setHeader(rootProject.file("HEADER_MCPROTOCOLLIB.txt"))
}
)
setHeader(file("HEADER.txt"))
}

tasks.named<Javadoc>("javadoc") {
options.encoding = "UTF-8"
(options as? StandardJavadocDocletOptions)?.apply {
source = "21"
links("https://docs.oracle.com/en/java/javase/11/docs/api/")
addStringOption("Xdoclint:none", "-quiet")
if (JavaVersion.current() >= JavaVersion.VERSION_1_9 && JavaVersion.current() < JavaVersion.VERSION_12) {
addBooleanOption("-no-module-directories", true)
}
}
}

val sourcesJar by tasks.registering(Jar::class) {
archiveClassifier.set("sources")
from(sourceSets.main.get().allSource)
}

val javadocJar by tasks.registering(Jar::class) {
archiveClassifier.set("javadoc")
from(tasks.javadoc)
}

publishing {
repositories {
maven {
credentials {
username = System.getenv("ELYTRIUM_MAVEN_USERNAME")
password = System.getenv("ELYTRIUM_MAVEN_PASSWORD")
}
name = "elytrium-repo"
url = uri("https://maven.elytrium.net/repo/")
}
}

publications.create<MavenPublication>("publication") {
from(components["java"])

artifact(javadocJar)
artifact(sourcesJar)
}
}

artifacts {
archives(javadocJar)
archives(sourcesJar)
}

@Suppress("UNCHECKED_CAST")
val getCurrentShortRevision = rootProject.extra["getCurrentShortRevision"] as () -> String


val versionStringProvider = provider {
if (version.toString().contains("-")) {
"${version} (git-${getCurrentShortRevision()})"
val currentShortRevision = currentShortRevisionProvider.getCurrentShortRevision()
"${version} (git-${currentShortRevision})"
} else {
version.toString()
}
Expand Down
40 changes: 40 additions & 0 deletions build-logic/convention/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
plugins {
`kotlin-dsl`
id("java-gradle-plugin")
}

dependencies {
implementation(files(libs.javaClass.superclass.protectionDomain.codeSource.location))
implementation(libs.gradle.spotbugs)
implementation(libs.gradle.licenser)
}

gradlePlugin {
plugins {
create("net.elytrium.java.version") {
id = name
implementationClass = "net.elytrium.gradle.plugin.JavaVersionPlugin"
}

create("net.elytrium.module.info") {
id = name
implementationClass = "net.elytrium.gradle.plugin.ModuleInfoPlugin"
}
create("net.elytrium.revision") {
id = name
implementationClass = "net.elytrium.gradle.plugin.revision.CurrentRevisionPlugin"
}
create("net.elytrium.spotbugs") {
id = name
implementationClass = "net.elytrium.gradle.plugin.SpotBugsConfigurationPlugin"
}
create("net.elytrium.checkstyle") {
id = name
implementationClass = "net.elytrium.gradle.plugin.CheckstyleConfigurationPlugin"
}
create("net.elytrium.licence") {
id = name
implementationClass = "net.elytrium.gradle.plugin.LicenceConfigurationPlugin"
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
plugins {
id("java")
id("java-library")
id("maven-publish")
}

tasks.named<Javadoc>("javadoc") {
options.encoding = "UTF-8"
(options as? StandardJavadocDocletOptions)?.apply {
source = "21"
links("https://docs.oracle.com/en/java/javase/11/docs/api/")
addStringOption("Xdoclint:none", "-quiet")
if (JavaVersion.current() >= JavaVersion.VERSION_1_9 && JavaVersion.current() < JavaVersion.VERSION_12) {
addBooleanOption("-no-module-directories", true)
}
}
}

val sourcesJar by tasks.registering(Jar::class) {
archiveClassifier.set("sources")
from(sourceSets.main.get().allSource)
}

val javadocJar by tasks.registering(Jar::class) {
archiveClassifier.set("javadoc")
from(tasks.javadoc)
}

publishing {
repositories {
maven {
credentials {
username = System.getenv("ELYTRIUM_MAVEN_USERNAME")
password = System.getenv("ELYTRIUM_MAVEN_PASSWORD")
}
name = "elytrium-repo"
url = uri("https://maven.elytrium.net/repo/")
}
}

publications.create<MavenPublication>("publication") {
from(components["java"])

artifact(javadocJar)
artifact(sourcesJar)
}
}

artifacts {
archives(javadocJar)
archives(sourcesJar)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package net.elytrium.gradle.plugin

import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.plugins.quality.CheckstyleExtension
import org.gradle.kotlin.dsl.configure

class CheckstyleConfigurationPlugin : Plugin<Project> {
override fun apply(target: Project) {
target.plugins.apply("checkstyle")
target.pluginManager.withPlugin("checkstyle") {
target.configure<CheckstyleExtension> {
toolVersion = "10.12.1"
configFile = target.file("${target.rootDir}/config/checkstyle/checkstyle.xml")
configProperties = mapOf("configDirectory" to "${target.rootDir}/config/checkstyle")
maxErrors = 0
maxWarnings = 0
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package net.elytrium.gradle.plugin

import org.gradle.api.JavaVersion
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.tasks.compile.JavaCompile
import org.gradle.kotlin.dsl.withType

class JavaVersionPlugin : Plugin<Project> {
override fun apply(target: Project) {
target.pluginManager.withPlugin("java") {
target.tasks.withType<JavaCompile> {
sourceCompatibility = JavaVersion.VERSION_21.toString()
targetCompatibility = JavaVersion.VERSION_21.toString()
options.release.set(21)
options.encoding = "UTF-8"
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package net.elytrium.gradle.plugin

import net.minecraftforge.licenser.LicenseExtension
import net.minecraftforge.licenser.LicenseProperties
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.kotlin.dsl.closureOf
import org.gradle.kotlin.dsl.configure
import java.io.File

class LicenceConfigurationPlugin : Plugin<Project> {

private fun getHeaderFile(target: Project): File {
return target.file("HEADER.txt")
.takeIf(File::exists)
?: target.rootProject.file("HEADER.txt")
}

override fun apply(target: Project) {
target.pluginManager.withPlugin("net.minecraftforge.licenser") {
target.extensions.configure<LicenseExtension> {
mapOf(
"**/mcprotocollib/**" to "HEADER_MCPROTOCOLLIB.txt",
"**/LoginListener.java" to "HEADER_MIXED.txt",
"**/KickListener.java" to "HEADER_MIXED.txt",
"**/LoginTasksQueue.java" to "HEADER_MIXED.txt",
"**/MinecraftLimitedCompressDecoder.java" to "HEADER_MIXED.txt"
).forEach { (pattern, licenceFile) ->
matching(
pattern,
closureOf<LicenseProperties> {
setHeader(target.rootProject.file(licenceFile))
}
)
}
setHeader(getHeaderFile(target))
}

}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package net.elytrium.gradle.plugin

import org.gradle.api.Plugin
import org.gradle.api.Project

class ModuleInfoPlugin : Plugin<Project> {
override fun apply(target: Project) {
target.version = "1.1.27-SNAPSHOT"
target.group = "net.elytrium.limboapi"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package net.elytrium.gradle.plugin

import com.github.spotbugs.snom.SpotBugsExtension
import com.github.spotbugs.snom.SpotBugsTask
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.kotlin.dsl.configure
import org.gradle.kotlin.dsl.withType

class SpotBugsConfigurationPlugin : Plugin<Project> {
override fun apply(target: Project) {
target.plugins.apply("com.github.spotbugs")

target.pluginManager.withPlugin("com.github.spotbugs") {
target.extensions.configure<SpotBugsExtension> {
val suppressionsFile = target.file("${target.rootDir}/config/spotbugs/suppressions.xml")
excludeFilter.set(suppressionsFile)
}

target.tasks.withType<SpotBugsTask> {
reports.create("html") {
required.set(true)
val outputFile = target.layout.buildDirectory.file("reports/spotbugs/main/spotbugs.html")
outputLocation.set(outputFile)
setStylesheet("fancy-hist.xsl")
}
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package net.elytrium.gradle.plugin.revision

open class CurrentRevisionExtensionProvider {
fun getCurrentShortRevision(): String {
val isWindows = System.getProperty("os.name")
.lowercase()
.contains("win")

val process = if (isWindows) {
ProcessBuilder("cmd", "/c", "git rev-parse --short HEAD")
} else {
ProcessBuilder("bash", "-c", "git rev-parse --short HEAD")
}
return process
.start()
.inputStream
.bufferedReader()
.readText()
.trim()
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package net.elytrium.gradle.plugin.revision

import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.kotlin.dsl.create

class CurrentRevisionPlugin : Plugin<Project> {
override fun apply(target: Project) {
target.extensions.create(
"currentShortRevisionProvider",
CurrentRevisionExtensionProvider::class
)
}
}
9 changes: 9 additions & 0 deletions build-logic/convention/src/main/kotlin/versionCatalog.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
@file:Suppress("Filename")

import org.gradle.accessors.dm.LibrariesForLibs
import org.gradle.api.Project
import org.gradle.kotlin.dsl.the

// Workaround for https://github.com/gradle/gradle/issues/15383
val Project.libs: LibrariesForLibs
get() = the<LibrariesForLibs>()
1 change: 1 addition & 0 deletions build-logic/gradle/wrapper
Loading
Loading