mirror of
https://github.com/architectury/architectury-loom.git
synced 2026-03-28 04:07:01 -05:00
344 lines
8.4 KiB
Groovy
344 lines
8.4 KiB
Groovy
plugins {
|
|
id 'java'
|
|
id 'maven-publish'
|
|
id 'java-gradle-plugin'
|
|
id 'idea'
|
|
id 'eclipse'
|
|
id 'groovy'
|
|
id 'checkstyle'
|
|
id 'jacoco'
|
|
id 'codenarc'
|
|
id "com.diffplug.spotless" version "5.14.1"
|
|
id 'net.kyori.blossom' version '1.3.0'
|
|
id 'me.shedaniel.java-version-bridge' version '1.0-SNAPSHOT'
|
|
}
|
|
|
|
sourceCompatibility = 16
|
|
targetCompatibility = 16
|
|
|
|
tasks.withType(JavaCompile).configureEach {
|
|
it.options.encoding = "UTF-8"
|
|
it.options.release = 16
|
|
}
|
|
|
|
group = "dev.architectury"
|
|
archivesBaseName = project.name
|
|
def baseVersion = '0.10.0'
|
|
def runNumber = System.getenv("GITHUB_RUN_NUMBER") ?: "9999"
|
|
|
|
def isSnapshot = System.getenv("PR_NUM") != null
|
|
|
|
def buildNum = "release #$runNumber"
|
|
|
|
if (!isSnapshot) {
|
|
version = baseVersion + "." + runNumber
|
|
} else {
|
|
version = baseVersion + "-PR." + System.getenv("PR_NUM") + "." + runNumber
|
|
}
|
|
|
|
logger.lifecycle(":building plugin v${version}")
|
|
|
|
repositories {
|
|
mavenCentral()
|
|
maven { url "https://maven.fabricmc.net/" }
|
|
maven { url "https://maven.architectury.dev/" }
|
|
maven {
|
|
url "https://maven.minecraftforge.net/"
|
|
content {
|
|
excludeGroupByRegex "org\\.eclipse\\.?.*"
|
|
}
|
|
}
|
|
mavenLocal()
|
|
}
|
|
|
|
configurations {
|
|
bootstrap {
|
|
transitive false
|
|
}
|
|
compileClasspath.extendsFrom bootstrap
|
|
runtimeClasspath.extendsFrom bootstrap
|
|
testRuntimeClasspath.extendsFrom bootstrap
|
|
}
|
|
|
|
configurations.all {
|
|
resolutionStrategy {
|
|
// I am sorry, for now
|
|
// failOnNonReproducibleResolution()
|
|
}
|
|
}
|
|
|
|
dependencies {
|
|
implementation gradleApi()
|
|
|
|
bootstrap project(":bootstrap")
|
|
|
|
// libraries
|
|
implementation ('commons-io:commons-io:2.8.0')
|
|
implementation ('com.google.code.gson:gson:2.8.8')
|
|
implementation ('com.fasterxml.jackson.core:jackson-databind:2.12.5')
|
|
implementation ('com.google.guava:guava:30.1.1-jre')
|
|
implementation ('org.ow2.asm:asm:9.2')
|
|
implementation ('org.ow2.asm:asm-analysis:9.2')
|
|
implementation ('org.ow2.asm:asm-commons:9.2')
|
|
implementation ('org.ow2.asm:asm-tree:9.2')
|
|
implementation ('org.ow2.asm:asm-util:9.2')
|
|
implementation ('me.tongfei:progressbar:0.9.0')
|
|
|
|
// game handling utils
|
|
implementation ('net.fabricmc:stitch:0.6.1') {
|
|
exclude module: 'mercury'
|
|
exclude module: 'enigma'
|
|
}
|
|
|
|
// tinyfile management
|
|
implementation ('dev.architectury:tiny-remapper:1.5.16')
|
|
implementation 'net.fabricmc:access-widener:2.1.0'
|
|
implementation 'net.fabricmc:mapping-io:0.2.1'
|
|
|
|
implementation ('net.fabricmc:lorenz-tiny:4.0.2') {
|
|
transitive = false
|
|
}
|
|
implementation "dev.architectury:refmap-remapper:1.0.5"
|
|
|
|
// decompilers
|
|
implementation ('net.fabricmc:fabric-fernflower:1.4.1')
|
|
implementation ('net.fabricmc:cfr:0.0.9')
|
|
|
|
// source code remapping
|
|
implementation ('dev.architectury:mercury:0.1.1.11')
|
|
|
|
|
|
// Kapt integration
|
|
compileOnly('org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.21')
|
|
|
|
// Forge patches
|
|
implementation ('net.minecraftforge:installertools:1.2.0')
|
|
implementation ('net.minecraftforge:binarypatcher:1.1.1')
|
|
implementation ('org.cadixdev:lorenz:0.5.3')
|
|
implementation ('org.cadixdev:lorenz-asm:0.5.3')
|
|
implementation ('de.oceanlabs.mcp:mcinjector:3.8.0')
|
|
implementation ('com.opencsv:opencsv:5.4')
|
|
|
|
// Testing
|
|
testImplementation(gradleTestKit())
|
|
testImplementation('org.spockframework:spock-core:2.0-groovy-3.0') {
|
|
exclude module: 'groovy-all'
|
|
}
|
|
testImplementation 'io.javalin:javalin:3.13.11'
|
|
testImplementation 'net.fabricmc:fabric-installer:0.9.0'
|
|
|
|
compileOnly 'org.jetbrains:annotations:22.0.0'
|
|
}
|
|
|
|
blossom {
|
|
replaceToken '$LOOM_VERSION', version
|
|
}
|
|
|
|
jar {
|
|
classifier 'jar'
|
|
}
|
|
|
|
task mainJar(type: Jar, dependsOn: jar) {
|
|
from zipTree(jar.archiveFile)
|
|
archiveClassifier = "main"
|
|
|
|
from configurations.bootstrap.collect { it.isDirectory() ? it : zipTree(it) }
|
|
}
|
|
|
|
task downgradeJava(type: BridgeTransformingTask, dependsOn: mainJar) {
|
|
from zipTree(mainJar.archiveFile)
|
|
fromVersion = JavaVersion.VERSION_16
|
|
toVersion = JavaVersion.VERSION_11
|
|
classpath.from configurations.compileClasspath
|
|
flags.add "insertRecordConstructorProperties"
|
|
|
|
manifest {
|
|
attributes 'Implementation-Version': project.version
|
|
}
|
|
}
|
|
|
|
task sourcesJar(type: Jar, dependsOn: classes) {
|
|
archiveClassifier = 'sources'
|
|
from sourceSets.main.allSource
|
|
}
|
|
|
|
task javadocJar(type: Jar, dependsOn: javadoc) {
|
|
archiveClassifier = 'javadoc'
|
|
from javadoc.destinationDir
|
|
}
|
|
|
|
spotless {
|
|
java {
|
|
licenseHeaderFile(rootProject.file("HEADER")).yearSeparator("-")
|
|
targetExclude("**/loom/util/DownloadUtil.java", "**/loom/util/FileSystemUtil.java")
|
|
}
|
|
|
|
groovy {
|
|
licenseHeaderFile(rootProject.file("HEADER")).yearSeparator("-")
|
|
}
|
|
}
|
|
|
|
checkstyle {
|
|
configFile = file('checkstyle.xml')
|
|
toolVersion = '8.44'
|
|
}
|
|
|
|
codenarc {
|
|
toolVersion = "2.1.0"
|
|
configFile = file("codenarc.groovy")
|
|
}
|
|
|
|
gradlePlugin {
|
|
plugins {
|
|
fabricLoom {
|
|
id = 'dev.architectury.loom'
|
|
implementationClass = 'net.fabricmc.loom.bootstrap.LoomGradlePluginBootstrap'
|
|
}
|
|
}
|
|
}
|
|
|
|
build.dependsOn downgradeJava
|
|
|
|
jacoco {
|
|
toolVersion = "0.8.6"
|
|
}
|
|
|
|
// Run to get test coverage.
|
|
jacocoTestReport {
|
|
dependsOn test
|
|
reports {
|
|
xml.enabled false
|
|
csv.enabled false
|
|
html.destination file("${buildDir}/jacocoHtml")
|
|
}
|
|
}
|
|
|
|
test {
|
|
maxHeapSize = "4096m"
|
|
useJUnitPlatform()
|
|
maxParallelForks = Runtime.runtime.availableProcessors() ?: 1
|
|
}
|
|
|
|
import me.shedaniel.javaversionbridge.BridgeTransformingTask
|
|
import org.w3c.dom.Document
|
|
import org.w3c.dom.Element
|
|
import org.w3c.dom.Node
|
|
|
|
publishing {
|
|
publications {
|
|
plugin(MavenPublication) {
|
|
groupId 'dev.architectury.loom'
|
|
artifactId 'dev.architectury.loom.gradle.plugin'
|
|
|
|
from components.java
|
|
artifact downgradeJava
|
|
artifact sourcesJar
|
|
}
|
|
|
|
maven(MavenPublication) { publication ->
|
|
groupId project.group
|
|
artifactId project.archivesBaseName
|
|
|
|
from components.java
|
|
artifact downgradeJava
|
|
artifact sourcesJar
|
|
artifact javadocJar
|
|
}
|
|
|
|
if (isSnapshot) return
|
|
|
|
mavenSnapshot(MavenPublication) { publication ->
|
|
groupId project.group
|
|
artifactId project.archivesBaseName
|
|
version baseVersion + '-SNAPSHOT'
|
|
|
|
from components.java
|
|
artifact downgradeJava
|
|
artifact sourcesJar
|
|
artifact javadocJar
|
|
}
|
|
|
|
pluginSnapshot(MavenPublication) {
|
|
groupId 'dev.architectury.loom'
|
|
artifactId 'dev.architectury.loom.gradle.plugin'
|
|
version baseVersion + '-SNAPSHOT'
|
|
|
|
pom.withXml {
|
|
// Based off org.gradle.plugin.devel.plugins.MavenPluginPublishPlugin
|
|
Element root = asElement()
|
|
Document document = root.getOwnerDocument()
|
|
Node dependencies = root.appendChild(document.createElement('dependencies'))
|
|
Node dependency = dependencies.appendChild(document.createElement('dependency'))
|
|
Node groupId = dependency.appendChild(document.createElement('groupId'))
|
|
groupId.setTextContent(project.group)
|
|
Node artifactId = dependency.appendChild(document.createElement('artifactId'))
|
|
artifactId.setTextContent(project.archivesBaseName)
|
|
Node version = dependency.appendChild(document.createElement('version'))
|
|
version.setTextContent(baseVersion + '-SNAPSHOT')
|
|
}
|
|
}
|
|
}
|
|
|
|
repositories {
|
|
if (System.getenv("MAVEN_PASS") != null) {
|
|
maven {
|
|
url = "https://deploy.shedaniel.me/"
|
|
credentials {
|
|
username = "shedaniel"
|
|
password = System.getenv("MAVEN_PASS")
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Need to tweak this file to pretend we are compatible with j8 so the bootstrap will run.
|
|
tasks.withType(GenerateModuleMetadata) {
|
|
doLast {
|
|
def file = outputFile.get().asFile
|
|
|
|
def metadata = new groovy.json.JsonSlurper().parseText(file.text)
|
|
|
|
metadata.variants.each {
|
|
it.attributes["org.gradle.jvm.version"] = 8
|
|
}
|
|
|
|
file.text = groovy.json.JsonOutput.toJson(metadata)
|
|
}
|
|
}
|
|
|
|
// A task to output a json file with a list of all the test to run
|
|
task writeActionsTestMatrix() {
|
|
doLast {
|
|
def testMatrix = []
|
|
file('src/test/groovy/net/fabricmc/loom/test/integration').traverse {
|
|
if (it.name.endsWith("Test.groovy")) {
|
|
if (it.name.endsWith("ReproducibleBuildTest.groovy")) {
|
|
// This test gets a special case to run across all os's
|
|
return
|
|
}
|
|
|
|
def className = it.path.toString().replace(".groovy", "")
|
|
className = className.substring(className.lastIndexOf("integration/") + "integration/".length()).replace('/', '.')
|
|
testMatrix.add("net.fabricmc.loom.test.integration.${className}")
|
|
}
|
|
}
|
|
|
|
// Run all the unit tests togeather
|
|
testMatrix.add("net.fabricmc.loom.test.unit.*")
|
|
|
|
def json = groovy.json.JsonOutput.toJson(testMatrix)
|
|
def output = file("build/test_matrix.json")
|
|
output.parentFile.mkdir()
|
|
output.text = json
|
|
}
|
|
}
|
|
|
|
tasks.named('wrapper') {
|
|
distributionType = Wrapper.DistributionType.ALL
|
|
}
|
|
|
|
tasks.withType(GenerateModuleMetadata) {
|
|
enabled = false
|
|
}
|