Commit a018df27 authored by Tang Ziya's avatar Tang Ziya
Browse files

infra: build

parent d5a4ab46
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: ...@@ -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)
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") ...@@ -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): ...@@ -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)
......
...@@ -6,11 +6,11 @@ from pathlib import Path ...@@ -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( ...@@ -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()
# 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
...@@ -73,6 +73,8 @@ dynamic = ["version"] ...@@ -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 ...@@ -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 = [ ...@@ -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" }
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment