117 lines
4.4 KiB
Makefile
117 lines
4.4 KiB
Makefile
# Extension: make install | make update
|
|
# Server: make dev (lokal, Port $(PORT)) | make prod (auf dem Server) | make stop | make logs | make down | make test
|
|
# Android: make apk (bauen) | make apk-install (aufs Handy per USB)
|
|
UUID = desktop@marha.de
|
|
SRC = $(CURDIR)/$(UUID)
|
|
DEST = $(HOME)/.local/share/gnome-shell/extensions/$(UUID)
|
|
VENV = backend/.venv
|
|
PORT ?= 8040
|
|
SYNC_URL = https://planer.marha.de
|
|
SYNC_JSON = $(HOME)/.local/share/desktop-app/sync.json
|
|
|
|
.ONESHELL:
|
|
.PHONY: install update enable sync-config reload venv dev prod stop logs down test apk apk-install
|
|
|
|
install:
|
|
@if [ -e "$(DEST)" ]; then
|
|
echo "Schon installiert: $(DEST)"
|
|
echo "Zum Aktualisieren: make update"
|
|
exit 0
|
|
fi
|
|
mkdir -p "$(dir $(DEST))"
|
|
cp -r "$(SRC)" "$(DEST)"
|
|
$(MAKE) --no-print-directory enable sync-config
|
|
echo "Installiert. Jetzt ab- und wieder anmelden."
|
|
|
|
update:
|
|
@if [ ! -e "$(DEST)" ]; then
|
|
echo "Nicht installiert. Zuerst: make install"
|
|
exit 1
|
|
fi
|
|
if [ -L "$(DEST)" ]; then
|
|
echo "$(DEST) ist ein Symlink auf $(SRC), nichts zu kopieren."
|
|
else
|
|
rm -rf "$(DEST)"
|
|
cp -r "$(SRC)" "$(DEST)"
|
|
echo "Aktualisiert."
|
|
fi
|
|
$(MAKE) --no-print-directory sync-config reload
|
|
echo "Neuer Code wirkt nach dem nächsten Ab- und Anmelden."
|
|
|
|
# UUID in die aktiven Extensions eintragen, falls sie fehlt
|
|
enable:
|
|
@python3 dev/enable.py "$(UUID)"
|
|
|
|
# sync.json aus der .env anlegen, falls sie fehlt. Ohne .env bleibt die Extension rein lokal.
|
|
sync-config:
|
|
@if [ -f "$(SYNC_JSON)" ]; then
|
|
echo "Sync-Zugang vorhanden: $(SYNC_JSON)"
|
|
elif [ -f .env ] && grep -q "^SYNC_TOKEN=.\+" .env; then
|
|
mkdir -p "$(dir $(SYNC_JSON))"
|
|
printf '{"url": "$(SYNC_URL)", "token": "%s"}\n' "$$(grep ^SYNC_TOKEN= .env | cut -d= -f2-)" > "$(SYNC_JSON)"
|
|
chmod 600 "$(SYNC_JSON)"
|
|
echo "Sync-Zugang angelegt: $(SYNC_JSON)"
|
|
else
|
|
echo "Kein Sync-Zugang: .env mit SYNC_TOKEN fehlt. Extension läuft lokal."
|
|
fi
|
|
|
|
# Extension aus- und einschalten, damit sie sync.json neu liest. Geht nur in einer laufenden Session.
|
|
reload:
|
|
@if gnome-extensions info $(UUID) 2>/dev/null | grep -q "ACTIVE"; then
|
|
gnome-extensions disable $(UUID) && gnome-extensions enable $(UUID)
|
|
echo "Extension neu gestartet."
|
|
fi
|
|
|
|
# ── Server ───────────────────────────────────────────────────────────────────
|
|
venv: $(VENV)/bin/uvicorn
|
|
|
|
$(VENV)/bin/uvicorn: backend/requirements.txt
|
|
python3 -m venv $(VENV)
|
|
$(VENV)/bin/pip install -q -r backend/requirements.txt
|
|
|
|
# Lokal entwickeln. Token kommt aus .env (Vorlage: .env.example).
|
|
dev: venv
|
|
@[ -f .env ] || { echo ".env fehlt. Vorlage: cp .env.example .env, dann SYNC_TOKEN setzen."; exit 1; }
|
|
set -a; . ./.env; set +a
|
|
echo "Server: http://localhost:$(PORT)"
|
|
cd backend && .venv/bin/uvicorn app.main:app --reload --port $(PORT)
|
|
|
|
# Produktion (auf dem Server ausführen, im Projektverzeichnis)
|
|
prod:
|
|
@[ -f .env ] || { echo ".env fehlt. Vorlage: cp .env.example .env, dann SYNC_TOKEN setzen."; exit 1; }
|
|
docker compose up -d --build
|
|
echo "läuft: https://planer.marha.de"
|
|
|
|
# [u] statt u: so trifft das Muster nicht die eigene Shell, die es im Aufruf trägt
|
|
stop:
|
|
-pkill -f "$(CURDIR)/$(VENV)/bin/python3 .venv/bin/[u]vicorn" 2>/dev/null
|
|
echo "gestoppt."
|
|
|
|
logs:
|
|
docker compose logs -f
|
|
|
|
down:
|
|
docker compose down
|
|
|
|
test: venv
|
|
cd backend && .venv/bin/python -m pytest -q
|
|
|
|
# ── Android ──────────────────────────────────────────────────────────────────
|
|
APK = android/app/build/outputs/apk/debug/app-debug.apk
|
|
|
|
# Werkzeuge nach ~/Android holen (einmalig, ohne Root), dann bauen
|
|
apk:
|
|
@grep -q "^SYNC_TOKEN=.\+" .env 2>/dev/null || echo "Hinweis: .env ohne SYNC_TOKEN, der Zugang muss dann in der App eingetragen werden."
|
|
[ -x "$$HOME/Android/jdk17/bin/java" ] || android/dev/setup.sh
|
|
. android/dev/env.sh
|
|
cd android && gradle assembleDebug -q
|
|
echo "APK: $(APK)"
|
|
|
|
# Aufs per USB verbundene Handy (Entwickleroptionen, USB-Debugging, Dialog am Handy bestätigen)
|
|
apk-install: apk
|
|
@. android/dev/env.sh
|
|
PHONE=$$(adb devices | awk 'NR>1 && $$2=="device" && $$1 !~ /^emulator/ {print $$1}' | head -1)
|
|
[ -n "$$PHONE" ] || { echo "Kein Handy gefunden. adb devices zeigt:"; adb devices; exit 1; }
|
|
adb -s "$$PHONE" install -r "$(APK)"
|
|
echo "Installiert auf $$PHONE. Server-Zugang aus .env ist eingebaut."
|