learning_ai_notes/scripts/docker-prep.sh

92 lines
3.0 KiB
Bash
Executable File

#!/usr/bin/env bash
# Pack @bytelyst/* tarballs from the sibling common-plat repo for
# self-contained Docker builds that don't need the Gitea npm registry.
#
# Usage:
# ./scripts/docker-prep.sh # pack tarballs + rewrite package.json
# ./scripts/docker-prep.sh --restore # undo rewrite
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
REPO_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
COMMON_PLAT="${REPO_DIR}/../learning_ai_common_plat"
TARBALL_DIR="${REPO_DIR}/.docker-deps"
# ── Restore mode ───────────────────────────────────────────────────
if [[ "${1:-}" == "--restore" ]]; then
echo "Restoring original package.json files..."
for bak in $(find "$REPO_DIR" -name "package.json.bak" -not -path "*/node_modules/*"); do
mv "$bak" "${bak%.bak}"
echo " Restored ${bak%.bak}"
done
rm -rf "$TARBALL_DIR"
echo "Done."
exit 0
fi
# ── Pack mode ──────────────────────────────────────────────────────
echo "=== docker-prep: packing @bytelyst/* tarballs ==="
rm -rf "$TARBALL_DIR"
mkdir -p "$TARBALL_DIR"
# Build all packages first
echo "Building @bytelyst/* packages..."
(cd "$COMMON_PLAT" && pnpm build)
# Pack each package and build a mapping of name → tarball filename
declare -A TARBALL_MAP
for pkg_dir in "$COMMON_PLAT"/packages/*/; do
pkg_name=$(node -p "require('${pkg_dir}package.json').name" 2>/dev/null || true)
if [[ -z "$pkg_name" ]]; then continue; fi
echo " Packing $pkg_name..."
tarball=$(cd "$pkg_dir" && pnpm pack --pack-destination "$TARBALL_DIR" 2>/dev/null | tail -1)
filename=$(basename "$tarball")
TARBALL_MAP["$pkg_name"]="$filename"
echo " -> $filename"
done
# ── Rewrite package.json files ─────────────────────────────────────
echo ""
echo "Rewriting package.json @bytelyst/* refs to .docker-deps/ tarballs..."
rewrite_package_json() {
local pkg_file="$1"
local rel_prefix="$2" # relative path from package.json dir to repo root
if [[ ! -f "$pkg_file" ]]; then return; fi
# Backup
cp "$pkg_file" "${pkg_file}.bak"
local tmp="${pkg_file}.tmp"
cp "$pkg_file" "$tmp"
for pkg_name in "${!TARBALL_MAP[@]}"; do
local tarball="${TARBALL_MAP[$pkg_name]}"
# Replace "^0.1.0" (or any semver) with "file:../.docker-deps/<tarball>"
sed -i '' "s|\"${pkg_name}\": \"[^\"]*\"|\"${pkg_name}\": \"file:${rel_prefix}.docker-deps/${tarball}\"|g" "$tmp"
done
mv "$tmp" "$pkg_file"
echo " Rewrote $pkg_file"
}
# Backend package.json
rewrite_package_json "${REPO_DIR}/backend/package.json" "../"
# Web package.json
rewrite_package_json "${REPO_DIR}/web/package.json" "../"
echo ""
echo "Done. Tarballs in $TARBALL_DIR"
echo ""
echo "To build Docker images:"
echo " docker compose build"
echo ""
echo "To restore after build:"
echo " ./scripts/docker-prep.sh --restore"