109 lines
3.3 KiB
Bash
Executable File
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."
|