From ba91f83722cf3a1d42277152f89e2b4230e63188 Mon Sep 17 00:00:00 2001 From: mboehmlaender Date: Sat, 14 Mar 2026 08:07:49 +0000 Subject: [PATCH] 0.9.0-1 Version Check --- .gitignore | 5 +- backend/package-lock.json | 4 +- backend/package.json | 2 +- frontend/package-lock.json | 4 +- frontend/package.json | 2 +- frontend/src/App.jsx | 8 +- frontend/src/styles/app.css | 26 ++++++ frontend/vite.config.js | 5 ++ gitea_setup.sh | 152 ++++++++++++++++++++++++++++++++++++ package-lock.json | 4 +- package.json | 5 +- 11 files changed, 205 insertions(+), 12 deletions(-) create mode 100755 gitea_setup.sh diff --git a/.gitignore b/.gitignore index bfcb278..0da1aab 100644 --- a/.gitignore +++ b/.gitignore @@ -80,4 +80,7 @@ Thumbs.db # Scripts # ---------------------------- deploy-ripster.sh -build-handbrake-nvdec.sh \ No newline at end of file +build-handbrake-nvdec.sh +gitea-setup.sh +gitea_install.sh +/scripts/ diff --git a/backend/package-lock.json b/backend/package-lock.json index 9578e5e..4d24aab 100644 --- a/backend/package-lock.json +++ b/backend/package-lock.json @@ -1,12 +1,12 @@ { "name": "ripster-backend", - "version": "1.0.0", + "version": "0.9.0-1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "ripster-backend", - "version": "1.0.0", + "version": "0.9.0-1", "dependencies": { "cors": "^2.8.5", "dotenv": "^16.4.7", diff --git a/backend/package.json b/backend/package.json index 59c56e9..b127d8d 100644 --- a/backend/package.json +++ b/backend/package.json @@ -1,6 +1,6 @@ { "name": "ripster-backend", - "version": "1.0.0", + "version": "0.9.0-1", "private": true, "type": "commonjs", "scripts": { diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 55a434d..e34ced8 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -1,12 +1,12 @@ { "name": "ripster-frontend", - "version": "1.0.0", + "version": "0.9.0-1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "ripster-frontend", - "version": "1.0.0", + "version": "0.9.0-1", "dependencies": { "primeicons": "^7.0.0", "primereact": "^10.9.2", diff --git a/frontend/package.json b/frontend/package.json index 4e673c1..3c73d16 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,6 +1,6 @@ { "name": "ripster-frontend", - "version": "1.0.0", + "version": "0.9.0-1", "private": true, "type": "module", "scripts": { diff --git a/frontend/src/App.jsx b/frontend/src/App.jsx index 5ce7702..c9366b1 100644 --- a/frontend/src/App.jsx +++ b/frontend/src/App.jsx @@ -9,6 +9,7 @@ import HistoryPage from './pages/HistoryPage'; import DatabasePage from './pages/DatabasePage'; function App() { + const appVersion = __APP_VERSION__; const [pipeline, setPipeline] = useState({ state: 'IDLE', progress: 0, context: {} }); const [hardwareMonitoring, setHardwareMonitoring] = useState(null); const [lastDiscEvent, setLastDiscEvent] = useState(null); @@ -115,7 +116,12 @@ function App() { Ripster Logo

Ripster

-

Disc Ripping Control Center

+
+

Disc Ripping Control Center

