1.0.0-1 Licence
This commit is contained in:
+2
-1
@@ -83,7 +83,8 @@ Thumbs.db
|
||||
# ----------------------------
|
||||
# Scripts
|
||||
# ----------------------------
|
||||
/scripts/
|
||||
/scripts/*
|
||||
!/scripts/release.sh
|
||||
/release.sh
|
||||
/Audible_Tool
|
||||
/AddOns
|
||||
|
||||
@@ -119,6 +119,7 @@ Verfügbare Optionen:
|
||||
- `--no-nginx`
|
||||
- `--no-system-deps`
|
||||
- `--accept-makemkv-eula`
|
||||
- `--force-license-prompts`
|
||||
- `--reinstall`
|
||||
- `--help`
|
||||
|
||||
@@ -135,6 +136,11 @@ Was der Installer typischerweise einrichtet:
|
||||
> [!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.
|
||||
|
||||
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
|
||||
|
||||
Standard-Update einer bestehenden Installation:
|
||||
|
||||
Generated
+2
-2
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "ripster-backend",
|
||||
"version": "1.0.0",
|
||||
"version": "1.0.0-1",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "ripster-backend",
|
||||
"version": "1.0.0",
|
||||
"version": "1.0.0-1",
|
||||
"license": "GPL-2.0-or-later",
|
||||
"dependencies": {
|
||||
"archiver": "^7.0.1",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "ripster-backend",
|
||||
"version": "1.0.0",
|
||||
"version": "1.0.0-1",
|
||||
"private": true,
|
||||
"license": "GPL-2.0-or-later",
|
||||
"repository": {
|
||||
|
||||
@@ -36,6 +36,9 @@ wget -qO- https://raw.githubusercontent.com/Mboehmlaender/ripster/main/install.s
|
||||
| `--no-makemkv` | – | MakeMKV-Installation überspringen |
|
||||
| `--no-handbrake` | – | HandBrake-Installation ü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) |
|
||||
| `-h`, `--help` | – | Hilfe anzeigen |
|
||||
|
||||
|
||||
@@ -60,6 +60,8 @@ bash setup.sh --branch dev --dir /opt/ripster --user ripster --port 3001 --host
|
||||
| `--no-handbrake` | aus | HandBrake nicht installieren |
|
||||
| `--no-nginx` | aus | nginx-Setup überspringen |
|
||||
| `--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 |
|
||||
|
||||
## Was der Installer einrichtet
|
||||
|
||||
Generated
+2
-2
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "ripster-frontend",
|
||||
"version": "1.0.0",
|
||||
"version": "1.0.0-1",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "ripster-frontend",
|
||||
"version": "1.0.0",
|
||||
"version": "1.0.0-1",
|
||||
"license": "GPL-2.0-or-later",
|
||||
"dependencies": {
|
||||
"chart.js": "^4.5.1",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "ripster-frontend",
|
||||
"version": "1.0.0",
|
||||
"version": "1.0.0-1",
|
||||
"private": true,
|
||||
"license": "GPL-2.0-or-later",
|
||||
"repository": {
|
||||
|
||||
Regular → Executable
+50
-1
@@ -24,6 +24,8 @@
|
||||
# --no-nginx Nginx-Einrichtung überspringen
|
||||
# --no-system-deps Abschnitt "Systemabhängigkeiten installieren" überspringen
|
||||
# --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)
|
||||
# -h, --help Diese Hilfe anzeigen
|
||||
# =============================================================================
|
||||
@@ -59,6 +61,9 @@ HANDBRAKE_INSTALL_MODE=""
|
||||
SKIP_NGINX=false
|
||||
SKIP_SYSTEM_DEPS=false
|
||||
ACCEPT_MAKEMKV_EULA=false
|
||||
FORCE_LICENSE_PROMPTS=false
|
||||
MAKEMKV_EULA_REVIEWED=false
|
||||
HANDBRAKE_NOTICE_SHOWN=false
|
||||
REINSTALL=false
|
||||
GIT_COMMAND_TIMEOUT_SEC=180
|
||||
|
||||
@@ -84,6 +89,7 @@ while [[ $# -gt 0 ]]; do
|
||||
--no-nginx) SKIP_NGINX=true; shift ;;
|
||||
--no-system-deps) SKIP_SYSTEM_DEPS=true; shift ;;
|
||||
--accept-makemkv-eula) ACCEPT_MAKEMKV_EULA=true; shift ;;
|
||||
--force-license-prompts) FORCE_LICENSE_PROMPTS=true; shift ;;
|
||||
--reinstall) REINSTALL=true; shift ;;
|
||||
-h|--help)
|
||||
sed -n '/^# Verwendung/,/^# ====/p' "$0" | head -n -1 | sed 's/^# \?//'
|
||||
@@ -452,8 +458,13 @@ install_node() {
|
||||
}
|
||||
|
||||
confirm_makemkv_eula() {
|
||||
if [[ "$MAKEMKV_EULA_REVIEWED" == true ]]; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
if [[ "$ACCEPT_MAKEMKV_EULA" == true ]]; then
|
||||
warn "MakeMKV-EULA wurde per --accept-makemkv-eula ausdrücklich akzeptiert."
|
||||
MAKEMKV_EULA_REVIEWED=true
|
||||
return 0
|
||||
fi
|
||||
|
||||
@@ -477,6 +488,25 @@ confirm_makemkv_eula() {
|
||||
fi
|
||||
|
||||
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() {
|
||||
@@ -777,6 +807,8 @@ install_handbrake() {
|
||||
HANDBRAKE_INSTALL_MODE="standard"
|
||||
fi
|
||||
|
||||
show_handbrake_license_notice
|
||||
|
||||
case "$HANDBRAKE_INSTALL_MODE" in
|
||||
standard) install_handbrake_standard ;;
|
||||
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")"
|
||||
|
||||
# --- HandBrake-Installmodus auswählen ----------------------------------------
|
||||
if [[ "$SKIP_SYSTEM_DEPS" == false ]]; then
|
||||
if [[ "$SKIP_SYSTEM_DEPS" == false || "$FORCE_LICENSE_PROMPTS" == true ]]; then
|
||||
select_handbrake_mode
|
||||
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 -----------------------------------------------------
|
||||
if [[ "$SKIP_SYSTEM_DEPS" == true ]]; then
|
||||
header "Systemabhängigkeiten installieren"
|
||||
|
||||
Generated
+2
-2
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "ripster",
|
||||
"version": "1.0.0",
|
||||
"version": "1.0.0-1",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "ripster",
|
||||
"version": "1.0.0",
|
||||
"version": "1.0.0-1",
|
||||
"license": "GPL-2.0-or-later",
|
||||
"devDependencies": {
|
||||
"concurrently": "^9.1.2"
|
||||
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "ripster",
|
||||
"private": true,
|
||||
"version": "1.0.0",
|
||||
"version": "1.0.0-1",
|
||||
"license": "GPL-2.0-or-later",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
|
||||
Executable
+551
@@ -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"
|
||||
@@ -13,8 +13,9 @@ Verwendung:
|
||||
bash setup.sh [Optionen]
|
||||
|
||||
Optionen:
|
||||
--branch <branch> Branch fuer den Download von install.sh setzen
|
||||
--help Hilfe anzeigen
|
||||
--branch <branch> Branch fuer den Download von install.sh setzen
|
||||
--force-license-prompts Lizenzabfragen auch bei vorhandenen Tools anzeigen
|
||||
--help Hilfe anzeigen
|
||||
|
||||
Alle weiteren Parameter werden unveraendert an install.sh weitergegeben.
|
||||
Welche Parameter gueltig sind, entscheidet ausschliesslich install.sh.
|
||||
|
||||
Reference in New Issue
Block a user