diff --git a/DEBUG_VERSION.md b/DEBUG_VERSION.md new file mode 100644 index 0000000..618addf --- /dev/null +++ b/DEBUG_VERSION.md @@ -0,0 +1,185 @@ +# Debug Version Display - Remote Server Checklist + +## 1. Überprüfe Git-Tags auf dem Remote-Server + +```bash +# Im Projekt-Verzeichnis auf dem Remote-Server +cd /path/to/hoerdle + +# Zeige alle Tags +git tag -l + +# Zeige aktuellen Tag/Version +git describe --tags --always + +# Wenn keine Tags angezeigt werden: +git fetch --tags +git describe --tags --always +``` + +**Erwartetes Ergebnis:** Sollte `v0.1.0.2` oder ähnlich zeigen + +--- + +## 2. Überprüfe die version.txt im Container + +```bash +# Zeige den Inhalt der Version-Datei im laufenden Container +docker exec hoerdle cat /app/version.txt + +# Sollte die Version zeigen, z.B. "v0.1.0.2" +``` + +**Erwartetes Ergebnis:** Die aktuelle Version, nicht "unknown" oder "dev" + +--- + +## 3. Überprüfe die Umgebungsvariable im Container + +```bash +# Zeige alle Umgebungsvariablen +docker exec hoerdle env | grep APP_VERSION + +# Sollte APP_VERSION=v0.1.0.2 oder ähnlich zeigen +``` + +**Erwartetes Ergebnis:** `APP_VERSION=v0.1.0.2` + +--- + +## 4. Überprüfe die Container-Logs beim Start + +```bash +# Zeige die letzten Logs beim Container-Start +docker logs hoerdle | head -20 + +# Suche speziell nach Version-Ausgaben +docker logs hoerdle | grep -i version +``` + +**Erwartetes Ergebnis:** Eine Zeile wie "App version: v0.1.0.2" + +--- + +## 5. Teste die API direkt + +```bash +# Rufe die Version-API auf +curl http://localhost:3010/api/version + +# Sollte JSON zurückgeben: {"version":"v0.1.0.2"} +``` + +**Erwartetes Ergebnis:** `{"version":"v0.1.0.2"}` + +--- + +## 6. Überprüfe wann der Container gebaut wurde + +```bash +# Zeige Image-Informationen +docker images | grep hoerdle + +# Zeige detaillierte Container-Informationen +docker inspect hoerdle | grep -i created +``` + +**Wichtig:** Wenn das Image vor deinem letzten Deployment erstellt wurde, wurde es noch nicht neu gebaut! + +--- + +## 7. Überprüfe Build-Logs + +```bash +# Baue das Image neu und beobachte die Ausgabe +docker compose build --no-cache 2>&1 | tee build.log + +# Suche nach der Version-Ausgabe im Build +grep -i "Building version" build.log +``` + +**Erwartetes Ergebnis:** Eine Zeile wie "Building version: v0.1.0.2" + +--- + +## Häufige Probleme und Lösungen + +### Problem 1: Tags nicht auf dem Server +```bash +git fetch --tags +git describe --tags --always +``` + +### Problem 2: Container wurde nicht neu gebaut +```bash +docker compose build --no-cache +docker compose up -d +``` + +### Problem 3: Alte version.txt im Container +```bash +# Stoppe Container, lösche Image, baue neu +docker compose down +docker rmi $(docker images | grep hoerdle | awk '{print $3}') +docker compose build --no-cache +docker compose up -d +``` + +### Problem 4: .git Verzeichnis nicht im Build-Context +```bash +# Überprüfe ob .git existiert +ls -la .git + +# Überprüfe .dockerignore (sollte .git NICHT ausschließen) +cat .dockerignore 2>/dev/null || echo "Keine .dockerignore Datei" +``` + +--- + +## Vollständiger Neustart (wenn nichts anderes hilft) + +```bash +# 1. Stoppe alles +docker compose down + +# 2. Lösche alte Images +docker rmi $(docker images | grep hoerdle | awk '{print $3}') + +# 3. Hole neueste Änderungen und Tags +git pull +git fetch --tags + +# 4. Überprüfe Version lokal +git describe --tags --always + +# 5. Baue komplett neu +docker compose build --no-cache + +# 6. Starte Container +docker compose up -d + +# 7. Überprüfe Logs +docker logs hoerdle | grep -i version + +# 8. Teste API +curl http://localhost:3010/api/version +``` + +--- + +## Debugging-Befehl für alle Checks auf einmal + +```bash +echo "=== Git Tags ===" && \ +git describe --tags --always && \ +echo -e "\n=== version.txt im Container ===" && \ +docker exec hoerdle cat /app/version.txt 2>/dev/null || echo "Container läuft nicht oder Datei fehlt" && \ +echo -e "\n=== APP_VERSION Env ===" && \ +docker exec hoerdle env | grep APP_VERSION || echo "Variable nicht gesetzt" && \ +echo -e "\n=== API Response ===" && \ +curl -s http://localhost:3010/api/version && \ +echo -e "\n\n=== Container Created ===" && \ +docker inspect hoerdle | grep -i created | head -1 +``` + +Kopiere diesen Befehl und führe ihn auf dem Remote-Server aus. Schicke mir die Ausgabe! diff --git a/app/api/version/route.ts b/app/api/version/route.ts index 2f39f9b..3c7c710 100644 --- a/app/api/version/route.ts +++ b/app/api/version/route.ts @@ -1,14 +1,32 @@ import { NextResponse } from 'next/server'; import { execSync } from 'child_process'; +import { readFileSync, existsSync } from 'fs'; +import { join } from 'path'; export async function GET() { try { - // First check if version is set via environment variable (Docker build) + // First check if version file exists (Docker deployment) + // Try both /app/version.txt (Docker) and ./version.txt (local) + const versionPaths = [ + '/app/version.txt', + join(process.cwd(), 'version.txt') + ]; + + for (const versionFilePath of versionPaths) { + if (existsSync(versionFilePath)) { + const version = readFileSync(versionFilePath, 'utf-8').trim(); + if (version && version !== 'unknown') { + return NextResponse.json({ version }); + } + } + } + + // Fallback: check environment variable if (process.env.APP_VERSION) { return NextResponse.json({ version: process.env.APP_VERSION }); } - // Try to get the git tag/version + // Fallback: try to get from git (local development) let version = 'dev'; try {