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>
184 lines
8.4 KiB
YAML
184 lines
8.4 KiB
YAML
name: release
|
|
|
|
# Bygger Jellyfin-pluginen (AnyCPU .NET 8 -> samma DLL for x64 och Pi5/arm64),
|
|
# kor testerna och publicerar en release pa Gitea:
|
|
# - varje push till master -> rullande release "latest"
|
|
# - tagg vX.Y.Z -> versionerad release (plugin-version X.Y.Z.0)
|
|
# - workflow_dispatch -> valfri tag (tom = latest)
|
|
# Assets: floatplane_<ver>.zip (+.md5), manifest.json (Jellyfins plugin-
|
|
# repository-format) och install-pi5.sh. manifest.json laddas ALLTID upp
|
|
# till "latest" sa att URL:en nedan alltid pekar pa nyaste versionen:
|
|
# https://gitea.brasse-pc.eu/brasse/jellyfin-plugin-floatplane/releases/download/latest/manifest.json
|
|
#
|
|
# Kors pa brasse-linux01-runnern (label linux-amd64, catthehacker/ubuntu:act-latest).
|
|
# Bygget ar IL-only sa arkitekturen spelar ingen roll, men Pi5:n ska inte
|
|
# belastas med byggen. .NET-SDK:t installeras med dotnet-install.sh eftersom
|
|
# runner-imagen saknar dotnet (och dotnet/sdk-imagen saknar node for actions).
|
|
on:
|
|
push:
|
|
branches: [master]
|
|
tags: ["v*"]
|
|
workflow_dispatch:
|
|
inputs:
|
|
tag:
|
|
description: "Release-tag (lamna tom for 'latest')"
|
|
required: false
|
|
|
|
env:
|
|
DOTNET_CLI_TELEMETRY_OPTOUT: "1"
|
|
DOTNET_NOLOGO: "1"
|
|
DOTNET_SKIP_FIRST_TIME_EXPERIENCE: "1"
|
|
REPO_URL: https://gitea.brasse-pc.eu/brasse/jellyfin-plugin-floatplane
|
|
|
|
jobs:
|
|
build-release:
|
|
runs-on: linux-amd64
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v4
|
|
with:
|
|
fetch-depth: 0
|
|
|
|
- name: Installera verktyg (zip, jq, curl)
|
|
run: |
|
|
set -euo pipefail
|
|
apt-get update -qq
|
|
DEBIAN_FRONTEND=noninteractive apt-get install -y -qq --no-install-recommends zip jq curl ca-certificates >/dev/null
|
|
git config --global --add safe.directory '*'
|
|
|
|
- name: Cache NuGet-paket
|
|
uses: actions/cache@v4
|
|
with:
|
|
path: ~/.nuget/packages
|
|
key: nuget-${{ hashFiles('**/*.csproj') }}
|
|
restore-keys: nuget-
|
|
|
|
- name: Installera .NET 8 SDK
|
|
run: |
|
|
set -euo pipefail
|
|
curl -fsSL https://dot.net/v1/dotnet-install.sh -o /tmp/dotnet-install.sh
|
|
bash /tmp/dotnet-install.sh --channel 8.0 --install-dir "$HOME/.dotnet"
|
|
echo "$HOME/.dotnet" >> "$GITHUB_PATH"
|
|
echo "DOTNET_ROOT=$HOME/.dotnet" >> "$GITHUB_ENV"
|
|
"$HOME/.dotnet/dotnet" --version
|
|
|
|
- name: Bestam release-tag och plugin-version
|
|
id: t
|
|
run: |
|
|
set -euo pipefail
|
|
case "$GITHUB_REF" in
|
|
refs/tags/*) T="$GITHUB_REF_NAME" ;;
|
|
*) T="${{ inputs.tag }}"; [ -z "$T" ] && T="latest" ;;
|
|
esac
|
|
# Jellyfin kraver en fyrdelad System.Version: vX.Y.Z -> X.Y.Z.0, annars 0.1.0.<run>
|
|
case "$T" in
|
|
v[0-9]*.[0-9]*.[0-9]*) V="${T#v}.0" ;;
|
|
*) V="0.1.0.${{ github.run_number }}" ;;
|
|
esac
|
|
echo "tag=$T" >> "$GITHUB_OUTPUT"
|
|
echo "version=$V" >> "$GITHUB_OUTPUT"
|
|
echo "bygger release: $T (plugin-version $V)"
|
|
|
|
- name: Tester
|
|
run: |
|
|
set -euo pipefail
|
|
if [ -d Jellyfin.Plugin.Floatplane.Tests ]; then
|
|
dotnet test Jellyfin.Plugin.Floatplane.Tests -c Release --nologo
|
|
else
|
|
echo "inget testprojekt annu - hoppar over"
|
|
fi
|
|
|
|
- name: Paketera (zip + meta.json + manifest.json)
|
|
env:
|
|
TAG: ${{ steps.t.outputs.tag }}
|
|
VERSION: ${{ steps.t.outputs.version }}
|
|
run: |
|
|
set -euo pipefail
|
|
scripts/package.sh "$VERSION" "$REPO_URL/releases/download/$TAG"
|
|
ls -la build
|
|
cat build/manifest.json
|
|
|
|
- name: Skapa/uppdatera Gitea-release + ladda upp assets
|
|
env:
|
|
REPO: ${{ github.repository }}
|
|
TAG: ${{ steps.t.outputs.tag }}
|
|
VERSION: ${{ steps.t.outputs.version }}
|
|
TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
run: |
|
|
set -euo pipefail
|
|
# gitea-d finns bara pa Pi5:ns dockernat; harifran anvands publika adressen
|
|
API=http://gitea-d:3000/api/v1
|
|
curl -sf -m 5 "$API/version" >/dev/null 2>&1 || API=https://gitea.brasse-pc.eu/api/v1
|
|
echo "API: $API"
|
|
auth() { curl -s -H "Authorization: token $TOKEN" "$@"; }
|
|
|
|
ZIP="floatplane_${VERSION}.zip"
|
|
cp build/manifest.json build/manifest.json.keep
|
|
BODY="Jellyfin Floatplane plugin $TAG (version $VERSION, commit ${GITHUB_SHA:0:10}).
|
|
|
|
Byggd for Jellyfin 10.10.x (.NET 8, targetAbi 10.10.0.0). En DLL for x64 och arm64 (Pi5).
|
|
|
|
Installera via plugin-repository (rekommenderat):
|
|
Jellyfin Dashboard -> Plugins -> Repositories -> + -> URL:
|
|
$REPO_URL/releases/download/latest/manifest.json
|
|
Sedan Plugins -> Catalog -> Floatplane -> Install, starta om Jellyfin.
|
|
|
|
Manuell installation pa en host med linuxserver/jellyfin-containern:
|
|
curl -fsSL $REPO_URL/releases/download/$TAG/install-pi5.sh | sh
|
|
(TAG=... JELLYFIN_CONFIG_DIR=... JELLYFIN_CONTAINER=... och --dry-run stods, se skriptet.)
|
|
|
|
Efter installation: Dashboard -> Plugins -> Floatplane -> klistra in sails.sid-cookien."
|
|
|
|
# --- release for TAG -------------------------------------------------
|
|
if [ "$TAG" = "latest" ]; then
|
|
# rullande release: ta bort den gamla sa att taggen foljer master
|
|
rid=$(auth "$API/repos/$REPO/releases/tags/$TAG" | jq -r '.id // empty')
|
|
[ -n "$rid" ] && auth -X DELETE "$API/repos/$REPO/releases/$rid" -o /dev/null
|
|
auth -X DELETE "$API/repos/$REPO/tags/$TAG" -o /dev/null || true
|
|
JSON=$(jq -n --arg t "$TAG" --arg c "$GITHUB_SHA" --arg n "latest ($VERSION)" --arg b "$BODY" \
|
|
'{tag_name:$t, target_commitish:$c, name:$n, body:$b, prerelease:true}')
|
|
else
|
|
JSON=$(jq -n --arg t "$TAG" --arg n "$TAG ($VERSION)" --arg b "$BODY" '{tag_name:$t, name:$n, body:$b}')
|
|
fi
|
|
RESP=$(auth -X POST "$API/repos/$REPO/releases" -H 'Content-Type: application/json' -d "$JSON")
|
|
rid=$(echo "$RESP" | jq -r '.id // empty')
|
|
[ -z "$rid" ] && rid=$(auth "$API/repos/$REPO/releases/tags/$TAG" | jq -r '.id // empty')
|
|
[ -n "$rid" ] && [ "$rid" != "null" ] || { echo "kunde inte skapa release: $RESP"; exit 1; }
|
|
echo "release id: $rid"
|
|
|
|
upload() { # upload <release-id> <asset-name> <local-file>
|
|
local r="$1" name="$2" file="$3" aid
|
|
aid=$(auth "$API/repos/$REPO/releases/$r/assets" | jq -r ".[] | select(.name==\"$name\") | .id")
|
|
if [ -n "$aid" ] && [ "$aid" != "null" ]; then
|
|
auth -X DELETE "$API/repos/$REPO/releases/$r/assets/$aid" -o /dev/null
|
|
fi
|
|
echo "laddar upp $name -> release $r ..."
|
|
auth -X POST "$API/repos/$REPO/releases/$r/assets?name=$name" -F "attachment=@$file" -o /dev/null -w " -> HTTP %{http_code}\n"
|
|
}
|
|
|
|
upload "$rid" "$ZIP" "build/$ZIP"
|
|
upload "$rid" "$ZIP.md5" "build/$ZIP.md5"
|
|
upload "$rid" "manifest.json" "build/manifest.json"
|
|
upload "$rid" "install-pi5.sh" "install-pi5.sh"
|
|
echo "klart: https://gitea.brasse-pc.eu/$REPO/releases/tag/$TAG"
|
|
|
|
# --- manifest.json aven till "latest" vid taggad release --------------
|
|
# Repository-URL:en i Jellyfin pekar pa latest/manifest.json; den ska
|
|
# alltid lista den nyaste versionen. sourceUrl i manifestet pekar redan
|
|
# pa den versionerade releasen, sa zippen behover inte dubbleras.
|
|
if [ "$TAG" != "latest" ]; then
|
|
lid=$(auth "$API/repos/$REPO/releases/tags/latest" | jq -r '.id // empty')
|
|
if [ -z "$lid" ] || [ "$lid" = "null" ]; then
|
|
LJSON=$(jq -n --arg c "$GITHUB_SHA" --arg n "latest ($VERSION)" --arg b "$BODY" \
|
|
'{tag_name:"latest", target_commitish:$c, name:$n, body:$b, prerelease:true}')
|
|
lid=$(auth -X POST "$API/repos/$REPO/releases" -H 'Content-Type: application/json' -d "$LJSON" | jq -r '.id // empty')
|
|
fi
|
|
if [ -n "$lid" ] && [ "$lid" != "null" ]; then
|
|
upload "$lid" "manifest.json" "build/manifest.json.keep"
|
|
upload "$lid" "install-pi5.sh" "install-pi5.sh"
|
|
echo "manifest.json uppdaterat pa latest: $REPO_URL/releases/download/latest/manifest.json"
|
|
else
|
|
echo "::warning::kunde inte hitta/skapa latest-releasen for manifest.json"
|
|
fi
|
|
fi
|