191 lines
6.4 KiB
Groovy
Executable File
191 lines
6.4 KiB
Groovy
Executable File
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'
|
|
|
|
def shadowJar = it.tasks.findByName('shadowJar')
|
|
if (shadowJar != null && shadowJar.hasProperty('archivePath') && project.name != 'core') {
|
|
def rootTask = rootProject.tasks.shadowJar
|
|
rootTask.dependsOn shadowJar
|
|
rootTask.from shadowJar.archivePath
|
|
}
|
|
}
|
|
|
|
// Workaround specific to CI build to guarantee correct ordering of
|
|
// ./gradlew --parallel shadowJar :1.8:setCoreVersion
|
|
// TODO properly fix the ordering in preprocessor
|
|
if (project.hasProperty('workAroundBuildOrder')) {
|
|
evaluationDependsOnChildren()
|
|
def rmTasks = project(':1.8').tasks
|
|
def jGuiTasks = project(':jGui:1.8').tasks
|
|
subprojects.forEach {
|
|
def shadowTask = it.tasks.findByName('shadowJar')
|
|
if (shadowTask != null) {
|
|
rmTasks.setCoreVersionJava.mustRunAfter shadowTask
|
|
rmTasks.setCoreVersionResources.mustRunAfter shadowTask
|
|
jGuiTasks.setCoreVersionJava.mustRunAfter shadowTask
|
|
jGuiTasks.setCoreVersionResources.mustRunAfter shadowTask
|
|
}
|
|
}
|
|
}
|
|
|
|
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'
|