64 lines
1.5 KiB
Python
Executable File
64 lines
1.5 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
|
|
# Generates build info and injects it into the server zip files.
|
|
|
|
import hashlib
|
|
import json
|
|
import os
|
|
from zipfile import ZipFile, ZIP_DEFLATED
|
|
|
|
FILES = {
|
|
"linux": "SS14.Client_Linux_x64.zip",
|
|
"windows": "SS14.Client_Windows_x64.zip",
|
|
"macos": "SS14.Client_macOS_x64.zip"
|
|
}
|
|
|
|
SERVER_FILES = [
|
|
"SS14.Server_Linux_x64.zip",
|
|
"SS14.Server_Windows_x64.zip",
|
|
"SS14.Server_macOS_x64.zip"
|
|
]
|
|
|
|
FORK_ID = "wizards"
|
|
|
|
|
|
def main() -> None:
|
|
manifest = generate_manifest("release")
|
|
|
|
for server in SERVER_FILES:
|
|
inject_manifest(os.path.join("release", server), manifest)
|
|
|
|
|
|
def inject_manifest(zip_path: str, manifest: str) -> None:
|
|
with ZipFile(zip_path, "a", compression=ZIP_DEFLATED) as z:
|
|
z.writestr("build.json", manifest)
|
|
|
|
|
|
def generate_manifest(dir: str) -> str:
|
|
# Env variables set by Jenkins.
|
|
|
|
jenkins_base = f"{os.environ['BUILD_URL']}artifact/release/"
|
|
|
|
version = os.environ["BUILD_NUMBER"]
|
|
downloads = {}
|
|
hashes = {}
|
|
|
|
for platform, filename in FILES.items():
|
|
downloads[platform] = f"{jenkins_base}{filename}"
|
|
hashes[platform] = sha256_file(os.path.join(dir, filename))
|
|
|
|
return json.dumps({"downloads": downloads, "hashes": hashes, "version": version, "fork_id": FORK_ID})
|
|
|
|
|
|
def sha256_file(path: str) -> str:
|
|
with open(path, "rb") as f:
|
|
h = hashlib.sha256()
|
|
for b in iter(lambda: f.read(4096), b""):
|
|
h.update(b)
|
|
|
|
return h.hexdigest()
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main()
|