Files
bare-operating-system/scripts/reset-pear-apps.sh
T
2026-05-17 16:01:52 +00:00

109 lines
3.3 KiB
Bash
Executable File

#!/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."