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
+39
View File
@@ -0,0 +1,39 @@
hash-format = "sha256"
[[files]]
file = "mods/sodium.pw.toml"
hash = "0000000000000000000000000000000000000000000000000000000000000000"
metafile = true
[[files]]
file = "mods/fabric-api.pw.toml"
hash = "0000000000000000000000000000000000000000000000000000000000000000"
metafile = true
[[files]]
file = "mods/server-side-tool.pw.toml"
hash = "0000000000000000000000000000000000000000000000000000000000000000"
metafile = true
[[files]]
file = "mods/cf-only-mod.pw.toml"
hash = "0000000000000000000000000000000000000000000000000000000000000000"
metafile = true
[[files]]
file = "resourcepacks/branding.pw.toml"
hash = "0000000000000000000000000000000000000000000000000000000000000000"
metafile = true
[[files]]
file = "shaderpacks/iris.pw.toml"
hash = "0000000000000000000000000000000000000000000000000000000000000000"
metafile = true
[[files]]
file = "config/voicechat-client.properties"
hash = "1111111111111111111111111111111111111111111111111111111111111111"
[[files]]
file = "options.txt"
hash = "2222222222222222222222222222222222222222222222222222222222222222"