add snapshot tool, masks, and build for mac

This commit is contained in:
2026-03-23 21:52:17 -07:00
parent 080eefbef6
commit a34b1c980d
29 changed files with 2016 additions and 170 deletions

110
scripts/build-mac.sh Executable file
View File

@@ -0,0 +1,110 @@
#!/usr/bin/env bash
set -euo pipefail
ONE_FILE=false
CREATE_DMG=true
while [[ $# -gt 0 ]]; do
case "$1" in
--onefile) ONE_FILE=true; shift ;;
--no-dmg) CREATE_DMG=false; shift ;;
*) echo "Unknown option: $1"; exit 1 ;;
esac
done
REPO_ROOT="$(cd "$(dirname "$0")/.." && pwd)"
cd "$REPO_ROOT"
if [ -d ".venv/bin" ]; then
PYTHON=".venv/bin/python"
else
PYTHON="python3"
fi
FRONTEND_DIST="$REPO_ROOT/frontend/dist"
DEMO_DIR="$REPO_ROOT/demo"
echo "Building frontend bundle..."
npm run build
echo "Installing desktop build dependencies..."
uv pip install -e ".[desktop]"
if $ONE_FILE; then
MODE="--onefile"
else
MODE="--onedir"
fi
echo "Packaging desktop app with PyInstaller..."
$PYTHON -m PyInstaller \
desktop.py \
--noconfirm \
--clean \
--name argonode \
--windowed \
$MODE \
--distpath desktop-dist \
--workpath desktop-build \
--specpath desktop-build \
--add-data "${FRONTEND_DIST}:frontend/dist" \
--add-data "${DEMO_DIR}:demo" \
--collect-all matplotlib \
--collect-all scipy \
--collect-all skimage \
--collect-all webview \
--icon resources/icon.icns 2>/dev/null || \
$PYTHON -m PyInstaller \
desktop.py \
--noconfirm \
--clean \
--name argonode \
--windowed \
$MODE \
--distpath desktop-dist \
--workpath desktop-build \
--specpath desktop-build \
--add-data "${FRONTEND_DIST}:frontend/dist" \
--add-data "${DEMO_DIR}:demo" \
--collect-all matplotlib \
--collect-all scipy \
--collect-all skimage \
--collect-all webview
APP_BUNDLE="desktop-dist/argonode.app"
if [ ! -d "$APP_BUNDLE" ]; then
# --onedir puts it inside a folder
if [ -d "desktop-dist/argonode/argonode.app" ]; then
APP_BUNDLE="desktop-dist/argonode/argonode.app"
else
echo "Warning: .app bundle not found; skipping DMG creation."
CREATE_DMG=false
fi
fi
if $CREATE_DMG; then
DMG_PATH="desktop-dist/argonode.dmg"
echo "Creating DMG installer..."
rm -f "$DMG_PATH"
# Create a temporary directory for DMG contents
DMG_STAGING="desktop-build/dmg-staging"
rm -rf "$DMG_STAGING"
mkdir -p "$DMG_STAGING"
cp -R "$APP_BUNDLE" "$DMG_STAGING/"
ln -s /Applications "$DMG_STAGING/Applications"
hdiutil create \
-volname "argonode" \
-srcfolder "$DMG_STAGING" \
-ov \
-format UDZO \
"$DMG_PATH"
rm -rf "$DMG_STAGING"
echo "DMG created: $DMG_PATH"
fi
echo "Desktop build complete."
echo "Output: $REPO_ROOT/desktop-dist/"