mirror of
https://github.com/tinyhumansai/openhuman.git
synced 2026-07-27 21:08:00 +00:00
101 lines
3.5 KiB
Bash
Executable File
101 lines
3.5 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Launch a local staging build of the Tauri app.
|
|
#
|
|
# Loads signing credentials from scripts/ci-secrets.json, imports the
|
|
# Developer ID certificate into a temporary keychain (like CI), and sets
|
|
# OPENHUMAN_APP_ENV=staging so the encrypted-file keyring backend is used.
|
|
#
|
|
# Usage:
|
|
# bash scripts/dev-staging.sh
|
|
# pnpm dev:staging
|
|
|
|
set -euo pipefail
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
ROOT_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
SECRETS_FILE="$ROOT_DIR/scripts/ci-secrets.json"
|
|
|
|
if [[ ! -f "$SECRETS_FILE" ]]; then
|
|
echo "[dev-staging] $SECRETS_FILE not found — cannot load signing credentials" >&2
|
|
exit 1
|
|
fi
|
|
|
|
# Load secrets + vars from the CI secrets file
|
|
source "$SCRIPT_DIR/load-env-json.sh" "$SECRETS_FILE" '.secrets + .vars'
|
|
|
|
# Ensure staging env
|
|
export OPENHUMAN_APP_ENV=staging
|
|
export VITE_OPENHUMAN_APP_ENV=staging
|
|
|
|
# Point to staging API (ci-secrets.json has localhost for CI)
|
|
export BACKEND_URL=https://staging-api.tinyhumans.ai
|
|
export VITE_BACKEND_URL=https://staging-api.tinyhumans.ai
|
|
|
|
# Load the regular .env (secrets take precedence since they're already set)
|
|
source "$SCRIPT_DIR/load-dotenv.sh"
|
|
|
|
export CEF_PATH="$HOME/Library/Caches/tauri-cef"
|
|
|
|
# ── Temporary keychain for codesign (CI-style) ────────────────────────────────
|
|
KEYCHAIN_NAME="dev-staging.keychain-db"
|
|
KEYCHAIN_PATH="$HOME/Library/Keychains/$KEYCHAIN_NAME"
|
|
KEYCHAIN_PASSWORD="dev-staging-$(date +%s)"
|
|
|
|
cleanup_keychain() {
|
|
security delete-keychain "$KEYCHAIN_PATH" 2>/dev/null || true
|
|
}
|
|
trap cleanup_keychain EXIT
|
|
|
|
# Remove stale keychain from a previous run
|
|
cleanup_keychain
|
|
|
|
echo "[dev-staging] creating temporary keychain for codesign..."
|
|
security create-keychain -p "$KEYCHAIN_PASSWORD" "$KEYCHAIN_PATH"
|
|
security set-keychain-settings -lut 21600 "$KEYCHAIN_PATH"
|
|
security unlock-keychain -p "$KEYCHAIN_PASSWORD" "$KEYCHAIN_PATH"
|
|
|
|
# Import the Developer ID certificate
|
|
CERT_TMP=$(mktemp /tmp/dev-staging-cert.XXXXXX.p12)
|
|
echo "$APPLE_CERTIFICATE_BASE64" | base64 --decode > "$CERT_TMP"
|
|
security import "$CERT_TMP" \
|
|
-k "$KEYCHAIN_PATH" \
|
|
-P "$APPLE_CERTIFICATE_PASSWORD" \
|
|
-T /usr/bin/codesign \
|
|
-T /usr/bin/security
|
|
rm -f "$CERT_TMP"
|
|
|
|
# Allow codesign to access the key without prompts
|
|
security set-key-partition-list -S "apple-tool:,apple:,codesign:" \
|
|
-s -k "$KEYCHAIN_PASSWORD" "$KEYCHAIN_PATH" >/dev/null 2>&1
|
|
|
|
# Prepend temporary keychain to the search list so codesign finds it
|
|
EXISTING_KEYCHAINS=$(security list-keychains -d user | tr -d '"' | tr '\n' ' ')
|
|
security list-keychains -d user -s "$KEYCHAIN_PATH" $EXISTING_KEYCHAINS
|
|
|
|
echo "[dev-staging] certificate imported into temporary keychain"
|
|
|
|
# ── Chromium safe storage & tauri-cli ─────────────────────────────────────────
|
|
bash "$SCRIPT_DIR/setup-chromium-safe-storage.sh"
|
|
|
|
cd "$ROOT_DIR/app"
|
|
pnpm tauri:ensure
|
|
|
|
echo "[dev-staging] APPLE_SIGNING_IDENTITY=$APPLE_SIGNING_IDENTITY"
|
|
echo "[dev-staging] OPENHUMAN_APP_ENV=$OPENHUMAN_APP_ENV"
|
|
echo "[dev-staging] building and running (no file watcher)..."
|
|
|
|
# Build the frontend first
|
|
pnpm run dev &
|
|
VITE_PID=$!
|
|
|
|
# Wait for vite to be ready
|
|
until curl -s http://localhost:1420 >/dev/null 2>&1; do sleep 0.5; done
|
|
|
|
# Build the .app bundle only (skip DMG) and run directly
|
|
cargo tauri build --debug --bundles app
|
|
|
|
# Kill vite
|
|
kill $VITE_PID 2>/dev/null
|
|
|
|
echo "[dev-staging] launching app bundle..."
|
|
exec "$ROOT_DIR/app/src-tauri/target/debug/bundle/macos/OpenHuman.app/Contents/MacOS/OpenHuman"
|