- Add PyInstaller spec file and build script for creating standalone executables - Add install.sh for curl | sh installation from GitHub releases - Add GitHub Actions workflow for multi-platform builds (macOS, Linux, Windows) - Move sandbox-only deps (playwright, ipython, libtmux, etc.) to optional extras - Make google-cloud-aiplatform optional ([vertex] extra) to reduce binary size - Use lazy imports in tool actions to avoid loading sandbox deps at startup - Add -v/--version flag to CLI - Add website and Discord links to completion message - Binary size: ~97MB (down from ~120MB with all deps)
99 lines
2.9 KiB
Bash
Executable File
99 lines
2.9 KiB
Bash
Executable File
#!/bin/bash
|
|
set -e
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
NC='\033[0m' # No Color
|
|
|
|
echo -e "${BLUE}🦉 Strix Build Script${NC}"
|
|
echo "================================"
|
|
|
|
OS="$(uname -s)"
|
|
ARCH="$(uname -m)"
|
|
|
|
case "$OS" in
|
|
Linux*) OS_NAME="linux";;
|
|
Darwin*) OS_NAME="macos";;
|
|
MINGW*|MSYS*|CYGWIN*) OS_NAME="windows";;
|
|
*) OS_NAME="unknown";;
|
|
esac
|
|
|
|
case "$ARCH" in
|
|
x86_64|amd64) ARCH_NAME="x86_64";;
|
|
arm64|aarch64) ARCH_NAME="arm64";;
|
|
*) ARCH_NAME="$ARCH";;
|
|
esac
|
|
|
|
echo -e "${YELLOW}Platform:${NC} $OS_NAME-$ARCH_NAME"
|
|
|
|
cd "$PROJECT_ROOT"
|
|
|
|
if ! command -v poetry &> /dev/null; then
|
|
echo -e "${RED}Error: Poetry is not installed${NC}"
|
|
echo "Please install Poetry first: https://python-poetry.org/docs/#installation"
|
|
exit 1
|
|
fi
|
|
|
|
echo -e "\n${BLUE}Installing dependencies...${NC}"
|
|
poetry install --with dev
|
|
|
|
VERSION=$(poetry version -s)
|
|
echo -e "${YELLOW}Version:${NC} $VERSION"
|
|
|
|
echo -e "\n${BLUE}Cleaning previous builds...${NC}"
|
|
rm -rf build/ dist/
|
|
|
|
echo -e "\n${BLUE}Building binary with PyInstaller...${NC}"
|
|
poetry run pyinstaller strix.spec --noconfirm
|
|
|
|
RELEASE_DIR="dist/release"
|
|
mkdir -p "$RELEASE_DIR"
|
|
|
|
BINARY_NAME="strix-${VERSION}-${OS_NAME}-${ARCH_NAME}"
|
|
|
|
if [ "$OS_NAME" = "windows" ]; then
|
|
if [ ! -f "dist/strix.exe" ]; then
|
|
echo -e "${RED}Build failed: Binary not found${NC}"
|
|
exit 1
|
|
fi
|
|
BINARY_NAME="${BINARY_NAME}.exe"
|
|
cp "dist/strix.exe" "$RELEASE_DIR/$BINARY_NAME"
|
|
echo -e "\n${BLUE}Creating zip...${NC}"
|
|
ARCHIVE_NAME="${BINARY_NAME%.exe}.zip"
|
|
|
|
if command -v 7z &> /dev/null; then
|
|
7z a "$RELEASE_DIR/$ARCHIVE_NAME" "$RELEASE_DIR/$BINARY_NAME"
|
|
else
|
|
powershell -Command "Compress-Archive -Path '$RELEASE_DIR/$BINARY_NAME' -DestinationPath '$RELEASE_DIR/$ARCHIVE_NAME'"
|
|
fi
|
|
echo -e "${GREEN}Created:${NC} $RELEASE_DIR/$ARCHIVE_NAME"
|
|
else
|
|
if [ ! -f "dist/strix" ]; then
|
|
echo -e "${RED}Build failed: Binary not found${NC}"
|
|
exit 1
|
|
fi
|
|
cp "dist/strix" "$RELEASE_DIR/$BINARY_NAME"
|
|
chmod +x "$RELEASE_DIR/$BINARY_NAME"
|
|
echo -e "\n${BLUE}Creating tarball...${NC}"
|
|
ARCHIVE_NAME="${BINARY_NAME}.tar.gz"
|
|
tar -czvf "$RELEASE_DIR/$ARCHIVE_NAME" -C "$RELEASE_DIR" "$BINARY_NAME"
|
|
echo -e "${GREEN}Created:${NC} $RELEASE_DIR/$ARCHIVE_NAME"
|
|
fi
|
|
|
|
echo -e "\n${GREEN}Build successful!${NC}"
|
|
echo "================================"
|
|
echo -e "${YELLOW}Binary:${NC} $RELEASE_DIR/$BINARY_NAME"
|
|
|
|
SIZE=$(ls -lh "$RELEASE_DIR/$BINARY_NAME" | awk '{print $5}')
|
|
echo -e "${YELLOW}Size:${NC} $SIZE"
|
|
|
|
echo -e "\n${BLUE}Testing binary...${NC}"
|
|
"$RELEASE_DIR/$BINARY_NAME" --help > /dev/null 2>&1 && echo -e "${GREEN}Binary test passed!${NC}" || echo -e "${RED}Binary test failed${NC}"
|
|
|
|
echo -e "\n${GREEN}Done!${NC}"
|