Finanzmanager/dev-setup.sh
fds2610-bot 94e8057d73 Fix #43: CONTRIBUTE.md und Setup-Skript für Mitwirkende
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>
2026-08-19 20:28:10 +02:00

123 lines
5 KiB
Bash
Executable file
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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"