Skip to content

Commit

Permalink
reproducible builds 😎
Browse files Browse the repository at this point in the history
  • Loading branch information
wagyourtail committed May 11, 2024
1 parent 8d61078 commit 7bb6c31
Show file tree
Hide file tree
Showing 5 changed files with 21 additions and 19 deletions.
5 changes: 2 additions & 3 deletions src/api/kotlin/xyz/wagyourtail/unimined/util/Utils.kt
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ import org.gradle.api.artifacts.Dependency
import org.gradle.api.tasks.SourceSet
import org.gradle.api.tasks.SourceSetContainer
import org.gradle.configurationcache.extensions.capitalized
import org.slf4j.helpers.Util
import java.io.File
import java.io.IOException
import java.io.InputStream
Expand All @@ -19,9 +18,7 @@ import java.nio.file.attribute.BasicFileAttributes
import java.security.MessageDigest
import java.util.*
import java.util.zip.ZipEntry
import java.util.zip.ZipInputStream
import java.util.zip.ZipOutputStream
import kotlin.collections.HashMap
import kotlin.io.path.*
import kotlin.reflect.KClass
import kotlin.reflect.KProperty1
Expand Down Expand Up @@ -372,3 +369,5 @@ fun Path.openZipFileSystem(args: Map<String, *> = mapOf<String, Any>()): FileSys
}
return FileSystems.newFileSystem(URI.create("jar:${toUri()}"), args, null)
}

