| New file |
| | |
| | | #!/usr/bin/env bash |
| | | # ============================================================================= |
| | | # install-tina-cms.sh |
| | | # Downloads and extracts onweru/compose (master) and sets up tina + config |
| | | # ============================================================================= |
| | | |
| | | set -euo pipefail # Exit on error, undefined var, pipe failure |
| | | IFS=$'\n\t' # Safer word splitting |
| | | |
| | | # ------------------------------- |
| | | # Configuration |
| | | # ------------------------------- |
| | | REPO_URL="https://github.com/onweru/compose/archive/refs/heads/master.zip" |
| | | ZIP_FILE="cms.zip" |
| | | EXTRACT_DIR="cms" |
| | | TEMP_DIR="temp_$(date +%s)_$$" # Unique temp dir |
| | | TARGET_DIR="./cms" |
| | | EXAMPLE_SITE="compose-master/exampleSite" |
| | | |
| | | # ------------------------------- |
| | | # Helper: Print with color |
| | | # ------------------------------- |
| | | log() { echo -e "\033[1;32m[+]\033[0m $*"; } |
| | | warn() { echo -e "\033[1;33m[!]\033[0m $*" >&2; } |
| | | error() { echo -e "\033[1;31m[ERROR]\033[0m $*" >&2; } |
| | | die() { error "$1"; exit 1; } |
| | | |
| | | # ------------------------------- |
| | | # Cleanup on exit (success or failure) |
| | | # ------------------------------- |
| | | cleanup() { |
| | | [[ -f "$ZIP_FILE" ]] && rm -f "$ZIP_FILE" |
| | | [[ -d "$TEMP_DIR" ]] && rm -rf "$TEMP_DIR" |
| | | [[ -d "$TARGET_DIR" ]] && [[ ! -L "$TARGET_DIR" ]] && rm -rf "$TARGET_DIR" |
| | | } |
| | | trap cleanup EXIT |
| | | |
| | | # ------------------------------- |
| | | # Step 1: Download ZIP |
| | | # ------------------------------- |
| | | log "Downloading $REPO_URL..." |
| | | if ! curl -L --fail --progress-bar "$REPO_URL" -o "$ZIP_FILE"; then |
| | | die "Failed to download archive. Check internet or URL." |
| | | fi |
| | | |
| | | # ------------------------------- |
| | | # Step 2: Extract only exampleSite |
| | | # ------------------------------- |
| | | log "Extracting exampleSite from archive..." |
| | | mkdir -p "$TARGET_DIR" |
| | | |
| | | if ! unzip -q "$ZIP_FILE" "$EXAMPLE_SITE/*" -d "$TARGET_DIR"; then |
| | | die "Failed to extract '$EXAMPLE_SITE/*' from $ZIP_FILE" |
| | | fi |
| | | |
| | | # Verify extraction |
| | | if [[ ! -d "$TARGET_DIR/$EXAMPLE_SITE" ]]; then |
| | | die "Expected directory '$TARGET_DIR/$EXAMPLE_SITE' not found after extraction" |
| | | fi |
| | | |
| | | # ------------------------------- |
| | | # Step 3: Create temp dir and move files (including hidden) |
| | | # ------------------------------- |
| | | log "Moving exampleSite contents to temp directory..." |
| | | mkdir -p "$TEMP_DIR" |
| | | |
| | | # Use safe pattern to include hidden files but exclude . and .. |
| | | mv "$TARGET_DIR/$EXAMPLE_SITE/"* "$TEMP_DIR/" 2>/dev/null || true |
| | | mv "$TARGET_DIR/$EXAMPLE_SITE/".[!.]* "$TEMP_DIR/" 2>/dev/null || true |
| | | mv "$TARGET_DIR/$EXAMPLE_SITE/.git"* "$TEMP_DIR/" 2>/dev/null || true # in case .git exists |
| | | |
| | | # ------------------------------- |
| | | # Step 4: Move required files to project root |
| | | # ------------------------------- |
| | | log "Installing tina/, package.json, and .env..." |
| | | |
| | | [[ -d "$TEMP_DIR/tina" ]] || die "Missing 'tina/' directory in exampleSite" |
| | | [[ -f "$TEMP_DIR/package.json" ]] || die "Missing 'package.json'" |
| | | [[ -f "$TEMP_DIR/.env" ]] || die "Missing '.env' file" |
| | | |
| | | mv "$TEMP_DIR/tina" ./ || die "Failed to move tina/" |
| | | mv "$TEMP_DIR/package.json" ./ || die "Failed to move package.json" |
| | | mv "$TEMP_DIR/.env" ./ || die "Failed to move .env" |
| | | |
| | | # ------------------------------- |
| | | # Step 5: Final cleanup |
| | | # ------------------------------- |
| | | log "Cleaning up..." |
| | | rm -rf "$TARGET_DIR" # Already trapped, but explicit |
| | | rm -f "$ZIP_FILE" |
| | | |
| | | # ------------------------------- |
| | | # Success! |
| | | # ------------------------------- |
| | | log "Setup complete!" |
| | | log " - tina/ → ./tina/" |
| | | log " - package.json → ./package.json" |
| | | log " - .env → ./.env" |
| | | log "" |
| | | log "Next steps: (use bun, npm, pnpm or yarn)" |
| | | log " bun install" |
| | | log " update .env file contents" |
| | | log " bun run dev" |
| | | |
| | | # curl -L https://github.com/onweru/compose/archive/refs/heads/master.zip -o cms.zip |
| | | # unzip cms.zip "compose-master/exampleSite/*" -d ./cms |
| | | # mkdir temp |
| | | # mv cms/compose-master/exampleSite/* cms/compose-master/exampleSite/.* temp |
| | | # rm -rf cms |
| | | # mv temp/tina tina |
| | | # mv temp/package.json package.json |
| | | # mv temp/.env .env |
| | | # rm -rf temp |
| | | # rm cms.zip |