Files
Northern-Thailand-Ping-Rive…/build_simple.py
T
grabowski 9cac9c4d2a style: apply black/isort across the repo; make CI mypy advisory
The push-CI gates (black/isort/mypy) had never actually run before the
branch-trigger fix, and the codebase predates them. Formatting is now
black/isort clean repo-wide. mypy keeps running but non-blocking: 86
pre-existing errors are a separate cleanup, not a gate to hold hostage.
2026-08-10 15:57:00 +07:00

113 lines
2.9 KiB
Python

#!/usr/bin/env python3
"""
Simple build script for standalone executable
"""
import os
import shutil
import sys
from pathlib import Path
def main():
print("Building Ping River Monitor Executable")
print("=" * 50)
# Check if PyInstaller is installed
try:
import PyInstaller
print("[OK] PyInstaller available")
except ImportError:
print("[INFO] Installing PyInstaller...")
os.system("uv add --dev pyinstaller")
# Clean previous builds
if os.path.exists("dist"):
shutil.rmtree("dist")
print("[CLEAN] Removed old dist directory")
if os.path.exists("build"):
shutil.rmtree("build")
print("[CLEAN] Removed old build directory")
# Build command with all necessary options
cmd = [
"uv",
"run",
"pyinstaller",
"--onefile",
"--console",
"--name=ping-river-monitor",
"--add-data=.env;.",
"--add-data=sql;sql",
"--add-data=README.md;.",
"--add-data=POSTGRESQL_SETUP.md;.",
"--add-data=SQLITE_MIGRATION.md;.",
"--hidden-import=psycopg2",
"--hidden-import=sqlalchemy.dialects.postgresql",
"--hidden-import=sqlalchemy.dialects.sqlite",
"--hidden-import=dotenv",
"--hidden-import=pydantic",
"--hidden-import=fastapi",
"--hidden-import=uvicorn",
"--hidden-import=schedule",
"--hidden-import=pandas",
"--clean",
"--noconfirm",
"run.py",
]
print("[BUILD] Running PyInstaller...")
print("[CMD] " + " ".join(cmd))
result = os.system(" ".join(cmd))
if result == 0:
print("[SUCCESS] Executable built successfully!")
# Copy .env file to dist if it exists
if os.path.exists(".env") and os.path.exists("dist"):
shutil.copy2(".env", "dist/.env")
print("[COPY] .env file copied to dist/")
# Create batch files for easy usage
batch_files = {
"start.bat": """@echo off
echo Starting Ping River Monitor...
ping-river-monitor.exe
pause
""",
"start-api.bat": """@echo off
echo Starting Web API...
ping-river-monitor.exe --web-api
pause
""",
"test.bat": """@echo off
echo Running test...
ping-river-monitor.exe --test
pause
""",
}
for filename, content in batch_files.items():
if os.path.exists("dist"):
with open(f"dist/{filename}", "w") as f:
f.write(content)
print(f"[CREATE] {filename}")
print("\n" + "=" * 50)
print("BUILD COMPLETE!")
print(f"Executable: dist/ping-river-monitor.exe")
print("Batch files: start.bat, start-api.bat, test.bat")
print("Don't forget to edit .env file before using!")
return True
else:
print("[ERROR] Build failed!")
return False
if __name__ == "__main__":
success = main()
sys.exit(0 if success else 1)