#!/usr/bin/env bash # # Archive existing publish/*.jpl builds before a new `npm run dist`. # # Per CLAUDE.md: never overwrite a previous .jpl. This moves each current # publish/*.jpl into build-archive/ with a version + timestamp suffix so a # fresh build can't clobber the last one. No-op when no .jpl is present. # # The archive lives at repo root (NOT under publish/) deliberately: webpack's # buildMain step runs `fs.removeSync(publishDir)` and would wipe an in-publish # archive, and `package.json` "files": ["publish"] would ship it to npm. # build-archive/ is git-ignored and outside both. # # Wired as the `predist` npm script, so it runs automatically before every # `npm run dist`. Safe to run manually too. set -euo pipefail repo_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" publish_dir="$repo_root/publish" archive_dir="$repo_root/build-archive" shopt -s nullglob jpls=("$publish_dir"/*.jpl) if [ ${#jpls[@]} -eq 0 ]; then echo "archive-jpl: no publish/*.jpl to archive." exit 0 fi version="$(node -p "require('$repo_root/package.json').version")" timestamp="$(date +%Y%m%d-%H%M%S)" mkdir -p "$archive_dir" for jpl in "${jpls[@]}"; do base="$(basename "$jpl" .jpl)" dest="$archive_dir/${base}-${version}-${timestamp}.jpl" mv "$jpl" "$dest" echo "archive-jpl: moved $(basename "$jpl") -> build-archive/$(basename "$dest")" done