56 lines
1.6 KiB
Bash
Executable File
56 lines
1.6 KiB
Bash
Executable File
#!/bin/bash
|
|
# Scaffold a new app from the standard template
|
|
# Usage: scaffold.sh <app-name> [--api-only]
|
|
#
|
|
# Creates project structure, initializes git, and pushes to Gitea.
|
|
|
|
set -euo pipefail
|
|
|
|
APP_NAME="${1:?Usage: scaffold.sh <app-name>}"
|
|
API_ONLY="${2:-}"
|
|
BASE_DIR="/home/clawdbot/clawd"
|
|
PROJECT_DIR="$BASE_DIR/$APP_NAME"
|
|
SKILL_DIR="$(dirname "$(realpath "$0")")/.."
|
|
TEMPLATE_DIR="$SKILL_DIR/assets/template"
|
|
GITEA_URL="https://git.infra.nkode.tech"
|
|
|
|
if [ -d "$PROJECT_DIR" ]; then
|
|
echo "Error: $PROJECT_DIR already exists"
|
|
exit 1
|
|
fi
|
|
|
|
echo "🔨 Scaffolding $APP_NAME..."
|
|
|
|
# Create project structure
|
|
mkdir -p "$PROJECT_DIR"
|
|
cp -r "$TEMPLATE_DIR/api" "$PROJECT_DIR/api"
|
|
if [ "$API_ONLY" != "--api-only" ]; then
|
|
cp -r "$TEMPLATE_DIR/web" "$PROJECT_DIR/web"
|
|
fi
|
|
|
|
# Copy root files
|
|
cp "$TEMPLATE_DIR/docker-compose.yml" "$PROJECT_DIR/"
|
|
cp "$TEMPLATE_DIR/docker-compose.dokploy.yml" "$PROJECT_DIR/"
|
|
cp "$TEMPLATE_DIR/.env.example" "$PROJECT_DIR/"
|
|
cp "$TEMPLATE_DIR/.gitignore" "$PROJECT_DIR/"
|
|
|
|
# Replace placeholder app name
|
|
find "$PROJECT_DIR" -type f \( -name "*.ts" -o -name "*.json" -o -name "*.yml" -o -name "*.md" -o -name "*.env*" \) \
|
|
-exec sed -i "s/APP_TEMPLATE/$APP_NAME/g" {} +
|
|
|
|
# Initialize git
|
|
cd "$PROJECT_DIR"
|
|
git init
|
|
git add -A
|
|
git commit -m "Initial scaffold from app-builder template"
|
|
|
|
echo ""
|
|
echo "✅ Project scaffolded at $PROJECT_DIR"
|
|
echo ""
|
|
echo "Next steps:"
|
|
echo " 1. Create Gitea repo: $GITEA_URL/hammer/$APP_NAME"
|
|
echo " 2. git remote add origin $GITEA_URL/hammer/$APP_NAME.git"
|
|
echo " 3. git push -u origin main"
|
|
echo " 4. Customize the schema in api/src/db/schema.ts"
|
|
echo " 5. Run: cd $PROJECT_DIR && docker compose up"
|