diff --git a/.github/workflows/addon-builder.yaml b/.github/workflows/addon-builder.yaml index edb8bcc..69a506f 100644 --- a/.github/workflows/addon-builder.yaml +++ b/.github/workflows/addon-builder.yaml @@ -43,6 +43,11 @@ jobs: changed=$(echo ${changed_addons[@]} | rev | cut -c 2- | rev) if [[ -n ${changed} ]]; then + if [[ ! "${{ steps.changed_files.outputs.all }}" =~ "config.yaml" ]]; then + echo "Error: config.yaml has not been changed but the add-on has been. Please update the version" + exit 1 + fi + echo "Changed add-ons: $changed"; echo "changed=true" >> $GITHUB_OUTPUT; echo "addons=[$changed]" >> $GITHUB_OUTPUT; diff --git a/.github/workflows/hassfest.yaml b/.github/workflows/hassfest.yaml index 8fe5df7..b78d5f0 100644 --- a/.github/workflows/hassfest.yaml +++ b/.github/workflows/hassfest.yaml @@ -2,7 +2,11 @@ name: Validate with hassfest on: push: + branches: + - main pull_request: + branches: + - main schedule: - cron: "0 0 * * *" diff --git a/addons/mindctrl/rootfs/usr/bin/run_dashboard.sh b/addons/mindctrl/rootfs/usr/bin/run_dashboard.sh index 88887b8..bcf7bef 100644 --- a/addons/mindctrl/rootfs/usr/bin/run_dashboard.sh +++ b/addons/mindctrl/rootfs/usr/bin/run_dashboard.sh @@ -7,7 +7,8 @@ bashio::log.info "ingress_entry: ${ingress_entry}" # Am I going to do it anyway? Yes. # https://github.com/dapr/dashboard/blob/a92b8cd20d97080f07518ced9a5e8d0a58168ad9/cmd/webserver.go#L148C47-L148C63 if [[ -n "$ingress_entry" ]]; then - export SERVER_BASE_HREF="${ingress_entry}/dapr-dashboard/dapr-dashboard/" + # This trailing slash is important + export SERVER_BASE_HREF="${ingress_entry}/dapr-dashboard/" bashio::log.info "running dashboard with prefix $SERVER_BASE_HREF" fi diff --git a/python/src/mindctrl/main.py b/python/src/mindctrl/main.py index 8f4baab..e6a48d0 100644 --- a/python/src/mindctrl/main.py +++ b/python/src/mindctrl/main.py @@ -12,7 +12,6 @@ import collections -from fastapi.templating import Jinja2Templates import mlflow @@ -22,7 +21,8 @@ from .db.setup import setup_db, insert_summary from .config import AppSettings from .routers import deployed_models, info, ui -from .const import ROUTE_PREFIX, TEMPLATES_DIR +from .routers.ui import templates +from .const import ROUTE_PREFIX _logger = logging.getLogger(__name__) @@ -109,9 +109,6 @@ async def lifespan(app: FastAPI): # return RedirectResponse(url=f"{ROUTE_PREFIX}/ui/", status_code=302) -templates = Jinja2Templates(directory=TEMPLATES_DIR) - - @app.get("/") def read_root(request: Request, response_class=HTMLResponse): _logger.info( diff --git a/python/src/mindctrl/routers/ui.py b/python/src/mindctrl/routers/ui.py index 51220ed..15a2241 100644 --- a/python/src/mindctrl/routers/ui.py +++ b/python/src/mindctrl/routers/ui.py @@ -1,7 +1,7 @@ import asyncio import logging -from fastapi import APIRouter, WebSocket +from fastapi import APIRouter, WebSocket, WebSocketDisconnect from fastapi.templating import Jinja2Templates @@ -16,41 +16,6 @@ templates = Jinja2Templates(directory=TEMPLATES_DIR) -# @router.get("/") -# def read_root(request: Request, response_class=HTMLResponse): -# ingress_header = request.headers.get("X-Ingress-Path") -# _logger.info(f"ingress path: {ingress_header}") - -# ws_url = ( -# f"{ingress_header}/ws" -# if ingress_header -# else f"{request.url_for('websocket_endpoint')}" -# ) -# ingress_header = ingress_header or "" -# chat_url = f"{ingress_header}/deployed-models/chat/labels/latest/invocations" -# mlflow_url = request.base_url.replace(port=5000) -# _logger.info(f"mlflow url: {mlflow_url}") -# mlflow_url = f"{mlflow_url}/mlflow" -# _logger.info(f"mlflow url: {mlflow_url}") -# dashboard_url = request.base_url.replace(port=9999) -# _logger.info(f"dapr dashboard: {dashboard_url}") -# _logger.info(f"root_path: {request.scope.get('root_path')}") - -# return templates.TemplateResponse( -# request=request, -# name="index.html", -# context={ -# "request": request, -# "tracking_store": mlflow.get_tracking_uri(), -# "model_registry": mlflow.get_registry_uri(), -# "ws_url": ws_url, -# "chat_url": chat_url, -# "mlflow_url": mlflow_url, -# "dashboard_url": dashboard_url, -# }, -# ) - - @router.websocket("/ws") async def websocket_endpoint(websocket: WebSocket): await websocket.accept() @@ -66,3 +31,6 @@ async def websocket_endpoint(websocket: WebSocket): _logger.warning("Websocket buffer empty, waiting for new events") await asyncio.sleep(2) ring_buffer = iter(websocket.state.state_ring_buffer.copy()) + except WebSocketDisconnect: + _logger.warning("Websocket disconnected") + break