pull/35253/head
Trey Moen 4 months ago committed by Cameron Clough
parent 6ae0298f95
commit 26b0d5d817
  1. 47
      release/pack-raylib.py

@ -1,56 +1,35 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
import importlib import importlib
import os
import shutil import shutil
import sys import sys
import tempfile
import zipapp import zipapp
from argparse import ArgumentParser from argparse import ArgumentParser
from pathlib import Path
from openpilot.common.basedir import BASEDIR from openpilot.common.basedir import BASEDIR
ENTRYPOINT = 'main' ENTRYPOINT = 'main'
INTERPRETER = '/usr/bin/env python3' INTERPRETER = '/usr/bin/env python3'
EXTS = ['.py', '.png']
def copy_directory(src_dir, dst_dir): def copy(src, dest, follow_symlinks=False):
""" if any(src.endswith(ext) for ext in EXTS):
Copy all files from source directory to destination directory, following symlinks. shutil.copy2(src, dest, follow_symlinks=follow_symlinks)
Args:
src_dir (str): Path to source directory
dst_dir (str): Path to destination directory
"""
# Ensure source directory exists
if not os.path.exists(src_dir):
raise FileNotFoundError(f"Source directory '{src_dir}' does not exist")
# Create destination directory if it doesn't exist
os.makedirs(dst_dir, exist_ok=True)
# Walk through source directory
for root, _, files in os.walk(src_dir, followlinks=True):
# Calculate relative path from source directory
rel_path = os.path.relpath(root, src_dir)
# Create corresponding directory in destination
dst_root = os.path.join(dst_dir, rel_path)
os.makedirs(dst_root, exist_ok=True)
# Copy each file
for file in files:
src_file = os.path.join(root, file)
dst_file = os.path.join(dst_root, file)
# Copy file, preserving metadata and following symlinks
shutil.copy2(src_file, dst_file, follow_symlinks=True)
if __name__ == '__main__': if __name__ == '__main__':
parser = ArgumentParser(prog='pack-raylib.py', description='Package a raylib UI into a portable executable.', epilog='comma.ai') parser = ArgumentParser(prog='pack-raylib.py', description='Package a raylib UI into a portable executable.', epilog='comma.ai')
parser.add_argument('module')
parser.add_argument('-o', '--output', help='output file') parser.add_argument('-o', '--output', help='output file')
parser.add_argument('module')
args = parser.parse_args() args = parser.parse_args()
if not args.output:
args.output = args.module
try: try:
mod = importlib.import_module(args.module) mod = importlib.import_module(args.module)
except ModuleNotFoundError: except ModuleNotFoundError:
@ -61,8 +40,10 @@ if __name__ == '__main__':
print(f'{args.module} does not have a {ENTRYPOINT}() function') print(f'{args.module} does not have a {ENTRYPOINT}() function')
sys.exit(1) sys.exit(1)
import tempfile
with tempfile.TemporaryDirectory() as tmp: with tempfile.TemporaryDirectory() as tmp:
copy_directory(BASEDIR + '/openpilot', tmp) shutil.copytree(BASEDIR + '/openpilot', tmp, symlinks=False, dirs_exist_ok=True, copy_function=copy)
entry = f'{args.module}:{ENTRYPOINT}' entry = f'{args.module}:{ENTRYPOINT}'
zipapp.create_archive(tmp, target=args.output, interpreter=INTERPRETER, main=entry) zipapp.create_archive(tmp, target=args.output, interpreter=INTERPRETER, main=entry)
print(f'created executable {Path(args.output).resolve()}')

Loading…
Cancel
Save