Changes: - Add FAL_KEY and GEMINI_API_KEY to .env.example - Update picture-it to use ~/.config/opencode/.env (unified creds) - Remove shodh-memory skill (no longer used) - Remove alphaear-* skills (deprecated) - Remove thai-frontend-dev skill (replaced by website-creator) - Remove theme-factory skill - Add mql-developer skill (MQL5 trading) - Add ecommerce-astro skill (Astro e-commerce) - Add website-creator skill (Next.js + Payload CMS) - Update install script for new skills
305 lines
9.1 KiB
Bash
Executable File
305 lines
9.1 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
#===============================================================================
|
|
# convert-astro.sh - แปลงเว็บเก่าเป็น Astro + Payload CMS
|
|
#
|
|
# Usage: ./convert-astro.sh [source-path] [project-name]
|
|
#
|
|
# รองรับ:
|
|
# - Astro เวอร์ชั่นเก่า
|
|
# - Next.js
|
|
# - Static HTML
|
|
#
|
|
# Requirements:
|
|
# - git
|
|
# - node.js 20+
|
|
# - npm
|
|
#
|
|
#===============================================================================
|
|
|
|
set -e
|
|
|
|
# Colors
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
NC='\033[0m'
|
|
|
|
# Default values
|
|
SOURCE_PATH="${1:-}"
|
|
PROJECT_NAME="${2:-}"
|
|
|
|
#-------------------------------------------------------------------------------
|
|
# Helper functions
|
|
#-------------------------------------------------------------------------------
|
|
|
|
log_info() {
|
|
echo -e "${BLUE}[INFO]${NC} $1"
|
|
}
|
|
|
|
log_success() {
|
|
echo -e "${GREEN}[SUCCESS]${NC} $1"
|
|
}
|
|
|
|
log_warning() {
|
|
echo -e "${YELLOW}[WARNING]${NC} $1"
|
|
}
|
|
|
|
log_error() {
|
|
echo -e "${RED}[ERROR]${NC} $1"
|
|
}
|
|
|
|
print_usage() {
|
|
cat << EOF
|
|
Usage: $(basename "$0") [source-path] [project-name]
|
|
|
|
แปลงเว็บเก่าเป็น Astro + Payload CMS
|
|
|
|
Arguments:
|
|
source-path ที่อยู่เว็บเก่า
|
|
project-name ชื่อ project ใหม่
|
|
|
|
Supported Sources:
|
|
- Astro เวอร์ชั่นเก่า
|
|
- Next.js
|
|
- Static HTML
|
|
|
|
Examples:
|
|
$(basename "$0") /path/to/old-site my-new-site
|
|
|
|
EOF
|
|
}
|
|
|
|
#-------------------------------------------------------------------------------
|
|
# Detect source type
|
|
#-------------------------------------------------------------------------------
|
|
|
|
detect_source_type() {
|
|
log_info "ตรวจสอบประเภทเว็บเก่า..."
|
|
|
|
if [ ! -d "$SOURCE_PATH" ]; then
|
|
log_error "ไม่พบ source path: $SOURCE_PATH"
|
|
exit 1
|
|
fi
|
|
|
|
cd "$SOURCE_PATH"
|
|
|
|
if [ -f "package.json" ]; then
|
|
if grep -q '"next"' "package.json" 2>/dev/null; then
|
|
SOURCE_TYPE="nextjs"
|
|
log_success "ตรวจพบ: Next.js"
|
|
elif grep -q '"astro"' "package.json" 2>/dev/null; then
|
|
SOURCE_TYPE="astro"
|
|
log_success "ตรวจพบ: Astro"
|
|
elif grep -q '"remix"' "package.json" 2>/dev/null; then
|
|
SOURCE_TYPE="remix"
|
|
log_success "ตรวจพบ: Remix"
|
|
elif grep -q '"nuxt"' "package.json" 2>/dev/null; then
|
|
SOURCE_TYPE="nuxt"
|
|
log_success "ตรวจพบ: Nuxt"
|
|
else
|
|
SOURCE_TYPE="unknown"
|
|
log_warning "ไม่สามารถระบุประเภท - จะใช้เป็น static HTML"
|
|
fi
|
|
elif [ -f "index.html" ]; then
|
|
SOURCE_TYPE="static"
|
|
log_success "ตรวจพบ: Static HTML"
|
|
else
|
|
log_error "ไม่พบ package.json หรือ index.html"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
#-------------------------------------------------------------------------------
|
|
# Backup source
|
|
#-------------------------------------------------------------------------------
|
|
|
|
backup_source() {
|
|
log_info "สำรองข้อมูลเว็บเก่า..."
|
|
|
|
BACKUP_DIR="/tmp/backup-$(basename "$SOURCE_PATH")-$(date +%s)"
|
|
mkdir -p "$BACKUP_DIR"
|
|
|
|
cp -r "$SOURCE_PATH" "$BACKUP_DIR/"
|
|
|
|
log_success "สำรองข้อมูลที่: $BACKUP_DIR"
|
|
}
|
|
|
|
#-------------------------------------------------------------------------------
|
|
# Analyze structure
|
|
#-------------------------------------------------------------------------------
|
|
|
|
analyze_structure() {
|
|
log_info "วิเคราะห์โครงสร้างเว็บเก่า..."
|
|
|
|
cd "$SOURCE_PATH"
|
|
|
|
echo ""
|
|
echo " โครงสร้างไฟล์:"
|
|
find . -type f \( -name "*.astro" -o -name "*.tsx" -o -name "*.jsx" -o -name "*.vue" -o -name "*.html" -o -name "*.md" -o -name "*.mdx" \) 2>/dev/null | grep -v node_modules | head -30
|
|
|
|
echo ""
|
|
echo " Package.json scripts:"
|
|
if [ -f "package.json" ]; then
|
|
grep -A 10 '"scripts"' "package.json" 2>/dev/null | head -15
|
|
fi
|
|
}
|
|
|
|
#-------------------------------------------------------------------------------
|
|
# Create new Astro project
|
|
#-------------------------------------------------------------------------------
|
|
|
|
create_new_project() {
|
|
log_info "สร้าง Astro project ใหม่..."
|
|
|
|
NEW_PROJECT_PATH="$(dirname "$SOURCE_PATH")/$PROJECT_NAME"
|
|
|
|
if [ -d "$NEW_PROJECT_PATH" ]; then
|
|
log_warning "Project มีอยู่แล้ว: $NEW_PROJECT_PATH"
|
|
read -p "ลบและสร้างใหม่? (y/n): " -n 1 -r
|
|
echo
|
|
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
|
rm -rf "$NEW_PROJECT_PATH"
|
|
else
|
|
log_info "ใช้ existing project"
|
|
return 0
|
|
fi
|
|
fi
|
|
|
|
mkdir -p "$NEW_PROJECT_PATH"
|
|
cd "$NEW_PROJECT_PATH"
|
|
|
|
# Create Astro project
|
|
npm create astro@latest . -- --template minimal --no-install --no-git --typescript strict << EOF
|
|
y
|
|
EOF
|
|
|
|
log_success "สร้าง Astro project เสร็จสมบูรณ์: $NEW_PROJECT_PATH"
|
|
}
|
|
|
|
#-------------------------------------------------------------------------------
|
|
# Copy content
|
|
#-------------------------------------------------------------------------------
|
|
|
|
copy_content() {
|
|
log_info "คัดลอก content..."
|
|
|
|
cd "$SOURCE_PATH"
|
|
|
|
# Copy markdown content
|
|
if [ -d "src/content" ]; then
|
|
mkdir -p "$NEW_PROJECT_PATH/src/content/migration"
|
|
cp -r src/content/* "$NEW_PROJECT_PATH/src/content/migration/"
|
|
log_success "คัดลอก content จาก src/content"
|
|
elif [ -d "content" ]; then
|
|
mkdir -p "$NEW_PROJECT_PATH/src/content/migration"
|
|
cp -r content/* "$NEW_PROJECT_PATH/src/content/migration/"
|
|
log_success "คัดลอก content จาก content"
|
|
fi
|
|
|
|
# Copy public assets
|
|
if [ -d "public" ]; then
|
|
cp -r public/* "$NEW_PROJECT_PATH/public/" 2>/dev/null || true
|
|
log_success "คัดลอก public assets"
|
|
fi
|
|
|
|
# Copy pages (needs manual conversion)
|
|
if [ -d "src/pages" ] || [ -d "pages" ]; then
|
|
mkdir -p "$NEW_PROJECT_PATH/src/pages/legacy"
|
|
log_info "Pages ต้องการ manual conversion - เก็บไว้ที่ legacy/"
|
|
fi
|
|
}
|
|
|
|
#-------------------------------------------------------------------------------
|
|
# Create content migration report
|
|
#-------------------------------------------------------------------------------
|
|
|
|
create_migration_report() {
|
|
log_info "สร้าง migration report..."
|
|
|
|
cd "$SOURCE_PATH"
|
|
|
|
local page_count=$(find . -type f \( -name "*.astro" -o -name "*.tsx" -o -name "*.jsx" -o -name "*.html" -o -name "*.md" -o -name "*.mdx" \) 2>/dev/null | grep -v node_modules | wc -l)
|
|
|
|
cat > "$NEW_PROJECT_PATH/MIGRATION_REPORT.md" << EOF
|
|
# Migration Report
|
|
|
|
## Source Information
|
|
- **Type:** $SOURCE_TYPE
|
|
- **Path:** $SOURCE_PATH
|
|
- **Backup:** $BACKUP_DIR
|
|
- **Date:** $(date)
|
|
|
|
## Content Statistics
|
|
- **Total Pages:** $page_count
|
|
|
|
## Files to Migrate
|
|
|
|
### Pages (Manual Conversion Required)
|
|
EOF
|
|
|
|
# List pages that need conversion
|
|
if [ -d "src/pages" ]; then
|
|
find src/pages -type f \( -name "*.astro" -o -name "*.tsx" -o -name "*.jsx" \) 2>/dev/null >> "$NEW_PROJECT_PATH/MIGRATION_REPORT.md"
|
|
elif [ -d "pages" ]; then
|
|
find pages -type f \( -name "*.html" -o -name "*.jsx" -o -name "*.tsx" \) 2>/dev/null >> "$NEW_PROJECT_PATH/MIGRATION_REPORT.md"
|
|
fi
|
|
|
|
cat >> "$NEW_PROJECT_PATH/MIGRATION_REPORT.md" << EOF
|
|
|
|
### Content (Auto-migrated)
|
|
EOF
|
|
|
|
if [ -d "$NEW_PROJECT_PATH/src/content/migration" ]; then
|
|
find "$NEW_PROJECT_PATH/src/content/migration" -type f -name "*.md" -o -name "*.mdx" 2>/dev/null >> "$NEW_PROJECT_PATH/MIGRATION_REPORT.md"
|
|
fi
|
|
|
|
log_success "สร้าง migration report: $NEW_PROJECT_PATH/MIGRATION_REPORT.md"
|
|
}
|
|
|
|
#-------------------------------------------------------------------------------
|
|
# Main
|
|
#-------------------------------------------------------------------------------
|
|
|
|
main() {
|
|
echo "=============================================="
|
|
echo " Website Migration Tool"
|
|
echo " แปลงเว็บเก่าเป็น Astro + Payload CMS"
|
|
echo "=============================================="
|
|
echo ""
|
|
|
|
if [ "$1" == "-h" ] || [ "$1" == "--help" ]; then
|
|
print_usage
|
|
exit 0
|
|
fi
|
|
|
|
if [ -z "$SOURCE_PATH" ]; then
|
|
print_usage
|
|
echo ""
|
|
log_error "กรุณาระบุ source path"
|
|
exit 1
|
|
fi
|
|
|
|
detect_source_type
|
|
backup_source
|
|
analyze_structure
|
|
create_new_project
|
|
copy_content
|
|
create_migration_report
|
|
|
|
echo ""
|
|
echo "=============================================="
|
|
log_success "Migration เริ่มต้นเสร็จสมบูรณ์!"
|
|
echo "=============================================="
|
|
echo ""
|
|
echo "ขั้นตอนถัดไป:"
|
|
echo " 1. cd $NEW_PROJECT_PATH"
|
|
echo " 2. npm install"
|
|
echo " 3. ดู MIGRATION_REPORT.md"
|
|
echo " 4. ปรับ content และ pages ตาม report"
|
|
echo " 5. npm run dev"
|
|
echo ""
|
|
}
|
|
|
|
main "$@"
|