learning_ai_notes/scripts/docker-prep.sh
saravanakumardb1 a71747e3fb chore(devops): add Dockerfiles, docker-compose, CI workflow, docker-prep script [C1-C5]
- backend/Dockerfile: multi-stage Node.js build (install → build → runtime)
- web/Dockerfile: multi-stage Next.js standalone build
- docker-compose.yml: backend (4016) + web (3000) with health check
- scripts/docker-prep.sh: pack @bytelyst/* tarballs + rewrite file: refs (--restore to undo)
- .github/workflows/ci.yml: backend (typecheck+test+build), web (typecheck+test+build), mobile (typecheck)
2026-03-19 08:47:04 -07:00

86 lines
2.6 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
# docker-prep.sh — Pack @bytelyst/* packages into tarballs for Docker builds
# Usage:
# ./scripts/docker-prep.sh # pack tarballs + rewrite package.json
# ./scripts/docker-prep.sh --restore # undo changes
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
ROOT_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
COMMON_PLAT="${ROOT_DIR}/../learning_ai_common_plat"
TARBALL_DIR="${ROOT_DIR}/.tarballs"
if [[ "${1:-}" == "--restore" ]]; then
echo "Restoring package.json files..."
for pkg_json in backend/package.json web/package.json; do
backup="${ROOT_DIR}/${pkg_json}.bak"
if [[ -f "$backup" ]]; then
mv "$backup" "${ROOT_DIR}/${pkg_json}"
echo " Restored ${pkg_json}"
fi
done
rm -rf "$TARBALL_DIR"
echo "Done."
exit 0
fi
if [[ ! -d "$COMMON_PLAT/packages" ]]; then
echo "ERROR: Cannot find $COMMON_PLAT/packages — run from the correct directory"
exit 1
fi
echo "Building @bytelyst/* packages..."
(cd "$COMMON_PLAT" && pnpm build)
echo "Packing tarballs..."
rm -rf "$TARBALL_DIR"
mkdir -p "$TARBALL_DIR"
for pkg_dir in "$COMMON_PLAT"/packages/*/; do
pkg_name=$(basename "$pkg_dir")
if [[ -f "$pkg_dir/package.json" ]]; then
(cd "$pkg_dir" && npm pack --pack-destination "$TARBALL_DIR" 2>/dev/null) || true
fi
done
echo "Tarballs created:"
ls -la "$TARBALL_DIR"/*.tgz 2>/dev/null || echo " (none)"
echo "Rewriting package.json file: refs..."
for pkg_json in backend/package.json web/package.json; do
full_path="${ROOT_DIR}/${pkg_json}"
if [[ ! -f "$full_path" ]]; then
continue
fi
cp "$full_path" "${full_path}.bak"
# Replace file:../../learning_ai_common_plat/packages/* refs with tarball paths
node -e "
const fs = require('fs');
const path = require('path');
const pkg = JSON.parse(fs.readFileSync('$full_path', 'utf8'));
const tarballDir = '$TARBALL_DIR';
const tarballs = fs.readdirSync(tarballDir).filter(f => f.endsWith('.tgz'));
for (const depType of ['dependencies', 'devDependencies']) {
if (!pkg[depType]) continue;
for (const [name, version] of Object.entries(pkg[depType])) {
if (typeof version === 'string' && version.startsWith('file:')) {
const shortName = name.replace('@bytelyst/', 'bytelyst-');
const tarball = tarballs.find(t => t.startsWith(shortName));
if (tarball) {
pkg[depType][name] = 'file:' + path.join(tarballDir, tarball);
}
}
}
}
fs.writeFileSync('$full_path', JSON.stringify(pkg, null, 2) + '\n');
"
echo " Rewrote ${pkg_json}"
done
echo "Done. Run 'docker build' now. Use --restore to undo."