CONTRIBUTE.md beschreibt Wege für Beiträge, gesuchte Unterstützung und die drei bindenden Leitlinien (FOSS, Datensparsamkeit, Security) mit einem Disclaimer, dass VIBE Coding ausdrücklich erlaubt ist. dev-setup.sh im Repo-Root richtet Docker, Fork/Upstream-Checkout, lokale Container und optional die E2E-Testinfrastruktur ein. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
123 lines
5 KiB
Bash
Executable file
123 lines
5 KiB
Bash
Executable file
#!/usr/bin/env bash
|
||
#
|
||
# Richtet eine lokale Entwicklungsumgebung für den Finanzmanager ein:
|
||
# Docker (optional), Zielverzeichnis mit den Git-Remotes (origin = eigener
|
||
# Fork, upstream = fds2610/Finanzmanager), lokale Container und optional die
|
||
# Infrastruktur für die E2E-Tests. Auf dem Host wird sonst nichts installiert
|
||
# – PHP, Composer und MariaDB laufen ausschließlich in Containern.
|
||
#
|
||
# Beliebig oft erneut ausführbar.
|
||
#
|
||
# ./dev-setup.sh [Optionen]
|
||
#
|
||
# Optionen (mit Default, alles auch als Umgebungsvariable setzbar):
|
||
# --verzeichnis PFAD Zielverzeichnis für den Checkout
|
||
# (WORKDIR, Default: ~/projects/Finanzmanager)
|
||
# --fork ACCOUNT Codeberg-Account des eigenen Forks (FORK_ACCOUNT)
|
||
# --kein-e2e E2E-Testsetup nicht mit einrichten (E2E_SETUP=nein)
|
||
# --keine-docker-installation
|
||
# Docker nicht installieren, auch wenn es fehlt
|
||
# (DOCKER_INSTALL=nein)
|
||
# -h, --help Diese Hilfe anzeigen
|
||
#
|
||
# Beispiel:
|
||
# ./dev-setup.sh --verzeichnis ~/code/Finanzmanager --fork meinaccount
|
||
|
||
set -euo pipefail
|
||
|
||
WORKDIR="${WORKDIR:-$HOME/projects/Finanzmanager}"
|
||
FORK_ACCOUNT="${FORK_ACCOUNT:-}"
|
||
E2E_SETUP="${E2E_SETUP:-ja}"
|
||
DOCKER_INSTALL="${DOCKER_INSTALL:-ja}"
|
||
UPSTREAM_URL="https://codeberg.org/fds2610/Finanzmanager.git"
|
||
|
||
melde() { printf '\n\033[1m▸ %s\033[0m\n' "$1"; }
|
||
|
||
hilfe() {
|
||
sed -n '2,25p' "${BASH_SOURCE[0]}" | sed 's/^# \{0,1\}//'
|
||
}
|
||
|
||
while [ $# -gt 0 ]; do
|
||
case "$1" in
|
||
--verzeichnis) WORKDIR="$2"; shift 2 ;;
|
||
--fork) FORK_ACCOUNT="$2"; shift 2 ;;
|
||
--kein-e2e) E2E_SETUP=nein; shift ;;
|
||
--keine-docker-installation) DOCKER_INSTALL=nein; shift ;;
|
||
-h|--help) hilfe; exit 0 ;;
|
||
*) echo "Unbekannte Option: $1" >&2; hilfe; exit 1 ;;
|
||
esac
|
||
done
|
||
|
||
# ── 0. Docker und Git ────────────────────────────────────────────────────────
|
||
melde "Voraussetzungen prüfen"
|
||
|
||
if ! command -v git >/dev/null 2>&1; then
|
||
echo "Git fehlt und muss manuell installiert werden (siehe Distribution)." >&2
|
||
exit 1
|
||
fi
|
||
|
||
if ! docker compose version >/dev/null 2>&1; then
|
||
if [ "$DOCKER_INSTALL" = "ja" ]; then
|
||
echo "Docker/Compose-Plugin fehlt – Installation über get.docker.com."
|
||
curl -fsSL https://get.docker.com | sh
|
||
echo "Ggf. den aktuellen Benutzer zur Gruppe 'docker' hinzufügen und neu anmelden:"
|
||
echo " sudo usermod -aG docker \$USER"
|
||
else
|
||
echo "Docker/Compose-Plugin fehlt und --keine-docker-installation ist gesetzt." >&2
|
||
exit 1
|
||
fi
|
||
else
|
||
echo "Docker vorhanden: $(docker compose version --short 2>/dev/null || echo ok)"
|
||
fi
|
||
|
||
# ── 1. Checkout mit Fork- und Upstream-Remote ───────────────────────────────
|
||
melde "Repository unter $WORKDIR"
|
||
|
||
if [ -d "$WORKDIR/.git" ]; then
|
||
echo "Vorhanden – kein erneuter Checkout."
|
||
else
|
||
if [ -z "$FORK_ACCOUNT" ]; then
|
||
echo "Kein --fork angegeben: Checkout direkt aus dem Upstream-Repository."
|
||
echo "Für einen eigenen Beitrag vorher auf Codeberg forken und mit"
|
||
echo "'--fork <eigener-account>' erneut ausführen."
|
||
git clone "$UPSTREAM_URL" "$WORKDIR"
|
||
else
|
||
git clone "https://codeberg.org/$FORK_ACCOUNT/Finanzmanager.git" "$WORKDIR"
|
||
fi
|
||
fi
|
||
|
||
cd "$WORKDIR"
|
||
git remote get-url upstream >/dev/null 2>&1 || git remote add upstream "$UPSTREAM_URL"
|
||
git fetch upstream --quiet || true
|
||
|
||
# ── 2. Lokale Container ─────────────────────────────────────────────────────
|
||
melde "Container starten"
|
||
|
||
[ -f .env ] || cp .env.example .env
|
||
docker compose up -d
|
||
|
||
melde "Migrationen"
|
||
docker compose exec -T php php scripts/migrate.php
|
||
|
||
echo "Anwendung erreichbar unter http://localhost:8000"
|
||
|
||
# ── 3. E2E-Testsetup (optional) ─────────────────────────────────────────────
|
||
if [ "$E2E_SETUP" = "ja" ]; then
|
||
melde "E2E-Testnutzer"
|
||
docker compose exec -u www-data -T php php scripts/e2e-benutzer.php || true
|
||
echo "E2E-Tests laufen über ein separates Runner-Projekt unter"
|
||
echo "~/projects/e2e-runner (nicht Teil dieses Repos). Fehlt es, überspringt"
|
||
echo "tests/e2e/run.sh die Tests automatisch mit einer Warnung."
|
||
echo "Details: tests/e2e/README.md"
|
||
else
|
||
echo "E2E-Setup übersprungen (--kein-e2e)."
|
||
fi
|
||
|
||
# ── 4. Claude Code ───────────────────────────────────────────────────────────
|
||
melde "Claude Code"
|
||
echo "Im Verzeichnis '$WORKDIR' starten, z.B. mit: claude"
|
||
echo "Die Betriebs- und Coding-Regeln stehen in CLAUDE.md und werden automatisch"
|
||
echo "gelesen. Für weitergehende Automatisierung ohne Rückfragen die eigene"
|
||
echo ".claude/settings.json anpassen (persönliche Entscheidung, nicht Teil des Repos)."
|
||
|
||
melde "Fertig"
|