#!/usr/bin/env bash # # Packages the plugin for one Jellyfin generation with jprm. # # scripts/package.sh <10.11|12> [output-dir] # # The plugin is built once per generation: Jellyfin 10.11 loads a net9.0 assembly and Jellyfin 12 a # net10.0 one, and each package's meta.json must carry the matching targetAbi or the server refuses # to load it. jprm takes the framework on the command line but reads targetAbi from build.yaml, so # this stamps build.yaml for the chosen generation and restores it afterwards. # # Jellyfin installs the highest manifest version whose targetAbi it satisfies, so when both packages # are published from one release the 12 package must carry the higher version number. The release # workflow does that by reserving the fourth version segment for the generation (X.Y.Z.11 and # X.Y.Z.12). set -euo pipefail target="${1:?usage: $0 <10.11|12> [output-dir]}" version="${2:?usage: $0 <10.11|12> [output-dir]}" output="${3:-artifacts}" case "$target" in 10.11) framework="net9.0"; target_abi="10.11.0.0" ;; 12) framework="net10.0"; target_abi="12.0.0.0" ;; *) echo "unknown Jellyfin target '$target' (expected 10.11 or 12)" >&2; exit 2 ;; esac repo_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" cd "$repo_root" cp build.yaml build.yaml.orig trap 'mv build.yaml.orig build.yaml' EXIT sed -i \ -e "s/^version:.*/version: \"${version}\"/" \ -e "s/^targetAbi:.*/targetAbi: \"${target_abi}\"/" \ -e "s/^framework:.*/framework: \"${framework}\"/" \ -e "s/^dotnet_framework:.*/dotnet_framework: \"${framework}\"/" \ build.yaml mkdir -p "$output" jprm --verbosity=debug plugin build . \ --output "$output" \ --version "$version" \ --dotnet-framework "$framework"