#!/usr/bin/env python3 """ Copyright © IQ.Lvbs, apart of Project Teal Lvbs, All Rights Reserved, licensed under https://konn3kt.com/tos """ import argparse import os import re from openpilot.iqpilot import get_file_hash from openpilot.common.basedir import BASEDIR from openpilot.iqpilot.mapd import MAPD_PATH MAPD_HASH_PATH = os.path.join(BASEDIR, "iqpilot", "mapd", "tests", "mapd_hash") MAPD_VERSION_PATH = os.path.join(BASEDIR, "iqpilot", "mapd", "mapd_installer.py") def update_mapd_hash(): mapd_hash = get_file_hash(MAPD_PATH) with open(MAPD_HASH_PATH, "w") as f: f.write(mapd_hash) print(f"Generated and updated new mapd hash to {MAPD_HASH_PATH}") def get_current_mapd_version(path: str) -> str: print("[GET CURRENT MAPD VERSION]") with open(path) as f: for line in f: if line.strip().startswith("VERSION"): # Match VERSION = 'v1.11.0' or VERSION="v1.11.0" (with optional spaces) match = re.search(r'VERSION\s*=\s*[\'"]([^\'"]+)[\'"]', line) if match: ver = match.group(1) print(f'Current mapd version: "{ver}"') return ver else: print("[ERROR] VERSION line found but no quoted value detected.") return "" print("[ERROR] VERSION not found in file!") return "" def update_mapd_version(ver: str, path: str): print("[CHANGE CURRENT MAPD VERSION]") with open(path) as f: lines = f.readlines() found = False new_lines = [] for line in lines: if not found and line.startswith("VERSION ="): new_lines.append(f'VERSION = "{ver}"\n') found = True new_lines.extend(lines[lines.index(line) + 1:]) break else: new_lines.append(line) if not found: print("[ERROR] VERSION line not found! Aborting without writing.") return with open(path, "w") as f: f.writelines(new_lines) print(f'New mapd version: "{ver}"') print("[DONE]") if __name__ == "__main__": parser = argparse.ArgumentParser(description="Update mapd version and hash") parser.add_argument("--new_ver", type=str, help="New mapd version") args = parser.parse_args() if not args.new_ver: print("Warning: No new mapd version provided. Use --new_ver to specify") print("Example:") print(" python iqpilot/mapd/update_version.py --new_ver \"v1.12.0\"") print("Current mapd version and hash will not be updated! (aborted)") exit(0) current_ver = get_current_mapd_version(MAPD_VERSION_PATH) new_ver = f"{args.new_ver}" if current_ver == new_ver: print(f'Proposed mapd version: "{new_ver}"') confirm = input("Proposed mapd version is the same as the current mapd version. Confirm? (y/n): ").upper().strip() if confirm != "Y": print("Current mapd version and hash will not be updated! (aborted)") exit(0) update_mapd_version(new_ver, MAPD_VERSION_PATH) update_mapd_hash()