infra: build

This commit is contained in:
Tang Ziya 2024-05-20 11:12:03 +08:00
parent d5a4ab46f4
commit a018df2734
5 changed files with 55 additions and 8 deletions

View File

@ -1,7 +1,7 @@
from peewee import * from peewee import *
from peewee_migrate import Router from peewee_migrate import Router
from playhouse.db_url import connect from playhouse.db_url import connect
from config import SRC_LOG_LEVELS, DATA_DIR, DATABASE_URL from config import SRC_LOG_LEVELS, DATA_DIR, DATABASE_URL, BACKEND_DIR
import os import os
import logging import logging
@ -18,6 +18,8 @@ else:
DB = connect(DATABASE_URL) DB = connect(DATABASE_URL)
log.info(f"Connected to a {DB.__class__.__name__} database.") log.info(f"Connected to a {DB.__class__.__name__} database.")
router = Router(DB, migrate_dir="apps/web/internal/migrations", logger=log) router = Router(
DB, migrate_dir=BACKEND_DIR / "apps" / "web" / "internal" / "migrations", logger=log
)
router.run() router.run()
DB.connect(reuse_if_open=True) DB.connect(reuse_if_open=True)

View File

@ -1,6 +1,8 @@
import os import os
import sys import sys
import logging import logging
import importlib.metadata
import pkgutil
import chromadb import chromadb
from chromadb import Settings from chromadb import Settings
from base64 import b64encode from base64 import b64encode
@ -92,7 +94,10 @@ ENV = os.environ.get("ENV", "dev")
try: try:
PACKAGE_DATA = json.loads((BASE_DIR / "package.json").read_text()) PACKAGE_DATA = json.loads((BASE_DIR / "package.json").read_text())
except: except:
PACKAGE_DATA = {"version": "0.0.0"} try:
PACKAGE_DATA = {"version": importlib.metadata.version("open-webui")}
except importlib.metadata.PackageNotFoundError:
PACKAGE_DATA = {"version": "0.0.0"}
VERSION = PACKAGE_DATA["version"] VERSION = PACKAGE_DATA["version"]
@ -119,7 +124,8 @@ def parse_section(section):
try: try:
changelog_content = (BASE_DIR / "CHANGELOG.md").read_text() changelog_content = (BASE_DIR / "CHANGELOG.md").read_text()
except: except:
changelog_content = "" changelog_content = (pkgutil.get_data("open_webui", "CHANGELOG.md") or b"").decode()
# Convert markdown content to HTML # Convert markdown content to HTML
html_content = markdown.markdown(changelog_content) html_content = markdown.markdown(changelog_content)

View File

@ -6,11 +6,11 @@ from pathlib import Path
import typer import typer
import uvicorn import uvicorn
import main
app = typer.Typer() app = typer.Typer()
KEY_FILE = Path.cwd() / ".webui_secret_key" KEY_FILE = Path.cwd() / ".webui_secret_key"
if (frontend_build_dir := Path(__file__).parent / "frontend").exists():
os.environ["FRONTEND_BUILD_DIR"] = str(frontend_build_dir)
@app.command() @app.command()
@ -40,8 +40,21 @@ def serve(
"/usr/local/lib/python3.11/site-packages/nvidia/cudnn/lib", "/usr/local/lib/python3.11/site-packages/nvidia/cudnn/lib",
] ]
) )
import main # we need set environment variables before importing main
uvicorn.run(main.app, host=host, port=port, forwarded_allow_ips="*") uvicorn.run(main.app, host=host, port=port, forwarded_allow_ips="*")
@app.command()
def dev(
host: str = "0.0.0.0",
port: int = 8080,
reload: bool = True,
):
uvicorn.run(
"main:app", host=host, port=port, reload=reload, forwarded_allow_ips="*"
)
if __name__ == "__main__": if __name__ == "__main__":
app() app()

21
hatch_build.py Normal file
View File

@ -0,0 +1,21 @@
# noqa: INP001
import shutil
import subprocess
from sys import stderr
from hatchling.builders.hooks.plugin.interface import BuildHookInterface
class CustomBuildHook(BuildHookInterface):
def initialize(self, version, build_data):
super().initialize(version, build_data)
stderr.write(">>> Building Open Webui frontend\n")
npm = shutil.which("npm")
if npm is None:
raise RuntimeError(
"NodeJS `npm` is required for building Open Webui but it was not found"
)
stderr.write("### npm install\n")
subprocess.run([npm, "install"], check=True) # noqa: S603
stderr.write("\n### npm run build\n")
subprocess.run([npm, "run", "build"], check=True) # noqa: S603

View File

@ -73,6 +73,8 @@ dynamic = ["version"]
classifiers = [ classifiers = [
"Development Status :: 4 - Beta", "Development Status :: 4 - Beta",
"License :: OSI Approved :: MIT License", "License :: OSI Approved :: MIT License",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.11",
"Topic :: Communications :: Chat", "Topic :: Communications :: Chat",
"Topic :: Multimedia", "Topic :: Multimedia",
] ]
@ -95,9 +97,9 @@ allow-direct-references = true
path = "package.json" path = "package.json"
pattern = '"version":\s*"(?P<version>[^"]+)"' pattern = '"version":\s*"(?P<version>[^"]+)"'
[tool.hatch.build.hooks.custom] # keep this for reading hooks from `hatch_build.py`
[tool.hatch.build.targets.wheel] [tool.hatch.build.targets.wheel]
ignore-vcs = true
packages = ["backend"]
sources = ["backend"] sources = ["backend"]
exclude = [ exclude = [
".dockerignore", ".dockerignore",
@ -107,4 +109,7 @@ exclude = [
"requirements.txt", "requirements.txt",
"start.sh", "start.sh",
"start_windows.bat", "start_windows.bat",
"webui.db",
"chroma.sqlite3",
] ]
force-include = { "CHANGELOG.md" = "open_webui/CHANGELOG.md", build = "open_webui/frontend" }