+ + v{appVersion} + +
diff --git a/frontend/src/styles/app.css b/frontend/src/styles/app.css index f3da2f4..8ec7762 100644 --- a/frontend/src/styles/app.css +++ b/frontend/src/styles/app.css @@ -142,6 +142,28 @@ body { letter-spacing: 0.02em; } +.brand-meta { + display: flex; + flex-wrap: wrap; + align-items: center; + gap: 0.45rem; +} + +.app-version { + display: inline-flex; + align-items: center; + min-height: 1.35rem; + padding: 0.1rem 0.45rem; + border: 1px solid rgba(58, 29, 18, 0.18); + border-radius: 999px; + background: rgba(255, 250, 240, 0.45); + color: rgba(58, 29, 18, 0.72); + font-size: 0.72rem; + font-weight: 600; + letter-spacing: 0.03em; + white-space: nowrap; +} + .nav-buttons { display: flex; gap: 0.5rem; @@ -2530,6 +2552,10 @@ body { font-size: 0.82rem; } + .app-version { + font-size: 0.68rem; + } + .metadata-grid, .device-meta, .hardware-monitor-grid, diff --git a/frontend/vite.config.js b/frontend/vite.config.js index 10fe1b4..6d46048 100644 --- a/frontend/vite.config.js +++ b/frontend/vite.config.js @@ -1,6 +1,8 @@ +import { readFileSync } from 'node:fs'; import { defineConfig } from 'vite'; import react from '@vitejs/plugin-react'; +const appPackage = JSON.parse(readFileSync(new URL('../package.json', import.meta.url), 'utf8')); const publicOrigin = (process.env.VITE_PUBLIC_ORIGIN || '').trim(); const parsedAllowedHosts = (process.env.VITE_ALLOWED_HOSTS || '') .split(',') @@ -24,6 +26,9 @@ if (publicOrigin) { export default defineConfig({ plugins: [react()], + define: { + __APP_VERSION__: JSON.stringify(appPackage.version) + }, server: { host: '0.0.0.0', port: 5173, diff --git a/gitea_setup.sh b/gitea_setup.sh new file mode 100755 index 0000000..a0ef667 --- /dev/null +++ b/gitea_setup.sh @@ -0,0 +1,152 @@ +#!/usr/bin/env bash +set -euo pipefail + +GITEA_BASE="https://git.d-razz.de" +REPO_OWNER="michael" +REPO_NAME="ripster" +BRANCHES_API_URL="${GITEA_BASE}/api/v1/repos/${REPO_OWNER}/${REPO_NAME}/branches?limit=50" + +usage() { + cat <<'EOF' +Verwendung: + bash setup.sh [Optionen] + +Optionen (wie install.sh): + --branch Branch direkt setzen (ohne Auswahlmenue) + --dir Installationsverzeichnis + --user Systembenutzer fuer den Dienst + --port Backend-Port + --host Hostname/IP fuer die Weboberflaeche + --no-makemkv MakeMKV-Installation ueberspringen + --no-handbrake HandBrake-Installation ueberspringen + --no-nginx Nginx-Einrichtung ueberspringen + --reinstall Vorhandene Installation aktualisieren + -h, --help Hilfe anzeigen +EOF +} + +SELECTED_BRANCH="" +FORWARDED_ARGS=() + +while [[ $# -gt 0 ]]; do + case "$1" in + --branch) + [[ $# -ge 2 ]] || { echo "Fehlender Wert fuer --branch" >&2; exit 1; } + SELECTED_BRANCH="$2" + shift 2 + ;; + --dir|--user|--port|--host) + [[ $# -ge 2 ]] || { echo "Fehlender Wert fuer $1" >&2; exit 1; } + FORWARDED_ARGS+=("$1" "$2") + shift 2 + ;; + --no-makemkv|--no-handbrake|--no-nginx|--reinstall) + FORWARDED_ARGS+=("$1") + shift + ;; + -h|--help) + usage + exit 0 + ;; + *) + echo "Unbekannter Parameter: $1" >&2 + usage >&2 + exit 1 + ;; + esac +done + +fetch_url() { + local url="$1" + + if command -v curl >/dev/null 2>&1; then + curl -fsSL "$url" + return + fi + + if command -v wget >/dev/null 2>&1; then + wget -qO- "$url" + return + fi + + echo "Weder curl noch wget gefunden. Bitte eines davon installieren." >&2 + exit 1 +} + +download_file() { + local url="$1" + local target="$2" + fetch_url "$url" > "$target" +} + +select_branch() { + local branches_json + local -a branches + local selection + + branches_json="$(fetch_url "$BRANCHES_API_URL")" + mapfile -t branches < <( + printf '%s\n' "$branches_json" \ + | grep -oE '"name"[[:space:]]*:[[:space:]]*"[^"]+"' \ + | sed -E 's/"name"[[:space:]]*:[[:space:]]*"([^"]+)"/\1/' + ) + + if [[ ${#branches[@]} -eq 0 ]]; then + echo "Keine Branches gefunden oder API-Antwort ungültig." >&2 + exit 1 + fi + + if [[ -n "$SELECTED_BRANCH" ]]; then + local found=false + for branch in "${branches[@]}"; do + if [[ "$branch" == "$SELECTED_BRANCH" ]]; then + found=true + break + fi + done + if [[ "$found" == false ]]; then + echo "Branch '$SELECTED_BRANCH' nicht gefunden." >&2 + exit 1 + fi + return + fi + + if [[ ! -t 0 ]]; then + echo "Kein interaktives Terminal für die Branch-Auswahl verfügbar." >&2 + exit 1 + fi + + echo "Verfügbare Branches:" + for i in "${!branches[@]}"; do + printf " %2d) %s\n" "$((i + 1))" "${branches[$i]}" + done + + while true; do + read -r -p "Bitte Branch auswählen [1-${#branches[@]}]: " selection + if [[ "$selection" =~ ^[0-9]+$ ]] && (( selection >= 1 && selection <= ${#branches[@]} )); then + SELECTED_BRANCH="${branches[$((selection - 1))]}" + return + fi + echo "Ungültige Auswahl." + done +} + +select_branch + +SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd -P)" +INSTALL_SCRIPT="${SCRIPT_DIR}/gitea_install.sh" + +if [[ ! -f "$INSTALL_SCRIPT" ]]; then + echo "gitea_install.sh nicht gefunden in $SCRIPT_DIR" >&2 + exit 1 +fi + +if [[ $EUID -eq 0 ]]; then + bash "$INSTALL_SCRIPT" --branch "$SELECTED_BRANCH" "${FORWARDED_ARGS[@]}" +else + if ! command -v sudo >/dev/null 2>&1; then + echo "sudo nicht gefunden. Bitte als root ausführen." >&2 + exit 1 + fi + sudo bash "$INSTALL_SCRIPT" --branch "$SELECTED_BRANCH" "${FORWARDED_ARGS[@]}" +fi diff --git a/package-lock.json b/package-lock.json index b76bd25..b0e4215 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "ripster", - "version": "1.0.0", + "version": "0.9.0-1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "ripster", - "version": "1.0.0", + "version": "0.9.0-1", "devDependencies": { "concurrently": "^9.1.2" } diff --git a/package.json b/package.json index b1d917b..aea8bc8 100644 --- a/package.json +++ b/package.json @@ -1,13 +1,14 @@ { "name": "ripster", "private": true, - "version": "1.0.0", + "version": "0.9.0-1", "scripts": { "dev": "concurrently \"npm run dev --prefix backend\" \"npm run dev --prefix frontend\"", "dev:backend": "npm run dev --prefix backend", "dev:frontend": "npm run dev --prefix frontend", "start": "npm run start --prefix backend", - "build:frontend": "npm run build --prefix frontend" + "build:frontend": "npm run build --prefix frontend", + "release:interactive": "bash ./scripts/release.sh" }, "devDependencies": { "concurrently": "^9.1.2"