88 lines
5.2 KiB
Bash
Executable File
88 lines
5.2 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# =============================================================================
|
|
# AngelaMos | 2026
|
|
# init.sh
|
|
# =============================================================================
|
|
# Run once after copying the template.
|
|
# Prompts for a project name, randomizes ports, updates all the right files.
|
|
|
|
set -euo pipefail
|
|
|
|
DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
|
|
# ── prompt ────────────────────────────────────────────────────────────────────
|
|
echo ""
|
|
read -rp "Project name (kebab-case): " RAW
|
|
|
|
SLUG="$(echo "$RAW" | tr '[:upper:]' '[:lower:]' | tr ' ' '-' | tr -cd '[:alnum:]-')"
|
|
[[ -z "$SLUG" ]] && { echo "Error: empty name" >&2; exit 1; }
|
|
|
|
TITLE="$(echo "$SLUG" | tr '-' ' ' | python3 -c "import sys; print(sys.stdin.read().strip().title())")"
|
|
|
|
# ── ports ─────────────────────────────────────────────────────────────────────
|
|
mapfile -t ports < <(python3 -c "
|
|
import random
|
|
for p in random.sample(range(10000, 65001), 4): print(p)
|
|
")
|
|
|
|
PROD_NGINX=${ports[0]}
|
|
PROD_FRONTEND=${ports[1]}
|
|
DEV_NGINX=${ports[2]}
|
|
DEV_FRONTEND=${ports[3]}
|
|
|
|
echo ""
|
|
echo " slug: $SLUG"
|
|
echo " title: $TITLE"
|
|
echo " prod nginx: $PROD_NGINX"
|
|
echo " prod frontend: $PROD_FRONTEND"
|
|
echo " dev nginx: $DEV_NGINX"
|
|
echo " dev frontend: $DEV_FRONTEND"
|
|
echo ""
|
|
|
|
# ── .env (prod) ───────────────────────────────────────────────────────────────
|
|
sed -i "s|^APP_NAME=.*|APP_NAME=$SLUG|" "$DIR/.env"
|
|
sed -i "s|^VITE_APP_TITLE=.*|VITE_APP_TITLE=$TITLE|" "$DIR/.env"
|
|
sed -i "s|^NGINX_HOST_PORT=.*|NGINX_HOST_PORT=$PROD_NGINX|" "$DIR/.env"
|
|
sed -i "s|^FRONTEND_HOST_PORT=.*|FRONTEND_HOST_PORT=$PROD_FRONTEND|" "$DIR/.env"
|
|
echo " updated .env"
|
|
|
|
# ── .env.development ──────────────────────────────────────────────────────────
|
|
sed -i "s|^APP_NAME=.*|APP_NAME=$SLUG-dev|" "$DIR/.env.development"
|
|
sed -i "s|^VITE_APP_TITLE=.*|VITE_APP_TITLE=\"$TITLE (Dev)\"|" "$DIR/.env.development"
|
|
sed -i "s|^NGINX_HOST_PORT=.*|NGINX_HOST_PORT=$DEV_NGINX|" "$DIR/.env.development"
|
|
sed -i "s|^FRONTEND_HOST_PORT=.*|FRONTEND_HOST_PORT=$DEV_FRONTEND|" "$DIR/.env.development"
|
|
echo " updated .env.development"
|
|
|
|
# ── .env.example ──────────────────────────────────────────────────────────────
|
|
sed -i "s|^APP_NAME=.*|APP_NAME=$SLUG|" "$DIR/.env.example"
|
|
sed -i "s|^VITE_APP_TITLE=.*|VITE_APP_TITLE=$TITLE|" "$DIR/.env.example"
|
|
sed -i "s|^NGINX_HOST_PORT=.*|NGINX_HOST_PORT=$PROD_NGINX|" "$DIR/.env.example"
|
|
sed -i "s|^FRONTEND_HOST_PORT=.*|FRONTEND_HOST_PORT=$PROD_FRONTEND|" "$DIR/.env.example"
|
|
echo " updated .env.example"
|
|
|
|
# ── compose.yml ───────────────────────────────────────────────────────────────
|
|
sed -i "s|\${APP_NAME:-[a-z0-9-]*}|\${APP_NAME:-$SLUG}|g" "$DIR/compose.yml"
|
|
sed -i "s|\${NGINX_HOST_PORT:-[0-9]\+}|\${NGINX_HOST_PORT:-$PROD_NGINX}|g" "$DIR/compose.yml"
|
|
echo " updated compose.yml"
|
|
|
|
# ── dev.compose.yml ───────────────────────────────────────────────────────────
|
|
sed -i "s|\${APP_NAME:-[a-z0-9-]*}|\${APP_NAME:-$SLUG}|g" "$DIR/dev.compose.yml"
|
|
sed -i "s|\${NGINX_HOST_PORT:-[0-9]\+}|\${NGINX_HOST_PORT:-$DEV_NGINX}|g" "$DIR/dev.compose.yml"
|
|
sed -i "s|\${FRONTEND_HOST_PORT:-[0-9]\+}|\${FRONTEND_HOST_PORT:-$DEV_FRONTEND}|g" "$DIR/dev.compose.yml"
|
|
echo " updated dev.compose.yml"
|
|
|
|
# ── cloudflared.compose.yml ───────────────────────────────────────────────────
|
|
sed -i "s|\${APP_NAME:-[a-z0-9-]*}|\${APP_NAME:-$SLUG}|g" "$DIR/cloudflared.compose.yml"
|
|
echo " updated cloudflared.compose.yml"
|
|
|
|
# ── frontend/package.json ─────────────────────────────────────────────────────
|
|
sed -i "s|\"name\": \".*\"|\"name\": \"$SLUG\"|" "$DIR/frontend/package.json"
|
|
echo " updated frontend/package.json"
|
|
|
|
# ── frontend/index.html ───────────────────────────────────────────────────────
|
|
sed -i "s|Full Stack Template No Auth|$TITLE|g" "$DIR/frontend/index.html"
|
|
echo " updated frontend/index.html"
|
|
|
|
echo ""
|
|
echo "Done. Go build something."
|