The admin controller was failing because Laravel's DI container had stale class resolution cache. Added php artisan optimize:clear at end of build. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
126 lines
5.0 KiB
Bash
Executable File
126 lines
5.0 KiB
Bash
Executable File
#!/bin/bash
|
|
# =============================================================================
|
|
# MODPACK VERSION CHECKER - BUILD SCRIPT
|
|
# =============================================================================
|
|
#
|
|
# Executes automatically during `blueprint -build`
|
|
# Injects React components into Pterodactyl's frontend
|
|
#
|
|
# @author Firefrost Gaming / Frostystyle <dev@firefrostgaming.com>
|
|
# @version 1.0.0
|
|
# =============================================================================
|
|
|
|
echo "=========================================="
|
|
echo "ModpackChecker Build Script v1.0.0"
|
|
echo "=========================================="
|
|
|
|
# Determine the extension source directory
|
|
# Blueprint may run from .blueprint/dev/ or .blueprint/extensions/modpackchecker/
|
|
if [ -d ".blueprint/extensions/modpackchecker/views" ]; then
|
|
EXT_DIR=".blueprint/extensions/modpackchecker"
|
|
elif [ -d ".blueprint/dev/views" ]; then
|
|
EXT_DIR=".blueprint/dev"
|
|
else
|
|
echo "ERROR: Cannot find extension views directory"
|
|
exit 1
|
|
fi
|
|
|
|
echo "Using extension directory: $EXT_DIR"
|
|
|
|
# ===========================================
|
|
# 1. CONSOLE WIDGET INJECTION (Right Column)
|
|
# ===========================================
|
|
echo ""
|
|
echo "--- Console Widget ---"
|
|
|
|
if [ -f "$EXT_DIR/views/server/wrapper.tsx" ]; then
|
|
cp "$EXT_DIR/views/server/wrapper.tsx" resources/scripts/components/server/ModpackVersionCard.tsx
|
|
echo "✓ Copied ModpackVersionCard.tsx"
|
|
else
|
|
echo "⚠ wrapper.tsx not found, skipping console widget"
|
|
fi
|
|
|
|
# Inject into AfterInformation.tsx (right column, after stats)
|
|
AFTER_INFO="resources/scripts/blueprint/components/Server/Terminal/AfterInformation.tsx"
|
|
if [ -f "$AFTER_INFO" ]; then
|
|
if ! grep -q "ModpackVersionCard" "$AFTER_INFO" 2>/dev/null; then
|
|
# Add import after the blueprint/import comment
|
|
sed -i '/\/\* blueprint\/import \*\//a import ModpackVersionCard from "@/components/server/ModpackVersionCard";' "$AFTER_INFO"
|
|
# Add component inside the fragment after blueprint/react comment
|
|
sed -i 's|{/\* blueprint/react \*/}|{/* blueprint/react */}\n <ModpackVersionCard />|' "$AFTER_INFO"
|
|
echo "✓ Injected ModpackVersionCard into AfterInformation.tsx"
|
|
else
|
|
echo "○ ModpackVersionCard already present in AfterInformation.tsx"
|
|
fi
|
|
else
|
|
echo "⚠ AfterInformation.tsx not found, skipping injection"
|
|
fi
|
|
|
|
# ===========================================
|
|
# 2. DASHBOARD BADGE INJECTION
|
|
# ===========================================
|
|
echo ""
|
|
echo "--- Dashboard Badge ---"
|
|
|
|
if [ -f "$EXT_DIR/views/dashboard/UpdateBadge.tsx" ]; then
|
|
mkdir -p resources/scripts/components/dashboard
|
|
cp "$EXT_DIR/views/dashboard/UpdateBadge.tsx" resources/scripts/components/dashboard/UpdateBadge.tsx
|
|
echo "✓ Copied UpdateBadge.tsx"
|
|
else
|
|
echo "⚠ UpdateBadge.tsx not found, skipping dashboard badge"
|
|
fi
|
|
|
|
# Inject into ServerRow.tsx (dashboard server list)
|
|
if ! grep -q "UpdateBadge" resources/scripts/components/dashboard/ServerRow.tsx 2>/dev/null; then
|
|
sed -i '1i import UpdateBadge from "@/components/dashboard/UpdateBadge";' resources/scripts/components/dashboard/ServerRow.tsx
|
|
# Targeted replacement: append badge after server name
|
|
sed -i 's|{server.name}</p>|{server.name}<UpdateBadge serverUuid={server.uuid} /></p>|' resources/scripts/components/dashboard/ServerRow.tsx
|
|
echo "✓ Injected UpdateBadge into ServerRow.tsx"
|
|
else
|
|
echo "○ UpdateBadge already present in ServerRow.tsx"
|
|
fi
|
|
|
|
# ===========================================
|
|
# 3. PHP SERVICE + COMMAND INJECTION
|
|
# ===========================================
|
|
# Blueprint's requests.app merge doesn't reliably create new subdirectories.
|
|
# Explicitly copy PHP classes to the main Laravel app/ tree.
|
|
echo ""
|
|
echo "--- PHP Classes ---"
|
|
|
|
mkdir -p app/Services
|
|
cp "$EXT_DIR/app/Services/LicenseService.php" app/Services/LicenseService.php
|
|
echo "✓ Copied LicenseService.php"
|
|
|
|
cp "$EXT_DIR/app/Services/ModpackApiService.php" app/Services/ModpackApiService.php
|
|
echo "✓ Copied ModpackApiService.php"
|
|
|
|
mkdir -p app/Console/Commands
|
|
cp "$EXT_DIR/app/Console/Commands/ValidateLicense.php" app/Console/Commands/ValidateLicense.php
|
|
echo "✓ Copied ValidateLicense.php"
|
|
|
|
cp "$EXT_DIR/app/Console/Commands/CheckModpackUpdates.php" app/Console/Commands/CheckModpackUpdates.php
|
|
echo "✓ Copied CheckModpackUpdates.php"
|
|
|
|
mkdir -p app/Http/Controllers
|
|
cp "$EXT_DIR/app/Http/Controllers/ModpackAPIController.php" app/Http/Controllers/ModpackAPIController.php
|
|
echo "✓ Copied ModpackAPIController.php"
|
|
|
|
# ===========================================
|
|
# 4. CLEAR CACHES
|
|
# ===========================================
|
|
echo ""
|
|
echo "--- Cache Clear ---"
|
|
php artisan optimize:clear 2>/dev/null && echo "✓ Laravel caches cleared" || echo "⚠ Cache clear skipped (non-fatal)"
|
|
|
|
echo ""
|
|
echo "=========================================="
|
|
echo "ModpackChecker injection complete!"
|
|
echo "=========================================="
|
|
echo ""
|
|
echo "Next steps:"
|
|
echo " 1. Run: yarn build:production"
|
|
echo " 2. Restart: systemctl restart php8.3-fpm"
|
|
echo " 3. Test cron: php artisan modpackchecker:check"
|
|
echo ""
|