mirror of
https://github.com/tiennm99/ccs.git
synced 2026-07-15 18:21:09 +00:00
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.
109 lines
2.6 KiB
Bash
Executable File
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"
|