#!/usr/bin/env bash # Build the meshbay-hub package: hub-specific files on top of meshbay-common. # # Expects build-common.sh to have run first (shared venv exists in staging). # # Usage: ./build-hub.sh [staging-dir] set -euo pipefail REPO="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" STAGING="${1:-/tmp/meshbay-build}" COMMON_ROOT="$STAGING/meshbay-common-root" ROOT="$STAGING/meshbay-hub-root" VENV="$COMMON_ROOT/opt/meshbay-common/venv" PYVER=$(basename "$VENV"/lib/python3.*) SITE="$VENV/lib/$PYVER/site-packages" VERSION=$(python3 -c " import tomllib, pathlib p = pathlib.Path('$REPO/packages/meshbay-hub/pyproject.toml') print(tomllib.loads(p.read_text())['project']['version']) ") echo "==> meshbay-hub $VERSION" [ -d "$VENV" ] || { echo "!! shared venv not found — run build-common.sh first" >&2; exit 1; } rm -rf "$ROOT" mkdir -p "$ROOT" # --- Hub code in the shared venv (owned by meshbay-hub package) ----------- # MOVE (not copy) from the common staging tree so dpkg/rpm knows these files # belong to meshbay-hub, not meshbay-common. build-common.sh installed them # so that shebangs and dependency resolution are correct. HUB_ROOT="$ROOT/opt/meshbay-common/venv/lib/$PYVER/site-packages" mkdir -p "$HUB_ROOT" mv "$SITE/meshbay_hub" "$HUB_ROOT/" mv "$SITE"/meshbay_hub-*.dist-info "$HUB_ROOT/" # Entry point mkdir -p "$ROOT/opt/meshbay-common/venv/bin" mv "$VENV/bin/meshbay-hub" "$ROOT/opt/meshbay-common/venv/bin/" # Symlink in PATH mkdir -p "$ROOT/usr/bin" ln -sf /opt/meshbay-common/venv/bin/meshbay-hub "$ROOT/usr/bin/meshbay-hub" # --- Hub-specific assets -------------------------------------------------- mkdir -p "$ROOT/opt/meshbay-hub" # Alembic config (migrations are inside the installed package at meshbay_hub/db/migrations/) if [ -f "$REPO/packages/meshbay-hub/alembic.ini" ]; then mkdir -p "$ROOT/opt/meshbay-hub/migrations" cp "$REPO/packages/meshbay-hub/alembic.ini" "$ROOT/opt/meshbay-hub/migrations/" fi # Config example mkdir -p "$ROOT/opt/meshbay-hub/share" if [ -f "$REPO/packaging/conf/hub.toml.example" ]; then cp "$REPO/packaging/conf/hub.toml.example" "$ROOT/opt/meshbay-hub/share/" fi # Also install to /etc/meshbay/ for discoverability mkdir -p "$ROOT/etc/meshbay" if [ -f "$ROOT/opt/meshbay-hub/share/hub.toml.example" ]; then cp "$ROOT/opt/meshbay-hub/share/hub.toml.example" "$ROOT/etc/meshbay/" fi # --- Systemd unit --------------------------------------------------------- mkdir -p "$ROOT/usr/lib/systemd/system" cp "$REPO/packaging/systemd/meshbay-hub.service" \ "$ROOT/usr/lib/systemd/system/meshbay-hub.service" echo "==> meshbay-hub staging ready at $ROOT"