feat: package distribution with PyPI support, embedded UI, Dockerfile, and CLI enhancements
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
import os
|
||||
import sys
|
||||
import shutil
|
||||
import subprocess
|
||||
|
||||
def build():
|
||||
print("==================================================")
|
||||
print("STEP 1: Compiling React Frontend (Traffic Control Room)")
|
||||
print("==================================================")
|
||||
frontend_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "frontend"))
|
||||
result = subprocess.run(["npm", "run", "build"], cwd=frontend_dir, shell=True)
|
||||
if result.returncode != 0:
|
||||
print("[ERROR] Frontend build failed!")
|
||||
sys.exit(1)
|
||||
|
||||
print("\n==================================================")
|
||||
print("STEP 2: Bundling UI Assets into backend/app/static")
|
||||
print("==================================================")
|
||||
dist_dir = os.path.join(frontend_dir, "dist")
|
||||
static_dest = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "backend", "app", "static"))
|
||||
|
||||
if os.path.exists(static_dest):
|
||||
shutil.rmtree(static_dest)
|
||||
shutil.copytree(dist_dir, static_dest)
|
||||
print(f"[OK] Successfully copied static UI files from {dist_dir} to {static_dest}")
|
||||
|
||||
print("\n==================================================")
|
||||
print("STEP 3: Building Python Distribution (.tar.gz and .whl)")
|
||||
print("==================================================")
|
||||
root_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))
|
||||
|
||||
# Ensure build is installed
|
||||
subprocess.run([sys.executable, "-m", "pip", "install", "--upgrade", "build", "twine", "wheel"], cwd=root_dir, check=True)
|
||||
|
||||
# Build package
|
||||
build_result = subprocess.run([sys.executable, "-m", "build"], cwd=root_dir)
|
||||
if build_result.returncode != 0:
|
||||
print("[ERROR] Python build failed!")
|
||||
sys.exit(1)
|
||||
|
||||
print("\n==================================================")
|
||||
print("STEP 4: Validating Artifacts with Twine Check")
|
||||
print("==================================================")
|
||||
dist_artifacts = os.path.join(root_dir, "dist", "*")
|
||||
subprocess.run([sys.executable, "-m", "twine", "check", dist_artifacts], cwd=root_dir, shell=True)
|
||||
|
||||
print("\n[SUCCESS] ai-model-router package successfully built!")
|
||||
print(f"Artifacts ready in: {os.path.join(root_dir, 'dist')}")
|
||||
|
||||
if __name__ == "__main__":
|
||||
build()
|
||||
Reference in New Issue
Block a user