Files
clawd/skills/app-builder/scripts/scaffold.sh

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"