Skip to content

Commit 12c49ee

Browse files
committed
feat: Alle Scripts mit Logging und Fehlerbehandlung erweitert + validate-plugin.sh hinzugefügt
## Verbesserte Scripts - create-release.sh: Vollständiges Logging-System hinzugefügt - update-tars.sh: Vollständiges Logging-System hinzugefügt - extract-plugin-files.sh: Vollständiges Logging-System hinzugefügt - create-plugin.sh: Vollständiges Logging-System hinzugefügt ## Neues Script - validate-plugin.sh: Plugin-Struktur-Validierung (package.xml, TAR-Archive, PHP-Syntax, XML-Syntax) ## Details Alle Scripts haben jetzt: - Error-Handler mit trap 'error_handler $? $LINENO' ERR - Logging-System mit timestamped Log-Dateien in /tmp/ - Verbesserte Fehlermeldungen mit hilfreichen Hinweisen - Konsistente Fehlerbehandlung mit set -euo pipefail Das validate-plugin.sh Script prüft: - package.xml Syntax und Format - TAR-Archive Existenz und Integrität - PHP-Syntax aller PHP-Dateien - XML-Syntax aller PIP-Dateien - Exit-Code 0 bei Erfolg, 1 bei Fehlern
1 parent 4de874c commit 12c49ee

File tree

5 files changed

+545
-7
lines changed

5 files changed

+545
-7
lines changed

scripts/create-plugin.sh

Lines changed: 69 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,46 @@
1717
#
1818
# Beispiel: ./create-plugin.sh com.example.myplugin
1919

20-
set -e
20+
# Fehlerbehandlung
21+
set -euo pipefail
22+
23+
# Fehler-Handler
24+
trap 'error_handler $? $LINENO' ERR
25+
26+
# Logging-Variablen
27+
LOG_FILE="/tmp/create-plugin-$(date +%Y%m%d-%H%M%S).log"
28+
VERBOSE=false
29+
30+
# Fehler-Handler Funktion
31+
error_handler() {
32+
local exit_code=$1
33+
local line_number=$2
34+
echo ""
35+
echo "❌ FEHLER: Plugin-Erstellung fehlgeschlagen in Zeile $line_number (Exit-Code: $exit_code)"
36+
echo " Log-Datei: $LOG_FILE"
37+
echo ""
38+
echo "Häufige Probleme:"
39+
echo " • Plugin-Verzeichnis existiert bereits"
40+
echo " • Fehlende Schreibrechte im Zielverzeichnis"
41+
echo " • Ungültiger Package-Identifier"
42+
echo ""
43+
exit 1
44+
}
45+
46+
# Logging-Funktion
47+
log() {
48+
local level="$1"
49+
shift
50+
local message="$*"
51+
local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
52+
echo "[$timestamp] [$level] $message" >> "$LOG_FILE"
53+
54+
if [ "$VERBOSE" = true ] || [ "$level" = "ERROR" ] || [ "$level" = "WARNING" ]; then
55+
echo "$message" >&2
56+
fi
57+
}
58+
59+
log "INFO" "Plugin-Erstellung gestartet"
2160

2261
# Parameter prüfen
2362
if [ -z "$1" ]; then
@@ -27,12 +66,16 @@ if [ -z "$1" ]; then
2766
echo "Beispiel: $0 com.example.myplugin"
2867
echo ""
2968
echo "Package-Identifier Format: com.domain.pluginname"
69+
log "ERROR" "Package-Identifier fehlt"
3070
exit 1
3171
fi
3272

3373
PACKAGE_IDENTIFIER="$1"
3474
TARGET_DIR="${2:-$(pwd)}"
3575

76+
log "INFO" "Package-Identifier: $PACKAGE_IDENTIFIER"
77+
log "INFO" "Ziel-Verzeichnis: $TARGET_DIR"
78+
3679
# Validierung: Package-Identifier-Format
3780
if [[ ! "$PACKAGE_IDENTIFIER" =~ ^com\.[a-z0-9]+\.[a-z0-9]+(\.[a-z0-9]+)*$ ]]; then
3881
echo "❌ Fehler: Ungültiges Package-Identifier-Format!"
@@ -42,23 +85,33 @@ if [[ ! "$PACKAGE_IDENTIFIER" =~ ^com\.[a-z0-9]+\.[a-z0-9]+(\.[a-z0-9]+)*$ ]]; t
4285
echo " - com.example.myplugin"
4386
echo " - com.sunnyc.wcf.buttonBox"
4487
echo ""
88+
log "ERROR" "Ungültiges Package-Identifier-Format: $PACKAGE_IDENTIFIER"
4589
exit 1
4690
fi
4791

