Stabilize local dev daemon homes

Use a checkout-local .dev/paseo-home for root and worktree dev flows so development daemons do not collide with the packaged app home.

Split server, app, and desktop dev entrypoints, seed worktree homes from the source checkout metadata, and keep desktop dev on its own user-data directory and Expo port.
This commit is contained in:
Mohamed Boudra
2026-06-07 23:18:32 +07:00
parent d55e1622cb
commit 7c8b290e2f
11 changed files with 349 additions and 141 deletions

View File

@@ -1,5 +1,9 @@
#!/bin/bash
default_dev_paseo_root() {
git rev-parse --show-toplevel 2>/dev/null || pwd
}
copy_json_tree() {
local source_dir="$1"
local target_dir="$2"
@@ -58,27 +62,83 @@ seed_worktree_paseo_home() {
echo " Seed: copied metadata from ${source_home}"
}
configure_dev_daemon_config() {
if [ -z "${PASEO_LISTEN:-}" ]; then
return
fi
mkdir -p "$PASEO_HOME"
node -e '
const fs = require("fs");
const [path, listen] = [process.argv[1], process.argv[2]];
let cfg = {};
try { cfg = JSON.parse(fs.readFileSync(path, "utf8")); } catch {}
cfg.version = cfg.version || 1;
cfg.daemon = cfg.daemon || {};
cfg.daemon.listen = listen;
cfg.daemon.cors = cfg.daemon.cors || {};
cfg.daemon.cors.allowedOrigins = ["*"];
fs.writeFileSync(path, JSON.stringify(cfg, null, 2));
' "$PASEO_HOME/config.json" "$PASEO_LISTEN"
}
resolve_dev_daemon_endpoint() {
if [ -n "${PASEO_DEV_DAEMON_ENDPOINT:-}" ]; then
echo "$PASEO_DEV_DAEMON_ENDPOINT"
return
fi
case "${PASEO_LISTEN:-127.0.0.1:6768}" in
0.0.0.0:*) echo "localhost:${PASEO_LISTEN#0.0.0.0:}" ;;
127.0.0.1:*) echo "localhost:${PASEO_LISTEN#127.0.0.1:}" ;;
*) echo "$PASEO_LISTEN" ;;
esac
}
configure_dev_paseo_home() {
if [ -n "${PASEO_HOME:-}" ]; then
export PASEO_HOME
if [ -n "${PASEO_DEV_SEED_HOME:-}" ]; then
seed_worktree_paseo_home "$PASEO_HOME"
fi
mkdir -p "$PASEO_HOME"
if [ "${PASEO_DEV_MANAGED_HOME:-0}" = "1" ] || [ -n "${PASEO_DEV_SEED_HOME:-}" ]; then
configure_dev_daemon_config
fi
return
fi
export PASEO_HOME
local git_dir
local git_common_dir
git_dir="$(git rev-parse --git-dir 2>/dev/null || true)"
git_common_dir="$(git rev-parse --git-common-dir 2>/dev/null || true)"
if [ -n "$git_dir" ] && [ -n "$git_common_dir" ] && [ "$git_dir" != "$git_common_dir" ]; then
local worktree_root
local worktree_name
worktree_root="$(git rev-parse --show-toplevel)"
worktree_name="$(basename "$worktree_root" | tr '[:upper:]' '[:lower:]' | sed 's/[^a-z0-9-]/-/g; s/--*/-/g; s/^-//; s/-$//')"
PASEO_HOME="$HOME/.paseo-${worktree_name}"
local dev_root
dev_root="${PASEO_DEV_ROOT:-$(default_dev_paseo_root)}"
PASEO_HOME="$dev_root/.dev/paseo-home"
export PASEO_DEV_MANAGED_HOME=1
if [ -n "${PASEO_DEV_SEED_HOME:-}" ]; then
seed_worktree_paseo_home "$PASEO_HOME"
return
fi
PASEO_HOME="$(mktemp -d "${TMPDIR:-/tmp}/paseo-dev.XXXXXX")"
trap "rm -rf '$PASEO_HOME'" EXIT
mkdir -p "$PASEO_HOME"
configure_dev_daemon_config
}
configure_dev_command_env() {
if [ -z "${PASEO_LISTEN:-}" ]; then
if [ -n "${PASEO_SERVICE_DAEMON_PORT:-}" ]; then
export PASEO_LISTEN="0.0.0.0:${PASEO_SERVICE_DAEMON_PORT}"
else
export PASEO_LISTEN="127.0.0.1:6768"
fi
fi
configure_dev_paseo_home
}
if [ "${BASH_SOURCE[0]}" = "$0" ]; then
if [ "$#" -gt 0 ]; then
configure_dev_command_env
exec "$@"
fi
configure_dev_paseo_home
fi