1
0
mirror of https://github.com/SquidDev-CC/CC-Tweaked synced 2026-05-20 04:22:07 +00:00
Files
CC-Tweaked/build.gradle
T

565 lines
17 KiB
Groovy
Raw Normal View History

2017-05-01 14:32:39 +01:00
buildscript {
repositories {
2019-04-02 13:27:27 +01:00
mavenCentral()
2017-05-01 14:32:39 +01:00
maven {
name = "forge"
2021-04-23 22:26:00 +01:00
url = "https://maven.minecraftforge.net"
2017-05-01 14:32:39 +01:00
}
}
dependencies {
2019-02-14 10:53:18 +00:00
classpath 'com.google.code.gson:gson:2.8.1'
2021-06-09 18:00:20 +01:00
classpath 'net.minecraftforge.gradle:ForgeGradle:5.0.6'
2017-05-01 14:32:39 +01:00
}
}
2017-12-01 20:05:26 +00:00
plugins {
id "checkstyle"
2020-05-11 15:41:39 +01:00
id "jacoco"
2021-04-24 11:26:04 +01:00
id "maven-publish"
2021-06-09 18:00:20 +01:00
id "com.github.hierynomus.license" version "0.16.1"
2021-02-13 12:39:52 +00:00
id "com.matthewprenger.cursegradle" version "1.4.0"
id "com.github.breadmoirai.github-release" version "2.2.12"
2021-01-09 19:50:27 +00:00
id "org.jetbrains.kotlin.jvm" version "1.3.72"
2021-06-09 18:00:20 +01:00
id "com.modrinth.minotaur" version "1.2.1"
2017-12-01 20:05:26 +00:00
}
2019-04-02 13:27:27 +01:00
apply plugin: 'net.minecraftforge.gradle'
2017-05-01 14:32:39 +01:00
2019-03-19 11:47:12 +00:00
version = mod_version
2019-02-19 14:49:13 +00:00
2017-11-15 16:25:10 +00:00
group = "org.squiddev"
2019-03-19 11:47:12 +00:00
archivesBaseName = "cc-tweaked-${mc_version}"
2017-05-01 14:32:39 +01:00
2021-06-09 18:00:20 +01:00
def javaVersion = JavaLanguageVersion.of(8)
2021-02-13 12:39:52 +00:00
java {
toolchain {
2021-06-09 18:00:20 +01:00
languageVersion = javaVersion
2021-02-13 12:39:52 +00:00
}
2021-04-24 11:26:04 +01:00
withSourcesJar()
withJavadocJar()
2021-02-13 12:39:52 +00:00
}
2020-07-03 13:31:26 +01:00
2021-06-09 18:00:20 +01:00
// Tragically java.toolchain.languageVersion doesn't apply to ForgeGradle's
// tasks, so we force all launchers to use the right Java version.
tasks.withType(JavaCompile).configureEach {
javaCompiler = javaToolchains.compilerFor {
languageVersion = javaVersion
}
}
tasks.withType(JavaExec).configureEach {
javaLauncher = javaToolchains.launcherFor {
languageVersion = javaVersion
}
}
2017-05-01 14:32:39 +01:00
minecraft {
2019-04-02 13:27:27 +01:00
runs {
client {
workingDirectory project.file('run')
property 'forge.logging.markers', 'REGISTRIES'
property 'forge.logging.console.level', 'debug'
2017-07-06 17:23:35 +01:00
2019-04-02 13:27:27 +01:00
mods {
computercraft {
source sourceSets.main
}
}
}
server {
2021-01-08 16:16:56 +00:00
workingDirectory project.file("run/server")
2021-01-09 19:50:27 +00:00
property 'forge.logging.markers', 'REGISTRIES'
2019-04-02 13:27:27 +01:00
property 'forge.logging.console.level', 'debug'
2021-01-09 19:50:27 +00:00
arg "--nogui"
2019-04-02 13:27:27 +01:00
mods {
computercraft {
source sourceSets.main
}
}
}
data {
workingDirectory project.file('run')
2021-01-09 19:50:27 +00:00
property 'forge.logging.markers', 'REGISTRIES'
property 'forge.logging.console.level', 'debug'
args '--mod', 'computercraft', '--all', '--output', file('src/generated/resources/'), '--existing', file('src/main/resources/')
mods {
computercraft {
source sourceSets.main
}
}
}
2021-01-09 19:50:27 +00:00
testServer {
workingDirectory project.file('test-files/server')
parent runs.server
mods {
cctest {
source sourceSets.test
}
}
}
2019-04-02 13:27:27 +01:00
}
2021-01-09 19:22:58 +00:00
mappings channel: 'official', version: project.mc_version
2019-04-02 13:27:27 +01:00
accessTransformer file('src/main/resources/META-INF/accesstransformer.cfg')
2017-05-01 14:32:39 +01:00
}
2020-07-03 13:31:26 +01:00
sourceSets {
main.resources {
srcDir 'src/generated/resources'
}
}
2017-10-25 13:40:35 +01:00
repositories {
2020-07-03 13:31:26 +01:00
mavenCentral()
2017-05-01 17:49:22 +01:00
maven {
2019-03-19 11:47:12 +00:00
name "SquidDev"
url "https://squiddev.cc/maven"
}
2017-05-01 17:49:22 +01:00
}
configurations {
shade
compile.extendsFrom shade
2020-07-03 13:31:26 +01:00
cctJavadoc
2017-10-25 13:40:35 +01:00
}
2017-05-01 14:32:39 +01:00
dependencies {
checkstyle "com.puppycrawl.tools:checkstyle:8.25"
2019-04-02 13:27:27 +01:00
minecraft "net.minecraftforge:forge:${mc_version}-${forge_version}"
2018-08-11 10:48:41 +01:00
2020-04-22 11:04:29 +01:00
compileOnly fg.deobf("mezz.jei:jei-1.15.2:6.0.0.3:api")
2020-04-22 11:11:02 +01:00
compileOnly fg.deobf("com.blamejared.crafttweaker:CraftTweaker-1.15.2:6.0.0.9")
2020-04-22 11:04:29 +01:00
runtimeOnly fg.deobf("mezz.jei:jei-1.15.2:6.0.0.3")
2018-08-11 10:48:41 +01:00
2021-05-13 18:09:08 +01:00
shade 'org.squiddev:Cobalt:0.5.2-SNAPSHOT'
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0'
testImplementation 'org.junit.jupiter:junit-jupiter-params:5.7.0'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0'
testImplementation 'org.hamcrest:hamcrest:2.2'
2021-01-09 19:50:27 +00:00
testImplementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.72'
testImplementation 'org.jetbrains.kotlin:kotlin-reflect:1.3.72'
testImplementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.8'
2018-04-19 22:36:00 +01:00
2021-05-15 21:11:09 +01:00
cctJavadoc 'cc.tweaked:cct-javadoc:1.4.0'
2017-05-01 14:32:39 +01:00
}
2019-06-15 11:05:45 +01:00
// Compile tasks
2017-11-14 22:37:37 +00:00
javadoc {
include "dan200/computercraft/api/**/*.java"
}
2020-07-03 13:31:26 +01:00
task luaJavadoc(type: Javadoc) {
description "Generates documentation for Java-side Lua functions."
group "documentation"
source = sourceSets.main.allJava
2020-11-12 19:01:50 +00:00
destinationDir = file("${project.docsDir}/luaJavadoc")
2020-07-03 13:31:26 +01:00
classpath = sourceSets.main.compileClasspath
options.docletpath = configurations.cctJavadoc.files as List
options.doclet = "cc.tweaked.javadoc.LuaDoclet"
2021-02-13 12:39:52 +00:00
options.noTimestamp = false
2020-07-03 13:31:26 +01:00
2021-02-13 12:39:52 +00:00
javadocTool = javaToolchains.javadocToolFor {
languageVersion = JavaLanguageVersion.of(11)
2020-07-03 13:31:26 +01:00
}
}
2017-05-14 17:00:14 +01:00
jar {
manifest {
2019-04-02 13:27:27 +01:00
attributes(["Specification-Title": "computercraft",
"Specification-Vendor": "SquidDev",
2019-07-21 09:41:58 +01:00
"Specification-Version": "1",
2019-04-02 13:27:27 +01:00
"Implementation-Title": "CC: Tweaked",
"Implementation-Version": "${mod_version}",
"Implementation-Vendor" :"SquidDev",
"Implementation-Timestamp": new Date().format("yyyy-MM-dd'T'HH:mm:ssZ")])
2017-05-14 17:00:14 +01:00
}
from configurations.shade.collect { it.isDirectory() ? it : zipTree(it) }
2017-05-14 17:00:14 +01:00
}
2019-06-15 11:05:45 +01:00
[compileJava, compileTestJava].forEach {
it.configure {
2019-12-24 19:16:06 +00:00
options.compilerArgs << "-Xlint" << "-Xlint:-processing"
2019-06-15 11:05:45 +01:00
}
}
processResources {
2019-03-19 11:47:12 +00:00
inputs.property "version", mod_version
2019-02-20 09:48:16 +00:00
inputs.property "mcversion", mc_version
2017-05-01 14:32:39 +01:00
2019-01-28 14:05:30 +00:00
def hash = 'none'
2017-05-24 13:20:46 -04:00
Set<String> contributors = []
2019-01-28 14:05:30 +00:00
try {
2021-01-16 15:40:42 +00:00
hash = ["git", "-C", projectDir, "rev-parse", "HEAD"].execute().text.trim()
2017-07-06 17:23:35 +01:00
2019-01-28 14:05:30 +00:00
def blacklist = ['GitHub', 'dan200', 'Daniel Ratcliffe']
2021-01-16 15:40:42 +00:00
["git", "-C", projectDir, "log", "--format=tformat:%an%n%cn"].execute().text.split('\n').each {
if (!blacklist.contains(it)) contributors.add(it)
2019-01-28 14:05:30 +00:00
}
2021-01-16 15:40:42 +00:00
} catch(Exception e) {
e.printStackTrace()
}
2019-01-28 14:05:30 +00:00
inputs.property "commithash", hash
2021-06-09 18:00:20 +01:00
duplicatesStrategy = DuplicatesStrategy.INCLUDE
2017-05-24 13:20:46 -04:00
2017-05-01 14:32:39 +01:00
from(sourceSets.main.resources.srcDirs) {
2019-04-02 13:27:27 +01:00
include 'META-INF/mods.toml'
include 'data/computercraft/lua/rom/help/credits.txt'
2017-05-24 13:20:46 -04:00
2019-03-19 11:47:12 +00:00
expand 'version': mod_version,
2019-02-20 09:48:16 +00:00
'mcversion': mc_version,
'gitcontributors': contributors.sort(false, String.CASE_INSENSITIVE_ORDER).join('\n')
2017-07-06 17:23:35 +01:00
}
2017-05-01 14:32:39 +01:00
from(sourceSets.main.resources.srcDirs) {
2019-04-02 13:27:27 +01:00
exclude 'META-INF/mods.toml'
exclude 'data/computercraft/lua/rom/help/credits.txt'
2017-05-01 14:32:39 +01:00
}
}
2021-06-09 18:00:20 +01:00
sourcesJar {
duplicatesStrategy = DuplicatesStrategy.INCLUDE
}
2020-11-12 19:01:50 +00:00
// Web tasks
import org.apache.tools.ant.taskdefs.condition.Os
List<String> mkCommand(String command) {
return Os.isFamily(Os.FAMILY_WINDOWS) ? ["cmd", "/c", command] : ["sh", "-c", command]
}
task rollup(type: Exec) {
group = "build"
description = "Bundles JS into rollup"
inputs.files(fileTree("src/web")).withPropertyName("sources")
inputs.file("package-lock.json").withPropertyName("package-lock.json")
inputs.file("tsconfig.json").withPropertyName("Typescript config")
inputs.file("rollup.config.js").withPropertyName("Rollup config")
outputs.file("$buildDir/rollup/index.js").withPropertyName("output")
commandLine mkCommand('"node_modules/.bin/rollup" --config rollup.config.js')
}
task minifyWeb(type: Exec, dependsOn: rollup) {
group = "build"
description = "Bundles JS into rollup"
inputs.file("$buildDir/rollup/index.js").withPropertyName("sources")
inputs.file("package-lock.json").withPropertyName("package-lock.json")
outputs.file("$buildDir/rollup/index.min.js").withPropertyName("output")
2020-12-25 17:42:53 +00:00
commandLine mkCommand('"node_modules/.bin/terser"' + " -o '$buildDir/rollup/index.min.js' '$buildDir/rollup/index.js'")
2020-11-12 19:01:50 +00:00
}
task illuaminateDocs(type: Exec, dependsOn: [minifyWeb, luaJavadoc]) {
group = "build"
description = "Bundles JS into rollup"
2020-11-20 19:36:28 +00:00
inputs.files(fileTree("doc")).withPropertyName("docs")
inputs.files(fileTree("src/main/resources/data/computercraft/lua/rom")).withPropertyName("lua rom")
2020-11-12 19:01:50 +00:00
inputs.file("illuaminate.sexp").withPropertyName("illuaminate.sexp")
2020-12-10 22:16:49 +00:00
inputs.dir("$buildDir/docs/luaJavadoc")
2020-11-12 19:01:50 +00:00
inputs.file("$buildDir/rollup/index.min.js").withPropertyName("scripts")
inputs.file("src/web/styles.css").withPropertyName("styles")
outputs.dir("$buildDir/docs/lua")
commandLine mkCommand('"bin/illuaminate" doc-gen')
}
task docWebsite(type: Copy, dependsOn: [illuaminateDocs]) {
from 'doc/logo.png'
into "${project.docsDir}/lua"
}
2019-06-15 11:05:45 +01:00
// Check tasks
test {
useJUnitPlatform()
testLogging {
events "skipped", "failed"
}
}
2020-05-11 15:41:39 +01:00
jacocoTestReport {
2021-01-15 09:54:38 +00:00
dependsOn('test')
2020-05-11 15:41:39 +01:00
reports {
xml.enabled true
html.enabled true
}
}
check.dependsOn jacocoTestReport
2021-05-21 22:11:25 +01:00
import com.hierynomus.gradle.license.tasks.LicenseCheck
import com.hierynomus.gradle.license.tasks.LicenseFormat
license {
mapping("java", "SLASHSTAR_STYLE")
strictCheck true
ext.year = Calendar.getInstance().get(Calendar.YEAR)
}
[licenseMain, licenseFormatMain].forEach {
it.configure {
include("**/*.java")
exclude("dan200/computercraft/api/**")
2021-01-08 16:16:56 +00:00
header file('config/license/main.txt')
}
}
[licenseTest, licenseFormatTest].forEach {
it.configure {
include("**/*.java")
2021-01-08 16:16:56 +00:00
header file('config/license/main.txt')
}
}
2019-06-15 11:05:45 +01:00
gradle.projectsEvaluated {
tasks.withType(LicenseFormat) {
outputs.upToDateWhen { false }
}
}
task licenseAPI(type: LicenseCheck);
task licenseFormatAPI(type: LicenseFormat);
[licenseAPI, licenseFormatAPI].forEach {
it.configure {
source = sourceSets.main.java
include("dan200/computercraft/api/**")
2021-01-08 16:16:56 +00:00
header file('config/license/api.txt')
}
}
2021-01-09 19:50:27 +00:00
task setupServer(type: Copy) {
2021-01-15 09:54:38 +00:00
group "test server"
description "Sets up the environment for the test server."
2021-01-09 19:50:27 +00:00
from("src/test/server-files") {
include "eula.txt"
include "server.properties"
}
into "test-files/server"
}
2021-01-15 09:54:38 +00:00
tasks.register('testInGame', JavaExec.class).configure {
it.group('test server')
it.description("Runs tests on a temporary Minecraft server.")
2021-05-29 15:11:29 +01:00
it.dependsOn(setupServer, 'prepareRunTestServer', 'cleanTestInGame')
2021-01-15 09:54:38 +00:00
// Copy from runTestServer. We do it in this slightly odd way as runTestServer
// isn't created until the task is configured (which is no good for us).
JavaExec exec = tasks.getByName('runTestServer')
it.setWorkingDir(exec.getWorkingDir())
it.setSystemProperties(exec.getSystemProperties())
it.setBootstrapClasspath(exec.getBootstrapClasspath())
it.setClasspath(exec.getClasspath())
it.setMain(exec.getMain())
it.setEnvironment(exec.getEnvironment())
it.setArgs(exec.getArgs())
it.setJvmArgs(exec.getJvmArgs())
it.systemProperty('forge.logging.console.level', 'info')
it.systemProperty('cctest.run', 'true')
// Jacoco and modlauncher don't play well together as the classes loaded in-game don't
// match up with those written to disk. We get Jacoco to dump all classes to disk, and
// use that when generating the report.
def coverageOut = new File(buildDir, 'jacocoClassDump/testInGame')
jacoco.applyTo(it)
it.jacoco.setIncludes(["dan200.computercraft.*"])
it.jacoco.setClassDumpDir(coverageOut)
2021-01-15 16:35:49 +00:00
it.outputs.dir(coverageOut)
2021-01-15 09:54:38 +00:00
// Older versions of modlauncher don't include a protection domain (and thus no code
// source). Jacoco skips such classes by default, so we need to explicitly include them.
it.jacoco.setIncludeNoLocationClasses(true)
}
tasks.register('jacocoTestInGameReport', JacocoReport.class).configure {
it.group('test server')
it.description('Generate coverage reports for in-game tests (testInGame)')
it.dependsOn('testInGame')
it.executionData(new File(buildDir, 'jacoco/testInGame.exec'))
2021-02-13 12:48:59 +00:00
it.sourceDirectories.from(sourceSets.main.allJava.srcDirs)
it.classDirectories.from(new File(buildDir, 'jacocoClassDump/testInGame'))
2021-01-15 09:54:38 +00:00
it.reports {
xml.enabled true
html.enabled true
}
}
check.dependsOn('jacocoTestInGameReport')
2019-06-15 11:05:45 +01:00
// Upload tasks
2019-06-02 16:11:18 +01:00
task checkRelease {
group "upload"
description "Verifies that everything is ready for a release"
inputs.property "version", mod_version
inputs.file("src/main/resources/data/computercraft/lua/rom/help/changelog.md")
inputs.file("src/main/resources/data/computercraft/lua/rom/help/whatsnew.md")
doLast {
def ok = true
// Check we're targetting the current version
def whatsnew = new File(projectDir, "src/main/resources/data/computercraft/lua/rom/help/whatsnew.md").readLines()
if (whatsnew[0] != "New features in CC: Tweaked $mod_version") {
ok = false
project.logger.error("Expected `whatsnew.md' to target $mod_version.")
}
// Check "read more" exists and trim it
def idx = whatsnew.findIndexOf { it == 'Type "help changelog" to see the full version history.' }
if (idx == -1) {
ok = false
project.logger.error("Must mention the changelog in whatsnew.md")
} else {
whatsnew = whatsnew.getAt(0 ..< idx)
}
// Check whatsnew and changelog match.
def versionChangelog = "# " + whatsnew.join("\n")
def changelog = new File(projectDir, "src/main/resources/data/computercraft/lua/rom/help/changelog.md").getText()
if (!changelog.startsWith(versionChangelog)) {
ok = false
project.logger.error("whatsnew and changelog are not in sync")
}
if (!ok) throw new IllegalStateException("Could not check release")
}
}
2019-10-30 17:07:29 +00:00
check.dependsOn checkRelease
2017-12-01 20:05:26 +00:00
curseforge {
apiKey = project.hasProperty('curseForgeApiKey') ? project.curseForgeApiKey : ''
project {
id = '282001'
2020-06-16 09:45:42 +01:00
releaseType = 'release'
2019-04-02 21:33:55 +01:00
changelog = "Release notes can be found on the GitHub repository (https://github.com/SquidDev-CC/CC-Tweaked/releases/tag/v${mc_version}-${mod_version})."
relations {
incompatible "computercraft"
}
2017-12-01 20:05:26 +00:00
}
}
2021-06-09 18:00:20 +01:00
import com.modrinth.minotaur.TaskModrinthUpload
tasks.register('publishModrinth', TaskModrinthUpload.class).configure {
dependsOn('assemble', 'reobfJar')
onlyIf {
project.hasProperty('modrinthApiKey')
}
token = project.hasProperty('modrinthApiKey') ? project.getProperty('modrinthApiKey') : ''
2021-06-09 18:00:20 +01:00
projectId = 'gu7yAYhd'
2021-06-28 23:20:54 +01:00
versionNumber = "${project.mc_version}-${project.mod_version}"
2021-06-09 18:00:20 +01:00
uploadFile = jar
addGameVersion(project.mc_version)
2021-06-28 23:20:54 +01:00
changelog = "Release notes can be found on the [GitHub repository](https://github.com/SquidDev-CC/CC-Tweaked/releases/tag/v${mc_version}-${mod_version})."
2021-06-09 18:00:20 +01:00
addLoader('forge')
}
2021-05-20 19:03:30 +01:00
tasks.withType(GenerateModuleMetadata) {
// We can't generate metadata as that includes Forge as a dependency.
enabled = false
}
2018-04-19 22:36:00 +01:00
publishing {
publications {
2021-04-24 11:26:04 +01:00
maven(MavenPublication) {
2018-04-19 22:36:00 +01:00
from components.java
2021-04-24 11:26:04 +01:00
pom {
name = 'CC: Tweaked'
description = 'CC: Tweaked is a fork of ComputerCraft, adding programmable computers, turtles and more to Minecraft.'
url = 'https://github.com/SquidDev-CC/CC-Tweaked'
scm {
url = 'https://github.com/SquidDev-CC/CC-Tweaked.git'
}
issueManagement {
system = 'github'
url = 'https://github.com/SquidDev-CC/CC-Tweaked/issues'
}
licenses {
license {
name = 'ComputerCraft Public License, Version 1.0'
url = 'https://github.com/SquidDev-CC/CC-Tweaked/blob/mc-1.15.x/LICENSE'
}
}
2021-05-20 19:03:30 +01:00
withXml { asNode().remove(asNode().get("dependencies")) }
2021-04-24 11:26:04 +01:00
}
2018-04-19 22:36:00 +01:00
}
}
repositories {
2021-04-24 11:26:04 +01:00
if (project.hasProperty("mavenUser")) {
maven {
name = "SquidDev"
url = "https://squiddev.cc/maven"
credentials {
username = project.property("mavenUser") as String
password = project.property("mavenPass") as String
2018-04-20 19:39:53 +01:00
}
2018-04-19 22:36:00 +01:00
}
}
}
}
2019-04-07 15:30:27 +01:00
githubRelease {
token project.hasProperty('githubApiKey') ? project.githubApiKey : ''
owner 'SquidDev-CC'
repo 'CC-Tweaked'
2021-01-16 15:40:42 +00:00
targetCommitish.set(project.provider({
try {
return ["git", "-C", projectDir, "rev-parse", "--abbrev-ref", "HEAD"].execute().text.trim()
} catch (Exception e) {
e.printStackTrace()
}
return "master"
}))
2019-04-07 15:30:27 +01:00
tagName "v${mc_version}-${mod_version}"
releaseName "[${mc_version}] ${mod_version}"
2021-01-16 15:40:42 +00:00
body.set(project.provider({
2021-06-28 23:07:36 +01:00
"## " + new File(projectDir, "src/main/resources/data/computercraft/lua/rom/help/whatsnew.md")
.readLines()
.takeWhile { it != 'Type "help changelog" to see the full version history.' }
.join("\n").trim()
2021-01-16 15:40:42 +00:00
}))
2020-06-16 09:45:42 +01:00
prerelease false
2019-04-07 15:30:27 +01:00
}
2021-06-09 18:00:20 +01:00
def uploadTasks = ["publish", "curseforge", "publishModrinth", "githubRelease"]
2019-06-01 09:23:18 +01:00
uploadTasks.forEach { tasks.getByName(it).dependsOn checkRelease }
task uploadAll(dependsOn: uploadTasks) {
2019-04-16 10:32:49 +01:00
group "upload"
2021-06-09 18:00:20 +01:00
description "Uploads to all repositories (Maven, Curse, Modrinth, GitHub release)"
2019-04-16 10:32:49 +01:00
}