val CONSTANT_TIME_FOR_ZIP_ENTRIES = GregorianCalendar(1980, Calendar.FEBRUARY, 1, 0, 0, 0).timeInMillis
Original file line number Diff line number Diff line change
Expand Up @@ -209,12 +209,14 @@ class MixinRemapExtension(
onEnd = {
if (target.size() > 0) {
extension.logger.info("[RefmapBuilder] adding ${target.size()} mappings for ${cls.name}")
val refmapJson = metadata.getRefmapFor(dot(cls.name))
if (!refmapJson.has("mappings")) {
refmapJson.add("mappings", JsonObject())
synchronized(metadata) {
val refmapJson = metadata.getRefmapFor(dot(cls.name))
if (!refmapJson.containsKey("mappings")) {
refmapJson["mappings"] = TreeMap<String, Any>()
}
val refmapMappings = refmapJson["mappings"] as TreeMap<String, Any>
refmapMappings[cls.name] = target
}
val refmapMappings = refmapJson.get("mappings").asJsonObject
refmapMappings.add(cls.name, target)
}
},
allowImplicitWildcards = extension.allowImplicitWildcards
Expand Down Expand Up @@ -251,7 +253,7 @@ class MixinRemapExtension(
abstract fun readInput(vararg input: Path): CompletableFuture<*>

abstract fun contains(className: String): Boolean
abstract fun getRefmapFor(className: String): JsonObject
abstract fun getRefmapFor(className: String): TreeMap<String, Any>

abstract fun writeExtra(fs: FileSystem)
abstract fun getExistingRefmapFor(className: String): JsonObject?
Expand All @@ -272,7 +274,7 @@ class MixinRemapExtension(
return metadata.any { it.contains(className) }
}

override fun getRefmapFor(className: String): JsonObject {
override fun getRefmapFor(className: String): TreeMap<String, Any> {
return metadata.first { it.contains(className) }.getRefmapFor(className)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import xyz.wagyourtail.unimined.util.readZipInputStreamFor
import java.nio.file.FileSystem
import java.nio.file.Path
import java.nio.file.StandardOpenOption
import java.util.TreeMap
import java.util.concurrent.CompletableFuture
import java.util.jar.Manifest
import kotlin.io.path.inputStream
Expand All @@ -17,7 +18,7 @@ import kotlin.io.path.writeText
class JarModAgentMetaData(parent: MixinRemapExtension) : MixinRemapExtension.MixinMetadata(parent) {
private val GSON = GsonBuilder().setPrettyPrinting().create()
private val classesToRefmap = mutableMapOf<String, String>()
private val refmaps = mutableMapOf<String, JsonObject>()
private val refmaps = mutableMapOf<String, TreeMap<String, Any>>()
private val existingRefmaps = mutableMapOf<String, JsonObject>()

override fun readInput(vararg input: Path): CompletableFuture<*> {
Expand Down Expand Up @@ -47,7 +48,7 @@ class JarModAgentMetaData(parent: MixinRemapExtension) : MixinRemapExtension.Mix
parent.logger.info("[PreRead] Found JarModAgent refmaps: $refmaps")
for (transform in transforms) {
val refmapName = transform.substringBeforeLast(".") + "-refmap.json"
this.refmaps.computeIfAbsent(refmapName) { JsonObject() }
this.refmaps.computeIfAbsent(refmapName) { TreeMap() }
input.readZipInputStreamFor(transform, false) {
it.bufferedReader().use { reader ->
for (line in reader.lines()) {
Expand Down Expand Up @@ -82,7 +83,7 @@ class JarModAgentMetaData(parent: MixinRemapExtension) : MixinRemapExtension.Mix
return classesToRefmap.containsKey(className)
}

override fun getRefmapFor(className: String): JsonObject {
override fun getRefmapFor(className: String): TreeMap<String, Any> {
return refmaps[classesToRefmap[className]]!!
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,14 @@ import xyz.wagyourtail.unimined.util.forEachInZip
import java.nio.file.FileSystem
import java.nio.file.Path
import java.nio.file.StandardOpenOption
import java.util.*
import java.util.concurrent.CompletableFuture
import kotlin.io.path.writeText

class OfficialMixinMetaData(parent: MixinRemapExtension) : MixinRemapExtension.MixinMetadata(parent) {
private val GSON = GsonBuilder().setPrettyPrinting().create()
private val classesToRefmap = mutableMapOf<String, String>()
private val refmaps = mutableMapOf<String, JsonObject>()
private val refmaps = mutableMapOf<String, TreeMap<String, Any>>()
private val existingRefmaps = mutableMapOf<String, JsonObject>()
private val mixinJsons = mutableMapOf<String, JsonObject>()

Expand Down Expand Up @@ -57,7 +58,7 @@ class OfficialMixinMetaData(parent: MixinRemapExtension) : MixinRemapExtension.M
val json = JsonParser.parseReader(stream.reader()).asJsonObject
val refmap = json["refmap"]?.asString ?: refmapNameCalculator(file)
val pkg = json.get("package")?.asString
refmaps.computeIfAbsent(refmap) { JsonObject() }
refmaps.computeIfAbsent(refmap) { TreeMap() }
val mixins = (json["mixins"]?.asJsonArray ?: listOf()) +
(json["client"]?.asJsonArray ?: listOf()) +
(json["server"]?.asJsonArray ?: listOf())
Expand Down Expand Up @@ -92,7 +93,7 @@ class OfficialMixinMetaData(parent: MixinRemapExtension) : MixinRemapExtension.M
return classesToRefmap.containsKey(className)
}

override fun getRefmapFor(className: String): JsonObject {
override fun getRefmapFor(className: String): TreeMap<String, Any> {
return refmaps[classesToRefmap[className]]!!
}

Expand All @@ -104,6 +105,7 @@ class OfficialMixinMetaData(parent: MixinRemapExtension) : MixinRemapExtension.M
if (!parent.noRefmap.contains("BaseMixin")) {
for ((name, json) in refmaps) {
parent.logger.info("[Unimined/MixinMetaData] Writing refmap $name")
// re-sort json entries
fs.getPath(name).writeText(
GSON.toJson(json),
Charsets.UTF_8,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -343,9 +343,7 @@ abstract class FabricLikeMinecraftTransformer(
stream.copyTo(out)
}
out.putNextEntry(ZipEntry(modJsonName).also { entry ->
entry.creationTime = FileTime.fromMillis(0)
entry.lastAccessTime = FileTime.fromMillis(0)
entry.lastModifiedTime = FileTime.fromMillis(0)
entry.time = CONSTANT_TIME_FOR_ZIP_ENTRIES
})
val innerjson = JsonObject()
innerjson.addProperty("schemaVersion", 1)
Expand Down

0 comments on commit 7bb6c31

Please sign in to comment.