Files
ccs/scripts/dev-install.sh
T
kaitranntt 13824b61ca fix(dev-install): prevent duplicate entries in bun global package.json
Bun's `add -g` with file: protocol appends instead of replacing existing
entries, causing duplicate key warnings on repeated installs. Fix by
removing the package before re-adding.
2025-12-16 22:04:23 -05:00

109 lines
2.6 KiB
Bash
Executable File

#!/bin/bash
# Auto-install CCS locally for testing changes
# Usage: ./scripts/dev-install.sh
#
# Options:
# --skip-validate Skip validation (faster, use when you're sure code is good)
# --npm Force npm install (default: auto-detect, fallback to bun)
# --bun Force bun install
set -e
SKIP_VALIDATE=false
FORCE_NPM=false
FORCE_BUN=false
for arg in "$@"; do
case $arg in
--skip-validate) SKIP_VALIDATE=true ;;
--npm) FORCE_NPM=true ;;
--bun) FORCE_BUN=true ;;
esac
done
echo "[i] CCS Dev Install - Starting..."
# Get to the right directory
cd "$(dirname "$0")/.."
# Detect installation method
# Priority: CLI flags > existing global install location > bun (default)
detect_pkg_manager() {
if [ "$FORCE_NPM" = true ]; then
echo "npm"
return
fi
if [ "$FORCE_BUN" = true ]; then
echo "bun"
return
fi
# Check existing ccs installation location
CCS_PATH=$(which ccs 2>/dev/null || true)
if [ -n "$CCS_PATH" ]; then
# Check if installed via bun
if [[ "$CCS_PATH" == *".bun"* ]]; then
echo "bun"
return
fi
# Check if installed via npm
if [[ "$CCS_PATH" == *"npm"* ]] || [[ "$CCS_PATH" == *"node_modules"* ]]; then
echo "npm"
return
fi
fi
# Default fallback: bun (preferred)
echo "bun"
}
PKG_MANAGER=$(detect_pkg_manager)
echo "[i] Detected package manager: $PKG_MANAGER"
# Build TypeScript first
echo "[i] Building TypeScript..."
bun run build
# Pack the npm package
echo "[i] Creating package..."
if [ "$SKIP_VALIDATE" = true ]; then
# Skip validation, just pack
npm pack --ignore-scripts 2>/dev/null || bun pm pack --ignore-scripts
else
# Full pack with validation (runs prepublishOnly)
npm pack 2>/dev/null || bun pm pack
fi
# Find the tarball
TARBALL=$(ls -t kaitranntt-ccs-*.tgz 2>/dev/null | head -1)
if [ -z "$TARBALL" ]; then
echo "[X] ERROR: No tarball found"
exit 1
fi
echo "[i] Found tarball: $TARBALL"
# Install globally using detected package manager
echo "[i] Installing globally with $PKG_MANAGER..."
if [ "$PKG_MANAGER" = "bun" ]; then
# Remove existing to avoid duplicate key warnings in bun's global package.json
# (bun add -g appends instead of replacing file: protocol entries)
bun remove -g @kaitranntt/ccs 2>/dev/null || true
# Bun requires file: protocol for local tarballs
bun add -g "file:$(pwd)/$TARBALL"
else
npm install -g "$TARBALL"
fi
# Clean up
echo "[i] Cleaning up..."
rm "$TARBALL"
echo "[OK] Complete! CCS is now updated."
echo ""
echo "Test with: ccs --version"