92+
log "INFO" "Package-Identifier-Format ist korrekt"
93+
4894
# Extrahiere Plugin-Name aus Identifier
4995
PLUGIN_NAME=$(echo "$PACKAGE_IDENTIFIER" | sed 's/.*\.//')
5096
PLUGIN_DIR="$TARGET_DIR/$PACKAGE_IDENTIFIER"
5197

98+
log "INFO" "Plugin-Name: $PLUGIN_NAME"
99+
log "INFO" "Plugin-Verzeichnis: $PLUGIN_DIR"
100+
52101
# Prüfe ob Verzeichnis bereits existiert
53102
if [ -d "$PLUGIN_DIR" ]; then
54103
echo "⚠️ Warnung: Verzeichnis existiert bereits: $PLUGIN_DIR"
104+
log "WARNING" "Verzeichnis existiert bereits: $PLUGIN_DIR"
55105
read -p "Möchtest du es überschreiben? (j/n): " -n 1 -r
56106
echo
57107
if [[ ! $REPLY =~ ^[JjYy]$ ]]; then
58108
echo "Abgebrochen."
109+
log "INFO" "Plugin-Erstellung vom Benutzer abgebrochen"
59110
exit 0
60111
fi
112+
log "INFO" "Benutzer hat bestätigt, überschreibe existierendes Verzeichnis"
61113
rm -rf "$PLUGIN_DIR"
114+
log "INFO" "Existierendes Verzeichnis gelöscht"
62115
fi
63116

64117
echo "═══════════════════════════════════════════════════════════════"
@@ -72,12 +125,15 @@ echo ""
72125

73126
# Erstelle Verzeichnisstruktur
74127
echo "📁 Erstelle Verzeichnisstruktur..."
128+
log "INFO" "Erstelle Verzeichnisstruktur"
75129
mkdir -p "$PLUGIN_DIR/files/lib"
76130
mkdir -p "$PLUGIN_DIR/templates"
77131
mkdir -p "$PLUGIN_DIR/language"
132+
log "INFO" "Verzeichnisstruktur erstellt"
78133

79134
# Erstelle package.xml
80135
echo "📝 Erstelle package.xml..."
136+
log "INFO" "Erstelle package.xml"
81137
cat > "$PLUGIN_DIR/package.xml" <<EOF
82138
<?xml version="1.0" encoding="UTF-8"?>
83139
<package xmlns="http://www.woltlab.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.woltlab.com http://www.woltlab.com/XSD/2019/package.xsd" name="$PACKAGE_IDENTIFIER">
@@ -105,9 +161,11 @@ cat > "$PLUGIN_DIR/package.xml" <<EOF
105161
</instructions>
106162
</package>
107163
EOF
164+
log "INFO" "package.xml erstellt"
108165

109166
# Erstelle page.xml (optional)
110167
echo "📝 Erstelle page.xml..."
168+
log "INFO" "Erstelle page.xml"
111169
cat > "$PLUGIN_DIR/page.xml" <<EOF
112170
<?xml version="1.0" encoding="UTF-8"?>
113171
<data xmlns="http://www.woltlab.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.woltlab.com http://www.woltlab.com/XSD/2019/page.xsd">
@@ -119,9 +177,11 @@ cat > "$PLUGIN_DIR/page.xml" <<EOF
119177
</import>
120178
</data>
121179
EOF
180+
log "INFO" "page.xml erstellt"
122181

123182
# Erstelle Beispiel-PHP-Klasse
124183
echo "📝 Erstelle Beispiel-PHP-Klasse..."
184+
log "INFO" "Erstelle Beispiel-PHP-Klasse"
125185
mkdir -p "$PLUGIN_DIR/files/lib/page"
126186
cat > "$PLUGIN_DIR/files/lib/page/ExamplePage.class.php" <<EOFPHP
127187
<?php
@@ -170,9 +230,11 @@ class ExamplePage extends AbstractPage {
170230
}
171231
}
172232
EOFPHP
233+
log "INFO" "Beispiel-PHP-Klasse erstellt"
173234

