Floatplane channel plugin for Jellyfin 10.10.x: browse, HLS proxy, cookie session, CI release
Some checks failed
release / build-release (push) Has been cancelled
Some checks failed
release / build-release (push) Has been cancelled
- IChannel: creators -> sub-channels -> video posts (public listing API, search mapped) - IRequiresMediaInfoCallback -> signed proxy URLs; stream controller rewrites HLS so the AES-128 key is fetched server-side with the session cookie, segments stay on the CDN - delivery/info cached per token lifetime and throttled (~2/min) - config page: paste sails.sid + validate, extra creators, quality, search test - scripts/package.sh -> plugin folder + zip + md5 + manifest.json; Gitea release workflow - research docs, HAR analysis (HAR itself gitignored), install-pi5.sh Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
60
scripts/package.sh
Executable file
60
scripts/package.sh
Executable file
@@ -0,0 +1,60 @@
|
||||
#!/usr/bin/env bash
|
||||
# Builds the plugin and produces what Jellyfin needs to install it:
|
||||
# build/Floatplane_<ver>/ plugin folder (DLL + meta.json) -> copy into <jellyfin>/plugins/
|
||||
# build/floatplane_<ver>.zip plugin package -> release asset
|
||||
# build/floatplane_<ver>.zip.md5 checksum
|
||||
# build/manifest.json plugin-repository manifest (needs BASE_URL)
|
||||
#
|
||||
# Usage: scripts/package.sh [version] [base-url-for-zip]
|
||||
# version defaults to the version in build.yaml; CI passes X.Y.Z.N
|
||||
# base-url URL prefix where the zip will be downloadable (for manifest.json sourceUrl)
|
||||
set -euo pipefail
|
||||
cd "$(dirname "$0")/.."
|
||||
|
||||
VERSION="${1:-$(sed -n 's/^version: *"\(.*\)"/\1/p' build.yaml)}"
|
||||
BASE_URL="${2:-}"
|
||||
NAME=$(sed -n 's/^name: *"\(.*\)"/\1/p' build.yaml)
|
||||
GUID=$(sed -n 's/^guid: *"\(.*\)"/\1/p' build.yaml)
|
||||
ABI=$(sed -n 's/^targetAbi: *"\(.*\)"/\1/p' build.yaml)
|
||||
OVERVIEW=$(sed -n 's/^overview: *"\(.*\)"/\1/p' build.yaml)
|
||||
CATEGORY=$(sed -n 's/^category: *"\(.*\)"/\1/p' build.yaml)
|
||||
OWNER=$(sed -n 's/^owner: *"\(.*\)"/\1/p' build.yaml)
|
||||
# multi-line "description: >" and "changelog: >" blocks → single line
|
||||
DESCRIPTION=$(awk '/^description: >/{f=1;next} /^[a-z]/{f=0} f{gsub(/^ +/,""); printf "%s ", $0}' build.yaml | sed 's/ *$//')
|
||||
CHANGELOG=$(awk '/^changelog: >/{f=1;next} /^[a-z]/{f=0} f{gsub(/^ +/,""); printf "%s ", $0}' build.yaml | sed 's/ *$//')
|
||||
SLUG=$(echo "$NAME" | tr '[:upper:]' '[:lower:]' | tr -c 'a-z0-9\n' '_')
|
||||
TS=$(date -u +%Y-%m-%dT%H:%M:%SZ)
|
||||
|
||||
rm -rf build/publish "build/${NAME}_${VERSION}" "build/${SLUG}_${VERSION}.zip"*
|
||||
mkdir -p build
|
||||
dotnet publish Jellyfin.Plugin.Floatplane/Jellyfin.Plugin.Floatplane.csproj \
|
||||
-c Release -o build/publish -p:Version="$VERSION" -p:AssemblyVersion="$VERSION" -p:FileVersion="$VERSION" --nologo
|
||||
|
||||
PLUGIN_DIR="build/${NAME}_${VERSION}"
|
||||
mkdir -p "$PLUGIN_DIR"
|
||||
cp build/publish/Jellyfin.Plugin.Floatplane.dll "$PLUGIN_DIR/"
|
||||
jq -n --arg guid "$GUID" --arg name "$NAME" --arg desc "$DESCRIPTION" --arg ov "$OVERVIEW" \
|
||||
--arg owner "$OWNER" --arg cat "$CATEGORY" --arg ver "$VERSION" --arg cl "$CHANGELOG" \
|
||||
--arg abi "$ABI" --arg ts "$TS" \
|
||||
'{guid:$guid, name:$name, description:$desc, overview:$ov, owner:$owner, category:$cat,
|
||||
version:$ver, changelog:$cl, targetAbi:$abi, timestamp:$ts, status:"Active", autoUpdate:true,
|
||||
imagePath:"", assemblies:["Jellyfin.Plugin.Floatplane.dll"]}' > "$PLUGIN_DIR/meta.json"
|
||||
|
||||
ZIP="build/${SLUG}_${VERSION}.zip"
|
||||
(cd "$PLUGIN_DIR" && zip -q -j "../../$ZIP" Jellyfin.Plugin.Floatplane.dll meta.json)
|
||||
MD5=$(md5sum "$ZIP" | cut -d' ' -f1)
|
||||
echo "$MD5 $(basename "$ZIP")" > "$ZIP.md5"
|
||||
|
||||
if [ -n "$BASE_URL" ]; then
|
||||
jq -n --arg guid "$GUID" --arg name "$NAME" --arg desc "$DESCRIPTION" --arg ov "$OVERVIEW" \
|
||||
--arg owner "$OWNER" --arg cat "$CATEGORY" --arg ver "$VERSION" --arg cl "$CHANGELOG" \
|
||||
--arg abi "$ABI" --arg ts "$TS" --arg md5 "$MD5" --arg url "${BASE_URL%/}/$(basename "$ZIP")" \
|
||||
'[{guid:$guid, name:$name, description:$desc, overview:$ov, owner:$owner, category:$cat, imageUrl:"",
|
||||
versions:[{version:$ver, changelog:$cl, targetAbi:$abi, sourceUrl:$url, checksum:$md5, timestamp:$ts}]}]' \
|
||||
> build/manifest.json
|
||||
fi
|
||||
|
||||
echo "plugin folder: $PLUGIN_DIR"
|
||||
echo "package: $ZIP (md5 $MD5)"
|
||||
[ -n "$BASE_URL" ] && echo "manifest: build/manifest.json -> $BASE_URL"
|
||||
exit 0
|
||||
Reference in New Issue
Block a user