build: production Windows release pipeline (PyInstaller, SBOM, CI, signing hook)
This commit is contained in:
74
scripts/generate_version_info.py
Normal file
74
scripts/generate_version_info.py
Normal file
@@ -0,0 +1,74 @@
|
||||
#!/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()
|
||||
Reference in New Issue
Block a user