#!/usr/bin/env bash # LEGACY: stages JS Pear app trees (pre–by-arch). Pear v3 removed `pear run`. # Prefer: npm run make && bash scripts/pear-stage-by-arch.sh # or: npm run release:rolling # # This script is kept for emergency re-staging of old channel layouts only. set -euo pipefail echo "[stage-release] WARN: legacy JS pear stage. Prefer scripts/pear-stage-by-arch.sh" >&2 export PATH="${HOME}/.config/pear/bin:${PATH:-}" ROOT="$(cd "$(dirname "$0")/.." && pwd)" SEEDER="$ROOT/packages/bare-os-seeder" BOOTER="$ROOT/packages/bare-os-booter" PROTO="$ROOT/packages/bare-os-protocol" BARE_SSH2="$ROOT/packages/bare-os-openssh/vendor/bare-ssh2" log() { printf '\n%s\n' "$*" } ensure_root_deps() { if [[ ! -d "$ROOT/node_modules" ]]; then log "Installing workspace deps (npm ci)…" (cd "$ROOT" && npm ci) fi } # Pear mirrors from each package dir. npm workspaces often leave a *partial* `node_modules/` # under the package (e.g. only workspace copies) while the rest hoists to the repo root — Pear # then stages without `hyperswarm`, etc. Always rebuild flat symlinks from root (same as # `npm run os:seeder` / ensure-pear-node-modules), then overlay workspace packages Pear must not resolve via symlinks outside the app dir. prepare_pkg_for_pear() { local pkg="$1" local nm="$pkg/node_modules" local rel="${pkg#"$ROOT"/}" log "Mirroring root node_modules → $rel/node_modules (ensure-pear-node-modules)" (cd "$ROOT" && BARE_OS_PEAR_NODE_MODULES=1 node scripts/ensure-pear-node-modules.mjs "$rel") rm -rf "$nm/bare-os-protocol" log "Copying bare-os-protocol into $(basename "$pkg")/node_modules" cp -R "$PROTO" "$nm/bare-os-protocol" if [[ "$pkg" == "$BOOTER" ]]; then rm -rf "$nm/bare-ssh2" log "Copying vendored bare-ssh2 into $(basename "$pkg")/node_modules" cp -R "$BARE_SSH2" "$nm/bare-ssh2" fi } # Pear CLI v2.5+ requires pear://, not channel names (bare-os-seeder). resolve_pear_link() { local pkg="$1" local link link="$(node "$ROOT/scripts/resolve-pear-link.mjs" "$pkg" 2>/dev/null)" || true if [[ -n "$link" ]]; then printf '%s' "$link" return 0 fi log "Bootstrapping Pear link for $(basename "$pkg")…" node "$ROOT/scripts/bootstrap-pear-stage-link.mjs" "$pkg" >/dev/null node "$ROOT/scripts/resolve-pear-link.mjs" "$pkg" } log "Repo root: $ROOT" rm -f "${HOME}/.config/pear/lock" ensure_root_deps log "Sync kernel/ -> packages/bare-os-seeder/kernel/" mkdir -p "$SEEDER/kernel" cp -R "$ROOT/kernel/." "$SEEDER/kernel/" prepare_pkg_for_pear "$SEEDER" prepare_pkg_for_pear "$BOOTER" SEEDER_LINK="$(resolve_pear_link "$SEEDER")" BOOTER_LINK="$(resolve_pear_link "$BOOTER")" log "Pear links: seeder=$SEEDER_LINK booter=$BOOTER_LINK" log "Staging bare-os-seeder…" (cd "$SEEDER" && pear stage "$SEEDER_LINK" --no-ask) log "Releasing bare-os-seeder…" (cd "$SEEDER" && pear release "$SEEDER_LINK") log "Staging bare-os-booter…" (cd "$BOOTER" && pear stage "$BOOTER_LINK" --no-ask) log "Releasing bare-os-booter…" (cd "$BOOTER" && pear release "$BOOTER_LINK") log "Done (legacy)." log " bare-os-seeder: $SEEDER_LINK" log " bare-os-booter: $BOOTER_LINK" log " Prefer: pear install or out/bare-os-*-/ binaries"