aboutsummaryrefslogtreecommitdiff
path: root/build.gradle
diff options
context:
space:
mode:
authorJohann Bernhardt <johann.bernhardt@tum.de>2021-12-18 11:10:36 +0100
committerJohann Bernhardt <johann.bernhardt@tum.de>2021-12-18 11:10:36 +0100
commit18a15c155961431a1525b45533ea012786b5e597 (patch)
tree391fdf9fc4bb6bab7ce038103f0d1927d17cd588 /build.gradle
parentfc75443c3dfb95969eb171fb416501e22252c953 (diff)
downloadGT5-Unofficial-18a15c155961431a1525b45533ea012786b5e597.tar.gz
GT5-Unofficial-18a15c155961431a1525b45533ea012786b5e597.tar.bz2
GT5-Unofficial-18a15c155961431a1525b45533ea012786b5e597.zip
Draft for buildscript, but GTNH core mod is still missing
Diffstat (limited to 'build.gradle')
-rw-r--r--build.gradle384
1 files changed, 285 insertions, 99 deletions
diff --git a/build.gradle b/build.gradle
index 5c3a3f49a5..2ec9a2ebac 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,3 +1,4 @@
+//version: be36e1399d5622c152db7c530c48e17cde0ce1bb
/*
DO NOT CHANGE THIS FILE!
@@ -7,15 +8,13 @@ Please check https://github.com/SinTh0r4s/ExampleMod1.7.10/blob/main/build.gradl
import com.github.jengelman.gradle.plugins.shadow.tasks.ConfigureShadowRelocation
+import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
+
import java.util.concurrent.TimeUnit
buildscript {
repositories {
maven {
- name = "jitpack"
- url = "https://jitpack.io"
- }
- maven {
name = "forge"
url = "https://maven.minecraftforge.net"
}
@@ -23,20 +22,38 @@ buildscript {
name = "sonatype"
url = "https://oss.sonatype.org/content/repositories/snapshots/"
}
+ maven {
+ name = "Scala CI dependencies"
+ url = "https://repo1.maven.org/maven2/"
+ }
+ maven {
+ name = "jitpack"
+ url = "https://jitpack.io"
+ }
}
dependencies {
- classpath 'com.github.GTNH2:ForgeGradle:FG_1.2-SNAPSHOT'
+ classpath 'com.github.GTNewHorizons:ForgeGradle:1.2.4'
}
}
plugins {
+ id 'idea'
+ id 'scala'
id("org.ajoberstar.grgit") version("3.1.1")
id("com.github.johnrengelman.shadow") version("4.0.4")
id("com.palantir.git-version") version("0.12.3")
+ id("maven-publish")
}
apply plugin: 'forge'
-apply plugin: 'idea'
+
+def projectJavaVersion = JavaLanguageVersion.of(8)
+
+java {
+ toolchain {
+ languageVersion.set(projectJavaVersion)
+ }
+}
idea {
module {
@@ -46,6 +63,84 @@ idea {
}
}
+if(JavaVersion.current() != JavaVersion.VERSION_1_8) {
+ throw new GradleException("This project requires Java 8, but it's running on " + JavaVersion.current())
+}
+
+checkPropertyExists("modName")
+checkPropertyExists("modId")
+checkPropertyExists("modGroup")
+checkPropertyExists("autoUpdateBuildScript")
+checkPropertyExists("minecraftVersion")
+checkPropertyExists("forgeVersion")
+checkPropertyExists("replaceGradleTokenInFile")
+checkPropertyExists("gradleTokenModId")
+checkPropertyExists("gradleTokenModName")
+checkPropertyExists("gradleTokenVersion")
+checkPropertyExists("gradleTokenGroupName")
+checkPropertyExists("apiPackage")
+checkPropertyExists("accessTransformersFile")
+checkPropertyExists("usesMixins")
+checkPropertyExists("mixinPlugin")
+checkPropertyExists("mixinsPackage")
+checkPropertyExists("coreModClass")
+checkPropertyExists("containsMixinsAndOrCoreModOnly")
+checkPropertyExists("usesShadowedDependencies")
+checkPropertyExists("developmentEnvironmentUserName")
+
+
+String javaSourceDir = "src/main/java/"
+String scalaSourceDir = "src/main/scala/"
+
+String targetPackageJava = javaSourceDir + modGroup.toString().replaceAll("\\.", "/")
+String targetPackageScala = scalaSourceDir + modGroup.toString().replaceAll("\\.", "/")
+if((getFile(targetPackageJava).exists() || getFile(targetPackageScala).exists()) == false) {
+ throw new GradleException("Could not resolve \"modGroup\"! Could not find " + targetPackageJava + " or " + targetPackageScala)
+}
+
+if(apiPackage) {
+ targetPackageJava = javaSourceDir + modGroup.toString().replaceAll("\\.", "/") + "/" + apiPackage.toString().replaceAll("\\.", "/")
+ targetPackageScala = scalaSourceDir + modGroup.toString().replaceAll("\\.", "/") + "/" + apiPackage.toString().replaceAll("\\.", "/")
+ if((getFile(targetPackageJava).exists() || getFile(targetPackageScala).exists()) == false) {
+ throw new GradleException("Could not resolve \"apiPackage\"! Could not find " + targetPackageJava + " or " + targetPackageScala)
+ }
+}
+
+if(accessTransformersFile) {
+ String targetFile = "src/main/resources/META-INF/" + accessTransformersFile
+ if(getFile(targetFile).exists() == false) {
+ throw new GradleException("Could not resolve \"accessTransformersFile\"! Could not find " + targetFile)
+ }
+}
+
+if(usesMixins.toBoolean()) {
+ if(mixinsPackage.isEmpty() || mixinPlugin.isEmpty()) {
+ throw new GradleException("\"mixinPlugin\" requires \"mixinsPackage\" and \"mixinPlugin\" to be set!")
+ }
+
+ targetPackageJava = javaSourceDir + modGroup.toString().replaceAll("\\.", "/") + "/" + mixinsPackage.toString().replaceAll("\\.", "/")
+ targetPackageScala = scalaSourceDir + modGroup.toString().replaceAll("\\.", "/") + "/" + mixinsPackage.toString().replaceAll("\\.", "/")
+ if((getFile(targetPackageJava).exists() || getFile(targetPackageScala).exists()) == false) {
+ throw new GradleException("Could not resolve \"mixinsPackage\"! Could not find " + targetPackageJava + " or " + targetPackageScala)
+ }
+
+ String targetFileJava = javaSourceDir + modGroup.toString().replaceAll("\\.", "/") + "/" + mixinPlugin.toString().replaceAll("\\.", "/") + ".java"
+ String targetFileScala = scalaSourceDir + modGroup.toString().replaceAll("\\.", "/") + "/" + mixinPlugin.toString().replaceAll("\\.", "/") + ".scala"
+ String targetFileScalaJava = scalaSourceDir + modGroup.toString().replaceAll("\\.", "/") + "/" + mixinPlugin.toString().replaceAll("\\.", "/") + ".java"
+ if((getFile(targetFileJava).exists() || getFile(targetFileScala).exists() || getFile(targetFileScalaJava).exists()) == false) {
+ throw new GradleException("Could not resolve \"mixinPlugin\"! Could not find " + targetFileJava + " or " + targetFileScala + " or " + targetFileScalaJava)
+ }
+}
+
+if(coreModClass) {
+ String targetFileJava = javaSourceDir + modGroup.toString().replaceAll("\\.", "/") + "/" + coreModClass.toString().replaceAll("\\.", "/") + ".java"
+ String targetFileScala = scalaSourceDir + modGroup.toString().replaceAll("\\.", "/") + "/" + coreModClass.toString().replaceAll("\\.", "/") + ".scala"
+ String targetFileScalaJava = scalaSourceDir + modGroup.toString().replaceAll("\\.", "/") + "/" + coreModClass.toString().replaceAll("\\.", "/") + ".java"
+ if((getFile(targetFileJava).exists() || getFile(targetFileScala).exists() || getFile(targetFileScalaJava).exists()) == false) {
+ throw new GradleException("Could not resolve \"coreModClass\"! Could not find " + targetFileJava + " or " + targetFileScala + " or " + targetFileScalaJava)
+ }
+}
+
configurations.all {
resolutionStrategy.cacheChangingModulesFor(0, TimeUnit.SECONDS)
@@ -54,16 +149,25 @@ configurations.all {
System.setProperty("org.gradle.internal.http.socketTimeout", 120000 as String)
}
+// Fix Jenkins' Git: chmod a file should not be detected as a change and append a '.dirty' to the version
+'git config core.fileMode false'.execute()
// Pulls version from git tag
-version = minecraftVersion + "-" + gitVersion()
+try {
+ version = minecraftVersion + "-" + gitVersion()
+}
+catch (Exception e) {
+ throw new IllegalStateException("This mod must be version controlled by Git AND the repository must provide at least one tag!");
+}
+
group = modGroup
-archivesBaseName = modId
+if(project.hasProperty("customArchiveBaseName") && customArchiveBaseName) {
+ archivesBaseName = customArchiveBaseName
+}
+else {
+ archivesBaseName = modId
+}
minecraft {
- if(JavaVersion.current() != JavaVersion.VERSION_1_8) {
- throw new GradleException("This project requires Java 8, but it's running on " + JavaVersion.current())
- }
-
version = minecraftVersion + "-" + forgeVersion + "-" + minecraftVersion
runDir = "run"
@@ -75,7 +179,7 @@ minecraft {
if(gradleTokenModName) {
replace gradleTokenModName, modName
}
- if(gradleTokenModName) {
+ if(gradleTokenVersion) {
replace gradleTokenVersion, versionDetails().lastTag
}
if(gradleTokenGroupName) {
@@ -84,6 +188,10 @@ minecraft {
}
}
+if(file("addon.gradle").exists()) {
+ apply from: "addon.gradle"
+}
+
apply from: 'repositories.gradle'
configurations {
@@ -91,6 +199,10 @@ configurations {
}
repositories {
+ maven {
+ name = "Overmind forge repo mirror"
+ url = "https://gregtech.overminddl1.com/"
+ }
if(usesMixins.toBoolean()) {
maven {
name = "sponge"
@@ -123,19 +235,13 @@ dependencies {
apply from: 'dependencies.gradle'
-task relocateShadowJar(type: ConfigureShadowRelocation) {
- target = tasks.shadowJar
- prefix = modGroup + ".shadow"
-}
-
-def mixinConfigJson = "mixins." + modId + ".json"
def mixingConfigRefMap = "mixins." + modId + ".refmap.json"
def refMap = "${tasks.compileJava.temporaryDir}" + File.separator + mixingConfigRefMap
def mixinSrg = "${tasks.reobf.temporaryDir}" + File.separator + "mixins.srg"
task generateAssets {
if(usesMixins.toBoolean()) {
- new File(projectDir.toString() + "/src/main/resources/", mixinConfigJson).text = """{
+ getFile("/src/main/resources/mixins." + modId + ".json").text = """{
"required": true,
"minVersion": "0.7.11",
"package": "${modGroup}.${mixinsPackage}",
@@ -149,61 +255,24 @@ task generateAssets {
}
}
-shadowJar {
- def manifestAttributes = [:]
- if(containsMixinsAndOrCoreModOnly.toBoolean() == false) {
- manifestAttributes += ["FMLCorePluginContainsFMLMod": true]
- }
-
- if(accessTransformersFile) {
- manifestAttributes += ["FMLAT" : accessTransformersFile.toString()]
- }
-
- if(coreModClass) {
- manifestAttributes += ["FMLCorePlugin": modGroup + "." + coreModClass]
- }
+task relocateShadowJar(type: ConfigureShadowRelocation) {
+ target = tasks.shadowJar
+ prefix = modGroup + ".shadow"
+}
- if(usesMixins.toBoolean()) {
- from refMap
- manifestAttributes += [
- "TweakClass" : "org.spongepowered.asm.launch.MixinTweaker",
- "MixinConfigs" : mixinConfigJson,
- "ForceLoadAsMod" : containsMixinsAndOrCoreModOnly.toBoolean() == false
- ]
- }
+shadowJar {
manifest {
- attributes(manifestAttributes)
+ attributes(getManifestAttributes())
}
- minimize()
+ minimize() // This will only allow shading for actually used classes
configurations = [project.configurations.shadowImplementation]
dependsOn(relocateShadowJar)
}
jar {
- def manifestAttributes = [:]
- if(containsMixinsAndOrCoreModOnly.toBoolean() == false) {
- manifestAttributes += ["FMLCorePluginContainsFMLMod": true]
- }
-
- if(accessTransformersFile) {
- manifestAttributes += ["FMLAT" : accessTransformersFile.toString()]
- }
-
- if(coreModClass) {
- manifestAttributes += ["FMLCorePlugin": modGroup + "." + coreModClass]
- }
-
- if(usesMixins.toBoolean()) {
- from refMap
- manifestAttributes += [
- "TweakClass" : "org.spongepowered.asm.launch.MixinTweaker",
- "MixinConfigs" : mixinConfigJson,
- "ForceLoadAsMod" : containsMixinsAndOrCoreModOnly.toBoolean() == false
- ]
- }
manifest {
- attributes(manifestAttributes)
+ attributes(getManifestAttributes())
}
if(usesShadowedDependencies.toBoolean()) {
@@ -256,7 +325,7 @@ runClient {
runServer {
def arguments = []
- if(usesMixins.toBoolean()) {
+ if (usesMixins.toBoolean()) {
arguments += [
"--mods=../build/libs/$modId-${version}.jar",
"--tweakClass org.spongepowered.asm.launch.MixinTweaker"
@@ -266,6 +335,14 @@ runServer {
args(arguments)
}
+tasks.withType(JavaExec).configureEach {
+ javaLauncher.set(
+ javaToolchains.launcherFor {
+ languageVersion = projectJavaVersion
+ }
+ )
+}
+
processResources
{
// this will ensure that this task is redone when the versions change.
@@ -283,19 +360,19 @@ processResources
"modName": modName
}
+ if(usesMixins.toBoolean()) {
+ from refMap
+ }
+
// copy everything else, thats not the mcmod.info
from(sourceSets.main.resources.srcDirs) {
exclude 'mcmod.info'
}
}
-task sourcesJar(type: Jar) {
- from (sourceSets.main.allJava)
- from (file("$projectDir/LICENSE"))
- getArchiveClassifier().set('sources')
-
+def getManifestAttributes() {
def manifestAttributes = [:]
- if(containsMixinsAndOrCoreModOnly.toBoolean() == false) {
+ if(containsMixinsAndOrCoreModOnly.toBoolean() == false && (usesMixins.toBoolean() || coreModClass)) {
manifestAttributes += ["FMLCorePluginContainsFMLMod": true]
}
@@ -308,55 +385,65 @@ task sourcesJar(type: Jar) {
}
if(usesMixins.toBoolean()) {
- from refMap
manifestAttributes += [
"TweakClass" : "org.spongepowered.asm.launch.MixinTweaker",
- "MixinConfigs" : mixinConfigJson,
+ "MixinConfigs" : "mixins." + modId + ".json",
"ForceLoadAsMod" : containsMixinsAndOrCoreModOnly.toBoolean() == false
]
}
- manifest {
- attributes(manifestAttributes)
- }
+ return manifestAttributes
}
-task devJar(type: Jar) {
+task sourcesJar(type: Jar) {
+ from (sourceSets.main.allJava)
+ from (file("$projectDir/LICENSE"))
+ getArchiveClassifier().set('sources')
+}
+
+task shadowDevJar(type: ShadowJar) {
from sourceSets.main.output
getArchiveClassifier().set("dev")
- def manifestAttributes = [:]
- if(containsMixinsAndOrCoreModOnly.toBoolean() == false) {
- manifestAttributes += ["FMLCorePluginContainsFMLMod": true]
+ manifest {
+ attributes(getManifestAttributes())
}
- if(accessTransformersFile) {
- manifestAttributes += ["FMLAT" : accessTransformersFile.toString()]
- }
+ minimize() // This will only allow shading for actually used classes
+ configurations = [project.configurations.shadowImplementation]
+}
- if(coreModClass) {
- manifestAttributes += ["FMLCorePlugin": modGroup + "." + coreModClass]
- }
+task relocateShadowDevJar(type: ConfigureShadowRelocation) {
+ target = tasks.shadowDevJar
+ prefix = modGroup + ".shadow"
+}
+
+task circularResolverJar(type: Jar) {
+ dependsOn(relocateShadowDevJar)
+ dependsOn(shadowDevJar)
+ enabled = false
+}
+
+task devJar(type: Jar) {
+ from sourceSets.main.output
+ getArchiveClassifier().set("dev")
- if(usesMixins.toBoolean()) {
- from refMap
- manifestAttributes += [
- "TweakClass" : "org.spongepowered.asm.launch.MixinTweaker",
- "MixinConfigs" : mixinConfigJson,
- "ForceLoadAsMod" : containsMixinsAndOrCoreModOnly.toBoolean() == false
- ]
- }
manifest {
- attributes(manifestAttributes)
+ attributes(getManifestAttributes())
+ }
+
+ if(usesShadowedDependencies.toBoolean()) {
+ dependsOn(circularResolverJar)
+ enabled = false
}
}
task apiJar(type: Jar) {
from (sourceSets.main.allJava) {
- include modGroup.toString().replaceAll("\\.", "/") + "/" + apiPackage.toString() + '/**'
+ include modGroup.toString().replaceAll("\\.", "/") + "/" + apiPackage.toString().replaceAll("\\.", "/") + '/**'
}
from (sourceSets.main.output) {
- include modGroup.toString().replaceAll("\\.", "/") + "/" + apiPackage.toString() + '/**'
+ include modGroup.toString().replaceAll("\\.", "/") + "/" + apiPackage.toString().replaceAll("\\.", "/") + '/**'
}
from (sourceSets.main.resources.srcDirs) {
@@ -366,7 +453,6 @@ task apiJar(type: Jar) {
getArchiveClassifier().set('api')
}
-
artifacts {
archives sourcesJar
archives devJar
@@ -374,3 +460,103 @@ artifacts {
archives apiJar
}
}
+
+// publishing
+publishing {
+ publications {
+ maven(MavenPublication) {
+ artifact source: jar
+ artifact source: sourcesJar, classifier: "src"
+ artifact source: devJar, classifier: "dev"
+ if (apiPackage) {
+ archives source: apiJar, classifier: "api"
+ }
+
+ groupId = System.getenv("ARTIFACT_GROUP_ID") ?: group
+ artifactId = System.getenv("ARTIFACT_ID") ?: project.name
+ version = System.getenv("ARTIFACT_VERSION") ?: project.version
+ }
+ }
+
+ repositories {
+ maven {
+ String owner = System.getenv("REPOSITORY_OWNER") ?: "Unknown"
+ String repositoryName = System.getenv("REPOSITORY_NAME") ?: "Unknown"
+ String githubRepositoryUrl = "https://maven.pkg.github.com/$owner/$repositoryName"
+ name = "GitHubPackages"
+ url = githubRepositoryUrl
+ credentials {
+ username = System.getenv("GITHUB_ACTOR") ?: "NONE"
+ password = System.getenv("GITHUB_TOKEN") ?: "NONE"
+ }
+ }
+ }
+}
+
+// Updating
+task updateBuildScript {
+ doLast {
+ if (performBuildScriptUpdate(projectDir.toString())) return
+
+ print("Build script already up-to-date!")
+ }
+}
+
+if (isNewBuildScriptVersionAvailable(projectDir.toString())) {
+ if (autoUpdateBuildScript.toBoolean()) {
+ performBuildScriptUpdate(projectDir.toString())
+ } else {
+ println("Build script update available! Run 'gradle updateBuildScript'")
+ }
+}
+
+static URL availableBuildScriptUrl() {
+ new URL("https://raw.githubusercontent.com/SinTh0r4s/ExampleMod1.7.10/main/build.gradle")
+}
+
+boolean performBuildScriptUpdate(String projectDir) {
+ if (isNewBuildScriptVersionAvailable(projectDir)) {
+ def buildscriptFile = getFile("build.gradle")
+ availableBuildScriptUrl().withInputStream { i -> buildscriptFile.withOutputStream { it << i } }
+ print("Build script updated. Please REIMPORT the project or RESTART your IDE!")
+ return true
+ }
+ return false
+}
+
+boolean isNewBuildScriptVersionAvailable(String projectDir) {
+ Map parameters = ["connectTimeout": 2000, "readTimeout": 2000]
+
+ String currentBuildScript = getFile("build.gradle").getText()
+ String currentBuildScriptHash = getVersionHash(currentBuildScript)
+ String availableBuildScript = availableBuildScriptUrl().newInputStream(parameters).getText()
+ String availableBuildScriptHash = getVersionHash(availableBuildScript)
+
+ boolean isUpToDate = currentBuildScriptHash.empty || availableBuildScriptHash.empty || currentBuildScriptHash == availableBuildScriptHash
+ return !isUpToDate
+}
+
+static String getVersionHash(String buildScriptContent) {
+ String versionLine = buildScriptContent.find("^//version: [a-z0-9]*")
+ if(versionLine != null) {
+ return versionLine.split(": ").last()
+ }
+ return ""
+}
+
+configure(updateBuildScript) {
+ group = 'forgegradle'
+ description = 'Updates the build script to the latest version'
+}
+
+// Helper methods
+
+def checkPropertyExists(String propertyName) {
+ if (project.hasProperty(propertyName) == false) {
+ throw new GradleException("This project requires a property \"" + propertyName + "\"! Please add it your \"gradle.properties\". You can find all properties and their description here: https://github.com/SinTh0r4s/ExampleMod1.7.10/blob/main/gradle.properties")
+ }
+}
+
+def getFile(String relativePath) {
+ return new File(projectDir, relativePath)
+}