From 2415f288f7c89f37364e285dca19c9f6b4e58241 Mon Sep 17 00:00:00 2001 From: Wendell Jones Date: Wed, 8 Jul 2026 14:45:49 -0400 Subject: [PATCH] Refactor rebuild process and enhance service management in rebuild-solution.sh --- rebuild-solution.sh | 54 +++++++++++++++++---- scripts/linux/Weekly-Performance-Monitor.sh | 8 +-- scripts/linux/rebuild-solution.sh | 30 ------------ 3 files changed, 50 insertions(+), 42 deletions(-) delete mode 100644 scripts/linux/rebuild-solution.sh diff --git a/rebuild-solution.sh b/rebuild-solution.sh index 3b809c0f..8e090ca3 100644 --- a/rebuild-solution.sh +++ b/rebuild-solution.sh @@ -25,11 +25,45 @@ PUBLISH_DIR="/opt/jellyfin" LOG_DIR="/var/log/jellyfin" CONFIG_DIR="/etc/jellyfin" +# --- Functions --- +build_and_publish() { + echo "Building and publishing the .NET project..." + + # Restore, build, and publish the .NET project + if ! dotnet restore "$SOLUTION_FILE" -r linux-x64 || \ + ! dotnet build "$SOLUTION_FILE" --configuration Release || \ + ! dotnet publish "Jellyfin.Server/Jellyfin.Server.csproj" --configuration Release --self-contained true -r linux-x64 --output "$PUBLISH_DIR"; then + echo "Error: Build or publish failed." >&2 + return 1 + fi + + echo "Project built and published successfully to the '$PUBLISH_DIR' directory." + return 0 +} + +# --- Service Management --- +SERVICE_NAME="jellyfin.service" + + +# Check if Jellyfin service is running and stop it +if systemctl is-active --quiet "$SERVICE_NAME"; then + echo "Jellyfin service is running. Stopping it now..." + sudo systemctl stop "$SERVICE_NAME" + echo "Jellyfin service stopped." +fi + # --- Script --- +# Stop Jellyfin service if it's running +if systemctl is-active --quiet "$SERVICE_NAME"; then + echo "Jellyfin service is running. Stopping it now..." + sudo systemctl stop "$SERVICE_NAME" + echo "Jellyfin service stopped." +fi + echo "Logging in to Gitea and fetching latest changes..." -# Use Git to pull the latest changes. +# Use Git to pull the latest changes. # This assumes you have already cloned the repository and are in the repo directory. # For authentication, Git can use a .netrc file, or you can configure Git to use a credential helper. # For simplicity, this script assumes that your environment is already configured to authenticate with Gitea. @@ -38,14 +72,11 @@ git pull origin "$BRANCH" echo "Latest changes fetched successfully." -echo "Building and publishing the .NET project..." - -# Restore, build, and publish the .NET project -dotnet restore "$SOLUTION_FILE" -r linux-x64 -dotnet build "$SOLUTION_FILE" --configuration Release -dotnet publish "Jellyfin.Server/Jellyfin.Server.csproj" --configuration Release --self-contained true -r linux-x64 --output "$PUBLISH_DIR" - -echo "Project built and published successfully to the '$PUBLISH_DIR' directory." +# Attempt to build and publish. If it fails, exit. +if ! build_and_publish; then + echo "Build and publish failed. Not starting Jellyfin service." + exit 1 +fi echo "Checking for required directories..." @@ -61,3 +92,8 @@ fi echo "Directory check complete." +# Restart Jellyfin service +echo "Restarting Jellyfin service..." +sudo systemctl start "$SERVICE_NAME" +echo "Jellyfin service restarted successfully." + diff --git a/scripts/linux/Weekly-Performance-Monitor.sh b/scripts/linux/Weekly-Performance-Monitor.sh index 6424b83e..3b4937e9 100644 --- a/scripts/linux/Weekly-Performance-Monitor.sh +++ b/scripts/linux/Weekly-Performance-Monitor.sh @@ -91,7 +91,9 @@ done set -e # Exit on error SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )" -PROJECT_ROOT="$(dirname "$SCRIPT_DIR")" +PROJECT_ROOT="$(dirname "$(dirname "$SCRIPT_DIR")")" +PROGRAM_DIR="$PROJECT_ROOT" # Assuming program directory is the project root +SQL_DIR="$PROGRAM_DIR/sql/diagnostics" # Load database configuration source "./db-config.sh" @@ -116,7 +118,7 @@ invoke_diagnostic_report() { local output_file="$1" write_color_output "\nRunning comprehensive diagnostics..." "$CYAN" - if PGPASSWORD=$DB_PASS $PSQL_PATH -h $DB_HOST -p $DB_PORT -U $DB_USER -d $DB_NAME -f "$PROJECT_ROOT/sql/diagnostics.sql" > "$output_file" 2>&1; then + if PGPASSWORD=$DB_PASS $PSQL_PATH -h $DB_HOST -p $DB_PORT -U $DB_USER -d $DB_NAME -f "$SQL_DIR/diagnostics.sql" > "$output_file" 2>&1; then write_color_output "[OK] Diagnostics completed: $output_file" "$GREEN" else write_color_output "[WARN] Diagnostics completed with warnings" "$YELLOW" @@ -127,7 +129,7 @@ invoke_query_analysis() { local output_file="$1" write_color_output "\nAnalyzing slow queries..." "$CYAN" - if PGPASSWORD=$DB_PASS $PSQL_PATH -h $DB_HOST -p $DB_PORT -U $DB_USER -d $DB_NAME -f "$PROJECT_ROOT/sql/query-analysis.sql" > "$output_file" 2>&1; then + if PGPASSWORD=$DB_PASS $PSQL_PATH -h $DB_HOST -p $DB_PORT -U $DB_USER -d $DB_NAME -f "$SQL_DIR/query-analysis.sql" > "$output_file" 2>&1; then write_color_output "[OK] Query analysis completed: $output_file" "$GREEN" else write_color_output "[WARN] Query analysis completed with warnings" "$YELLOW" diff --git a/scripts/linux/rebuild-solution.sh b/scripts/linux/rebuild-solution.sh deleted file mode 100644 index d7782599..00000000 --- a/scripts/linux/rebuild-solution.sh +++ /dev/null @@ -1,30 +0,0 @@ -#!/bin/bash -# Linux script to rebuild the Jellyfin solution properly -# This script cleans and rebuilds in the correct order to resolve CS0006 metadata errors - -echo -e "\e[36mStarting Jellyfin solution rebuild...\e[0m" - -# Step 1: Clean the solution -echo -e "\n\e[33m[1/3] Cleaning solution...\e[0m" -dotnet clean Jellyfin.sln --configuration Debug - -# Remove obj and bin directories to ensure clean state -echo -e "\n\e[33m[2/3] Removing build artifacts...\e[0m" -find . -name bin -type d -exec rm -rf {} + -find . -name obj -type d -exec rm -rf {} + - -# Step 3: Restore NuGet packages -echo -e "\n\e[33m[3/3] Restoring NuGet packages...\e[0m" -dotnet restore Jellyfin.sln - -# Step 4: Build the solution -echo -e "\n\e[33m[4/4] Building solution...\e[0m" -dotnet build Jellyfin.sln --configuration Debug --no-restore - -echo -e "\n\e[32mBuild complete!\e[0m" -echo -e "\e[36mIf you still see errors, try building specific projects in this order:\e[0m" -echo -e "\e[90m 1. Jellyfin.Database.Implementations\e[0m" -echo -e "\e[90m 2. Jellyfin.Database.Providers.Postgres\e[0m" -echo -e "\e[90m 3. Jellyfin.Server.Implementations\e[0m" -echo -e "\e[90m 4. Emby.Server.Implementations\e[0m" -echo -e "\e[90m 5. Jellyfin.Server\e[0m"