summaryrefslogtreecommitdiffstats
path: root/packaging/build/build-common.sh
blob: 3045689419b54ba1f89520e35a963d76623adeff (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#!/usr/bin/env bash
# Build the meshbay-common package: shared venv with ALL Python dependencies.
#
# Usage: ./build-common.sh [staging-dir]
#   staging-dir defaults to /tmp/meshbay-build
#
# Output: $STAGING/meshbay-common-root/  (ready for dpkg-deb or rpmbuild)
set -euo pipefail

REPO="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
STAGING="${1:-/tmp/meshbay-build}"
ROOT="$STAGING/meshbay-common-root"
VENV_FINAL="/opt/meshbay-common/venv"
VENV_BUILD="$ROOT$VENV_FINAL"
WHEEL_DIR="$STAGING/wheels"

VERSION=$(python3 -c "
import tomllib, pathlib
p = pathlib.Path('$REPO/packages/meshbay-common/pyproject.toml')
print(tomllib.loads(p.read_text())['project']['version'])
")
echo "==> meshbay-common $VERSION"

rm -rf "$ROOT"
mkdir -p "$ROOT/opt/meshbay-common" "$WHEEL_DIR"

# --- Create venv -----------------------------------------------------------
echo "    creating venv at $VENV_BUILD"
python3 -m venv "$VENV_BUILD"
"$VENV_BUILD/bin/pip" install --upgrade pip wheel 2>&1 | tail -1

# --- Build wheels for all three packages -----------------------------------
echo "    building wheels"
for pkg in meshbay-common meshbay-hub meshbay-node; do
    "$VENV_BUILD/bin/pip" wheel \
        --no-deps \
        --wheel-dir "$WHEEL_DIR" \
        "$REPO/packages/$pkg" 2>&1 | tail -1
done

# --- Install everything into the venv -------------------------------------
echo "    installing all packages + dependencies"
"$VENV_BUILD/bin/pip" install \
    --find-links "$WHEEL_DIR" \
    meshbay-common meshbay-hub meshbay-node 2>&1 | tail -3

# --- Strip build tools from the venv (not needed at runtime) ---------------
echo "    stripping build tools"
"$VENV_BUILD/bin/pip" uninstall -y pip setuptools wheel 2>&1 | tail -1
rm -rf "$VENV_BUILD/lib"/python*/site-packages/pip*
rm -rf "$VENV_BUILD/lib"/python*/site-packages/setuptools*
rm -rf "$VENV_BUILD/lib"/python*/site-packages/wheel*
rm -f "$VENV_BUILD/bin/pip"*

# --- Fix shebangs and pyvenv.cfg ------------------------------------------
# The venv was built under $ROOT but will be installed at /opt/meshbay-common/venv/
echo "    fixing paths ($ROOT -> '')"
for f in "$VENV_BUILD/bin"/*; do
    [ -f "$f" ] || continue
    [ -L "$f" ] && continue
    head -1 "$f" | grep -q "^#!" || continue
    sed -i "1s|$ROOT||" "$f"
done
sed -i "s|$ROOT||g" "$VENV_BUILD/pyvenv.cfg"

# --- Remove __pycache__ (will be regenerated on first import) --------------
find "$VENV_BUILD" -type d -name __pycache__ -exec rm -rf {} + 2>/dev/null || true

# --- Keep a copy of the wheels for reference -------------------------------
mkdir -p "$ROOT/opt/meshbay-common/wheels"
cp "$WHEEL_DIR"/meshbay_common-*.whl "$ROOT/opt/meshbay-common/wheels/"

echo "==> meshbay-common staging ready at $ROOT"
echo "    venv: $VENV_BUILD"
echo "    version: $VERSION"