initial: packwiz → simple-mod-sync manifest converter

Reads packwiz pack (pack.toml + index.toml + per-file .pw.toml) and
emits a simple-mod-sync sync_version=3 manifest. Drops server-only
mods, skips CurseForge metadata-mode entries with a warning, maps
content type from the parent directory of each metafile.

Optional --bundle-non-mods zips config/, options.txt etc into one
archive served as a 'packed' entry — covers the gap where simple-mod-sync
only ships zip-extractable content for non-mods.

15 tests, includes integration against upstream packwiz-example-pack.
This commit is contained in:
2026-06-02 11:44:20 +02:00
commit 8651b076d3
15 changed files with 708 additions and 0 deletions
@@ -0,0 +1,13 @@
name = "CF Only Mod"
filename = "cfmod-1.0.jar"
side = "both"
[download]
hash-format = "murmur2"
hash = "1234567"
mode = "metadata:curseforge"
[update]
[update.curseforge]
project-id = 12345
file-id = 67890
@@ -0,0 +1,8 @@
name = "Fabric API"
filename = "fabric-api-0.110.5+1.21.1.jar"
side = "both"
[download]
url = "https://cdn.modrinth.com/data/P7dR8mSH/versions/4OZL6q6h/fabric-api-0.110.5%2B1.21.1.jar"
hash-format = "sha1"
hash = "1234560000000000000000000000000000000000"
@@ -0,0 +1,8 @@
name = "Server Side Tool"
filename = "spark-1.10.55-fabric.jar"
side = "server"
[download]
url = "https://example.com/spark.jar"
hash-format = "sha1"
hash = "9999990000000000000000000000000000000000"
+13
View File
@@ -0,0 +1,13 @@
name = "Sodium"
filename = "sodium-fabric-0.6.5+mc1.21.1.jar"
side = "client"
[download]
url = "https://cdn.modrinth.com/data/AANobbMI/versions/EoNKHoLH/sodium-fabric-0.6.5%2Bmc1.21.1.jar"
hash-format = "sha1"
hash = "abcdef0000000000000000000000000000000000"
[update]
[update.modrinth]
mod-id = "AANobbMI"
version = "EoNKHoLH"