0.9.0-1 Version Check
This commit is contained in:
3
.gitignore
vendored
3
.gitignore
vendored
@@ -81,3 +81,6 @@ Thumbs.db
|
|||||||
# ----------------------------
|
# ----------------------------
|
||||||
deploy-ripster.sh
|
deploy-ripster.sh
|
||||||
build-handbrake-nvdec.sh
|
build-handbrake-nvdec.sh
|
||||||
|
gitea-setup.sh
|
||||||
|
gitea_install.sh
|
||||||
|
/scripts/
|
||||||
|
|||||||
4
backend/package-lock.json
generated
4
backend/package-lock.json
generated
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "ripster-backend",
|
"name": "ripster-backend",
|
||||||
"version": "1.0.0",
|
"version": "0.9.0-1",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "ripster-backend",
|
"name": "ripster-backend",
|
||||||
"version": "1.0.0",
|
"version": "0.9.0-1",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"cors": "^2.8.5",
|
"cors": "^2.8.5",
|
||||||
"dotenv": "^16.4.7",
|
"dotenv": "^16.4.7",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "ripster-backend",
|
"name": "ripster-backend",
|
||||||
"version": "1.0.0",
|
"version": "0.9.0-1",
|
||||||
"private": true,
|
"private": true,
|
||||||
"type": "commonjs",
|
"type": "commonjs",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
|||||||
4
frontend/package-lock.json
generated
4
frontend/package-lock.json
generated
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "ripster-frontend",
|
"name": "ripster-frontend",
|
||||||
"version": "1.0.0",
|
"version": "0.9.0-1",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "ripster-frontend",
|
"name": "ripster-frontend",
|
||||||
"version": "1.0.0",
|
"version": "0.9.0-1",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"primeicons": "^7.0.0",
|
"primeicons": "^7.0.0",
|
||||||
"primereact": "^10.9.2",
|
"primereact": "^10.9.2",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "ripster-frontend",
|
"name": "ripster-frontend",
|
||||||
"version": "1.0.0",
|
"version": "0.9.0-1",
|
||||||
"private": true,
|
"private": true,
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ import HistoryPage from './pages/HistoryPage';
|
|||||||
import DatabasePage from './pages/DatabasePage';
|
import DatabasePage from './pages/DatabasePage';
|
||||||
|
|
||||||
function App() {
|
function App() {
|
||||||
|
const appVersion = __APP_VERSION__;
|
||||||
const [pipeline, setPipeline] = useState({ state: 'IDLE', progress: 0, context: {} });
|
const [pipeline, setPipeline] = useState({ state: 'IDLE', progress: 0, context: {} });
|
||||||
const [hardwareMonitoring, setHardwareMonitoring] = useState(null);
|
const [hardwareMonitoring, setHardwareMonitoring] = useState(null);
|
||||||
const [lastDiscEvent, setLastDiscEvent] = useState(null);
|
const [lastDiscEvent, setLastDiscEvent] = useState(null);
|
||||||
@@ -115,7 +116,12 @@ function App() {
|
|||||||
<img src="/logo.png" alt="Ripster Logo" className="brand-logo" />
|
<img src="/logo.png" alt="Ripster Logo" className="brand-logo" />
|
||||||
<div className="brand-copy">
|
<div className="brand-copy">
|
||||||
<h1>Ripster</h1>
|
<h1>Ripster</h1>
|
||||||
|
<div className="brand-meta">
|
||||||
<p>Disc Ripping Control Center</p>
|
<p>Disc Ripping Control Center</p>
|
||||||
|
<span className="app-version" aria-label={`Version ${appVersion}`}>
|
||||||
|
v{appVersion}
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div className="nav-buttons">
|
<div className="nav-buttons">
|
||||||
|
|||||||
@@ -142,6 +142,28 @@ body {
|
|||||||
letter-spacing: 0.02em;
|
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 {
|
.nav-buttons {
|
||||||
display: flex;
|
display: flex;
|
||||||
gap: 0.5rem;
|
gap: 0.5rem;
|
||||||
@@ -2530,6 +2552,10 @@ body {
|
|||||||
font-size: 0.82rem;
|
font-size: 0.82rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.app-version {
|
||||||
|
font-size: 0.68rem;
|
||||||
|
}
|
||||||
|
|
||||||
.metadata-grid,
|
.metadata-grid,
|
||||||
.device-meta,
|
.device-meta,
|
||||||
.hardware-monitor-grid,
|
.hardware-monitor-grid,
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
|
import { readFileSync } from 'node:fs';
|
||||||
import { defineConfig } from 'vite';
|
import { defineConfig } from 'vite';
|
||||||
import react from '@vitejs/plugin-react';
|
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 publicOrigin = (process.env.VITE_PUBLIC_ORIGIN || '').trim();
|
||||||
const parsedAllowedHosts = (process.env.VITE_ALLOWED_HOSTS || '')
|
const parsedAllowedHosts = (process.env.VITE_ALLOWED_HOSTS || '')
|
||||||
.split(',')
|
.split(',')
|
||||||
@@ -24,6 +26,9 @@ if (publicOrigin) {
|
|||||||
|
|
||||||
export default defineConfig({
|
export default defineConfig({
|
||||||
plugins: [react()],
|
plugins: [react()],
|
||||||
|
define: {
|
||||||
|
__APP_VERSION__: JSON.stringify(appPackage.version)
|
||||||
|
},
|
||||||
server: {
|
server: {
|
||||||
host: '0.0.0.0',
|
host: '0.0.0.0',
|
||||||
port: 5173,
|
port: 5173,
|
||||||
|
|||||||
152
gitea_setup.sh
Executable file
152
gitea_setup.sh
Executable file
@@ -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> Branch direkt setzen (ohne Auswahlmenue)
|
||||||
|
--dir <pfad> Installationsverzeichnis
|
||||||
|
--user <benutzer> Systembenutzer fuer den Dienst
|
||||||
|
--port <port> Backend-Port
|
||||||
|
--host <hostname> 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
|
||||||
4
package-lock.json
generated
4
package-lock.json
generated
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "ripster",
|
"name": "ripster",
|
||||||
"version": "1.0.0",
|
"version": "0.9.0-1",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "ripster",
|
"name": "ripster",
|
||||||
"version": "1.0.0",
|
"version": "0.9.0-1",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"concurrently": "^9.1.2"
|
"concurrently": "^9.1.2"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,13 +1,14 @@
|
|||||||
{
|
{
|
||||||
"name": "ripster",
|
"name": "ripster",
|
||||||
"private": true,
|
"private": true,
|
||||||
"version": "1.0.0",
|
"version": "0.9.0-1",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "concurrently \"npm run dev --prefix backend\" \"npm run dev --prefix frontend\"",
|
"dev": "concurrently \"npm run dev --prefix backend\" \"npm run dev --prefix frontend\"",
|
||||||
"dev:backend": "npm run dev --prefix backend",
|
"dev:backend": "npm run dev --prefix backend",
|
||||||
"dev:frontend": "npm run dev --prefix frontend",
|
"dev:frontend": "npm run dev --prefix frontend",
|
||||||
"start": "npm run start --prefix backend",
|
"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": {
|
"devDependencies": {
|
||||||
"concurrently": "^9.1.2"
|
"concurrently": "^9.1.2"
|
||||||
|
|||||||
Reference in New Issue
Block a user