#!/usr/bin/env bash # Clear Pear + Bare OS host storage for bare-os-seeder and bare-os-booter, # mint new pear:// links, update package.json, then stage, release, and seed. # # Usage (from repo root): scripts/reset-pear-apps.sh # Env: BARE_OS_HOME — host data root (default: $HOME/.bare-os) set -euo pipefail export PATH="${HOME}/.config/pear/bin:${PATH:-}" ROOT="$(cd "$(dirname "$0")/.." && pwd)" SEEDER="$ROOT/packages/bare-os-seeder" BOOTER="$ROOT/packages/bare-os-booter" BARE_OS_HOME="${BARE_OS_HOME:-$HOME/.bare-os}" log() { printf '\n%s\n' "$*" } collect_pear_links() { node --input-type=module -e " import fs from 'fs' const pkgs = ['$SEEDER', '$BOOTER'] const links = new Set() for (const pkg of pkgs) { const p = JSON.parse(fs.readFileSync(pkg + '/package.json', 'utf8')) if (p.pear?.link) links.add(p.pear.link) const local = pkg + '/.pear-stage-link' if (fs.existsSync(local)) links.add(fs.readFileSync(local, 'utf8').trim()) } for (const l of links) if (l) console.log(l) " } drop_pear_link() { local link="$1" log "Resetting Pear app storage: $link" rm -f "${HOME}/.config/pear/lock" printf 'RESET\n' | pear drop app "$link" 2>&1 || true } touch_pear_link() { node "$ROOT/scripts/bootstrap-pear-stage-link.mjs" "$1" 2>/dev/null | tail -1 } verify_pear_link() { local link="$1" local label="$2" local tmp rm -f "${HOME}/.config/pear/lock" tmp="$(mktemp -d)" if timeout 90 pear dump "$link" "$tmp" --force >/dev/null 2>&1 && [[ -f "$tmp/index.js" ]]; then log "$label: staged bundle OK (index.js present at $link)" rm -rf "$tmp" return 0 fi rm -rf "$tmp" log "WARN: could not verify $label via pear dump (link may still work with pear run --checkout=staged)" return 0 } log "Repo root: $ROOT" log "Pear PATH uses: ${PATH%%:*}" rm -f "${HOME}/.config/pear/lock" while IFS= read -r link; do [[ -n "$link" ]] && drop_pear_link "$link" done < <(collect_pear_links) rm -f "$SEEDER/.pear-stage-link" "$BOOTER/.pear-stage-link" if [[ -d "$BARE_OS_HOME/corestore" ]]; then log "Removing Bare OS host corestores under $BARE_OS_HOME/corestore/{seeder,booter}" rm -rf "$BARE_OS_HOME/corestore/seeder" "$BARE_OS_HOME/corestore/booter" fi log "Pear GC (cores)…" pear gc cores 2>&1 || true log "Minting new Pear links (pear touch)…" SEEDER_LINK="$(touch_pear_link "$SEEDER")" BOOTER_LINK="$(touch_pear_link "$BOOTER")" log " seeder: $SEEDER_LINK" log " booter: $BOOTER_LINK" node "$ROOT/scripts/set-pear-package-link.mjs" "$SEEDER" "$SEEDER_LINK" node "$ROOT/scripts/set-pear-package-link.mjs" "$BOOTER" "$BOOTER_LINK" log "Stage, release, and seed (scripts/stage-release.sh + pear seed)…" unset BARE_OS_PEAR_USE_PUBLISHED_LINK unset BARE_OS_SEEDER_PEAR_LINK unset BARE_OS_BOOTER_PEAR_LINK rm -f "$SEEDER/.pear-stage-link" "$BOOTER/.pear-stage-link" "$ROOT/scripts/stage-release.sh" log "Seeding $SEEDER_LINK …" (cd "$SEEDER" && pear seed "$SEEDER_LINK" --no-ask --no-tty) || true log "Seeding $BOOTER_LINK …" (cd "$BOOTER" && pear seed "$BOOTER_LINK" --no-ask --no-tty) || true verify_pear_link "$SEEDER_LINK" "bare-os-seeder" verify_pear_link "$BOOTER_LINK" "bare-os-booter" log "Done." log " bare-os-seeder: $SEEDER_LINK" log " bare-os-booter: $BOOTER_LINK" log "Update docs/PEAR-RUN.md and any pear:// references in the repo with these keys."