52 lines
1.6 KiB
Bash
Executable File
52 lines
1.6 KiB
Bash
Executable File
#!/bin/bash
|
|
# Automatically sync package-lock.json with package.json changes
|
|
# Can be used as git hook, CI/CD step, or manual script
|
|
|
|
set -e
|
|
|
|
echo "🔍 Checking package-lock.json sync..."
|
|
|
|
# Change to npm directory (if it exists)
|
|
NPM_DIR="$(dirname "$0")/../npm"
|
|
if [ ! -d "$NPM_DIR" ]; then
|
|
echo "✅ No npm directory found, skipping sync"
|
|
exit 0
|
|
fi
|
|
cd "$NPM_DIR"
|
|
|
|
# Check if package.json or any workspace package.json changed
|
|
CHANGED_PACKAGES=$(git diff --cached --name-only | grep -E 'package\.json$' || true)
|
|
|
|
if [ -n "$CHANGED_PACKAGES" ]; then
|
|
echo "📦 Package.json changes detected:"
|
|
echo "$CHANGED_PACKAGES"
|
|
echo ""
|
|
echo "🔄 Running npm install to sync lock file..."
|
|
|
|
# Run npm install to update lock file
|
|
# Use --ignore-optional to skip platform-specific optional deps (darwin-arm64 on linux, etc.)
|
|
npm install --ignore-optional || {
|
|
echo "⚠️ npm install had warnings (likely platform-specific optional deps)"
|
|
echo " Continuing with lock file sync..."
|
|
}
|
|
|
|
# Check if lock file changed
|
|
if git diff --name-only | grep -q 'package-lock.json'; then
|
|
echo "✅ Lock file updated successfully"
|
|
|
|
# If running as pre-commit hook, add the lock file
|
|
if [ "${GIT_HOOK}" = "pre-commit" ]; then
|
|
cd ..
|
|
git add npm/package-lock.json
|
|
echo "✅ Lock file staged for commit"
|
|
else
|
|
echo "⚠️ Lock file modified but not staged"
|
|
echo " Run: git add npm/package-lock.json"
|
|
fi
|
|
else
|
|
echo "✅ Lock file already in sync"
|
|
fi
|
|
else
|
|
echo "✅ No package.json changes detected"
|
|
fi
|