174235
# Erstelle Beispiel-Template
175236
echo "📝 Erstelle Beispiel-Template..."
237+
log "INFO" "Erstelle Beispiel-Template"
176238
cat > "$PLUGIN_DIR/templates/example.tpl" <<EOFTEMPLATE
177239
{* Template for Example Page *}
178240
@@ -186,9 +248,11 @@ cat > "$PLUGIN_DIR/templates/example.tpl" <<EOFTEMPLATE
186248
</div>
187249
</div>
188250
EOFTEMPLATE
251+
log "INFO" "Beispiel-Template erstellt"
189252

190253
# Erstelle README.md
191254
echo "📝 Erstelle README.md..."
255+
log "INFO" "Erstelle README.md"
192256
cat > "$PLUGIN_DIR/README.md" <<EOF
193257
# $PLUGIN_NAME
194258
@@ -227,9 +291,11 @@ $PACKAGE_IDENTIFIER/
227291
- [WoltLab Dokumentation](https://docs.woltlab.com/6.0/)
228292
- [Simple WoltLab Plugin Manager](https://github.com/SunnyCueq/simple-woltlab-plugin-manager)
229293
EOF
294+
log "INFO" "README.md erstellt"
230295

231296
echo ""
232297
echo "✅ Plugin-Grundstruktur erstellt!"
298+
log "INFO" "Plugin-Grundstruktur erfolgreich erstellt"
233299
echo ""
234300
echo "📁 Verzeichnis: $PLUGIN_DIR"
235301
echo ""
@@ -251,4 +317,6 @@ echo "📚 Dokumentation:"
251317
echo " - WoltLab: https://docs.woltlab.com/6.0/getting-started/"
252318
echo " - Plugin Manager: https://github.com/SunnyCueq/simple-woltlab-plugin-manager"
253319
echo ""
320+
echo "ℹ️ Log-Datei: $LOG_FILE"
321+
log "INFO" "Plugin-Erstellung erfolgreich abgeschlossen"
254322

scripts/create-release.sh

Lines changed: 66 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,50 +18,108 @@
1818
#
1919
# Beispiel: ./create-release.sh 1.0.0 /path/to/plugin owner/repo-name
2020

21-
set -e
21+
# Fehlerbehandlung
22+
set -euo pipefail
23+
24+
# Fehler-Handler
25+
trap 'error_handler $? $LINENO' ERR
26+
27+
# Logging-Variablen
28+
LOG_FILE="/tmp/create-release-$(date +%Y%m%d-%H%M%S).log"
29+
VERBOSE=false
30+
31+
# Fehler-Handler Funktion
32+
error_handler() {
33+
local exit_code=$1
34+
local line_number=$2
35+
echo ""
36+
echo "❌ FEHLER: Release-Erstellung fehlgeschlagen in Zeile $line_number (Exit-Code: $exit_code)"
37+
echo " Log-Datei: $LOG_FILE"
38+
echo " Bitte prüfe die Log-Datei für Details."
39+
echo ""
40+
echo "Häufige Probleme:"
41+
echo " • Fehlende package.xml oder ungültige Struktur"
42+
echo " • Fehlende Schreibrechte im Plugin-Verzeichnis"
43+
echo " • GitHub CLI nicht authentifiziert (gh auth login)"
44+
echo ""
45+
exit 1
46+
}
47+
48+
# Logging-Funktion
49+
log() {
50+
local level="$1"
51+
shift
52+
local message="$*"
53+
local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
54+
echo "[$timestamp] [$level] $message" >> "$LOG_FILE"
55+
56+
if [ "$VERBOSE" = true ] || [ "$level" = "ERROR" ] || [ "$level" = "WARNING" ]; then
57+
echo "$message" >&2
58+
fi
59+
}
60+
61+
log "INFO" "Release-Erstellung gestartet"
2262

2363
# Parameter prüfen
2464
if [ -z "$1" ]; then
2565
echo "❌ Fehler: Versionsnummer fehlt!"
2666
echo ""
2767
echo "Verwendung: $0 VERSION [PLUGIN_DIR] [GITHUB_REPO]"
2868
echo "Beispiel: $0 1.0.0 /path/to/plugin owner/repo-name"
69+
log "ERROR" "Versionsnummer fehlt"
2970
exit 1
3071
fi
3172

3273
VERSION="$1"
3374
PLUGIN_DIR="${2:-$(pwd)}"
3475
GITHUB_REPO="$3"
3576

36-
cd "$PLUGIN_DIR" || exit 1
77+
log "INFO" "Parameter: VERSION=$VERSION, PLUGIN_DIR=$PLUGIN_DIR, GITHUB_REPO=${GITHUB_REPO:-none}"
78+
79+
cd "$PLUGIN_DIR" || {
80+
log "ERROR" "Konnte nicht in Plugin-Verzeichnis wechseln: $PLUGIN_DIR"
81+
exit 1
82+
}
83+
84+
log "INFO" "Arbeitsverzeichnis: $PLUGIN_DIR"
3785

3886
# Prüfe ob package.xml existiert
3987
if [ ! -f "package.xml" ]; then
4088
echo "❌ Fehler: package.xml nicht gefunden in $PLUGIN_DIR"
89+
log "ERROR" "package.xml nicht gefunden in $PLUGIN_DIR"
4190
exit 1
4291
fi
4392

93+
log "INFO" "package.xml gefunden"
94+
4495
# Validierung 1: XML-Syntax prüfen
4596
echo "🔍 Validiere package.xml Syntax..."
97+
log "INFO" "Validiere XML-Syntax..."
4698
if command -v xmllint &> /dev/null; then
4799
if ! xmllint --noout package.xml 2>/dev/null; then
48100
echo "❌ Fehler: package.xml hat XML-Syntax-Fehler!"
49101
echo " Bitte prüfe die Datei mit: xmllint package.xml"
102+
log "ERROR" "XML-Syntax-Fehler in package.xml"
50103
exit 1
51104
fi
52105
echo "✓ XML-Syntax OK"
106+
log "INFO" "XML-Syntax validiert"
53107
else
54108
echo "⚠️ Warnung: xmllint nicht gefunden, überspringe XML-Validierung"
55109
echo " Installiere mit: sudo pacman -S libxml2 (Arch) oder sudo apt install libxml2-utils (Debian)"
110+
log "WARNING" "xmllint nicht gefunden, überspringe XML-Validierung"
56111
fi
57112

58113
# Package-Name aus package.xml extrahieren
59114
PACKAGE_NAME=$(grep -oP 'name="\K[^"]+' package.xml | head -1)
60115
if [ -z "$PACKAGE_NAME" ]; then
61116
echo "❌ Fehler: Konnte Package-Name nicht aus package.xml extrahieren"
117+
log "ERROR" "Konnte Package-Name nicht aus package.xml extrahieren"
62118
exit 1
63119
fi
64120

121+
log "INFO" "Package-Name: $PACKAGE_NAME"
122+
65123
# Validierung 2: Package-Name-Format prüfen
66124
echo "🔍 Validiere Package-Name-Format..."
67125
if [[ ! "$PACKAGE_NAME" =~ ^com\.[a-z0-9]+\.[a-z0-9]+(\.[a-z0-9]+)*$ ]]; then
@@ -315,8 +373,14 @@ if [ -n "$GITHUB_REPO" ]; then
315373
echo ""
316374
echo "🔗 Release-Seite:"
317375
echo "https://github.com/$GITHUB_REPO/releases/tag/v$VERSION"
376+
log "INFO" "GitHub Release erfolgreich erstellt: v$VERSION"
318377
else
319378
echo "ℹ️ Kein GitHub Repository angegeben. Release nur lokal erstellt."
320379
echo " Für GitHub Release: $0 $VERSION $PLUGIN_DIR owner/repo-name"
380+
log "INFO" "Release lokal erstellt (kein GitHub Repository angegeben)"
321381
fi
322382

383+
echo ""
384+
echo "ℹ️ Log-Datei: $LOG_FILE"
385+
log "INFO" "Release-Erstellung erfolgreich abgeschlossen"
386+

0 commit comments

Comments
 (0)