mirror of
https://github.com/sunnypilot/sunnypilot.git
synced 2026-08-22 17:43:47 +08:00
mapd: script to update version and hash (#1349)
* init and hash for 1.11.0 * update version and example for 1.12.0
This commit is contained in:
@@ -4,4 +4,15 @@ Copyright (c) 2021-, Haibin Wen, sunnypilot, and a number of other contributors.
|
|||||||
This file is part of sunnypilot and is licensed under the MIT License.
|
This file is part of sunnypilot and is licensed under the MIT License.
|
||||||
See the LICENSE.md file in the root directory for more details.
|
See the LICENSE.md file in the root directory for more details.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
import hashlib
|
||||||
|
|
||||||
PARAMS_UPDATE_PERIOD = 3 # seconds
|
PARAMS_UPDATE_PERIOD = 3 # seconds
|
||||||
|
|
||||||
|
|
||||||
|
def get_file_hash(path: str) -> str:
|
||||||
|
sha256_hash = hashlib.sha256()
|
||||||
|
with open(path, "rb") as f:
|
||||||
|
for byte_block in iter(lambda: f.read(4096), b""):
|
||||||
|
sha256_hash.update(byte_block)
|
||||||
|
return sha256_hash.hexdigest()
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ from openpilot.system.version import is_prebuilt
|
|||||||
from openpilot.sunnypilot.mapd import MAPD_PATH, MAPD_BIN_DIR
|
from openpilot.sunnypilot.mapd import MAPD_PATH, MAPD_BIN_DIR
|
||||||
import openpilot.system.sentry as sentry
|
import openpilot.system.sentry as sentry
|
||||||
|
|
||||||
VERSION = 'v1.11.0'
|
VERSION = "v1.12.0"
|
||||||
URL = f"https://github.com/pfeiferj/openpilot-mapd/releases/download/{VERSION}/mapd"
|
URL = f"https://github.com/pfeiferj/openpilot-mapd/releases/download/{VERSION}/mapd"
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1 @@
|
|||||||
|
fdb3b49ee19956e6ce09fdc3373cbba557f1263b2180e9f344c1d4053852284b
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
"""
|
||||||
|
Copyright (c) 2021-, Haibin Wen, sunnypilot, and a number of other contributors.
|
||||||
|
|
||||||
|
This file is part of sunnypilot and is licensed under the MIT License.
|
||||||
|
See the LICENSE.md file in the root directory for more details.
|
||||||
|
"""
|
||||||
|
from openpilot.sunnypilot import get_file_hash
|
||||||
|
from openpilot.sunnypilot.mapd import MAPD_PATH
|
||||||
|
from openpilot.sunnypilot.mapd.update_version import MAPD_HASH_PATH
|
||||||
|
|
||||||
|
|
||||||
|
class TestMapdVersion:
|
||||||
|
def test_compare_versions(self):
|
||||||
|
mapd_hash = get_file_hash(MAPD_PATH)
|
||||||
|
|
||||||
|
with open(MAPD_HASH_PATH) as f:
|
||||||
|
current_hash = f.read().strip()
|
||||||
|
|
||||||
|
assert current_hash == mapd_hash, "Run sunnypilot/mapd/update_version.py to update the current mapd version and hash"
|
||||||
Executable
+97
@@ -0,0 +1,97 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
"""
|
||||||
|
Copyright (c) 2021-, Haibin Wen, sunnypilot, and a number of other contributors.
|
||||||
|
|
||||||
|
This file is part of sunnypilot and is licensed under the MIT License.
|
||||||
|
See the LICENSE.md file in the root directory for more details.
|
||||||
|
"""
|
||||||
|
import argparse
|
||||||
|
import os
|
||||||
|
import re
|
||||||
|
|
||||||
|
from openpilot.sunnypilot import get_file_hash
|
||||||
|
from openpilot.common.basedir import BASEDIR
|
||||||
|
from openpilot.sunnypilot.mapd import MAPD_PATH
|
||||||
|
|
||||||
|
MAPD_HASH_PATH = os.path.join(BASEDIR, "sunnypilot", "mapd", "tests", "mapd_hash")
|
||||||
|
MAPD_VERSION_PATH = os.path.join(BASEDIR, "sunnypilot", "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 sunnypilot/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()
|
||||||
@@ -3,6 +3,7 @@ import os
|
|||||||
import hashlib
|
import hashlib
|
||||||
|
|
||||||
from openpilot.common.basedir import BASEDIR
|
from openpilot.common.basedir import BASEDIR
|
||||||
|
from openpilot.sunnypilot import get_file_hash
|
||||||
|
|
||||||
DEFAULT_MODEL_NAME_PATH = os.path.join(BASEDIR, "common", "model.h")
|
DEFAULT_MODEL_NAME_PATH = os.path.join(BASEDIR, "common", "model.h")
|
||||||
MODEL_HASH_PATH = os.path.join(BASEDIR, "sunnypilot", "models", "tests", "model_hash")
|
MODEL_HASH_PATH = os.path.join(BASEDIR, "sunnypilot", "models", "tests", "model_hash")
|
||||||
@@ -10,14 +11,6 @@ VISION_ONNX_PATH = os.path.join(BASEDIR, "selfdrive", "modeld", "models", "drivi
|
|||||||
POLICY_ONNX_PATH = os.path.join(BASEDIR, "selfdrive", "modeld", "models", "driving_policy.onnx")
|
POLICY_ONNX_PATH = os.path.join(BASEDIR, "selfdrive", "modeld", "models", "driving_policy.onnx")
|
||||||
|
|
||||||
|
|
||||||
def get_file_hash(path: str) -> str:
|
|
||||||
sha256_hash = hashlib.sha256()
|
|
||||||
with open(path, "rb") as f:
|
|
||||||
for byte_block in iter(lambda: f.read(4096), b""):
|
|
||||||
sha256_hash.update(byte_block)
|
|
||||||
return sha256_hash.hexdigest()
|
|
||||||
|
|
||||||
|
|
||||||
def update_model_hash():
|
def update_model_hash():
|
||||||
vision_hash = get_file_hash(VISION_ONNX_PATH)
|
vision_hash = get_file_hash(VISION_ONNX_PATH)
|
||||||
policy_hash = get_file_hash(POLICY_ONNX_PATH)
|
policy_hash = get_file_hash(POLICY_ONNX_PATH)
|
||||||
|
|||||||
@@ -1,4 +1,12 @@
|
|||||||
from openpilot.sunnypilot.models.default_model import get_file_hash, MODEL_HASH_PATH, VISION_ONNX_PATH, POLICY_ONNX_PATH
|
"""
|
||||||
|
Copyright (c) 2021-, Haibin Wen, sunnypilot, and a number of other contributors.
|
||||||
|
|
||||||
|
This file is part of sunnypilot and is licensed under the MIT License.
|
||||||
|
See the LICENSE.md file in the root directory for more details.
|
||||||
|
"""
|
||||||
|
|
||||||
|
from openpilot.sunnypilot import get_file_hash
|
||||||
|
from openpilot.sunnypilot.models.default_model import MODEL_HASH_PATH, VISION_ONNX_PATH, POLICY_ONNX_PATH
|
||||||
import hashlib
|
import hashlib
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user