Something went wrong. Try again.
fork of prime agent with changes i want but are not upstreamable probqbly (and some fixes)
Something went wrong. Try again.
5.9 kB · 176 lines
Shell
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177#!/usr/bin/env bash## Build pi binaries for all platforms locally.# Mirrors .github/workflows/build-binaries.yml## Usage:# ./scripts/build-binaries.sh [--skip-deps] [--platform <platform>]## Options:# --skip-deps Skip installing cross-platform dependencies# --platform <name> Build only for specified platform (darwin-arm64, darwin-x64, linux-x64, linux-arm64, windows-x64)## Output:# packages/coding-agent/binaries/# pi-darwin-arm64.tar.gz# pi-darwin-x64.tar.gz# pi-linux-x64.tar.gz# pi-linux-arm64.tar.gz# pi-windows-x64.zip
set -euo pipefail
cd "$(dirname "$0")/.."
SKIP_DEPS=falsePLATFORM=""
while [[ $# -gt 0 ]]; do case $1 in --skip-deps) SKIP_DEPS=true shift ;; --platform) PLATFORM="$2" shift 2 ;; *) echo "Unknown option: $1" exit 1 ;; esacdone
# Validate platform if specifiedif [[ -n "$PLATFORM" ]]; then case "$PLATFORM" in darwin-arm64|darwin-x64|linux-x64|linux-arm64|windows-x64) ;; *) echo "Invalid platform: $PLATFORM" echo "Valid platforms: darwin-arm64, darwin-x64, linux-x64, linux-arm64, windows-x64" exit 1 ;; esacfi
echo "==> Installing dependencies..."npm ci
if [[ "$SKIP_DEPS" == "false" ]]; then echo "==> Installing cross-platform native bindings..." # npm ci only installs optional deps for the current platform # We need all platform bindings for bun cross-compilation # Use --force to bypass platform checks (os/cpu restrictions in package.json) # Install all in one command to avoid npm removing packages from previous installs npm install --no-save --force \ @mariozechner/clipboard-darwin-arm64@0.3.0 \ @mariozechner/clipboard-darwin-x64@0.3.0 \ @mariozechner/clipboard-linux-x64-gnu@0.3.0 \ @mariozechner/clipboard-linux-arm64-gnu@0.3.0 \ @mariozechner/clipboard-win32-x64-msvc@0.3.0 \ @img/sharp-darwin-arm64@0.34.5 \ @img/sharp-darwin-x64@0.34.5 \ @img/sharp-linux-x64@0.34.5 \ @img/sharp-linux-arm64@0.34.5 \ @img/sharp-win32-x64@0.34.5 \ @img/sharp-libvips-darwin-arm64@1.2.4 \ @img/sharp-libvips-darwin-x64@1.2.4 \ @img/sharp-libvips-linux-x64@1.2.4 \ @img/sharp-libvips-linux-arm64@1.2.4else echo "==> Skipping cross-platform native bindings (--skip-deps)"fi
echo "==> Building all packages..."npm run build
echo "==> Building binaries..."cd packages/coding-agent
# Clean previous buildsrm -rf binariesmkdir -p binaries/{darwin-arm64,darwin-x64,linux-x64,linux-arm64,windows-x64}
# Determine which platforms to buildif [[ -n "$PLATFORM" ]]; then PLATFORMS=("$PLATFORM")else PLATFORMS=(darwin-arm64 darwin-x64 linux-x64 linux-arm64 windows-x64)fi
for platform in "${PLATFORMS[@]}"; do echo "Building for $platform..." # Externalize koffi to avoid embedding all 18 platform .node files (~74MB) # into every binary. Koffi is only used on Windows for VT input and the # call site has a try/catch fallback. For Windows builds, we copy the # appropriate .node file alongside the binary below. if [[ "$platform" == "windows-x64" ]]; then bun build --compile --external koffi --target=bun-$platform ./dist/bun/cli.js --outfile binaries/$platform/pi.exe else bun build --compile --external koffi --target=bun-$platform ./dist/bun/cli.js --outfile binaries/$platform/pi fidone
echo "==> Creating release archives..."
# Copy shared files to each platform directoryfor platform in "${PLATFORMS[@]}"; do cp package.json binaries/$platform/ cp README.md binaries/$platform/ cp CHANGELOG.md binaries/$platform/ cp ../../node_modules/@silvia-odwyer/photon-node/photon_rs_bg.wasm binaries/$platform/ mkdir -p binaries/$platform/theme cp dist/modes/interactive/theme/*.json binaries/$platform/theme/ mkdir -p binaries/$platform/assets cp dist/modes/interactive/assets/* binaries/$platform/assets/ cp -r dist/core/export-html binaries/$platform/ cp -r docs binaries/$platform/ cp -r examples binaries/$platform/ cp -r skills binaries/$platform/
# Copy koffi native module for Windows (needed for VT input support) if [[ "$platform" == "windows-x64" ]]; then mkdir -p binaries/$platform/node_modules/koffi/build/koffi/win32_x64 cp ../../node_modules/koffi/index.js binaries/$platform/node_modules/koffi/ cp ../../node_modules/koffi/package.json binaries/$platform/node_modules/koffi/ cp ../../node_modules/koffi/build/koffi/win32_x64/koffi.node binaries/$platform/node_modules/koffi/build/koffi/win32_x64/ fidone
# Create archivescd binaries
for platform in "${PLATFORMS[@]}"; do if [[ "$platform" == "windows-x64" ]]; then # Windows (zip) echo "Creating pi-$platform.zip..." (cd $platform && zip -r ../pi-$platform.zip .) else # Unix platforms (tar.gz) - use wrapper directory for mise compatibility echo "Creating pi-$platform.tar.gz..." mv $platform pi && tar -czf pi-$platform.tar.gz pi && mv pi $platform fidone
# Extract archives for easy local testingecho "==> Extracting archives for testing..."for platform in "${PLATFORMS[@]}"; do rm -rf $platform if [[ "$platform" == "windows-x64" ]]; then mkdir -p $platform && (cd $platform && unzip -q ../pi-$platform.zip) else tar -xzf pi-$platform.tar.gz && mv pi $platform fidone
echo ""echo "==> Build complete!"echo "Archives available in packages/coding-agent/binaries/"ls -lh *.tar.gz *.zip 2>/dev/null || trueecho ""echo "Extracted directories for testing:"for platform in "${PLATFORMS[@]}"; do echo " binaries/$platform/pi"done