Synchronize verified Sanctuary beta.092 sources and release documentation
Build Sanctuary / build (push) Canceled after 0s

This commit is contained in:
koka
2026-09-16 11:41:27 +02:00
parent 85e062ed91
commit 49feb5a376
586 changed files with 30916 additions and 234 deletions
+2 -2
View File
@@ -124,14 +124,14 @@ def assemble(jar_url=None):
info = json.loads(demeure.read('fabric.mod.json'))
require(info['id'] == 'demeure' and info['version'] == values['mod_version'], 'Demeure metadata drift')
require('LICENSE_demeure' in demeure.namelist() and 'PROVENANCE.md' in demeure.namelist(), 'Demeure notices missing')
jei_path = 'META-INF/jars/jei-sanctuary-26.3-pre-2-30.32.0-sanctuary.2.jar'
jei_path = f"META-INF/jars/jei-sanctuary-{values['minecraft_version']}-{values['jei_version']}.jar"
require({'file': jei_path} in metadata.get('jars', []), 'JEI source fork is not declared')
jei_data = archive.read(jei_path)
built_jei = ROOT / 'mods/jei/build/libs' / Path(jei_path).name
require(built_jei.is_file() and jei_data == built_jei.read_bytes(), 'Stale JEI source fork')
with zipfile.ZipFile(io.BytesIO(jei_data)) as jei:
info = json.loads(jei.read('fabric.mod.json'))
require(info['id'] == 'jei' and info['version'] == '30.32.0-sanctuary.2', 'JEI metadata drift')
require(info['id'] == 'jei' and info['version'] == values['jei_version'], 'JEI metadata drift')
require(info['depends']['minecraft'] == values['minecraft_version'].replace('-pre-', '-pre.'), 'JEI Minecraft version drift')
require(all(path in jei.namelist() for path in ('LICENSE.txt', 'PROVENANCE.md',
'licenses/baked-substring-index.txt', 'licenses/suffixtree.txt')), 'JEI notices missing')
+45
View File
@@ -0,0 +1,45 @@
#!/usr/bin/env python3
"""Check immutable texture-release hashes using only Python's standard library."""
import hashlib
import json
from pathlib import Path
import struct
import zlib
ROOT = Path(__file__).resolve().parents[1]
SOURCE = ROOT / 'ressources-pack/sanctuary'
properties = dict(line.split('=', 1) for line in (ROOT / 'gradle.properties').read_text().splitlines()
if line.strip() and not line.lstrip().startswith('#'))
version = properties['resource_pack_version']
release = json.loads((SOURCE / f'releases/{version}.json').read_text())
assert release['version'] == version
assert release['minecraft'] == properties['minecraft_version']
assert release['format'] == [97, 1]
assert release['builtinId'] == 'sanctuary:textures' and release['activation'] == 'DEFAULT_ENABLED'
files = {str(p.relative_to(SOURCE)): p for p in SOURCE.rglob('*') if p.is_file()
and (str(p.relative_to(SOURCE)).startswith('assets/') or p.name in ('pack.mcmeta', 'pack.png'))
and p.name != '.DS_Store'}
assert set(files) == set(release['files']), 'Resource list changed: create a new texture release manifest'
for name, path in files.items():
data = path.read_bytes()
assert hashlib.sha256(data).hexdigest() == release['files'][name], f'Texture release drift: {name}'
if name.endswith(('.json', '.mcmeta')):
json.loads(data)
if name.endswith('.png'):
assert data[:8] == b'\x89PNG\r\n\x1a\n', name
offset = 8
kind = None
while offset < len(data):
length = struct.unpack_from('>I', data, offset)[0]
kind = data[offset + 4:offset + 8]
chunk = data[offset + 4:offset + 8 + length]
assert zlib.crc32(chunk) == struct.unpack_from('>I', data, offset + 8 + length)[0], name
offset += 12 + length
assert offset == len(data) and kind == b'IEND', name
for name, digest in release['import']['files'].items():
if name.startswith('assets/') or name == 'pack.png':
assert hashlib.sha256(files[name].read_bytes()).hexdigest() == digest, f'Imported asset altered: {name}'
metadata = json.loads(files['pack.mcmeta'].read_text())['pack']
assert metadata['min_format'] == metadata['max_format'] == release['format']
assert metadata['description']['with'] == [version]
print(f'Sanctuary textures {version}: {len(files)} files, imported assets, PNG CRCs and format 97.1 verified.')