#!/usr/bin/env bash set -euo pipefail PLUGIN_NAME="Jellyfin.Plugin.NewReleases" DEFAULT_VERSION="1.0.0.0" DEFAULT_TARGET_ABI="10.11.0.0" usage() { cat <<'EOF' Usage: ./scripts/package-new-releases-plugin.sh [options] Options: --version Plugin version (default: 1.0.0.0) --target-abi Jellyfin ABI (default: 10.10.0.0) --owner Owner for metadata (default: your-username) --category Category for metadata (default: General) --out Output directory for the zip (default: ./artifacts) --zip-name Zip file name (default: Jellyfin.Plugin.NewReleases_.zip) --source-url Direct URL to the zip on your host (required if --update-manifest) --update-manifest Update ./manifest.json with sourceUrl/checksum/timestamp/targetAbi/version Notes: - You must host the resulting zip somewhere Jellyfin can download (Gitea release asset URL, for example). - After packaging, upload the zip and set manifest.json 'sourceUrl' to the direct zip URL. EOF } VERSION="$DEFAULT_VERSION" TARGET_ABI="$DEFAULT_TARGET_ABI" OWNER="your-username" CATEGORY="General" OUT_DIR="./artifacts" ZIP_NAME="${PLUGIN_NAME}_${VERSION}.zip" UPDATE_MANIFEST="false" SOURCE_URL="" while [[ $# -gt 0 ]]; do case "$1" in --version) VERSION="$2"; shift 2 ;; --target-abi) TARGET_ABI="$2"; shift 2 ;; --owner) OWNER="$2"; shift 2 ;; --category) CATEGORY="$2"; shift 2 ;; --out) OUT_DIR="$2"; shift 2 ;; --zip-name) ZIP_NAME="$2"; shift 2 ;; --source-url) SOURCE_URL="$2"; shift 2 ;; --update-manifest) UPDATE_MANIFEST="true"; shift 1 ;; -h|--help) usage; exit 0 ;; *) echo "Unknown arg: $1"; usage; exit 1 ;; esac done if [[ -z "$ZIP_NAME" ]]; then ZIP_NAME="${PLUGIN_NAME}_${VERSION}.zip" fi SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" REPO_ROOT="$(cd "${SCRIPT_DIR}/.." && pwd)" DLL_PATH="${REPO_ROOT}/bin/Release/net8.0/${PLUGIN_NAME}.dll" PDB_PATH="${REPO_ROOT}/bin/Release/net8.0/${PLUGIN_NAME}.pdb" if [[ ! -f "$DLL_PATH" ]]; then echo "Build output not found: $DLL_PATH" echo "Run: dotnet build -c Release" exit 1 fi mkdir -p "${REPO_ROOT}/artifacts" if [[ "$OUT_DIR" == /* ]]; then OUT_DIR_ABS="$OUT_DIR" else OUT_DIR_ABS="${REPO_ROOT}/${OUT_DIR#./}" fi mkdir -p "${OUT_DIR_ABS}" TMP_DIR="$(mktemp -d)" cleanup() { rm -rf "$TMP_DIR"; } trap cleanup EXIT META_JSON_PATH="${TMP_DIR}/meta.json" ZIP_PATH="${OUT_DIR_ABS}/${ZIP_NAME}" TIMESTAMP="$(date -u +"%Y-%m-%dT%H:%M:%SZ")" cp "$DLL_PATH" "${TMP_DIR}/" if [[ -f "$PDB_PATH" ]]; then cp "$PDB_PATH" "${TMP_DIR}/" fi cat > "$META_JSON_PATH" <