diff --git a/.gitignore b/.gitignore index 2dc802f5..334c3d3f 100644 --- a/.gitignore +++ b/.gitignore @@ -8,6 +8,7 @@ # Dependencies node_modules/ .pnpm-store/ +vendor/offline/ # Python __pycache__/ diff --git a/Makefile b/Makefile index 94326269..7b1c8f3b 100644 --- a/Makefile +++ b/Makefile @@ -1,13 +1,35 @@ -.PHONY: install run dev dev-fe build lint test test-be-perf clean help dist-linux dist-linux-x64 +.PHONY: install install-offline run dev dev-fe build lint test test-be-perf clean help dist-linux dist-linux-x64 + +# Auto-detect offline bundle and configure caches +OFFLINE_BUNDLE := $(shell find vendor/offline -maxdepth 1 -type d -name 'meshchatx-offline-bundle-*' 2>/dev/null | head -n 1) + +ifeq ($(MESHCHATX_OFFLINE_BUILD),1) + ifneq ($(OFFLINE_BUNDLE),) + export UV_CACHE_DIR := $(abspath $(OFFLINE_BUNDLE)/uv-cache) + export ELECTRON_BUILDER_CACHE := $(abspath $(OFFLINE_BUNDLE)/electron-builder-cache) + endif +endif install: +ifeq ($(MESHCHATX_OFFLINE_BUILD),1) + @if [ ! -d "node_modules" ]; then \ + echo "Error: node_modules not found for offline build." >&2; \ + echo "Run: bash scripts/install-offline.sh" >&2; \ + exit 1; \ + fi + @echo "Offline build: skipping pnpm install (node_modules present)" +else pnpm install - poetry install - poetry run python scripts/patch_lxst_pyogg_ogg_ctypes.py +endif + uv sync --group dev $(if $(filter 1,$(MESHCHATX_OFFLINE_BUILD)),--offline) + uv run python scripts/patch_lxst_pyogg_ogg_ctypes.py + +install-offline: + bash scripts/install-offline.sh # Python backend only. For HMR, use: make dev OR make run in one terminal and pnpm run dev in another. run: - poetry run python -m meshchatx.meshchat + uv run python -m meshchatx.meshchat # Vite dev server (live reload) + backend. Open http://localhost:5173 — proxies /api and /ws to MESHCHAT_PORT (default 8000). dev: @@ -36,15 +58,15 @@ help: lint: pnpm run lint - poetry run ruff check . - poetry run ruff format --check . + uv run ruff check . + uv run ruff format --check . test: pnpm run test - poetry run python -m pytest tests/backend -n auto --cov=meshchatx/src/backend + uv run pytest tests/backend -n auto --cov=meshchatx/src/backend test-be-perf: - poetry run python -m pytest tests/backend/test_performance_hotpaths.py tests/backend/test_performance_bottlenecks.py + uv run pytest tests/backend/test_performance_hotpaths.py tests/backend/test_performance_bottlenecks.py clean: rm -rf node_modules build dist python-dist meshchatx/public build-dir out diff --git a/Taskfile.yml b/Taskfile.yml index 64bd39e4..8c4c5715 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -396,37 +396,6 @@ tasks: - "PLATFORM=win32 PYTHON_CMD='{{.WINE_PYTHON}}' {{.NPM}} run build-backend" - "npx electron-builder --linux AppImage deb --win portable nsis --publish=never" - # --- Legacy Electron Builds --- - - dist:legacy:linux: - desc: Build Linux AppImage (Legacy Electron) - deps: [build:fe] - cmds: - - "PLATFORM=linux {{.NPM}} run build-backend" - - "npx electron-builder -c electron/package-legacy.json --linux AppImage --publish=never" - - dist:legacy:win: - desc: Build Windows EXE (Legacy Electron) - deps: [build:fe] - cmds: - - "PLATFORM=win32 {{.NPM}} run build-backend" - - "npx electron-builder -c electron/package-legacy.json --win portable --publish=never" - - dist:legacy:win:wine: - desc: Build Windows EXE via Wine (Legacy Electron) - deps: [build:fe] - cmds: - - "PLATFORM=win32 PYTHON_CMD='{{.WINE_PYTHON}}' {{.NPM}} run build-backend" - - "npx electron-builder -c electron/package-legacy.json --win portable nsis --publish=never" - - dist:legacy:all: - desc: Build all Legacy apps - deps: [build:fe] - cmds: - - "PLATFORM=linux {{.NPM}} run build-backend" - - "PLATFORM=win32 {{.NPM}} run build-backend" - - "npx electron-builder -c electron/package-legacy.json --linux AppImage deb --win portable nsis --publish=never" - # --- Docker --- docker:build: