From ef32aab272f7364c9434288766cff2f9a85b544c Mon Sep 17 00:00:00 2001 From: Jozufozu Date: Sat, 1 Mar 2025 15:06:55 -0800 Subject: [PATCH 1/3] Indexing is hard - Add workarounds for odd out-of-bounds exceptions - Bump version to 1.0.1-beta --- .../compile/core/FailedCompilation.java | 35 ++++++++++--------- .../engine/indirect/IndirectInstancer.java | 3 ++ gradle.properties | 2 +- 3 files changed, 22 insertions(+), 18 deletions(-) diff --git a/common/src/backend/java/dev/engine_room/flywheel/backend/compile/core/FailedCompilation.java b/common/src/backend/java/dev/engine_room/flywheel/backend/compile/core/FailedCompilation.java index 9ff6facd0..20f3b3012 100644 --- a/common/src/backend/java/dev/engine_room/flywheel/backend/compile/core/FailedCompilation.java +++ b/common/src/backend/java/dev/engine_room/flywheel/backend/compile/core/FailedCompilation.java @@ -8,6 +8,8 @@ import java.util.regex.Pattern; import java.util.stream.Collectors; import java.util.stream.Stream; +import org.jetbrains.annotations.Nullable; + import dev.engine_room.flywheel.backend.glsl.SourceFile; import dev.engine_room.flywheel.backend.glsl.SourceLines; import dev.engine_room.flywheel.backend.glsl.error.ConsoleColors; @@ -56,18 +58,22 @@ public class FailedCompilation { return; } - Matcher matcher; + try { + Matcher matcher; - matcher = PATTERN_ONE.matcher(s); - if (matcher.find()) { - out.accept(interpretPattern1(matcher)); - return; - } + matcher = PATTERN_ONE.matcher(s); + if (matcher.find()) { + out.accept(interpretPattern1(matcher)); + return; + } - matcher = PATTERN_TWO.matcher(s); - if (matcher.find()) { - out.accept(interpretPattern2(matcher)); - return; + matcher = PATTERN_TWO.matcher(s); + if (matcher.find()) { + out.accept(interpretPattern2(matcher)); + return; + } + } catch (Throwable ignored) { + // noop, if parsing/span matching fails somehow lets just emit the raw error string. } out.accept(ErrorBuilder.create() @@ -114,15 +120,10 @@ public class FailedCompilation { .pointAt(span, 1); } - private ErrorBuilder interpretWithSpan(ErrorLevel errorLevel, int fileId, int lineNo, String span, String msg) { + private ErrorBuilder interpretWithSpan(ErrorLevel errorLevel, int fileId, int lineNo, @Nullable String span, String msg) { var sourceFile = files.get(fileId - 1); - Span errorSpan; - if (span != null) { - errorSpan = sourceFile.getLineSpanMatching(lineNo, span); - } else { - errorSpan = sourceFile.getLineSpanNoWhitespace(lineNo); - } + Span errorSpan = sourceFile.getLineSpanMatching(lineNo, span); return ErrorBuilder.create() .header(errorLevel, msg) diff --git a/common/src/backend/java/dev/engine_room/flywheel/backend/engine/indirect/IndirectInstancer.java b/common/src/backend/java/dev/engine_room/flywheel/backend/engine/indirect/IndirectInstancer.java index 499825bbb..2670ba777 100644 --- a/common/src/backend/java/dev/engine_room/flywheel/backend/engine/indirect/IndirectInstancer.java +++ b/common/src/backend/java/dev/engine_room/flywheel/backend/engine/indirect/IndirectInstancer.java @@ -374,9 +374,12 @@ public class IndirectInstancer extends AbstractInstancer contentsChanged.clear(); } + @Override public void parallelUpdate() { var pages = this.pages.get(); + mergeablePages.clear(pages.length, mergeablePages.currentCapacity() + 1); + int page = 0; while (mergeablePages.cardinality() > 1) { page = mergeablePages.nextSetBit(page); diff --git a/gradle.properties b/gradle.properties index bbefc03c2..270df3fd2 100644 --- a/gradle.properties +++ b/gradle.properties @@ -8,7 +8,7 @@ mod_homepage = https://github.com/Engine-Room/Flywheel # Flywheel metadata flywheel_id=flywheel flywheel_name=Flywheel -flywheel_version=1.0.0 +flywheel_version=1.0.1-beta flywheel_description=An overhauled entity and block entity rendering API. # Vanillin metadata vanillin_id=vanillin From 73341320ac01f0651143cf1c65359c2881f1e88e Mon Sep 17 00:00:00 2001 From: Jozufozu Date: Sat, 1 Mar 2025 16:44:57 -0800 Subject: [PATCH 2/3] What is your build? - Add build numbers in mod version strings - Remove default process resources from SubprojectExtension --- .../gradle/subproject/SubprojectExtension.kt | 47 ++++--------------- fabric/build.gradle.kts | 31 +++++++++++- forge/build.gradle.kts | 25 +++++++++- vanillinFabric/build.gradle.kts | 31 +++++++++++- vanillinForge/build.gradle.kts | 25 +++++++++- 5 files changed, 116 insertions(+), 43 deletions(-) diff --git a/buildSrc/src/main/kotlin/dev/engine_room/gradle/subproject/SubprojectExtension.kt b/buildSrc/src/main/kotlin/dev/engine_room/gradle/subproject/SubprojectExtension.kt index 338390998..d11d31f65 100644 --- a/buildSrc/src/main/kotlin/dev/engine_room/gradle/subproject/SubprojectExtension.kt +++ b/buildSrc/src/main/kotlin/dev/engine_room/gradle/subproject/SubprojectExtension.kt @@ -13,7 +13,6 @@ import org.gradle.api.tasks.javadoc.Javadoc import org.gradle.jvm.tasks.Jar import org.gradle.jvm.toolchain.JavaLanguageVersion import org.gradle.kotlin.dsl.* -import org.gradle.language.jvm.tasks.ProcessResources import java.io.File import java.net.URI import java.util.* @@ -31,11 +30,18 @@ open class SubprojectExtension(val project: Project) { setupPublishing() } - private fun setBaseProperties(archiveBase: String, group: String, version: String) { + val buildNumber: String? by lazy { val dev = System.getenv("RELEASE")?.contentEquals("false", true) ?: true - val buildNumber = System.getenv("BUILD_NUMBER") - val versionSuffix = if (dev && buildNumber != null) "-${buildNumber}" else "" + if (dev) { + System.getenv("BUILD_NUMBER") + } else { + null + } + } + + private fun setBaseProperties(archiveBase: String, group: String, version: String) { + val versionSuffix = if (buildNumber != null) "-${buildNumber}" else "" project.group = project.property(group) as String project.version = "${project.property(version)}${versionSuffix}" @@ -139,16 +145,6 @@ open class SubprojectExtension(val project: Project) { options.optionFiles(project.rootProject.file("javadoc-options.txt")) options.encoding = "UTF-8" } - - val replaceProperties = processResourcesExpandProperties.associateWith { project.property(it) as String } - - withType().configureEach { - inputs.properties(replaceProperties) - - filesMatching(processResourcesExpandFiles) { - expand(replaceProperties) - } - } } } @@ -207,26 +203,3 @@ open class SubprojectExtension(val project: Project) { } } } - -val processResourcesExpandFiles = listOf("pack.mcmeta", "fabric.mod.json", "META-INF/mods.toml") - -val processResourcesExpandProperties = listOf( - "mod_license", - "mod_sources", - "mod_issues", - "mod_homepage", - "flywheel_id", - "flywheel_name", - "flywheel_description", - "flywheel_version", - "vanillin_id", - "vanillin_name", - "vanillin_version", - "vanillin_description", - "flywheel_maven_version_range", - "flywheel_semver_version_range", - "minecraft_semver_version_range", - "minecraft_maven_version_range", - "fabric_api_version_range", - "forge_version_range", -) diff --git a/fabric/build.gradle.kts b/fabric/build.gradle.kts index e3a02f98d..50c4d33fe 100644 --- a/fabric/build.gradle.kts +++ b/fabric/build.gradle.kts @@ -66,16 +66,43 @@ platform { setupTestMod(testMod) } +var flywheelVersion = "${property("flywheel_version")}+${property("minecraft_version")}" + +if (subproject.buildNumber != null) { + flywheelVersion += ".build.${subproject.buildNumber}" +} + +val replaceProperties = listOf( + "mod_license", + "mod_sources", + "mod_issues", + "mod_homepage", + "flywheel_id", + "flywheel_name", + "flywheel_description", + "minecraft_semver_version_range", + "fabric_api_version_range", +).associateWith { property(it) as String } + .plus("flywheel_version" to flywheelVersion) + +tasks.withType().configureEach { + inputs.properties(replaceProperties) + + filesMatching(listOf("fabric.mod.json")) { + expand(replaceProperties) + } +} + jarSets { mainSet.publishWithRemappedSources { - artifactId = "flywheel-fabric-${project.property("artifact_minecraft_version")}" + artifactId = "flywheel-fabric-${property("artifact_minecraft_version")}" } mainSet.outgoing("flywheel") create("api", api, lib).apply { addToAssemble() publishWithRemappedSources { - artifactId = "flywheel-fabric-api-${project.property("artifact_minecraft_version")}" + artifactId = "flywheel-fabric-api-${property("artifact_minecraft_version")}" } configureJar { diff --git a/forge/build.gradle.kts b/forge/build.gradle.kts index 694d7fd08..220ff8b50 100644 --- a/forge/build.gradle.kts +++ b/forge/build.gradle.kts @@ -64,16 +64,37 @@ platform { setupTestMod(testMod) } +val replaceProperties = listOf( + "mod_license", + "mod_sources", + "mod_issues", + "mod_homepage", + "flywheel_id", + "flywheel_name", + "flywheel_description", + "minecraft_maven_version_range", + "forge_version_range", +).associateWith { property(it) as String } + .plus("flywheel_version" to "${property("flywheel_version")}${if (subproject.buildNumber != null) "-${subproject.buildNumber}" else ""}") + +tasks.withType().configureEach { + inputs.properties(replaceProperties) + + filesMatching(listOf("pack.mcmeta", "META-INF/mods.toml")) { + expand(replaceProperties) + } +} + jarSets { mainSet.publishWithRawSources { - artifactId = "flywheel-forge-${project.property("artifact_minecraft_version")}" + artifactId = "flywheel-forge-${property("artifact_minecraft_version")}" } mainSet.outgoing("flywheel") create("api", api, lib).apply { addToAssemble() publishWithRawSources { - artifactId = "flywheel-forge-api-${project.property("artifact_minecraft_version")}" + artifactId = "flywheel-forge-api-${property("artifact_minecraft_version")}" } configureJar { diff --git a/vanillinFabric/build.gradle.kts b/vanillinFabric/build.gradle.kts index 3b2c08647..a97f2dcfa 100644 --- a/vanillinFabric/build.gradle.kts +++ b/vanillinFabric/build.gradle.kts @@ -26,9 +26,38 @@ transitiveSourceSets { } } +var vanillinVersion = "${property("vanillin_version")}+${property("minecraft_version")}" + +if (subproject.buildNumber != null) { + vanillinVersion += ".build.${subproject.buildNumber}" +} + +val replaceProperties = listOf( + "mod_license", + "mod_sources", + "mod_issues", + "mod_homepage", + "flywheel_id", + "vanillin_id", + "vanillin_name", + "vanillin_description", + "minecraft_semver_version_range", + "flywheel_semver_version_range", + "fabric_api_version_range", +).associateWith { property(it) as String } + .plus("vanillin_version" to vanillinVersion) + +tasks.withType().configureEach { + inputs.properties(replaceProperties) + + filesMatching(listOf("fabric.mod.json")) { + expand(replaceProperties) + } +} + jarSets { mainSet.publishWithRemappedSources { - artifactId = "vanillin-fabric-${project.property("artifact_minecraft_version")}" + artifactId = "vanillin-fabric-${property("artifact_minecraft_version")}" } } diff --git a/vanillinForge/build.gradle.kts b/vanillinForge/build.gradle.kts index 012db41ca..01b05924c 100644 --- a/vanillinForge/build.gradle.kts +++ b/vanillinForge/build.gradle.kts @@ -26,9 +26,32 @@ transitiveSourceSets { } } +val replaceProperties = listOf( + "mod_license", + "mod_sources", + "mod_issues", + "mod_homepage", + "flywheel_id", + "vanillin_id", + "vanillin_name", + "vanillin_description", + "flywheel_maven_version_range", + "minecraft_maven_version_range", + "forge_version_range", +).associateWith { property(it) as String } + .plus("vanillin_version" to "${property("vanillin_version")}${if (subproject.buildNumber != null) "-${subproject.buildNumber}" else ""}") + +tasks.withType().configureEach { + inputs.properties(replaceProperties) + + filesMatching(listOf("pack.mcmeta", "META-INF/mods.toml")) { + expand(replaceProperties) + } +} + jarSets { mainSet.publishWithRawSources { - artifactId = "vanillin-forge-${project.property("artifact_minecraft_version")}" + artifactId = "vanillin-forge-${property("artifact_minecraft_version")}" } } From f116772c763de4f23b3f0325478df93c112a0e46 Mon Sep 17 00:00:00 2001 From: Jozufozu Date: Sat, 1 Mar 2025 21:55:49 -0800 Subject: [PATCH 3/3] Let me out! - Add release parameter to jenkinsfile - Add timeout to prevent locking up ci for ages if a build freezes --- Jenkinsfile | 13 +++++++++++++ gradle.properties | 2 +- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/Jenkinsfile b/Jenkinsfile index ce4863175..3c4775bef 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -8,6 +8,15 @@ pipeline { jdk "jdk-17.0.1" } + options { + // Sometimes builds freeze, but this doesn't have to be super aggressive. + timeout(time: 30, unit: 'MINUTES') + } + + parameters { + booleanParam(name: 'RELEASE', defaultValue: false, description: 'Publish artifacts without a build number.') + } + stages { stage('Setup') { @@ -22,6 +31,10 @@ pipeline { stage('Build') { + environment { + RELEASE="${params.RELEASE}" + } + steps { withCredentials([ // build_secrets is parsed in SubprojectExtension#loadSecrets diff --git a/gradle.properties b/gradle.properties index 270df3fd2..bf409faa9 100644 --- a/gradle.properties +++ b/gradle.properties @@ -8,7 +8,7 @@ mod_homepage = https://github.com/Engine-Room/Flywheel # Flywheel metadata flywheel_id=flywheel flywheel_name=Flywheel -flywheel_version=1.0.1-beta +flywheel_version=1.0.1 flywheel_description=An overhauled entity and block entity rendering API. # Vanillin metadata vanillin_id=vanillin