Files
ccs/scripts/dev-symlink.sh
semantic-release-botandkaitranntt 981cef8211 feat(dev): add symlink setup for testing dev version
Add dev:symlink and dev:unlink scripts to enable seamless testing of
development changes using the global 'ccs' command without needing to
pack/install globally each time.

- scripts/dev-symlink.sh: New script that safely creates symlinks from
  global ccs to dev dist/ccs.js with backup/restore functionality
- package.json: Added dev:symlink and dev:unlink npm scripts
- CONTRIBUTING.md: Updated development setup documentation with
  symlink workflow option

This improves developer experience by allowing immediate testing of
changes with 'ccs <command>' instead of './dist/ccs.js <command>'.
2026-01-05 02:45:01 -05:00

116 lines
3.1 KiB
Bash
Executable File

#!/bin/bash
# CCS Dev Symlink Setup
# Creates symlinks for testing dev version with 'ccs' command
#
# Usage: ./scripts/dev-symlink.sh [--restore]
#
# Without --restore: Creates symlink from global 'ccs' to dist/ccs.js
# With --restore: Restores original global 'ccs' from backup
set -euo pipefail
RESTORE=false
# Parse arguments
for arg in "$@"; do
case $arg in
--restore) RESTORE=true ;;
-h|--help)
echo "Usage: $0 [--restore]"
echo ""
echo "Create symlink for dev testing:"
echo " $0"
echo ""
echo "Restore original global ccs:"
echo " $0 --restore"
exit 0
;;
*)
echo "[X] Unknown option: $arg"
echo "Use --help for usage"
exit 1
;;
esac
done
# Get to the right directory
cd "$(dirname "$0")/.."
# Check if dist/ccs.js exists
if [ ! -f "dist/ccs.js" ]; then
echo "[X] ERROR: dist/ccs.js not found. Run 'bun run build' first."
exit 1
fi
# Get absolute path to dev ccs.js
DEV_CCS_PATH="$(pwd)/dist/ccs.js"
# Find global ccs installation
GLOBAL_CCS_PATH=$(which ccs 2>/dev/null || true)
if [ -z "$GLOBAL_CCS_PATH" ]; then
echo "[X] ERROR: No global 'ccs' installation found."
echo "Install CCS globally first: npm install -g @kaitranntt/ccs"
exit 1
fi
echo "[i] Found global ccs at: $GLOBAL_CCS_PATH"
if [ "$RESTORE" = true ]; then
# Restore original ccs from backup
BACKUP_PATH="${GLOBAL_CCS_PATH}.backup-dev"
if [ ! -f "$BACKUP_PATH" ] && [ ! -L "$BACKUP_PATH" ]; then
echo "[X] ERROR: No backup found at $BACKUP_PATH"
echo "Cannot restore - backup may have been deleted"
exit 1
fi
echo "[i] Restoring original ccs from backup..."
rm -f "$GLOBAL_CCS_PATH"
if [ -L "$BACKUP_PATH" ]; then
# Restore symlink
cp -P "$BACKUP_PATH" "$GLOBAL_CCS_PATH"
else
# Restore regular file
cp "$BACKUP_PATH" "$GLOBAL_CCS_PATH"
fi
chmod +x "$GLOBAL_CCS_PATH"
rm -f "$BACKUP_PATH"
echo "[OK] Restored original global ccs"
echo "Run 'ccs --version' to verify"
exit 0
fi
# Check if already symlinked to our dev version
if [ -L "$GLOBAL_CCS_PATH" ]; then
CURRENT_TARGET=$(readlink "$GLOBAL_CCS_PATH" 2>/dev/null || true)
if [ "$CURRENT_TARGET" = "$DEV_CCS_PATH" ]; then
echo "[OK] Already symlinked to dev version"
exit 0
fi
fi
# Create backup of current global ccs
BACKUP_PATH="${GLOBAL_CCS_PATH}.backup-dev"
if [ -f "$BACKUP_PATH" ] || [ -L "$BACKUP_PATH" ]; then
echo "[i] Backup already exists, skipping backup creation"
else
echo "[i] Creating backup of current global ccs..."
cp -P "$GLOBAL_CCS_PATH" "$BACKUP_PATH"
echo "[OK] Backup created at: $BACKUP_PATH"
fi
# Create symlink
echo "[i] Creating symlink to dev version..."
rm -f "$GLOBAL_CCS_PATH"
ln -s "$DEV_CCS_PATH" "$GLOBAL_CCS_PATH"
echo "[OK] Symlinked global 'ccs' to dev version"
echo ""
echo "Now you can test dev changes with: ccs <command>"
echo "To restore original: $0 --restore"
echo ""
echo "Test with: ccs --version"