r5sdk/r5dev/resource/script/bld_man.py
Kawe Mazidjatari 631535a4c9 Add json fields for manifest version and asset list
Make it so it could actually be checked and parsed properly.
2023-07-30 01:25:13 +02:00

67 lines
2.3 KiB
Python

#------------------------------------------------------------------------------
import os
import sys
import json
import hashlib
#------------------------------------------------------------------------------
# Compute the SHA-256 checksum of a file
#------------------------------------------------------------------------------
def ComputeChecksum(filePath, blockSize=65536):
checksum = hashlib.sha256()
with open(filePath, "rb") as file:
for block in iter(lambda: file.read(blockSize), b""):
checksum.update(block)
return checksum.hexdigest()
#------------------------------------------------------------------------------
# Compute checksums for all files in a directory
#------------------------------------------------------------------------------
def RecursiveComputeChecksum(directoryPath):
checksums = {}
scriptPath = os.path.abspath(__file__)
for root, _, files in os.walk(directoryPath):
for fileName in files:
filePath = os.path.join(root, fileName)
relativePath = os.path.relpath(filePath, directoryPath)
normalizedPath = relativePath.replace("\\", "/")
# Exclude the script itself from the manifest
if os.path.abspath(filePath) == scriptPath:
continue
checksum = ComputeChecksum(filePath)
checksums[normalizedPath] = checksum
return checksums
#------------------------------------------------------------------------------
# Save the checksums to a manifest file
#------------------------------------------------------------------------------
def CreateManifest(version, checksums, outManifestFile):
manifest = {
"version": version,
"assets": checksums
}
with open(outManifestFile, "w") as jsonFile:
json.dump(manifest, jsonFile, indent=4)
#------------------------------------------------------------------------------
if __name__ == "__main__":
if len(sys.argv) != 2:
print("Usage: bld_man.py <versionNum>")
sys.exit(1)
try:
version = int(sys.argv[1])
except ValueError:
print("Version must be an integer")
sys.exit(1)
workingDirectory = os.getcwd()
outManifestFile = "patch_manifest.json"
checksums = RecursiveComputeChecksum(workingDirectory)
CreateManifest(version, checksums, outManifestFile)