mirror of
https://gitlvb.teallvbs.xyz/IQ.Lvbs/IQ.Pilot.git
synced 2026-08-22 00:13:45 +08:00
77 lines
2.4 KiB
Python
Executable File
77 lines
2.4 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
"""
|
|
Copyright © IQ.Lvbs, apart of Project Teal Lvbs, All Rights Reserved, licensed under https://konn3kt.com/tos
|
|
|
|
Maintainer utility: pin a new mapd release tag and refresh the checked-in binary
|
|
hash. Not used at runtime. Binaries come from the gitlvb teal/mapd CI (built
|
|
against teal/gomsgq) — drop the artifact at third_party/mapd_pfeiferj/mapd, then
|
|
run this so the hash pin moves in the same commit.
|
|
"""
|
|
import argparse
|
|
import os
|
|
import re
|
|
import sys
|
|
|
|
from openpilot.common.basedir import BASEDIR
|
|
from openpilot.iqpilot.iq_maps import VENDOR_MAPD_PATH
|
|
from openpilot.iqpilot.iq_maps.vendor_mapd_installer import (
|
|
VENDOR_RELEASE_TAG,
|
|
sha256_of_file,
|
|
)
|
|
|
|
_RELEASE_SYMBOL = "VENDOR_RELEASE_TAG"
|
|
_INSTALLER_SRC = os.path.join(BASEDIR, "iqpilot", "iq_maps", "vendor_mapd_installer.py")
|
|
# public: the checked-in hash the version test compares the installed binary against
|
|
HASH_FILE = os.path.join(BASEDIR, "iqpilot", "iq_maps", "tests", "mapd_hash")
|
|
_HASH_FILE = HASH_FILE
|
|
_TAG_ASSIGN = re.compile(rf'^{_RELEASE_SYMBOL}\s*=\s*["\'][^"\']*["\']', re.MULTILINE)
|
|
|
|
|
|
def rewrite_pinned_tag(new_tag: str) -> bool:
|
|
with open(_INSTALLER_SRC) as f:
|
|
src = f.read()
|
|
|
|
patched, count = _TAG_ASSIGN.subn(f'{_RELEASE_SYMBOL} = "{new_tag}"', src, count=1)
|
|
if count != 1:
|
|
print(f"could not locate the {_RELEASE_SYMBOL} assignment in {_INSTALLER_SRC}; nothing written")
|
|
return False
|
|
|
|
with open(_INSTALLER_SRC, "w") as f:
|
|
f.write(patched)
|
|
print(f"pinned {_RELEASE_SYMBOL} -> {new_tag}")
|
|
return True
|
|
|
|
|
|
def refresh_hash_file() -> None:
|
|
digest = sha256_of_file(VENDOR_MAPD_PATH)
|
|
with open(_HASH_FILE, "w") as f:
|
|
f.write(digest)
|
|
print(f"wrote binary hash {digest} -> {_HASH_FILE}")
|
|
|
|
|
|
def main() -> int:
|
|
parser = argparse.ArgumentParser(description="Pin a new mapd release tag and refresh its hash")
|
|
parser.add_argument("--new_ver", type=str, help='e.g. --new_ver "v2.1.0"')
|
|
args = parser.parse_args()
|
|
|
|
if not args.new_ver:
|
|
parser.print_help()
|
|
print(f'\ncurrently pinned: {VENDOR_RELEASE_TAG} (unchanged)')
|
|
return 0
|
|
|
|
target = args.new_ver.strip()
|
|
if target == VENDOR_RELEASE_TAG:
|
|
reply = input(f"{target} is already the pinned tag — re-run anyway? (y/N): ").strip().lower()
|
|
if reply != "y":
|
|
print("aborted; nothing changed")
|
|
return 0
|
|
|
|
if not rewrite_pinned_tag(target):
|
|
return 1
|
|
refresh_hash_file()
|
|
return 0
|
|
|
|
|
|
if __name__ == "__main__":
|
|
sys.exit(main())
|