Skip to content

Commit 6c2a560

Browse files
committed
Add deploy script
1 parent e9f3669 commit 6c2a560

1 file changed

Lines changed: 275 additions & 0 deletions

File tree

rebase-and-release.sh

Lines changed: 275 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,275 @@
1+
#!/bin/bash
2+
3+
# Script zum Rebasen aller release/* Branches auf master und Erstellen von GitHub Releases
4+
# Autor: MinecraftServerAPI Team
5+
# Datum: 2025-09-06
6+
7+
set -e # Bei Fehler beenden
8+
9+
# Farben für Output
10+
RED='\033[0;31m'
11+
GREEN='\033[0;32m'
12+
YELLOW='\033[1;33m'
13+
BLUE='\033[0;34m'
14+
NC='\033[0m' # No Color
15+
16+
# Logging-Funktionen
17+
log_info() {
18+
echo -e "${BLUE}[INFO]${NC} $1"
19+
}
20+
21+
log_success() {
22+
echo -e "${GREEN}[SUCCESS]${NC} $1"
23+
}
24+
25+
log_warning() {
26+
echo -e "${YELLOW}[WARNING]${NC} $1"
27+
}
28+
29+
log_error() {
30+
echo -e "${RED}[ERROR]${NC} $1"
31+
}
32+
33+
# Prüfe ob wir im richtigen Verzeichnis sind
34+
if [ ! -f "pom.xml" ] || [ ! -d ".git" ]; then
35+
log_error "Dieses Skript muss im Root-Verzeichnis des MinecraftServerAPI-Projekts ausgeführt werden!"
36+
exit 1
37+
fi
38+
39+
# Prüfe ob gh (GitHub CLI) installiert ist
40+
if ! command -v gh &> /dev/null; then
41+
log_error "GitHub CLI (gh) ist nicht installiert. Bitte installiere es mit: brew install gh"
42+
exit 1
43+
fi
44+
45+
# Prüfe ob wir bei GitHub authentifiziert sind
46+
if ! gh auth status &> /dev/null; then
47+
log_error "Nicht bei GitHub authentifiziert. Bitte führe 'gh auth login' aus."
48+
exit 1
49+
fi
50+
51+
# Speichere den aktuellen Branch
52+
CURRENT_BRANCH=$(git branch --show-current)
53+
log_info "Aktueller Branch: $CURRENT_BRANCH"
54+
55+
# Stelle sicher, dass das Working Directory sauber ist
56+
if [ -n "$(git status --porcelain)" ]; then
57+
log_error "Working Directory ist nicht sauber. Bitte committe oder stashe deine Änderungen."
58+
exit 1
59+
fi
60+
61+
# Hole die neuesten Änderungen
62+
log_info "Hole die neuesten Änderungen vom Remote..."
63+
git fetch --all --prune
64+
65+
# Wechsle zu master und aktualisiere
66+
log_info "Wechsle zu master Branch..."
67+
git checkout master
68+
git pull origin master
69+
70+
# Hole alle release/* Branches
71+
RELEASE_BRANCHES=$(git branch -r | grep 'origin/release/' | sed 's/origin\///' | sort -V)
72+
73+
if [ -z "$RELEASE_BRANCHES" ]; then
74+
log_warning "Keine release/* Branches gefunden!"
75+
git checkout "$CURRENT_BRANCH"
76+
exit 0
77+
fi
78+
79+
log_info "Gefundene Release-Branches:"
80+
echo "$RELEASE_BRANCHES" | while read -r branch; do
81+
echo " - $branch"
82+
done
83+
84+
# Arrays für Erfolg und Fehler
85+
SUCCESSFUL_REBASES=()
86+
FAILED_REBASES=()
87+
SUCCESSFUL_RELEASES=()
88+
FAILED_RELEASES=()
89+
90+
# Rebase alle Release-Branches
91+
echo ""
92+
log_info "=== PHASE 1: Rebase alle Release-Branches auf master ==="
93+
echo ""
94+
95+
for branch in $RELEASE_BRANCHES; do
96+
log_info "Verarbeite Branch: $branch"
97+
98+
# Checkout des Branches
99+
if git checkout "$branch" 2>/dev/null || git checkout -b "$branch" "origin/$branch" 2>/dev/null; then
100+
101+
# Versuche Rebase
102+
log_info "Rebase $branch auf master..."
103+
if git rebase master; then
104+
log_success "Rebase von $branch erfolgreich!"
105+
106+
# Force Push (da wir rebased haben)
107+
log_info "Pushe $branch zum Remote..."
108+
if git push --force-with-lease origin "$branch"; then
109+
log_success "Push von $branch erfolgreich!"
110+
SUCCESSFUL_REBASES+=("$branch")
111+
else
112+
log_error "Push von $branch fehlgeschlagen!"
113+
FAILED_REBASES+=("$branch")
114+
git rebase --abort 2>/dev/null || true
115+
fi
116+
else
117+
log_error "Rebase von $branch fehlgeschlagen! Überspringe..."
118+
FAILED_REBASES+=("$branch")
119+
git rebase --abort 2>/dev/null || true
120+
fi
121+
else
122+
log_error "Konnte Branch $branch nicht auschecken!"
123+
FAILED_REBASES+=("$branch")
124+
fi
125+
126+
echo ""
127+
done
128+
129+
# Wechsle zurück zu master für Release-Erstellung
130+
git checkout master
131+
132+
echo ""
133+
log_info "=== PHASE 2: Erstelle GitHub Releases ==="
134+
echo ""
135+
136+
# Erstelle Releases für erfolgreich gerebaste Branches
137+
for branch in "${SUCCESSFUL_REBASES[@]}"; do
138+
# Extrahiere Version aus Branch-Namen (z.B. release/1.19.4 -> 1.19.4)
139+
VERSION=$(echo "$branch" | sed 's/release\///')
140+
TAG_NAME="v$VERSION"
141+
142+
log_info "Erstelle Release für $branch (Tag: $TAG_NAME)..."
143+
144+
# Checkout des Branches für Release
145+
git checkout "$branch"
146+
147+
# Hole die neueste Commit-Message für Release Notes
148+
LAST_COMMIT=$(git log -1 --pretty=format:"%s")
149+
150+
# Generiere Release Notes
151+
RELEASE_NOTES="## MinecraftServerAPI v$VERSION
152+
153+
### 🎮 Minecraft Version
154+
Supports Minecraft $VERSION
155+
156+
### 📦 Änderungen
157+
- Rebased auf den neuesten master Branch
158+
- Alle aktuellen Features und Bugfixes enthalten
159+
160+
### 🔄 Letzte Änderung
161+
$LAST_COMMIT
162+
163+
### 📥 Installation
164+
Lade die JAR-Datei herunter und platziere sie in deinem Minecraft Server's \`plugins\` Ordner.
165+
166+
### 📖 Dokumentation
167+
Siehe [README.md](https://github.com/$(gh repo view --json nameWithOwner -q .nameWithOwner)/blob/$branch/README.md) für die vollständige Dokumentation.
168+
169+
---
170+
*Automatisch generiert am $(date '+%Y-%m-%d %H:%M:%S')*"
171+
172+
# Erstelle Tag falls nicht vorhanden
173+
if ! git tag | grep -q "^$TAG_NAME$"; then
174+
log_info "Erstelle Tag $TAG_NAME..."
175+
git tag "$TAG_NAME"
176+
git push origin "$TAG_NAME"
177+
else
178+
log_warning "Tag $TAG_NAME existiert bereits, aktualisiere..."
179+
git tag -f "$TAG_NAME"
180+
git push origin -f "$TAG_NAME"
181+
fi
182+
183+
# Baue das Projekt
184+
log_info "Baue JAR-Datei für $VERSION..."
185+
if mvn clean package -DskipTests > /dev/null 2>&1; then
186+
JAR_FILE=$(find target -name "MinecraftServerAPI-*.jar" | head -1)
187+
188+
if [ -f "$JAR_FILE" ]; then
189+
# Erstelle oder aktualisiere Release
190+
log_info "Erstelle GitHub Release..."
191+
192+
# Prüfe ob Release bereits existiert
193+
if gh release view "$TAG_NAME" > /dev/null 2>&1; then
194+
log_warning "Release $TAG_NAME existiert bereits, lösche und erstelle neu..."
195+
gh release delete "$TAG_NAME" --yes
196+
fi
197+
198+
# Erstelle neues Release
199+
if gh release create "$TAG_NAME" \
200+
--title "MinecraftServerAPI v$VERSION" \
201+
--notes "$RELEASE_NOTES" \
202+
--target "$branch" \
203+
"$JAR_FILE#MinecraftServerAPI-$VERSION.jar"; then
204+
205+
log_success "Release $TAG_NAME erfolgreich erstellt!"
206+
SUCCESSFUL_RELEASES+=("$VERSION")
207+
else
208+
log_error "Fehler beim Erstellen von Release $TAG_NAME!"
209+
FAILED_RELEASES+=("$VERSION")
210+
fi
211+
else
212+
log_error "JAR-Datei nicht gefunden für $VERSION!"
213+
FAILED_RELEASES+=("$VERSION")
214+
fi
215+
else
216+
log_error "Build fehlgeschlagen für $VERSION!"
217+
FAILED_RELEASES+=("$VERSION")
218+
fi
219+
220+
echo ""
221+
done
222+
223+
# Zurück zum ursprünglichen Branch
224+
log_info "Wechsle zurück zu $CURRENT_BRANCH..."
225+
git checkout "$CURRENT_BRANCH"
226+
227+
# Zusammenfassung
228+
echo ""
229+
echo "========================================"
230+
echo " ZUSAMMENFASSUNG "
231+
echo "========================================"
232+
echo ""
233+
234+
if [ ${#SUCCESSFUL_REBASES[@]} -gt 0 ]; then
235+
log_success "Erfolgreich gerebaste Branches (${#SUCCESSFUL_REBASES[@]}):"
236+
for branch in "${SUCCESSFUL_REBASES[@]}"; do
237+
echo "$branch"
238+
done
239+
fi
240+
241+
if [ ${#FAILED_REBASES[@]} -gt 0 ]; then
242+
echo ""
243+
log_error "Fehlgeschlagene Rebases (${#FAILED_REBASES[@]}):"
244+
for branch in "${FAILED_REBASES[@]}"; do
245+
echo "$branch"
246+
done
247+
fi
248+
249+
if [ ${#SUCCESSFUL_RELEASES[@]} -gt 0 ]; then
250+
echo ""
251+
log_success "Erfolgreich erstellte Releases (${#SUCCESSFUL_RELEASES[@]}):"
252+
for version in "${SUCCESSFUL_RELEASES[@]}"; do
253+
echo " ✅ v$version"
254+
done
255+
fi
256+
257+
if [ ${#FAILED_RELEASES[@]} -gt 0 ]; then
258+
echo ""
259+
log_error "Fehlgeschlagene Releases (${#FAILED_RELEASES[@]}):"
260+
for version in "${FAILED_RELEASES[@]}"; do
261+
echo " ❌ v$version"
262+
done
263+
fi
264+
265+
echo ""
266+
echo "========================================"
267+
268+
# Exit-Code basierend auf Erfolg
269+
if [ ${#FAILED_REBASES[@]} -eq 0 ] && [ ${#FAILED_RELEASES[@]} -eq 0 ]; then
270+
log_success "Alle Operationen erfolgreich abgeschlossen! 🎉"
271+
exit 0
272+
else
273+
log_warning "Einige Operationen sind fehlgeschlagen. Bitte prüfe die Fehler oben."
274+
exit 1
275+
fi

0 commit comments

Comments
 (0)