feat: Initial commit for OnEver Drive centralized backup system with Windows PyQt6 agent and Proxmox LXC deployment
This commit is contained in:
@@ -0,0 +1,93 @@
|
||||
import os
|
||||
import sys
|
||||
import subprocess
|
||||
from pathlib import Path
|
||||
|
||||
def build_windows_exe():
|
||||
agent_dir = Path(__file__).resolve().parent
|
||||
assets_dir = agent_dir / "assets"
|
||||
ico_path = assets_dir / "icon.ico"
|
||||
|
||||
if not ico_path.exists():
|
||||
print("[*] Generating icons...")
|
||||
from create_icons import generate_app_icons
|
||||
generate_app_icons()
|
||||
|
||||
print("========================================================================")
|
||||
print(" BUILDING ONEVER DRIVE MODERN PYQT6 WINDOWS EXECUTABLE (.EXE) ")
|
||||
print("========================================================================")
|
||||
|
||||
dist_dir = agent_dir / "dist"
|
||||
build_dir = agent_dir / "build"
|
||||
|
||||
# PyInstaller arguments for modern PyQt6 standalone agent
|
||||
pyinstaller_args = [
|
||||
sys.executable,
|
||||
"-m",
|
||||
"PyInstaller",
|
||||
"--noconfirm",
|
||||
"--onedir",
|
||||
"--windowed", # No console popup, pure GUI and tray
|
||||
f"--icon={str(ico_path)}",
|
||||
f"--name=OnEverDriveAgent",
|
||||
f"--distpath={str(dist_dir)}",
|
||||
f"--workpath={str(build_dir)}",
|
||||
f"--add-data={str(assets_dir)}{os.pathsep}assets",
|
||||
"--hidden-import=PyQt6",
|
||||
"--hidden-import=PyQt6.QtCore",
|
||||
"--hidden-import=PyQt6.QtGui",
|
||||
"--hidden-import=PyQt6.QtWidgets",
|
||||
"--hidden-import=httpx",
|
||||
"--hidden-import=pydantic",
|
||||
"--hidden-import=pydantic_settings",
|
||||
"--hidden-import=schedule",
|
||||
"--hidden-import=sqlite3",
|
||||
str(agent_dir / "agent_app_pyqt.py")
|
||||
]
|
||||
|
||||
print(f"[*] Compiling PyQt6 directory bundle...")
|
||||
subprocess.run(pyinstaller_args, check=True, cwd=str(agent_dir))
|
||||
|
||||
# Single-file build
|
||||
standalone_args = [
|
||||
sys.executable,
|
||||
"-m",
|
||||
"PyInstaller",
|
||||
"--noconfirm",
|
||||
"--onefile",
|
||||
"--windowed",
|
||||
f"--icon={str(ico_path)}",
|
||||
f"--name=OnEverDriveAgent-Standalone",
|
||||
f"--distpath={str(dist_dir)}",
|
||||
f"--workpath={str(build_dir)}",
|
||||
f"--add-data={str(assets_dir)}{os.pathsep}assets",
|
||||
"--hidden-import=PyQt6",
|
||||
"--hidden-import=PyQt6.QtCore",
|
||||
"--hidden-import=PyQt6.QtGui",
|
||||
"--hidden-import=PyQt6.QtWidgets",
|
||||
"--hidden-import=httpx",
|
||||
"--hidden-import=pydantic",
|
||||
"--hidden-import=pydantic_settings",
|
||||
"--hidden-import=schedule",
|
||||
"--hidden-import=sqlite3",
|
||||
str(agent_dir / "agent_app_pyqt.py")
|
||||
]
|
||||
|
||||
print(f"[*] Compiling standalone single-file .exe...")
|
||||
subprocess.run(standalone_args, check=True, cwd=str(agent_dir))
|
||||
|
||||
exe_path = dist_dir / "OnEverDriveAgent" / "OnEverDriveAgent.exe"
|
||||
single_exe_path = dist_dir / "OnEverDriveAgent-Standalone.exe"
|
||||
|
||||
print("")
|
||||
echo = "========================================================================"
|
||||
print(echo)
|
||||
print(f"[+] PyQt6 Executables built successfully:")
|
||||
print(f" 1. {exe_path}")
|
||||
print(f" 2. {single_exe_path}")
|
||||
print(echo)
|
||||
|
||||
return exe_path
|
||||
|
||||
if __name__ == "__main__":
|
||||
build_windows_exe()
|
||||
Reference in New Issue
Block a user