1.0.0-1 Licence

This commit is contained in:
2026-07-02 08:32:25 +02:00
parent e754f1f7c3
commit 428cf951b2
13 changed files with 626 additions and 13 deletions
+2 -1
View File
@@ -83,7 +83,8 @@ Thumbs.db
# ---------------------------- # ----------------------------
# Scripts # Scripts
# ---------------------------- # ----------------------------
/scripts/ /scripts/*
!/scripts/release.sh
/release.sh /release.sh
/Audible_Tool /Audible_Tool
/AddOns /AddOns
+6
View File
@@ -119,6 +119,7 @@ Verfügbare Optionen:
- `--no-nginx` - `--no-nginx`
- `--no-system-deps` - `--no-system-deps`
- `--accept-makemkv-eula` - `--accept-makemkv-eula`
- `--force-license-prompts`
- `--reinstall` - `--reinstall`
- `--help` - `--help`
@@ -135,6 +136,11 @@ Was der Installer typischerweise einrichtet:
> [!NOTE] > [!NOTE]
> Ripster orchestriert mehrere externe Medientools. Diese Tools bleiben ihren eigenen Lizenzen und Nutzungsbedingungen unterworfen. Siehe [`THIRD_PARTY_NOTICES.md`](THIRD_PARTY_NOTICES.md) für Details. > Ripster orchestriert mehrere externe Medientools. Diese Tools bleiben ihren eigenen Lizenzen und Nutzungsbedingungen unterworfen. Siehe [`THIRD_PARTY_NOTICES.md`](THIRD_PARTY_NOTICES.md) für Details.
Mit `--force-license-prompts` werden die MakeMKV-EULA-Abfrage und die
HandBrake-Drittanbieterhinweise auch dann erneut angezeigt, wenn die jeweiligen
Tools bereits installiert sind. `--no-makemkv` und `--no-handbrake` überspringen
weiterhin den jeweils abgewählten Hinweis.
## ♻️ Update ## ♻️ Update
Standard-Update einer bestehenden Installation: Standard-Update einer bestehenden Installation:
+2 -2
View File
@@ -1,12 +1,12 @@
{ {
"name": "ripster-backend", "name": "ripster-backend",
"version": "1.0.0", "version": "1.0.0-1",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "ripster-backend", "name": "ripster-backend",
"version": "1.0.0", "version": "1.0.0-1",
"license": "GPL-2.0-or-later", "license": "GPL-2.0-or-later",
"dependencies": { "dependencies": {
"archiver": "^7.0.1", "archiver": "^7.0.1",
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "ripster-backend", "name": "ripster-backend",
"version": "1.0.0", "version": "1.0.0-1",
"private": true, "private": true,
"license": "GPL-2.0-or-later", "license": "GPL-2.0-or-later",
"repository": { "repository": {
+3
View File
@@ -36,6 +36,9 @@ wget -qO- https://raw.githubusercontent.com/Mboehmlaender/ripster/main/install.s
| `--no-makemkv` | | MakeMKV-Installation überspringen | | `--no-makemkv` | | MakeMKV-Installation überspringen |
| `--no-handbrake` | | HandBrake-Installation überspringen | | `--no-handbrake` | | HandBrake-Installation überspringen |
| `--no-nginx` | | nginx-Einrichtung überspringen | | `--no-nginx` | | nginx-Einrichtung überspringen |
| `--no-system-deps` | | Systemabhängigkeiten nicht nachinstallieren |
| `--accept-makemkv-eula` | | MakeMKV-EULA ausdrücklich nichtinteraktiv akzeptieren |
| `--force-license-prompts` | | Lizenzabfragen auch bei vorhandenen Tools erneut anzeigen |
| `--reinstall` | | Bestehende Installation aktualisieren (Daten bleiben erhalten) | | `--reinstall` | | Bestehende Installation aktualisieren (Daten bleiben erhalten) |
| `-h`, `--help` | | Hilfe anzeigen | | `-h`, `--help` | | Hilfe anzeigen |
+2
View File
@@ -60,6 +60,8 @@ bash setup.sh --branch dev --dir /opt/ripster --user ripster --port 3001 --host
| `--no-handbrake` | aus | HandBrake nicht installieren | | `--no-handbrake` | aus | HandBrake nicht installieren |
| `--no-nginx` | aus | nginx-Setup überspringen | | `--no-nginx` | aus | nginx-Setup überspringen |
| `--no-system-deps` | aus | Systemabhängigkeiten nicht nachinstallieren | | `--no-system-deps` | aus | Systemabhängigkeiten nicht nachinstallieren |
| `--accept-makemkv-eula` | aus | MakeMKV-EULA ausdrücklich nichtinteraktiv akzeptieren |
| `--force-license-prompts` | aus | Lizenzabfragen auch bei vorhandenen Tools erneut anzeigen |
| `--reinstall` | aus | bestehende Installation aktualisieren | | `--reinstall` | aus | bestehende Installation aktualisieren |
## Was der Installer einrichtet ## Was der Installer einrichtet
+2 -2
View File
@@ -1,12 +1,12 @@
{ {
"name": "ripster-frontend", "name": "ripster-frontend",
"version": "1.0.0", "version": "1.0.0-1",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "ripster-frontend", "name": "ripster-frontend",
"version": "1.0.0", "version": "1.0.0-1",
"license": "GPL-2.0-or-later", "license": "GPL-2.0-or-later",
"dependencies": { "dependencies": {
"chart.js": "^4.5.1", "chart.js": "^4.5.1",
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "ripster-frontend", "name": "ripster-frontend",
"version": "1.0.0", "version": "1.0.0-1",
"private": true, "private": true,
"license": "GPL-2.0-or-later", "license": "GPL-2.0-or-later",
"repository": { "repository": {
Regular → Executable
+50 -1
View File
@@ -24,6 +24,8 @@
# --no-nginx Nginx-Einrichtung überspringen # --no-nginx Nginx-Einrichtung überspringen
# --no-system-deps Abschnitt "Systemabhängigkeiten installieren" überspringen # --no-system-deps Abschnitt "Systemabhängigkeiten installieren" überspringen
# --accept-makemkv-eula MakeMKV-Lizenz/EULA bewusst akzeptieren # --accept-makemkv-eula MakeMKV-Lizenz/EULA bewusst akzeptieren
# --force-license-prompts
# Lizenzabfragen auch bei vorhandenen Tools erneut anzeigen
# --reinstall Vorhandene Installation aktualisieren (Daten bleiben erhalten) # --reinstall Vorhandene Installation aktualisieren (Daten bleiben erhalten)
# -h, --help Diese Hilfe anzeigen # -h, --help Diese Hilfe anzeigen
# ============================================================================= # =============================================================================
@@ -59,6 +61,9 @@ HANDBRAKE_INSTALL_MODE=""
SKIP_NGINX=false SKIP_NGINX=false
SKIP_SYSTEM_DEPS=false SKIP_SYSTEM_DEPS=false
ACCEPT_MAKEMKV_EULA=false ACCEPT_MAKEMKV_EULA=false
FORCE_LICENSE_PROMPTS=false
MAKEMKV_EULA_REVIEWED=false
HANDBRAKE_NOTICE_SHOWN=false
REINSTALL=false REINSTALL=false
GIT_COMMAND_TIMEOUT_SEC=180 GIT_COMMAND_TIMEOUT_SEC=180
@@ -84,6 +89,7 @@ while [[ $# -gt 0 ]]; do
--no-nginx) SKIP_NGINX=true; shift ;; --no-nginx) SKIP_NGINX=true; shift ;;
--no-system-deps) SKIP_SYSTEM_DEPS=true; shift ;; --no-system-deps) SKIP_SYSTEM_DEPS=true; shift ;;
--accept-makemkv-eula) ACCEPT_MAKEMKV_EULA=true; shift ;; --accept-makemkv-eula) ACCEPT_MAKEMKV_EULA=true; shift ;;
--force-license-prompts) FORCE_LICENSE_PROMPTS=true; shift ;;
--reinstall) REINSTALL=true; shift ;; --reinstall) REINSTALL=true; shift ;;
-h|--help) -h|--help)
sed -n '/^# Verwendung/,/^# ====/p' "$0" | head -n -1 | sed 's/^# \?//' sed -n '/^# Verwendung/,/^# ====/p' "$0" | head -n -1 | sed 's/^# \?//'
@@ -452,8 +458,13 @@ install_node() {
} }
confirm_makemkv_eula() { confirm_makemkv_eula() {
if [[ "$MAKEMKV_EULA_REVIEWED" == true ]]; then
return 0
fi
if [[ "$ACCEPT_MAKEMKV_EULA" == true ]]; then if [[ "$ACCEPT_MAKEMKV_EULA" == true ]]; then
warn "MakeMKV-EULA wurde per --accept-makemkv-eula ausdrücklich akzeptiert." warn "MakeMKV-EULA wurde per --accept-makemkv-eula ausdrücklich akzeptiert."
MAKEMKV_EULA_REVIEWED=true
return 0 return 0
fi fi
@@ -477,6 +488,25 @@ confirm_makemkv_eula() {
fi fi
ACCEPT_MAKEMKV_EULA=true ACCEPT_MAKEMKV_EULA=true
MAKEMKV_EULA_REVIEWED=true
}
show_handbrake_license_notice() {
if [[ "$HANDBRAKE_NOTICE_SHOWN" == true ]]; then
return 0
fi
echo ""
warn "HandBrakeCLI ist ein eigenständiges Drittanbieterprogramm unter GPL-2.0-only."
warn "Die Ripster-Lizenz ersetzt oder verändert die HandBrake-Lizenz nicht."
if [[ "$HANDBRAKE_INSTALL_MODE" == "gpu" ]]; then
warn "Die gebündelte HandBrakeCLI enthält FDK-AAC-Hinweise."
warn "Ihre Weiterverteilung ist bis zur Klärung oder einem Neuaufbau ohne FDK-AAC ungeklärt."
else
info "Bei der Standardversion gelten die Lizenzhinweise des Distributionspakets."
fi
info "Weitere Details: THIRD_PARTY_NOTICES.md und third_party/handbrake/BUILDINFO.md"
HANDBRAKE_NOTICE_SHOWN=true
} }
install_makemkv() { install_makemkv() {
@@ -777,6 +807,8 @@ install_handbrake() {
HANDBRAKE_INSTALL_MODE="standard" HANDBRAKE_INSTALL_MODE="standard"
fi fi
show_handbrake_license_notice
case "$HANDBRAKE_INSTALL_MODE" in case "$HANDBRAKE_INSTALL_MODE" in
standard) install_handbrake_standard ;; standard) install_handbrake_standard ;;
gpu) install_handbrake_gpu_bundled ;; gpu) install_handbrake_gpu_bundled ;;
@@ -878,10 +910,27 @@ info "Frontend-Host: $FRONTEND_HOST"
info "System-Dependencies: $([[ "$SKIP_SYSTEM_DEPS" == true ]] && echo "überspringen" || echo "installieren")" info "System-Dependencies: $([[ "$SKIP_SYSTEM_DEPS" == true ]] && echo "überspringen" || echo "installieren")"
# --- HandBrake-Installmodus auswählen ---------------------------------------- # --- HandBrake-Installmodus auswählen ----------------------------------------
if [[ "$SKIP_SYSTEM_DEPS" == false ]]; then if [[ "$SKIP_SYSTEM_DEPS" == false || "$FORCE_LICENSE_PROMPTS" == true ]]; then
select_handbrake_mode select_handbrake_mode
fi fi
# --- Lizenzhinweise auf Wunsch unabhängig vom Installationsstatus zeigen -----
if [[ "$FORCE_LICENSE_PROMPTS" == true ]]; then
header "Lizenzabfragen erneut anzeigen"
if [[ "$SKIP_MAKEMKV" == false ]]; then
confirm_makemkv_eula
else
warn "MakeMKV-Lizenzabfrage übersprungen (--no-makemkv)"
fi
if [[ "$SKIP_HANDBRAKE" == false ]]; then
show_handbrake_license_notice
else
warn "HandBrake-Lizenzhinweis übersprungen (--no-handbrake)"
fi
fi
# --- Systemabhängigkeiten ----------------------------------------------------- # --- Systemabhängigkeiten -----------------------------------------------------
if [[ "$SKIP_SYSTEM_DEPS" == true ]]; then if [[ "$SKIP_SYSTEM_DEPS" == true ]]; then
header "Systemabhängigkeiten installieren" header "Systemabhängigkeiten installieren"
+2 -2
View File
@@ -1,12 +1,12 @@
{ {
"name": "ripster", "name": "ripster",
"version": "1.0.0", "version": "1.0.0-1",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "ripster", "name": "ripster",
"version": "1.0.0", "version": "1.0.0-1",
"license": "GPL-2.0-or-later", "license": "GPL-2.0-or-later",
"devDependencies": { "devDependencies": {
"concurrently": "^9.1.2" "concurrently": "^9.1.2"
+1 -1
View File
@@ -1,7 +1,7 @@
{ {
"name": "ripster", "name": "ripster",
"private": true, "private": true,
"version": "1.0.0", "version": "1.0.0-1",
"license": "GPL-2.0-or-later", "license": "GPL-2.0-or-later",
"repository": { "repository": {
"type": "git", "type": "git",
+551
View File
@@ -0,0 +1,551 @@
#!/usr/bin/env bash
# SPDX-License-Identifier: GPL-2.0-or-later
set -euo pipefail
script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
repo_root="$(cd "$script_dir/.." && pwd)"
cd "$repo_root"
require_command() {
if ! command -v "$1" >/dev/null 2>&1; then
echo "Fehlender Befehl: $1"
exit 1
fi
}
PARSED_MAJOR=""
PARSED_MINOR=""
PARSED_PATCH=""
PARSED_BUILD=""
PARSED_SUFFIX=""
friendly_remote_name() {
local remote_name="$1"
local remote_url="$2"
if [[ "$remote_url" == *github.com* ]]; then
printf 'GitHub (%s)' "$remote_name"
return
fi
if [[ "$remote_url" == *git.d-razz.de* ]] || [[ "$remote_name" == "gitea" ]]; then
printf 'Gitea (%s)' "$remote_name"
return
fi
printf '%s' "$remote_name"
}
parse_version() {
local version="$1"
if [[ ! "$version" =~ ^([0-9]+)\.([0-9]+)\.([0-9]+)(-([0-9]+|alpha|beta|rc([.]?[0-9]+)?))?$ ]]; then
echo "Aktuelle Version hat kein unterstuetztes Format: $version"
exit 1
fi
PARSED_MAJOR="${BASH_REMATCH[1]}"
PARSED_MINOR="${BASH_REMATCH[2]}"
PARSED_PATCH="${BASH_REMATCH[3]}"
PARSED_SUFFIX="${BASH_REMATCH[5]:-}"
if [[ "$PARSED_SUFFIX" =~ ^[0-9]+$ ]]; then
PARSED_BUILD="$PARSED_SUFFIX"
else
PARSED_BUILD=""
fi
}
bump_version() {
local version="$1"
local bump_type="$2"
parse_version "$version"
local major="$PARSED_MAJOR"
local minor="$PARSED_MINOR"
local patch="$PARSED_PATCH"
case "$bump_type" in
major)
major=$((major + 1))
minor=0
patch=0
;;
minor)
minor=$((minor + 1))
patch=0
;;
patch)
patch=$((patch + 1))
;;
esac
printf '%s.%s.%s' "$major" "$minor" "$patch"
}
increment_build_version() {
local version="$1"
parse_version "$version"
local build_number=1
if [[ "$PARSED_SUFFIX" =~ ^[0-9]+$ ]]; then
build_number=$((PARSED_SUFFIX + 1))
elif [[ -n "$PARSED_SUFFIX" ]]; then
echo "Build-Bump nicht moeglich fuer Suffix '$PARSED_SUFFIX'."
echo "Unterstuetzt: keine Suffixe oder eine numerische Buildnummer."
exit 1
fi
printf '%s.%s.%s-%s' "$PARSED_MAJOR" "$PARSED_MINOR" "$PARSED_PATCH" "$build_number"
}
can_increment_build_version() {
local version="$1"
parse_version "$version"
[[ -z "$PARSED_SUFFIX" || "$PARSED_SUFFIX" =~ ^[0-9]+$ ]]
}
increment_rc_version() {
local version="$1"
parse_version "$version"
local rc_number=1
if [[ "$PARSED_SUFFIX" =~ ^rc([.]?([0-9]+))?$ ]]; then
if [[ -n "${BASH_REMATCH[2]:-}" ]]; then
rc_number=$((BASH_REMATCH[2] + 1))
fi
elif [[ -n "$PARSED_SUFFIX" ]]; then
echo "RC-Bump nicht moeglich fuer Suffix '$PARSED_SUFFIX'."
echo "Unterstuetzt: keine Suffixe oder -rc<nummer>."
exit 1
fi
printf '%s.%s.%s-rc%s' "$PARSED_MAJOR" "$PARSED_MINOR" "$PARSED_PATCH" "$rc_number"
}
can_increment_rc_version() {
local version="$1"
parse_version "$version"
[[ -z "$PARSED_SUFFIX" || "$PARSED_SUFFIX" =~ ^rc([.]?[0-9]+)?$ ]]
}
remove_rc_suffix() {
local version="$1"
parse_version "$version"
if [[ ! "$PARSED_SUFFIX" =~ ^rc([.]?[0-9]+)?$ ]]; then
echo "RC-Suffix kann nur von Versionen mit -rc entfernt werden."
echo "Aktuelle Version: $version"
exit 1
fi
printf '%s.%s.%s' "$PARSED_MAJOR" "$PARSED_MINOR" "$PARSED_PATCH"
}
select_release_variant() {
local base_version="$1"
local choice=""
local rc_number=""
echo "Release-Typ waehlen:"
echo " 1) Final -> $base_version"
echo " 2) Release Candidate -> ${base_version}-rc<nummer>"
echo " 3) Beta -> ${base_version}-beta"
echo " 4) Alpha -> ${base_version}-alpha"
read -r -p "Auswahl [1]: " choice
choice="${choice:-1}"
case "$choice" in
1)
SELECTED_RELEASE_VERSION="$base_version"
SELECTED_RELEASE_LABEL="Final"
;;
2)
while true; do
read -r -p "RC-Nummer eingeben (z.B. 1): " rc_number
if [[ "$rc_number" =~ ^[0-9]+$ ]]; then
break
fi
echo "Bitte eine gueltige Zahl eingeben."
done
SELECTED_RELEASE_VERSION="${base_version}-rc$rc_number"
SELECTED_RELEASE_LABEL="Release Candidate"
;;
3)
SELECTED_RELEASE_VERSION="${base_version}-beta"
SELECTED_RELEASE_LABEL="Beta"
;;
4)
SELECTED_RELEASE_VERSION="${base_version}-alpha"
SELECTED_RELEASE_LABEL="Alpha"
;;
*)
echo "Ungueltige Release-Typ-Auswahl."
exit 1
;;
esac
}
confirm_or_exit() {
local prompt="$1"
local response
read -r -p "$prompt" response
response="${response:-y}"
if [[ ! "$response" =~ ^[YyJj]$ ]]; then
echo "Abgebrochen."
exit 0
fi
}
require_command git
require_command node
require_command npm
find_deploy_script() {
local candidate=""
for candidate in \
"$repo_root/scripts/deploy-ripster.sh" \
"$repo_root/deploy-ripster.sh"
do
if [[ -f "$candidate" ]]; then
printf '%s' "$candidate"
return 0
fi
done
return 1
}
if ! git rev-parse --is-inside-work-tree >/dev/null 2>&1; then
echo "Dieses Skript muss in einem Git-Repository ausgefuehrt werden."
exit 1
fi
current_branch="$(git branch --show-current)"
github_release_mode="snapshot"
github_source_branch=""
github_source_ref=""
mapfile -t remotes < <(git remote)
default_remote_index=1
for i in "${!remotes[@]}"; do
if [[ "${remotes[$i]}" == "gitea" ]]; then
default_remote_index=$((i + 1))
break
fi
done
echo "Verfuegbare Remotes:"
for i in "${!remotes[@]}"; do
remote_name="${remotes[$i]}"
remote_url="$(git remote get-url "$remote_name")"
remote_label="$(friendly_remote_name "$remote_name" "$remote_url")"
echo " $((i + 1))) $remote_label -> $remote_url"
done
read -r -p "Remote waehlen [$default_remote_index]: " remote_choice
remote_choice="${remote_choice:-$default_remote_index}"
selected_remote="${remotes[$((remote_choice - 1))]}"
selected_remote_url="$(git remote get-url "$selected_remote")"
selected_is_github=false
if [[ "$selected_remote_url" == *github.com* ]]; then
selected_is_github=true
fi
echo "Lokaler Branch: $current_branch"
if [[ "$selected_is_github" == true ]]; then
echo
echo "GitHub-Modus waehlen:"
echo " 1) Snapshot-Release auf Ziel-Branch (bisheriger Ablauf)"
echo " 2) Branch-Merge/Veroeffentlichung dev -> main (force, main uebernimmt dev komplett)"
default_github_mode="1"
if [[ "$current_branch" == "dev" ]]; then
default_github_mode="2"
fi
read -r -p "Auswahl [$default_github_mode]: " github_mode_choice
github_mode_choice="${github_mode_choice:-$default_github_mode}"
case "$github_mode_choice" in
1)
github_release_mode="snapshot"
;;
2)
github_release_mode="branch-force-merge"
;;
*)
echo "Ungueltige GitHub-Modus-Auswahl."
exit 1
;;
esac
fi
if [[ "$selected_is_github" == true && "$github_release_mode" == "branch-force-merge" ]]; then
echo
read -r -p "Quell-Branch fuer GitHub-Veroeffentlichung [dev]: " github_source_branch
github_source_branch="${github_source_branch:-dev}"
if ! git check-ref-format --branch "$github_source_branch" >/dev/null 2>&1; then
echo "Ungueltiger Quell-Branch: $github_source_branch"
exit 1
fi
if git show-ref --verify --quiet "refs/heads/$github_source_branch"; then
github_source_ref="refs/heads/$github_source_branch"
elif git ls-remote --exit-code --heads "$selected_remote" "$github_source_branch" >/dev/null 2>&1; then
github_source_ref="refs/remotes/$selected_remote/$github_source_branch"
git fetch "$selected_remote" "$github_source_branch"
else
echo "Quell-Branch '$github_source_branch' wurde weder lokal noch auf $selected_remote gefunden."
exit 1
fi
read -r -p "Ziel-Branch auf $selected_remote [main]: " target_branch
target_branch="${target_branch:-main}"
else
read -r -p "Ziel-Branch auf $selected_remote [$current_branch]: " target_branch
target_branch="${target_branch:-$current_branch}"
fi
if ! git check-ref-format --branch "$target_branch" >/dev/null 2>&1; then
echo "Ungueltiger Branch-Name: $target_branch"
exit 1
fi
selected_push_ref="refs/heads/$target_branch"
root_version="$(node -p "require('./package.json').version")"
frontend_version="$(node -p "require('./frontend/package.json').version")"
backend_version="$(node -p "require('./backend/package.json').version")"
if [[ "$root_version" != "$frontend_version" ]] || [[ "$root_version" != "$backend_version" ]]; then
echo "Hinweis: Die Versionen sind aktuell nicht synchron."
echo " Root: $root_version"
echo " Frontend: $frontend_version"
echo " Backend: $backend_version"
echo "Das Skript synchronisiert sie gleich auf eine gemeinsame Zielversion."
echo
fi
next_patch="$(bump_version "$root_version" patch)"
next_minor="$(bump_version "$root_version" minor)"
next_major="$(bump_version "$root_version" major)"
next_build=""
if can_increment_build_version "$root_version"; then
next_build="$(increment_build_version "$root_version")"
fi
next_rc=""
if can_increment_rc_version "$root_version"; then
next_rc="$(increment_rc_version "$root_version")"
fi
current_final=""
if parse_version "$root_version" >/dev/null 2>&1 && [[ "$PARSED_SUFFIX" =~ ^rc([.]?[0-9]+)?$ ]]; then
current_final="$(remove_rc_suffix "$root_version")"
fi
apply_version_change=false
echo "Aktuelle Version: $root_version"
if [[ "$selected_is_github" == true ]]; then
target_version="$root_version"
release_mode="GitHub-Sync ohne Versionsaenderung"
echo "GitHub-Remote erkannt: Versions- und Build-Prozess wird uebersprungen."
else
read -r -p "Versionsnummer hochsetzen? [Y/n]: " should_bump_version
should_bump_version="${should_bump_version:-y}"
case "$should_bump_version" in
[YyJj])
echo "Version waehlen:"
echo " 1) Patch -> $next_patch"
echo " 2) Minor -> $next_minor"
echo " 3) Major -> $next_major"
if [[ -n "$next_build" ]]; then
echo " 4) Build -> $next_build"
fi
read -r -p "Auswahl [1]: " version_choice
version_choice="${version_choice:-1}"
case "$version_choice" in
1)
target_version="$next_patch"
release_mode="Patch"
apply_version_change=true
;;
2)
select_release_variant "$next_minor"
target_version="$SELECTED_RELEASE_VERSION"
release_mode="Minor ($SELECTED_RELEASE_LABEL)"
apply_version_change=true
;;
3)
select_release_variant "$next_major"
target_version="$SELECTED_RELEASE_VERSION"
release_mode="Major ($SELECTED_RELEASE_LABEL)"
apply_version_change=true
;;
4)
if [[ -z "$next_build" ]]; then
echo "Build-Bump ist fuer die aktuelle Version nicht verfuegbar."
exit 1
fi
target_version="$next_build"
release_mode="Build"
apply_version_change=true
;;
*)
echo "Ungueltige Versions-Auswahl."
exit 1
;;
esac
;;
[Nn])
echo "Option ohne Basisversionssprung waehlen:"
echo " 1) Ohne Versionsaenderung -> $root_version"
if [[ -n "$next_rc" ]]; then
echo " 2) Nur RC-Nummer hochsetzen -> $next_rc"
fi
if [[ -n "$current_final" ]]; then
echo " 3) RC entfernen -> $current_final"
fi
read -r -p "Auswahl [1]: " no_bump_choice
no_bump_choice="${no_bump_choice:-1}"
case "$no_bump_choice" in
1)
target_version="$root_version"
release_mode="Ohne Versionsaenderung"
;;
2)
if [[ -z "$next_rc" ]]; then
echo "RC-Bump ist fuer die aktuelle Version nicht verfuegbar."
exit 1
fi
target_version="$next_rc"
release_mode="RC"
apply_version_change=true
;;
3)
if [[ -z "$current_final" ]]; then
echo "RC entfernen ist nur moeglich, wenn die aktuelle Version ein -rc Suffix hat."
exit 1
fi
target_version="$current_final"
release_mode="RC entfernt"
apply_version_change=true
;;
*)
echo "Ungueltige Auswahl."
exit 1
;;
esac
;;
*)
echo "Bitte nur Y oder N eingeben."
exit 1
;;
esac
fi
echo
echo "Zusammenfassung:"
echo " Branch: $current_branch -> $selected_remote/$target_branch"
echo " Ziel-Ref: $selected_push_ref"
echo " Modus: $release_mode"
echo " Version: $root_version -> $target_version"
if [[ "$selected_is_github" == true ]]; then
echo " GitHub: $github_release_mode"
if [[ "$github_release_mode" == "branch-force-merge" ]]; then
echo " Quelle: $github_source_branch -> $target_branch (force)"
fi
fi
confirm_or_exit "Fortfahren? [Y/n]: "
echo
if [[ "$apply_version_change" == true ]]; then
echo "Setze Version auf $target_version ..."
npm version "$target_version" --no-git-tag-version
npm version "$target_version" --no-git-tag-version --prefix frontend
npm version "$target_version" --no-git-tag-version --prefix backend
else
echo "Version bleibt bei $target_version."
fi
git add -A
echo
echo "Gestagte Aenderungen:"
git status --short
if git diff --cached --quiet; then
echo "Keine neuen Aenderungen zum Committen. Verwende aktuellen Commit fuer den Push."
else
echo
commit_message=""
while [[ -z "$commit_message" ]]; do
read -r -p "Commit-Nachricht: " commit_message
if [[ -z "$commit_message" ]]; then
echo "Commit-Nachricht darf nicht leer sein."
fi
done
git commit -m "$target_version $commit_message"
fi
echo
echo "Push vorbereiten..."
if [[ "$selected_is_github" == true ]]; then
if [[ "$github_release_mode" == "branch-force-merge" ]]; then
echo "GitHub erkannt: $github_source_branch wird mit Force nach $target_branch uebernommen."
git push "$selected_remote" "$github_source_ref:$selected_push_ref" --force
else
echo "GitHub erkannt: Squash-Commit wird erzeugt."
temp_branch="github-publish-$target_branch"
git checkout -B "$temp_branch"
first_commit="$(git rev-list --max-parents=0 HEAD)"
git reset --soft "$first_commit"
git commit -m "$target_version release snapshot"
git push "$selected_remote" "$temp_branch:$selected_push_ref" --force
git checkout "$current_branch"
git branch -D "$temp_branch"
fi
else
git push "$selected_remote" "HEAD:$selected_push_ref"
fi
deploy_script=""
if deploy_script="$(find_deploy_script)"; then
echo
echo "Starte Deploy..."
bash "$deploy_script"
echo "Deploy abgeschlossen."
fi
echo
echo "Release abgeschlossen: $target_version -> $selected_remote/$target_branch"
+3 -2
View File
@@ -13,8 +13,9 @@ Verwendung:
bash setup.sh [Optionen] bash setup.sh [Optionen]
Optionen: Optionen:
--branch <branch> Branch fuer den Download von install.sh setzen --branch <branch> Branch fuer den Download von install.sh setzen
--help Hilfe anzeigen --force-license-prompts Lizenzabfragen auch bei vorhandenen Tools anzeigen
--help Hilfe anzeigen
Alle weiteren Parameter werden unveraendert an install.sh weitergegeben. Alle weiteren Parameter werden unveraendert an install.sh weitergegeben.
Welche Parameter gueltig sind, entscheidet ausschliesslich install.sh. Welche Parameter gueltig sind, entscheidet ausschliesslich install.sh.