2017-05-01 13:32:39 +00:00
buildscript {
repositories {
Update CC: Tweaked to 1.13
Look, I originally had this split into several commits, but lots of
other cleanups got mixed in. I then backported some of the cleanups to
1.12, did other tidy ups there, and eventually the web of merges was
unreadable.
Yes, this is a horrible mess, but it's still nicer than it was. Anyway,
changes:
- Flatten everything. For instance, there are now three instances of
BlockComputer, two BlockTurtle, ItemPocketComputer. There's also no
more BlockPeripheral (thank heavens) - there's separate block classes
for each peripheral type.
- Remove pretty much all legacy code. As we're breaking world
compatibility anyway, we can remove all the code to load worlds from
1.4 days.
- The command system is largely rewriten to take advantage of 1.13's
new system. It's very fancy!
- WidgetTerminal now uses Minecraft's "GUI listener" system.
- BREAKING CHANGE: All the codes in keys.lua are different, due to the
move to LWJGL 3. Hopefully this won't have too much of an impact.
I don't want to map to the old key codes on the Java side, as there
always ends up being small but slight inconsistencies. IMO it's
better to make a clean break - people should be using keys rather
than hard coding the constants anyway.
- commands.list now allows fetching sub-commands. The ROM has already
been updated to allow fancy usage such as commands.time.set("noon").
- Turtles, modems and cables can be waterlogged.
2019-04-02 12:27:27 +00:00
mavenCentral ( )
2021-08-18 09:00:12 +00:00
maven { url = "https://maven.minecraftforge.net" }
maven { url = 'https://maven.parchmentmc.org' }
2017-05-01 13:32:39 +00:00
}
dependencies {
2021-08-18 09:00:12 +00:00
classpath 'net.minecraftforge.gradle:ForgeGradle:5.1.+'
2021-12-13 13:30:43 +00:00
classpath "org.spongepowered:mixingradle:0.7.+"
2021-08-18 09:00:12 +00:00
classpath 'org.parchmentmc:librarian:1.+'
2017-05-01 13:32:39 +00:00
}
}
plugins {
2019-06-07 23:28:03 +00:00
id "checkstyle"
2020-05-11 14:41:39 +00:00
id "jacoco"
2021-04-24 10:26:04 +00:00
id "maven-publish"
2021-06-09 17:00:20 +00: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-11-26 21:12:20 +00:00
id "org.jetbrains.kotlin.jvm" version "1.6.0"
2021-06-09 17:00:20 +00:00
id "com.modrinth.minotaur" version "1.2.1"
2017-05-01 13:32:39 +00:00
}
Update CC: Tweaked to 1.13
Look, I originally had this split into several commits, but lots of
other cleanups got mixed in. I then backported some of the cleanups to
1.12, did other tidy ups there, and eventually the web of merges was
unreadable.
Yes, this is a horrible mess, but it's still nicer than it was. Anyway,
changes:
- Flatten everything. For instance, there are now three instances of
BlockComputer, two BlockTurtle, ItemPocketComputer. There's also no
more BlockPeripheral (thank heavens) - there's separate block classes
for each peripheral type.
- Remove pretty much all legacy code. As we're breaking world
compatibility anyway, we can remove all the code to load worlds from
1.4 days.
- The command system is largely rewriten to take advantage of 1.13's
new system. It's very fancy!
- WidgetTerminal now uses Minecraft's "GUI listener" system.
- BREAKING CHANGE: All the codes in keys.lua are different, due to the
move to LWJGL 3. Hopefully this won't have too much of an impact.
I don't want to map to the old key codes on the Java side, as there
always ends up being small but slight inconsistencies. IMO it's
better to make a clean break - people should be using keys rather
than hard coding the constants anyway.
- commands.list now allows fetching sub-commands. The ROM has already
been updated to allow fancy usage such as commands.time.set("noon").
- Turtles, modems and cables can be waterlogged.
2019-04-02 12:27:27 +00:00
apply plugin: 'net.minecraftforge.gradle'
2021-12-13 13:30:43 +00:00
apply plugin: "org.spongepowered.mixin"
2021-08-18 09:00:12 +00:00
apply plugin: 'org.parchmentmc.librarian.forgegradle'
2017-12-01 20:05:26 +00: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 13:32:39 +00:00
2021-06-09 17:00:20 +00:00
def javaVersion = JavaLanguageVersion . of ( 8 )
2021-02-13 12:39:52 +00:00
java {
toolchain {
2021-06-09 17:00:20 +00:00
languageVersion = javaVersion
2021-02-13 12:39:52 +00:00
}
2021-04-24 10:26:04 +00:00
withSourcesJar ( )
withJavadocJar ( )
2021-02-13 12:39:52 +00:00
}
Generate documentation stubs from Javadocs
illuaminate does not handle Java files, for obvious reasons. In order to
get around that, we have a series of stub files within /doc/stub which
mirrored the Java ones. While this works, it has a few problems:
- The link to source code does not work - it just links to the stub
file.
- There's no guarantee that documentation remains consistent with the
Java code. This change found several methods which were incorrectly
documented beforehand.
We now replace this with a custom Java doclet[1], which extracts doc
comments from @LuaFunction annotated methods and generates stub-files
from them. These also contain a @source annotation, which allows us to
correctly link them back to the original Java code.
There's some issues with this which have yet to be fixed. However, I
don't think any of them are major blockers right now:
- The custom doclet relies on Java 9 - I think it's /technically/
possible to do this on Java 8, but the API is significantly uglier.
This means that we need to run javadoc on a separate JVM.
This is possible, and it works locally and on CI, but is definitely
not a nice approach.
- illuaminate now requires the doc stubs to be generated in order for
the linter to pass, which does make running the linter locally much
harder (especially given the above bullet point).
We could notionally include the generated stubs (or at least a cut
down version of them) in the repo, but I'm not 100% sure about that.
[1]: https://docs.oracle.com/javase/9/docs/api/jdk/javadoc/doclet/package-summary.html
2020-07-03 12:31:26 +00:00
2021-06-09 17:00:20 +00:00
tasks . withType ( JavaExec ) . configureEach {
javaLauncher = javaToolchains . launcherFor {
languageVersion = javaVersion
}
}
2021-08-17 13:00:59 +00:00
sourceSets {
main . resources {
srcDir 'src/generated/resources'
}
testMod { }
}
2017-05-01 13:32:39 +00:00
minecraft {
Update CC: Tweaked to 1.13
Look, I originally had this split into several commits, but lots of
other cleanups got mixed in. I then backported some of the cleanups to
1.12, did other tidy ups there, and eventually the web of merges was
unreadable.
Yes, this is a horrible mess, but it's still nicer than it was. Anyway,
changes:
- Flatten everything. For instance, there are now three instances of
BlockComputer, two BlockTurtle, ItemPocketComputer. There's also no
more BlockPeripheral (thank heavens) - there's separate block classes
for each peripheral type.
- Remove pretty much all legacy code. As we're breaking world
compatibility anyway, we can remove all the code to load worlds from
1.4 days.
- The command system is largely rewriten to take advantage of 1.13's
new system. It's very fancy!
- WidgetTerminal now uses Minecraft's "GUI listener" system.
- BREAKING CHANGE: All the codes in keys.lua are different, due to the
move to LWJGL 3. Hopefully this won't have too much of an impact.
I don't want to map to the old key codes on the Java side, as there
always ends up being small but slight inconsistencies. IMO it's
better to make a clean break - people should be using keys rather
than hard coding the constants anyway.
- commands.list now allows fetching sub-commands. The ROM has already
been updated to allow fancy usage such as commands.time.set("noon").
- Turtles, modems and cables can be waterlogged.
2019-04-02 12:27:27 +00:00
runs {
2021-08-17 13:00:59 +00:00
all {
Update CC: Tweaked to 1.13
Look, I originally had this split into several commits, but lots of
other cleanups got mixed in. I then backported some of the cleanups to
1.12, did other tidy ups there, and eventually the web of merges was
unreadable.
Yes, this is a horrible mess, but it's still nicer than it was. Anyway,
changes:
- Flatten everything. For instance, there are now three instances of
BlockComputer, two BlockTurtle, ItemPocketComputer. There's also no
more BlockPeripheral (thank heavens) - there's separate block classes
for each peripheral type.
- Remove pretty much all legacy code. As we're breaking world
compatibility anyway, we can remove all the code to load worlds from
1.4 days.
- The command system is largely rewriten to take advantage of 1.13's
new system. It's very fancy!
- WidgetTerminal now uses Minecraft's "GUI listener" system.
- BREAKING CHANGE: All the codes in keys.lua are different, due to the
move to LWJGL 3. Hopefully this won't have too much of an impact.
I don't want to map to the old key codes on the Java side, as there
always ends up being small but slight inconsistencies. IMO it's
better to make a clean break - people should be using keys rather
than hard coding the constants anyway.
- commands.list now allows fetching sub-commands. The ROM has already
been updated to allow fancy usage such as commands.time.set("noon").
- Turtles, modems and cables can be waterlogged.
2019-04-02 12:27:27 +00:00
property 'forge.logging.markers' , 'REGISTRIES'
property 'forge.logging.console.level' , 'debug'
mods {
computercraft {
source sourceSets . main
}
}
2021-12-13 13:30:43 +00:00
arg "-mixin.config=computercraft.mixins.json"
Update CC: Tweaked to 1.13
Look, I originally had this split into several commits, but lots of
other cleanups got mixed in. I then backported some of the cleanups to
1.12, did other tidy ups there, and eventually the web of merges was
unreadable.
Yes, this is a horrible mess, but it's still nicer than it was. Anyway,
changes:
- Flatten everything. For instance, there are now three instances of
BlockComputer, two BlockTurtle, ItemPocketComputer. There's also no
more BlockPeripheral (thank heavens) - there's separate block classes
for each peripheral type.
- Remove pretty much all legacy code. As we're breaking world
compatibility anyway, we can remove all the code to load worlds from
1.4 days.
- The command system is largely rewriten to take advantage of 1.13's
new system. It's very fancy!
- WidgetTerminal now uses Minecraft's "GUI listener" system.
- BREAKING CHANGE: All the codes in keys.lua are different, due to the
move to LWJGL 3. Hopefully this won't have too much of an impact.
I don't want to map to the old key codes on the Java side, as there
always ends up being small but slight inconsistencies. IMO it's
better to make a clean break - people should be using keys rather
than hard coding the constants anyway.
- commands.list now allows fetching sub-commands. The ROM has already
been updated to allow fancy usage such as commands.time.set("noon").
- Turtles, modems and cables can be waterlogged.
2019-04-02 12:27:27 +00:00
}
2021-08-17 13:00:59 +00:00
client {
workingDirectory project . file ( 'run' )
}
Update CC: Tweaked to 1.13
Look, I originally had this split into several commits, but lots of
other cleanups got mixed in. I then backported some of the cleanups to
1.12, did other tidy ups there, and eventually the web of merges was
unreadable.
Yes, this is a horrible mess, but it's still nicer than it was. Anyway,
changes:
- Flatten everything. For instance, there are now three instances of
BlockComputer, two BlockTurtle, ItemPocketComputer. There's also no
more BlockPeripheral (thank heavens) - there's separate block classes
for each peripheral type.
- Remove pretty much all legacy code. As we're breaking world
compatibility anyway, we can remove all the code to load worlds from
1.4 days.
- The command system is largely rewriten to take advantage of 1.13's
new system. It's very fancy!
- WidgetTerminal now uses Minecraft's "GUI listener" system.
- BREAKING CHANGE: All the codes in keys.lua are different, due to the
move to LWJGL 3. Hopefully this won't have too much of an impact.
I don't want to map to the old key codes on the Java side, as there
always ends up being small but slight inconsistencies. IMO it's
better to make a clean break - people should be using keys rather
than hard coding the constants anyway.
- commands.list now allows fetching sub-commands. The ROM has already
been updated to allow fancy usage such as commands.time.set("noon").
- Turtles, modems and cables can be waterlogged.
2019-04-02 12:27:27 +00:00
server {
2021-01-08 16:16:56 +00:00
workingDirectory project . file ( "run/server" )
2021-01-09 19:50:27 +00:00
arg "--nogui"
Update CC: Tweaked to 1.13
Look, I originally had this split into several commits, but lots of
other cleanups got mixed in. I then backported some of the cleanups to
1.12, did other tidy ups there, and eventually the web of merges was
unreadable.
Yes, this is a horrible mess, but it's still nicer than it was. Anyway,
changes:
- Flatten everything. For instance, there are now three instances of
BlockComputer, two BlockTurtle, ItemPocketComputer. There's also no
more BlockPeripheral (thank heavens) - there's separate block classes
for each peripheral type.
- Remove pretty much all legacy code. As we're breaking world
compatibility anyway, we can remove all the code to load worlds from
1.4 days.
- The command system is largely rewriten to take advantage of 1.13's
new system. It's very fancy!
- WidgetTerminal now uses Minecraft's "GUI listener" system.
- BREAKING CHANGE: All the codes in keys.lua are different, due to the
move to LWJGL 3. Hopefully this won't have too much of an impact.
I don't want to map to the old key codes on the Java side, as there
always ends up being small but slight inconsistencies. IMO it's
better to make a clean break - people should be using keys rather
than hard coding the constants anyway.
- commands.list now allows fetching sub-commands. The ROM has already
been updated to allow fancy usage such as commands.time.set("noon").
- Turtles, modems and cables can be waterlogged.
2019-04-02 12:27:27 +00:00
}
2020-01-29 16:41:26 +00:00
data {
workingDirectory project . file ( 'run' )
args '--mod' , 'computercraft' , '--all' , '--output' , file ( 'src/generated/resources/' ) , '--existing' , file ( 'src/main/resources/' )
}
2021-01-09 19:50:27 +00:00
2021-08-20 12:32:42 +00:00
testClient {
workingDirectory project . file ( 'test-files/client' )
parent runs . client
mods {
cctest {
source sourceSets . testMod
}
}
}
2021-01-09 19:50:27 +00:00
testServer {
workingDirectory project . file ( 'test-files/server' )
parent runs . server
mods {
cctest {
2021-08-17 13:00:59 +00:00
source sourceSets . testMod
2021-01-09 19:50:27 +00:00
}
}
}
Update CC: Tweaked to 1.13
Look, I originally had this split into several commits, but lots of
other cleanups got mixed in. I then backported some of the cleanups to
1.12, did other tidy ups there, and eventually the web of merges was
unreadable.
Yes, this is a horrible mess, but it's still nicer than it was. Anyway,
changes:
- Flatten everything. For instance, there are now three instances of
BlockComputer, two BlockTurtle, ItemPocketComputer. There's also no
more BlockPeripheral (thank heavens) - there's separate block classes
for each peripheral type.
- Remove pretty much all legacy code. As we're breaking world
compatibility anyway, we can remove all the code to load worlds from
1.4 days.
- The command system is largely rewriten to take advantage of 1.13's
new system. It's very fancy!
- WidgetTerminal now uses Minecraft's "GUI listener" system.
- BREAKING CHANGE: All the codes in keys.lua are different, due to the
move to LWJGL 3. Hopefully this won't have too much of an impact.
I don't want to map to the old key codes on the Java side, as there
always ends up being small but slight inconsistencies. IMO it's
better to make a clean break - people should be using keys rather
than hard coding the constants anyway.
- commands.list now allows fetching sub-commands. The ROM has already
been updated to allow fancy usage such as commands.time.set("noon").
- Turtles, modems and cables can be waterlogged.
2019-04-02 12:27:27 +00:00
}
2019-03-19 11:47:12 +00:00
2021-08-18 09:00:12 +00:00
mappings channel: 'parchment' , version: "${mapping_version}-${mc_version}"
Update CC: Tweaked to 1.13
Look, I originally had this split into several commits, but lots of
other cleanups got mixed in. I then backported some of the cleanups to
1.12, did other tidy ups there, and eventually the web of merges was
unreadable.
Yes, this is a horrible mess, but it's still nicer than it was. Anyway,
changes:
- Flatten everything. For instance, there are now three instances of
BlockComputer, two BlockTurtle, ItemPocketComputer. There's also no
more BlockPeripheral (thank heavens) - there's separate block classes
for each peripheral type.
- Remove pretty much all legacy code. As we're breaking world
compatibility anyway, we can remove all the code to load worlds from
1.4 days.
- The command system is largely rewriten to take advantage of 1.13's
new system. It's very fancy!
- WidgetTerminal now uses Minecraft's "GUI listener" system.
- BREAKING CHANGE: All the codes in keys.lua are different, due to the
move to LWJGL 3. Hopefully this won't have too much of an impact.
I don't want to map to the old key codes on the Java side, as there
always ends up being small but slight inconsistencies. IMO it's
better to make a clean break - people should be using keys rather
than hard coding the constants anyway.
- commands.list now allows fetching sub-commands. The ROM has already
been updated to allow fancy usage such as commands.time.set("noon").
- Turtles, modems and cables can be waterlogged.
2019-04-02 12:27:27 +00:00
accessTransformer file ( 'src/main/resources/META-INF/accesstransformer.cfg' )
2021-08-17 13:00:59 +00:00
accessTransformer file ( 'src/testMod/resources/META-INF/accesstransformer.cfg' )
2020-01-29 16:41:26 +00:00
}
2021-12-13 13:30:43 +00:00
mixin {
add sourceSets . main , 'computercraft.mixins.refmap.json'
}
2017-10-25 12:40:35 +00:00
repositories {
Generate documentation stubs from Javadocs
illuaminate does not handle Java files, for obvious reasons. In order to
get around that, we have a series of stub files within /doc/stub which
mirrored the Java ones. While this works, it has a few problems:
- The link to source code does not work - it just links to the stub
file.
- There's no guarantee that documentation remains consistent with the
Java code. This change found several methods which were incorrectly
documented beforehand.
We now replace this with a custom Java doclet[1], which extracts doc
comments from @LuaFunction annotated methods and generates stub-files
from them. These also contain a @source annotation, which allows us to
correctly link them back to the original Java code.
There's some issues with this which have yet to be fixed. However, I
don't think any of them are major blockers right now:
- The custom doclet relies on Java 9 - I think it's /technically/
possible to do this on Java 8, but the API is significantly uglier.
This means that we need to run javadoc on a separate JVM.
This is possible, and it works locally and on CI, but is definitely
not a nice approach.
- illuaminate now requires the doc stubs to be generated in order for
the linter to pass, which does make running the linter locally much
harder (especially given the above bullet point).
We could notionally include the generated stubs (or at least a cut
down version of them) in the repo, but I'm not 100% sure about that.
[1]: https://docs.oracle.com/javase/9/docs/api/jdk/javadoc/doclet/package-summary.html
2020-07-03 12:31:26 +00:00
mavenCentral ( )
2017-05-01 16:49:22 +00:00
maven {
2019-03-19 11:47:12 +00:00
name "SquidDev"
url "https://squiddev.cc/maven"
}
2017-05-01 16:49:22 +00:00
}
configurations {
shade
2021-08-18 09:00:12 +00:00
implementation . extendsFrom shade
Generate documentation stubs from Javadocs
illuaminate does not handle Java files, for obvious reasons. In order to
get around that, we have a series of stub files within /doc/stub which
mirrored the Java ones. While this works, it has a few problems:
- The link to source code does not work - it just links to the stub
file.
- There's no guarantee that documentation remains consistent with the
Java code. This change found several methods which were incorrectly
documented beforehand.
We now replace this with a custom Java doclet[1], which extracts doc
comments from @LuaFunction annotated methods and generates stub-files
from them. These also contain a @source annotation, which allows us to
correctly link them back to the original Java code.
There's some issues with this which have yet to be fixed. However, I
don't think any of them are major blockers right now:
- The custom doclet relies on Java 9 - I think it's /technically/
possible to do this on Java 8, but the API is significantly uglier.
This means that we need to run javadoc on a separate JVM.
This is possible, and it works locally and on CI, but is definitely
not a nice approach.
- illuaminate now requires the doc stubs to be generated in order for
the linter to pass, which does make running the linter locally much
harder (especially given the above bullet point).
We could notionally include the generated stubs (or at least a cut
down version of them) in the repo, but I'm not 100% sure about that.
[1]: https://docs.oracle.com/javase/9/docs/api/jdk/javadoc/doclet/package-summary.html
2020-07-03 12:31:26 +00:00
cctJavadoc
2021-08-17 13:00:59 +00:00
testModImplementation . extendsFrom ( implementation )
testModImplementation . extendsFrom ( testImplementation )
2017-10-25 12:40:35 +00:00
}
2017-05-01 13:32:39 +00:00
2017-10-25 12:40:35 +00:00
dependencies {
2019-10-27 15:16:47 +00:00
checkstyle "com.puppycrawl.tools:checkstyle:8.25"
2019-06-07 23:28:03 +00:00
Update CC: Tweaked to 1.13
Look, I originally had this split into several commits, but lots of
other cleanups got mixed in. I then backported some of the cleanups to
1.12, did other tidy ups there, and eventually the web of merges was
unreadable.
Yes, this is a horrible mess, but it's still nicer than it was. Anyway,
changes:
- Flatten everything. For instance, there are now three instances of
BlockComputer, two BlockTurtle, ItemPocketComputer. There's also no
more BlockPeripheral (thank heavens) - there's separate block classes
for each peripheral type.
- Remove pretty much all legacy code. As we're breaking world
compatibility anyway, we can remove all the code to load worlds from
1.4 days.
- The command system is largely rewriten to take advantage of 1.13's
new system. It's very fancy!
- WidgetTerminal now uses Minecraft's "GUI listener" system.
- BREAKING CHANGE: All the codes in keys.lua are different, due to the
move to LWJGL 3. Hopefully this won't have too much of an impact.
I don't want to map to the old key codes on the Java side, as there
always ends up being small but slight inconsistencies. IMO it's
better to make a clean break - people should be using keys rather
than hard coding the constants anyway.
- commands.list now allows fetching sub-commands. The ROM has already
been updated to allow fancy usage such as commands.time.set("noon").
- Turtles, modems and cables can be waterlogged.
2019-04-02 12:27:27 +00:00
minecraft "net.minecraftforge:forge:${mc_version}-${forge_version}"
2021-12-13 13:30:43 +00:00
annotationProcessor 'org.spongepowered:mixin:0.8.4:processor'
Update CC: Tweaked to 1.13
Look, I originally had this split into several commits, but lots of
other cleanups got mixed in. I then backported some of the cleanups to
1.12, did other tidy ups there, and eventually the web of merges was
unreadable.
Yes, this is a horrible mess, but it's still nicer than it was. Anyway,
changes:
- Flatten everything. For instance, there are now three instances of
BlockComputer, two BlockTurtle, ItemPocketComputer. There's also no
more BlockPeripheral (thank heavens) - there's separate block classes
for each peripheral type.
- Remove pretty much all legacy code. As we're breaking world
compatibility anyway, we can remove all the code to load worlds from
1.4 days.
- The command system is largely rewriten to take advantage of 1.13's
new system. It's very fancy!
- WidgetTerminal now uses Minecraft's "GUI listener" system.
- BREAKING CHANGE: All the codes in keys.lua are different, due to the
move to LWJGL 3. Hopefully this won't have too much of an impact.
I don't want to map to the old key codes on the Java side, as there
always ends up being small but slight inconsistencies. IMO it's
better to make a clean break - people should be using keys rather
than hard coding the constants anyway.
- commands.list now allows fetching sub-commands. The ROM has already
been updated to allow fancy usage such as commands.time.set("noon").
- Turtles, modems and cables can be waterlogged.
2019-04-02 12:27:27 +00:00
2021-06-05 11:32:27 +00:00
compileOnly fg . deobf ( "mezz.jei:jei-1.16.5:7.7.0.104:api" )
compileOnly fg . deobf ( "com.blamejared.crafttweaker:CraftTweaker-1.16.5:7.1.0.313" )
2021-06-05 13:48:38 +00:00
compileOnly fg . deobf ( "commoble.morered:morered-1.16.5:2.1.1.0" )
2020-04-22 10:11:02 +00:00
2021-06-05 11:32:27 +00:00
runtimeOnly fg . deobf ( "mezz.jei:jei-1.16.5:7.7.0.104" )
2018-08-11 09:48:41 +00:00
2022-04-29 21:35:41 +00:00
shade 'org.squiddev:Cobalt:0.5.5'
2018-02-21 15:29:34 +00:00
2020-12-05 11:32:00 +00:00
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'
Replace getMethodNames/callMethod with annotations (#447)
When creating a peripheral or custom Lua object, one must implement two
methods:
- getMethodNames(): String[] - Returns the name of the methods
- callMethod(int, ...): Object[] - Invokes the method using an index in
the above array.
This has a couple of problems:
- It's somewhat unwieldy to use - you need to keep track of array
indices, which leads to ugly code.
- Functions which yield (for instance, those which run on the main
thread) are blocking. This means we need to spawn new threads for
each CC-side yield.
We replace this system with a few changes:
- @LuaFunction annotation: One may annotate a public instance method
with this annotation. This then exposes a peripheral/lua object
method.
Furthermore, this method can accept and return a variety of types,
which often makes functions cleaner (e.g. can return an int rather
than an Object[], and specify and int argument rather than
Object[]).
- MethodResult: Instead of returning an Object[] and having blocking
yields, functions return a MethodResult. This either contains an
immediate return, or an instruction to yield with some continuation
to resume with.
MethodResult is then interpreted by the Lua runtime (i.e. Cobalt),
rather than our weird bodgey hacks before. This means we no longer
spawn new threads when yielding within CC.
- Methods accept IArguments instead of a raw Object array. This has a
few benefits:
- Consistent argument handling - people no longer need to use
ArgumentHelper (as it doesn't exist!), or even be aware of its
existence - you're rather forced into using it.
- More efficient code in some cases. We provide a Cobalt-specific
implementation of IArguments, which avoids the boxing/unboxing when
handling numbers and binary strings.
2020-05-15 12:21:16 +00:00
testImplementation 'org.hamcrest:hamcrest:2.2'
2021-11-26 21:12:20 +00:00
testImplementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.0'
testImplementation 'org.jetbrains.kotlin:kotlin-reflect:1.6.0'
testImplementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.2'
Generate documentation stubs from Javadocs
illuaminate does not handle Java files, for obvious reasons. In order to
get around that, we have a series of stub files within /doc/stub which
mirrored the Java ones. While this works, it has a few problems:
- The link to source code does not work - it just links to the stub
file.
- There's no guarantee that documentation remains consistent with the
Java code. This change found several methods which were incorrectly
documented beforehand.
We now replace this with a custom Java doclet[1], which extracts doc
comments from @LuaFunction annotated methods and generates stub-files
from them. These also contain a @source annotation, which allows us to
correctly link them back to the original Java code.
There's some issues with this which have yet to be fixed. However, I
don't think any of them are major blockers right now:
- The custom doclet relies on Java 9 - I think it's /technically/
possible to do this on Java 8, but the API is significantly uglier.
This means that we need to run javadoc on a separate JVM.
This is possible, and it works locally and on CI, but is definitely
not a nice approach.
- illuaminate now requires the doc stubs to be generated in order for
the linter to pass, which does make running the linter locally much
harder (especially given the above bullet point).
We could notionally include the generated stubs (or at least a cut
down version of them) in the repo, but I'm not 100% sure about that.
[1]: https://docs.oracle.com/javase/9/docs/api/jdk/javadoc/doclet/package-summary.html
2020-07-03 12:31:26 +00:00
2021-08-17 13:00:59 +00:00
testModImplementation sourceSets . main . output
2021-12-21 14:39:08 +00:00
cctJavadoc 'cc.tweaked:cct-javadoc:1.4.5'
2017-05-01 13:32:39 +00:00
}
2019-06-15 10:05:45 +00:00
// Compile tasks
2021-08-17 13:00:59 +00:00
compileTestModJava {
dependsOn ( compileJava )
}
2017-11-14 22:37:37 +00:00
javadoc {
include "dan200/computercraft/api/**/*.java"
}
Generate documentation stubs from Javadocs
illuaminate does not handle Java files, for obvious reasons. In order to
get around that, we have a series of stub files within /doc/stub which
mirrored the Java ones. While this works, it has a few problems:
- The link to source code does not work - it just links to the stub
file.
- There's no guarantee that documentation remains consistent with the
Java code. This change found several methods which were incorrectly
documented beforehand.
We now replace this with a custom Java doclet[1], which extracts doc
comments from @LuaFunction annotated methods and generates stub-files
from them. These also contain a @source annotation, which allows us to
correctly link them back to the original Java code.
There's some issues with this which have yet to be fixed. However, I
don't think any of them are major blockers right now:
- The custom doclet relies on Java 9 - I think it's /technically/
possible to do this on Java 8, but the API is significantly uglier.
This means that we need to run javadoc on a separate JVM.
This is possible, and it works locally and on CI, but is definitely
not a nice approach.
- illuaminate now requires the doc stubs to be generated in order for
the linter to pass, which does make running the linter locally much
harder (especially given the above bullet point).
We could notionally include the generated stubs (or at least a cut
down version of them) in the repo, but I'm not 100% sure about that.
[1]: https://docs.oracle.com/javase/9/docs/api/jdk/javadoc/doclet/package-summary.html
2020-07-03 12:31:26 +00: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" )
Generate documentation stubs from Javadocs
illuaminate does not handle Java files, for obvious reasons. In order to
get around that, we have a series of stub files within /doc/stub which
mirrored the Java ones. While this works, it has a few problems:
- The link to source code does not work - it just links to the stub
file.
- There's no guarantee that documentation remains consistent with the
Java code. This change found several methods which were incorrectly
documented beforehand.
We now replace this with a custom Java doclet[1], which extracts doc
comments from @LuaFunction annotated methods and generates stub-files
from them. These also contain a @source annotation, which allows us to
correctly link them back to the original Java code.
There's some issues with this which have yet to be fixed. However, I
don't think any of them are major blockers right now:
- The custom doclet relies on Java 9 - I think it's /technically/
possible to do this on Java 8, but the API is significantly uglier.
This means that we need to run javadoc on a separate JVM.
This is possible, and it works locally and on CI, but is definitely
not a nice approach.
- illuaminate now requires the doc stubs to be generated in order for
the linter to pass, which does make running the linter locally much
harder (especially given the above bullet point).
We could notionally include the generated stubs (or at least a cut
down version of them) in the repo, but I'm not 100% sure about that.
[1]: https://docs.oracle.com/javase/9/docs/api/jdk/javadoc/doclet/package-summary.html
2020-07-03 12:31:26 +00: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
Generate documentation stubs from Javadocs
illuaminate does not handle Java files, for obvious reasons. In order to
get around that, we have a series of stub files within /doc/stub which
mirrored the Java ones. While this works, it has a few problems:
- The link to source code does not work - it just links to the stub
file.
- There's no guarantee that documentation remains consistent with the
Java code. This change found several methods which were incorrectly
documented beforehand.
We now replace this with a custom Java doclet[1], which extracts doc
comments from @LuaFunction annotated methods and generates stub-files
from them. These also contain a @source annotation, which allows us to
correctly link them back to the original Java code.
There's some issues with this which have yet to be fixed. However, I
don't think any of them are major blockers right now:
- The custom doclet relies on Java 9 - I think it's /technically/
possible to do this on Java 8, but the API is significantly uglier.
This means that we need to run javadoc on a separate JVM.
This is possible, and it works locally and on CI, but is definitely
not a nice approach.
- illuaminate now requires the doc stubs to be generated in order for
the linter to pass, which does make running the linter locally much
harder (especially given the above bullet point).
We could notionally include the generated stubs (or at least a cut
down version of them) in the repo, but I'm not 100% sure about that.
[1]: https://docs.oracle.com/javase/9/docs/api/jdk/javadoc/doclet/package-summary.html
2020-07-03 12:31:26 +00:00
2021-02-13 12:39:52 +00:00
javadocTool = javaToolchains . javadocToolFor {
languageVersion = JavaLanguageVersion . of ( 11 )
Generate documentation stubs from Javadocs
illuaminate does not handle Java files, for obvious reasons. In order to
get around that, we have a series of stub files within /doc/stub which
mirrored the Java ones. While this works, it has a few problems:
- The link to source code does not work - it just links to the stub
file.
- There's no guarantee that documentation remains consistent with the
Java code. This change found several methods which were incorrectly
documented beforehand.
We now replace this with a custom Java doclet[1], which extracts doc
comments from @LuaFunction annotated methods and generates stub-files
from them. These also contain a @source annotation, which allows us to
correctly link them back to the original Java code.
There's some issues with this which have yet to be fixed. However, I
don't think any of them are major blockers right now:
- The custom doclet relies on Java 9 - I think it's /technically/
possible to do this on Java 8, but the API is significantly uglier.
This means that we need to run javadoc on a separate JVM.
This is possible, and it works locally and on CI, but is definitely
not a nice approach.
- illuaminate now requires the doc stubs to be generated in order for
the linter to pass, which does make running the linter locally much
harder (especially given the above bullet point).
We could notionally include the generated stubs (or at least a cut
down version of them) in the repo, but I'm not 100% sure about that.
[1]: https://docs.oracle.com/javase/9/docs/api/jdk/javadoc/doclet/package-summary.html
2020-07-03 12:31:26 +00:00
}
}
2017-05-14 16:00:14 +00:00
jar {
manifest {
2021-12-13 13:30:43 +00:00
attributes ( [
"Specification-Title" : "computercraft" ,
"Specification-Vendor" : "SquidDev" ,
"Specification-Version" : "1" ,
"Implementation-Title" : "CC: Tweaked" ,
"Implementation-Version" : "${mod_version}" ,
"Implementation-Vendor" : "SquidDev" ,
"Implementation-Timestamp" : new Date ( ) . format ( "yyyy-MM-dd'T'HH:mm:ssZ" ) ,
"MixinConfigs" : "computercraft.mixins.json" ,
] )
2017-05-14 16:00:14 +00:00
}
2017-11-14 21:48:47 +00:00
from configurations . shade . collect { it . isDirectory ( ) ? it : zipTree ( it ) }
2017-05-14 16:00:14 +00:00
}
2021-08-17 13:00:59 +00:00
[ compileJava , compileTestJava , compileTestModJava ] . forEach {
2019-06-15 10:05:45 +00:00
it . configure {
2019-12-24 19:16:06 +00:00
options . compilerArgs < < "-Xlint" < < "-Xlint:-processing"
2019-06-15 10:05:45 +00:00
}
}
2017-05-24 16:35:41 +00: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 13:32:39 +00:00
2019-01-28 14:05:30 +00:00
def hash = 'none'
2017-05-24 17:20:46 +00: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 ( )
2019-01-28 14:05:30 +00:00
2022-05-19 13:09:01 +00:00
def blacklist = [ 'GitHub' , 'Daniel Ratcliffe' , 'Weblate' ]
// Extract all authors, commiters and co-authors from the git log.
def authors = [ "git" , "-C" , projectDir , "log" , "--format=tformat:%an <%ae>%n%cn <%ce>%n%(trailers:key=Co-authored-by,valueonly)" ]
. execute ( ) . text . readLines ( ) . unique ( )
// We now pass this through git's mailmap to de-duplicate some authors.
def remapAuthors = [ "git" , "check-mailmap" , "--stdin" ] . execute ( )
remapAuthors . withWriter { stdin - >
if ( stdin ! instanceof BufferedWriter ) stdin = new BufferedWriter ( stdin )
authors . forEach {
if ( it = = "" ) return
if ( ! it . endsWith ( ">" ) ) it + = ">" // Some commits have broken Co-Authored-By lines!
stdin . writeLine ( it )
}
stdin . close ( )
}
// And finally extract out the actual name.
def emailRegex = ~ /^([^<]+) <.+>$/
remapAuthors . text . readLines ( ) . forEach {
def matcher = it = ~ emailRegex
matcher . find ( )
def name = matcher . group ( 1 )
if ( ! blacklist . contains ( name ) ) contributors . add ( name )
2019-01-28 14:05:30 +00:00
}
2021-06-05 13:48:38 +00:00
} catch ( Exception e ) {
2021-01-16 15:40:42 +00:00
e . printStackTrace ( )
}
2019-01-28 14:05:30 +00:00
inputs . property "commithash" , hash
2021-06-09 17:00:20 +00:00
duplicatesStrategy = DuplicatesStrategy . INCLUDE
2017-05-24 17:20:46 +00:00
2017-05-01 13:32:39 +00:00
from ( sourceSets . main . resources . srcDirs ) {
Update CC: Tweaked to 1.13
Look, I originally had this split into several commits, but lots of
other cleanups got mixed in. I then backported some of the cleanups to
1.12, did other tidy ups there, and eventually the web of merges was
unreadable.
Yes, this is a horrible mess, but it's still nicer than it was. Anyway,
changes:
- Flatten everything. For instance, there are now three instances of
BlockComputer, two BlockTurtle, ItemPocketComputer. There's also no
more BlockPeripheral (thank heavens) - there's separate block classes
for each peripheral type.
- Remove pretty much all legacy code. As we're breaking world
compatibility anyway, we can remove all the code to load worlds from
1.4 days.
- The command system is largely rewriten to take advantage of 1.13's
new system. It's very fancy!
- WidgetTerminal now uses Minecraft's "GUI listener" system.
- BREAKING CHANGE: All the codes in keys.lua are different, due to the
move to LWJGL 3. Hopefully this won't have too much of an impact.
I don't want to map to the old key codes on the Java side, as there
always ends up being small but slight inconsistencies. IMO it's
better to make a clean break - people should be using keys rather
than hard coding the constants anyway.
- commands.list now allows fetching sub-commands. The ROM has already
been updated to allow fancy usage such as commands.time.set("noon").
- Turtles, modems and cables can be waterlogged.
2019-04-02 12:27:27 +00:00
include 'META-INF/mods.toml'
include 'data/computercraft/lua/rom/help/credits.txt'
2017-05-24 17:20:46 +00:00
2019-03-19 11:47:12 +00:00
expand 'version' : mod_version ,
2021-06-05 13:48:38 +00:00
'mcversion' : mc_version ,
'gitcontributors' : contributors . sort ( false , String . CASE_INSENSITIVE_ORDER ) . join ( '\n' )
2017-07-06 16:23:35 +00:00
}
2017-05-01 13:32:39 +00:00
from ( sourceSets . main . resources . srcDirs ) {
Update CC: Tweaked to 1.13
Look, I originally had this split into several commits, but lots of
other cleanups got mixed in. I then backported some of the cleanups to
1.12, did other tidy ups there, and eventually the web of merges was
unreadable.
Yes, this is a horrible mess, but it's still nicer than it was. Anyway,
changes:
- Flatten everything. For instance, there are now three instances of
BlockComputer, two BlockTurtle, ItemPocketComputer. There's also no
more BlockPeripheral (thank heavens) - there's separate block classes
for each peripheral type.
- Remove pretty much all legacy code. As we're breaking world
compatibility anyway, we can remove all the code to load worlds from
1.4 days.
- The command system is largely rewriten to take advantage of 1.13's
new system. It's very fancy!
- WidgetTerminal now uses Minecraft's "GUI listener" system.
- BREAKING CHANGE: All the codes in keys.lua are different, due to the
move to LWJGL 3. Hopefully this won't have too much of an impact.
I don't want to map to the old key codes on the Java side, as there
always ends up being small but slight inconsistencies. IMO it's
better to make a clean break - people should be using keys rather
than hard coding the constants anyway.
- commands.list now allows fetching sub-commands. The ROM has already
been updated to allow fancy usage such as commands.time.set("noon").
- Turtles, modems and cables can be waterlogged.
2019-04-02 12:27:27 +00:00
exclude 'META-INF/mods.toml'
exclude 'data/computercraft/lua/rom/help/credits.txt'
2017-05-01 13:32:39 +00:00
}
}
2021-06-09 17:00:20 +00:00
sourcesJar {
duplicatesStrategy = DuplicatesStrategy . INCLUDE
}
2020-11-12 19:01:50 +00:00
// Web tasks
2021-06-05 13:48:38 +00:00
import com.hierynomus.gradle.license.tasks.LicenseCheck
import com.hierynomus.gradle.license.tasks.LicenseFormat
2020-11-12 19:01:50 +00:00
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' )
}
2021-12-21 22:20:45 +00:00
task illuaminateDocs ( type: Exec , dependsOn: [ rollup , luaJavadoc ] ) {
2020-11-12 19:01:50 +00:00
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" )
2021-12-21 22:20:45 +00:00
inputs . file ( "$buildDir/rollup/index.js" ) . withPropertyName ( "scripts" )
2020-11-12 19:01:50 +00:00
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 ] ) {
2021-12-21 22:20:45 +00:00
from ( 'doc' ) {
include 'logo.png'
include 'images/**'
}
from ( "$buildDir/rollup" ) {
exclude 'index.js'
}
2020-11-12 19:01:50 +00:00
into "${project.docsDir}/lua"
}
2019-06-15 10:05:45 +00:00
// Check tasks
test {
useJUnitPlatform ( )
testLogging {
events "skipped" , "failed"
}
}
2019-06-07 23:28:03 +00:00
2020-05-11 14:41:39 +00:00
jacocoTestReport {
2021-01-15 09:54:38 +00:00
dependsOn ( 'test' )
2020-05-11 14:41:39 +00:00
reports {
2021-07-02 20:48:28 +00:00
xml . required = true
html . required = true
2020-05-11 14:41:39 +00:00
}
}
check . dependsOn jacocoTestReport
2019-06-07 23:28:03 +00:00
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' )
2019-06-07 23:28:03 +00:00
}
}
2021-08-17 13:00:59 +00:00
[ licenseTest , licenseFormatTest , licenseTestMod , licenseFormatTestMod ] . forEach {
2019-06-07 23:28:03 +00:00
it . configure {
include ( "**/*.java" )
2021-01-08 16:16:56 +00:00
header file ( 'config/license/main.txt' )
2019-06-07 23:28:03 +00:00
}
}
2019-06-15 10:05:45 +00:00
gradle . projectsEvaluated {
tasks . withType ( LicenseFormat ) {
outputs . upToDateWhen { false }
}
}
2021-06-05 13:48:38 +00:00
task licenseAPI ( type: LicenseCheck )
task licenseFormatAPI ( type: LicenseFormat )
2019-06-07 23:28:03 +00:00
[ 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' )
2019-06-07 23:28:03 +00:00
}
}
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-08-17 13:00:59 +00:00
from ( "src/testMod/server-files" ) {
2021-01-09 19:50:27 +00:00
include "eula.txt"
include "server.properties"
}
into "test-files/server"
}
2021-08-20 21:13:21 +00:00
[ "Client" , "Server" ] . forEach { name - >
2021-08-20 12:32:42 +00:00
tasks . register ( "test$name" , JavaExec . class ) . configure {
it . group ( 'In-game tests' )
it . description ( "Runs tests on a temporary Minecraft instance." )
it . dependsOn ( setupServer , "prepareRunTest$name" , "cleanTest$name" , 'compileTestModJava' )
// 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 ( "runTest$name" )
exec . copyTo ( it )
it . setClasspath ( exec . getClasspath ( ) )
it . mainClass = exec . mainClass
it . setArgs ( exec . getArgs ( ) )
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/test$name" )
jacoco . applyTo ( it )
it . jacoco . setIncludes ( [ "dan200.computercraft.*" ] )
it . jacoco . setClassDumpDir ( coverageOut )
it . outputs . dir ( coverageOut )
// 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 )
}
2021-01-15 09:54:38 +00:00
2021-08-20 12:32:42 +00:00
tasks . register ( "jacocoTest${name}Report" , JacocoReport . class ) . configure {
it . group ( 'In-game' )
it . description ( "Generate coverage reports for test$name" )
it . dependsOn ( "test$name" )
2021-01-15 09:54:38 +00:00
2021-08-20 12:32:42 +00:00
it . executionData ( new File ( buildDir , "jacoco/test${name}.exec" ) )
it . sourceDirectories . from ( sourceSets . main . allJava . srcDirs )
2021-08-20 21:13:21 +00:00
it . classDirectories . from ( new File ( buildDir , "jacocoClassDump/test$name" ) )
2021-01-15 09:54:38 +00:00
2021-08-20 12:32:42 +00:00
it . reports {
xml . enabled true
html . enabled true
}
2021-01-15 09:54:38 +00:00
}
2021-08-20 12:32:42 +00:00
2021-09-19 09:43:55 +00:00
if ( name ! = "Client" | | project . findProperty ( 'cc.tweaked.clientTests' ) = = 'true' ) {
// Don't run client tests unless explicitly opted into them. They're a bit of a faff
// to run and pretty flakey.
check . dependsOn ( "jacocoTest${name}Report" )
}
2021-01-15 09:54:38 +00:00
}
2019-06-15 10:05:45 +00:00
// Upload tasks
2019-06-07 23:28:03 +00:00
2019-06-02 15:11:18 +00:00
task checkRelease {
2019-05-31 09:19:24 +00:00
group "upload"
description "Verifies that everything is ready for a release"
inputs . property "version" , mod_version
2021-06-12 18:48:41 +00:00
inputs . file ( "src/main/resources/data/computercraft/lua/rom/help/changelog.md" )
inputs . file ( "src/main/resources/data/computercraft/lua/rom/help/whatsnew.md" )
2019-05-31 09:19:24 +00:00
doLast {
def ok = true
// Check we're targetting the current version
2021-06-12 18:48:41 +00:00
def whatsnew = new File ( projectDir , "src/main/resources/data/computercraft/lua/rom/help/whatsnew.md" ) . readLines ( )
2019-05-31 09:19:24 +00:00
if ( whatsnew [ 0 ] ! = "New features in CC: Tweaked $mod_version" ) {
ok = false
2021-06-12 18:48:41 +00:00
project . logger . error ( "Expected `whatsnew.md' to target $mod_version." )
2019-05-31 09:19:24 +00:00
}
// 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
2021-06-12 18:48:41 +00:00
project . logger . error ( "Must mention the changelog in whatsnew.md" )
2019-05-31 09:19:24 +00:00
} else {
2021-06-05 13:48:38 +00:00
whatsnew = whatsnew . getAt ( 0 . . < idx )
2019-05-31 09:19:24 +00:00
}
// Check whatsnew and changelog match.
def versionChangelog = "# " + whatsnew . join ( "\n" )
2021-06-12 18:48:41 +00:00
def changelog = new File ( projectDir , "src/main/resources/data/computercraft/lua/rom/help/changelog.md" ) . getText ( )
2019-05-31 09:19:24 +00:00
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
2019-05-31 09:19:24 +00:00
2017-12-01 20:05:26 +00:00
curseforge {
apiKey = project . hasProperty ( 'curseForgeApiKey' ) ? project . curseForgeApiKey : ''
project {
id = '282001'
2020-10-04 10:31:06 +00:00
releaseType = 'release'
2021-10-17 17:14:22 +00:00
changelog = "Release notes can be found on the GitHub repository (https://github.com/cc-tweaked/CC-Tweaked/releases/tag/v${mc_version}-${mod_version})."
2019-05-01 12:48:33 +00:00
2021-07-02 20:48:28 +00:00
addGameVersion "${mc_version}"
2017-12-01 20:05:26 +00:00
}
}
2021-06-09 17:00:20 +00:00
import com.modrinth.minotaur.TaskModrinthUpload
tasks . register ( 'publishModrinth' , TaskModrinthUpload . class ) . configure {
dependsOn ( 'assemble' , 'reobfJar' )
onlyIf {
project . hasProperty ( 'modrinthApiKey' )
}
2021-06-29 09:08:45 +00:00
token = project . hasProperty ( 'modrinthApiKey' ) ? project . getProperty ( 'modrinthApiKey' ) : ''
2021-06-09 17:00:20 +00:00
projectId = 'gu7yAYhd'
2021-06-28 22:20:54 +00:00
versionNumber = "${project.mc_version}-${project.mod_version}"
2021-06-09 17:00:20 +00:00
uploadFile = jar
addGameVersion ( project . mc_version )
2021-10-17 17:14:22 +00:00
changelog = "Release notes can be found on the [GitHub repository](https://github.com/cc-tweaked/CC-Tweaked/releases/tag/v${mc_version}-${mod_version})."
2021-06-09 17:00:20 +00:00
addLoader ( 'forge' )
}
2021-05-20 18:03:30 +00:00
tasks . withType ( GenerateModuleMetadata ) {
// We can't generate metadata as that includes Forge as a dependency.
enabled = false
}
2018-04-19 21:36:00 +00:00
publishing {
publications {
2021-04-24 10:26:04 +00:00
maven ( MavenPublication ) {
2018-04-19 21:36:00 +00:00
from components . java
2021-04-24 10:26:04 +00:00
pom {
name = 'CC: Tweaked'
description = 'CC: Tweaked is a fork of ComputerCraft, adding programmable computers, turtles and more to Minecraft.'
2021-10-17 17:14:22 +00:00
url = 'https://github.com/cc-tweaked/CC-Tweaked'
2018-04-20 18:39:53 +00:00
2021-04-24 10:26:04 +00:00
scm {
2021-10-17 17:14:22 +00:00
url = 'https://github.com/cc-tweaked/CC-Tweaked.git'
2021-04-24 10:26:04 +00:00
}
2018-04-20 18:39:53 +00:00
2021-04-24 10:26:04 +00:00
issueManagement {
system = 'github'
2021-10-17 17:14:22 +00:00
url = 'https://github.com/cc-tweaked/CC-Tweaked/issues'
2021-04-24 10:26:04 +00:00
}
2018-04-20 18:39:53 +00:00
2021-04-24 10:26:04 +00:00
licenses {
license {
name = 'ComputerCraft Public License, Version 1.0'
2021-10-17 17:14:22 +00:00
url = 'https://github.com/cc-tweaked/CC-Tweaked/blob/mc-1.15.x/LICENSE'
2018-04-20 18:39:53 +00:00
}
}
2021-05-20 18:03:30 +00:00
withXml { asNode ( ) . remove ( asNode ( ) . get ( "dependencies" ) ) }
2021-04-24 10:26:04 +00:00
}
}
}
2018-04-20 18:39:53 +00:00
2021-04-24 10:26:04 +00:00
repositories {
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 18:39:53 +00:00
}
2018-04-19 21:36:00 +00:00
}
}
}
}
2019-04-07 14:30:27 +00:00
githubRelease {
token project . hasProperty ( 'githubApiKey' ) ? project . githubApiKey : ''
2021-10-17 17:14:22 +00:00
owner 'cc-tweaked'
2019-04-07 14:30:27 +00:00
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 14:30:27 +00: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 22:07:36 +00:00
"## " + new File ( projectDir , "src/main/resources/data/computercraft/lua/rom/help/whatsnew.md" )
2019-05-31 09:19:24 +00:00
. readLines ( )
. takeWhile { it ! = 'Type "help changelog" to see the full version history.' }
. join ( "\n" ) . trim ( )
2021-01-16 15:40:42 +00:00
} ) )
2020-10-04 10:31:06 +00:00
prerelease false
2019-04-07 14:30:27 +00:00
}
2021-06-09 17:00:20 +00:00
def uploadTasks = [ "publish" , "curseforge" , "publishModrinth" , "githubRelease" ]
2019-06-01 08:23:18 +00:00
uploadTasks . forEach { tasks . getByName ( it ) . dependsOn checkRelease }
task uploadAll ( dependsOn: uploadTasks ) {
2019-04-16 09:32:49 +00:00
group "upload"
2021-06-09 17:00:20 +00:00
description "Uploads to all repositories (Maven, Curse, Modrinth, GitHub release)"
2019-04-16 09:32:49 +00:00
}