Update preprocessor and replace 1.13.2 subproject with 1.14.4-forge
The new preprocessor version brings first-party support for fabric, in particular for automatically fetching mappings loom and for automatically remapping between MC versions via intermediary mappings. This will come in handy when updating to 1.15. It also supports automatic remapping between fabric and forge on the same MC version (by going mcp<->srg<->mojang<->intermediary<->yarn). Therefore this commit replaces the previous 1.13.2 (forge) subproject with a 1.14.4-forge one. Instead of manually providing full mappings for 1.14.4-fabric to 1.13.2-forge and partial (classes) for 1.13.2-forge to 1.12.2-forge, we now only need partial (classes) for 1.12.2-forge to 1.14.4-forge and preprocessor will take care of the forge to fabric step (in fact, our mapping file for that is currently completely empty). In an attempt to write an IDE (IntelliJ) plugin for quicker and easier working with the preprocessor (e.g. immediately mapping single files from within the IDE, jumping between different versions for the same file), the preprocessor gradle plugin declaration now requires you to explicitly specify variables in the common.gradle and the overall relationship between projects in the build.gradle (latter is required anyway, so the plugin can know where it should map between forge and fabric and which subprojects are which versions). Since that necessitated some changes to the build.gradle file, I took the opportunity to convert it to Kotlin. As such we now also use Gradle's newer plugin-block with the pluginManagement-block instead of manually declaring buildScript (not for the common.gradle though), which imo is nicer anyway and comes with various advantages (see gradle docs). There were also some remapping bugs fixed and some new ones introduced (e.g. manually declared inner class mappings seem to no longer function properly under certain conditions). There's also support for remapping Kotlin now. Just saying.
This commit is contained in:
174
build.gradle
174
build.gradle
@@ -1,174 +0,0 @@
|
||||
buildscript {
|
||||
repositories {
|
||||
mavenCentral()
|
||||
}
|
||||
|
||||
dependencies {
|
||||
classpath 'com.google.guava:guava:27.1-jre'
|
||||
classpath 'org.apache.maven:maven-artifact:3.6.1'
|
||||
}
|
||||
}
|
||||
|
||||
apply plugin: 'eclipse'
|
||||
apply plugin: 'idea'
|
||||
|
||||
import groovy.json.JsonOutput
|
||||
|
||||
def latestVersion = file('version.txt').readLines().first()
|
||||
def releaseCommit = command('git', 'blame', '-p', '-l', 'version.txt').first().tokenize(' ').first()
|
||||
if (latestVersion == '2.1.0') { // First version since change from tag-based
|
||||
releaseCommit = '35ac26e91689ac9bdf12dbb9902c452464a75108' // git rev-parse 1.12.2-2.1.0
|
||||
}
|
||||
def currentCommit = command('git', 'rev-parse', 'HEAD').first()
|
||||
if (releaseCommit == currentCommit) {
|
||||
version = latestVersion
|
||||
} else {
|
||||
def diff = command('git', 'log', '--format=oneline', "$releaseCommit..$currentCommit").size()
|
||||
version = "$latestVersion-$diff-g${currentCommit.substring(0, 7)}"
|
||||
}
|
||||
if (gitDescribe().endsWith('*')) {
|
||||
version = "$version-dirty"
|
||||
}
|
||||
|
||||
group= "com.replaymod"
|
||||
|
||||
// Fabric's remapJar task assumes the compile configuration to exist
|
||||
configurations { compile }
|
||||
|
||||
task shadowJar(type: Copy) {
|
||||
into "$buildDir/libs"
|
||||
}
|
||||
|
||||
subprojects {
|
||||
buildscript {
|
||||
repositories {
|
||||
maven { url 'https://jitpack.io' }
|
||||
}
|
||||
}
|
||||
|
||||
// Thanks for wasting my time gradle...
|
||||
// Workaround for https://discuss.gradle.org/t/idea-plugin-bug/21525
|
||||
apply plugin: 'eclipse'
|
||||
apply plugin: 'idea'
|
||||
|
||||
afterEvaluate {
|
||||
def shadowJar = project.tasks.findByName('shadowJar')
|
||||
if (shadowJar != null && shadowJar.hasProperty('archivePath') && project.name != 'core') {
|
||||
def rootTask = rootProject.tasks.shadowJar
|
||||
rootTask.dependsOn shadowJar
|
||||
rootTask.from shadowJar.archivePath
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
def gitDescribe() {
|
||||
try {
|
||||
def stdout = new ByteArrayOutputStream()
|
||||
exec {
|
||||
commandLine 'git', 'describe', '--always', '--dirty=*'
|
||||
standardOutput = stdout
|
||||
}
|
||||
return stdout.toString().trim()
|
||||
} catch (e) {
|
||||
return "unknown"
|
||||
}
|
||||
}
|
||||
|
||||
def command(Object...cmd) {
|
||||
def stdout = new ByteArrayOutputStream()
|
||||
exec {
|
||||
commandLine cmd
|
||||
standardOutput = stdout
|
||||
}
|
||||
return stdout.toString().tokenize('\n')
|
||||
}
|
||||
|
||||
def generateVersionsJson() {
|
||||
// Find all tag-style releases by listing all tags
|
||||
def tagVersions = command 'git', 'for-each-ref', '--sort=taggerdate', '--format=%(refname:short)', 'refs/tags'
|
||||
|
||||
// Find all commit-style releases
|
||||
// List all commits
|
||||
def releaseCommits =
|
||||
command 'git', 'log', '--format=%H', '--date-order', '-E',
|
||||
'--grep', /Pre-release [0-9]+ of [0-9]+\.[0-9]+\.[0-9]+/,
|
||||
'--grep', /Release [0-9]+\.[0-9]+\.[0-9]+/
|
||||
// Find version string and MC versions for each commit hash
|
||||
def commitVersions = releaseCommits.collect { commit ->
|
||||
def version = command('git', 'show', "$commit:version.txt").first()
|
||||
def mcVersions = command 'git', 'ls-tree', '-d', '--name-only', "$commit:versions"
|
||||
mcVersions.remove('core')
|
||||
return mcVersions.collect { "$it-$version" }
|
||||
}.flatten()
|
||||
|
||||
def versions = commitVersions + tagVersions.reverse()
|
||||
def mcVersions = versions.collect {it.substring(0, it.indexOf('-'))}.unique()
|
||||
mcVersions.sort(new OrderBy([0, 1, 2].collect { i -> { it -> (it.tokenize('.')[i] ?: '0') as int } }))
|
||||
|
||||
def root = [
|
||||
homepage: 'https://www.replaymod.com/download/',
|
||||
promos: [:]
|
||||
]
|
||||
mcVersions.forEach { mcVersion ->
|
||||
def mcVersionRoot = [:]
|
||||
def latest
|
||||
def recommended
|
||||
versions.forEach {
|
||||
def (thisMcVersion, modVersion, preVersion) = it.tokenize('-')
|
||||
if (thisMcVersion == mcVersion) {
|
||||
mcVersionRoot[it] = tagVersions.contains(it) ?
|
||||
"See https://github.com/ReplayMod/ReplayMod/releases/$it" :
|
||||
'See https://www.replaymod.com/forum/thread/100'
|
||||
if (latest == null) latest = it
|
||||
if (preVersion == null) {
|
||||
if (recommended == null) recommended = it
|
||||
}
|
||||
}
|
||||
}
|
||||
root[mcVersion] = mcVersionRoot
|
||||
root.promos[mcVersion + '-latest'] = latest
|
||||
if (recommended != null) {
|
||||
root.promos[mcVersion + '-recommended'] = recommended
|
||||
}
|
||||
}
|
||||
root
|
||||
}
|
||||
|
||||
task doRelease() {
|
||||
doLast {
|
||||
// Parse version
|
||||
def version = project.releaseVersion as String
|
||||
if (gitDescribe().endsWith('*')) {
|
||||
throw new InvalidUserDataException('Git working tree is dirty. Make sure to commit all changes.')
|
||||
}
|
||||
def (modVersion, preVersion) = version.tokenize('-')
|
||||
preVersion = preVersion != null && preVersion.startsWith('b') ? preVersion.substring(1) : null
|
||||
|
||||
// Create new commit
|
||||
def commitMessage = preVersion != null ?
|
||||
"Pre-release $preVersion of $modVersion" :
|
||||
"Release $modVersion"
|
||||
file('version.txt').write("$version\n")
|
||||
command 'git', 'add', 'version.txt'
|
||||
command 'git', 'commit', '-m', commitMessage
|
||||
|
||||
// Generate versions.json content
|
||||
def versionsRoot = generateVersionsJson()
|
||||
def versionsJson = JsonOutput.prettyPrint(JsonOutput.toJson(versionsRoot))
|
||||
|
||||
// Switch to master branch to update versions.json
|
||||
command 'git', 'checkout', 'master'
|
||||
|
||||
// Write versions.json
|
||||
new File('versions.json').write(versionsJson)
|
||||
|
||||
// Commit changes
|
||||
project.exec { commandLine 'git', 'add', 'versions.json' }
|
||||
project.exec { commandLine 'git', 'commit', '-m', "Update versions.json for $version" }
|
||||
|
||||
// Return to previous branch
|
||||
project.exec { commandLine 'git', 'checkout', '-' }
|
||||
}
|
||||
}
|
||||
|
||||
defaultTasks 'shadowJar'
|
||||
Reference in New Issue
Block a user