Files
proxy-god/scripts/generate_version_info.py
Dr Jones 08683ab328
Some checks failed
CI / Test Python 3.10 (push) Has been cancelled
CI / Test Python 3.11 (push) Has been cancelled
CI / Test Python 3.12 (push) Has been cancelled
build: production Windows release pipeline (PyInstaller, SBOM, CI, signing hook)
2026-05-22 20:05:00 -07:00

75 lines
2.1 KiB
Python

#!/usr/bin/env python3
"""Generate a PyInstaller version-info file for ProxyChainManager.exe.
Usage:
python scripts/generate_version_info.py --version 1.2.3 --out build/version_info.txt
The output is consumed by ProxyChainManager.spec when the file exists.
"""
from __future__ import annotations
import argparse
import re
from pathlib import Path
def _parse_version(version: str) -> tuple[int, int, int, int]:
parts = re.findall(r"\d+", version)
nums = [int(x) for x in parts[:4]]
while len(nums) < 4:
nums.append(0)
return nums[0], nums[1], nums[2], nums[3]
def build_version_info(version: str, commit: str = "") -> str:
filevers = prodvers = _parse_version(version)
commit_suffix = f" ({commit})" if commit else ""
return f"""# UTF-8
# Generated by scripts/generate_version_info.py — do not edit by hand.
VSVersionInfo(
ffi=FixedFileInfo(
filevers={filevers},
prodvers={prodvers},
mask=0x3f,
flags=0x0,
OS=0x40004,
fileType=0x1,
subtype=0x0,
date=(0, 0)
),
kids=[
StringFileInfo(
[
StringTable(
u'040904B0',
[StringStruct(u'CompanyName', u'Proxy God'),
StringStruct(u'FileDescription', u'Proxy God — multi-hop proxy chain manager'),
StringStruct(u'FileVersion', u'{version}{commit_suffix}'),
StringStruct(u'InternalName', u'ProxyChainManager'),
StringStruct(u'LegalCopyright', u'MIT License'),
StringStruct(u'OriginalFilename', u'ProxyChainManager.exe'),
StringStruct(u'ProductName', u'Proxy God'),
StringStruct(u'ProductVersion', u'{version}{commit_suffix}')])
]
),
VarFileInfo([VarStruct(u'Translation', [1033, 1200])])
]
)
"""
def main() -> None:
ap = argparse.ArgumentParser()
ap.add_argument("--version", required=True)
ap.add_argument("--commit", default="")
ap.add_argument("--out", required=True)
args = ap.parse_args()
out = Path(args.out)
out.parent.mkdir(parents=True, exist_ok=True)
out.write_text(build_version_info(args.version, args.commit), encoding="utf-8")
print(f"Wrote {out}")
if __name__ == "__main__":
main()