Files
pgsql-jellyfin/rebuild-solution.sh
T

100 lines
2.8 KiB
Bash

#!/bin/bash
# Exit immediately if a command exits with a non-zero status.
set -e
# --- Configuration ---
# Gitea credentials should be set as environment variables for security
# export GITEA_USERNAME="your_gitea_username"
# export GITEA_TOKEN="your_gitea_token"
# or use .netrc file for authentication
# Gitea repository URL
GITEA_REPO_URL="https://gitea.wpjones.com/wjones/pgsql-jellyfin.git"
# Branch to use
BRANCH="main"
# .NET Solution file
SOLUTION_FILE="Jellyfin.sln"
# Publish directory
PUBLISH_DIR="/opt/jellyfin"
# Log and config directories
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.
# 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.
git checkout "$BRANCH"
git pull origin "$BRANCH"
echo "Latest changes fetched successfully."
# 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..."
if [ ! -d "$LOG_DIR" ]; then
echo "Creating log directory: $LOG_DIR"
mkdir -p "$LOG_DIR"
fi
if [ ! -d "$CONFIG_DIR" ]; then
echo "Creating config directory: $CONFIG_DIR"
mkdir -p "$CONFIG_DIR"
fi
echo "Directory check complete."
# Restart Jellyfin service
echo "Restarting Jellyfin service..."
sudo systemctl start "$SERVICE_NAME"
echo "Jellyfin service restarted successfully."