fischer-agentkit/scripts/build-backend.sh

82 lines
2.6 KiB
Bash
Executable File

#!/usr/bin/env bash
# Build Python backend as standalone binary using PyInstaller
# Usage: ./scripts/build-backend.sh [target-triple]
# Example: ./scripts/build-backend.sh aarch64-apple-darwin
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
TARGET_TRIPLE="${1:-}"
# Detect platform triple if not provided
if [ -z "$TARGET_TRIPLE" ]; then
OS="$(uname -s)"
ARCH="$(uname -m)"
case "$OS" in
Darwin)
if [ "$ARCH" = "arm64" ]; then
TARGET_TRIPLE="aarch64-apple-darwin"
else
TARGET_TRIPLE="x86_64-apple-darwin"
fi
;;
Linux)
TARGET_TRIPLE="x86_64-unknown-linux-gnu"
;;
MINGW*|MSYS*|CYGWIN*)
TARGET_TRIPLE="x86_64-pc-windows-msvc"
;;
*)
echo "Unsupported OS: $OS"
exit 1
;;
esac
fi
echo "Building agentkit-server for $TARGET_TRIPLE..."
cd "$PROJECT_ROOT"
# Install PyInstaller if not present
pip install pyinstaller 2>/dev/null || pip3 install pyinstaller 2>/dev/null
# Build the binary
BINARY_NAME="agentkit-server"
if [[ "$TARGET_TRIPLE" == *"-windows-"* ]]; then
BINARY_NAME="agentkit-server.exe"
fi
pyinstaller --onefile \
--name "$BINARY_NAME" \
--hidden-import agentkit.server \
--hidden-import agentkit.server.app \
--hidden-import agentkit.server.routes \
--hidden-import agentkit.server.config \
--hidden-import agentkit.cli.main \
--hidden-import uvicorn.logging \
--hidden-import uvicorn.lifespan.on \
--hidden-import uvicorn.lifespan.off \
--hidden-import uvicorn.protocols.websockets.auto \
--hidden-import uvicorn.protocols.http.auto \
--hidden-import uvicorn.protocols.websockets.wsproto_impl \
--hidden-import uvicorn.protocols.websockets.websockets_impl \
--hidden-import uvicorn.protocols.websockets.impl_11 \
--hidden-import uvicorn.lifespan \
--hidden-import sse_starlette \
--distpath "$PROJECT_ROOT/src-tauri/binaries" \
--workpath "$PROJECT_ROOT/build/pyinstaller-work" \
--specpath "$PROJECT_ROOT/build" \
src/agentkit/__main__.py
# Rename with target triple suffix (Tauri sidecar convention)
if [[ "$TARGET_TRIPLE" != *"-windows-"* ]]; then
mv "$PROJECT_ROOT/src-tauri/binaries/$BINARY_NAME" \
"$PROJECT_ROOT/src-tauri/binaries/agentkit-server-$TARGET_TRIPLE"
else
mv "$PROJECT_ROOT/src-tauri/binaries/$BINARY_NAME" \
"$PROJECT_ROOT/src-tauri/binaries/agentkit-server-$TARGET_TRIPLE.exe"
fi
echo "Built: src-tauri/binaries/agentkit-server-$TARGET_TRIPLE"