From d5634ef8646aa8b4d0dcf577f79b94f89afb49e5 Mon Sep 17 00:00:00 2001 From: Filtik Date: Fri, 3 Jul 2026 00:52:07 +0200 Subject: [PATCH] mainifest test mainifest test for jellyfin --- .gitea/workflows/publish.yml | 85 ++++++++++++++++++- Plugin.cs => Core/Plugin.cs | 0 .../PluginServiceRegistrar.cs | 0 README.md | 28 +++++- manifest.json | 12 +-- plugin-info.json | 20 ----- 6 files changed, 113 insertions(+), 32 deletions(-) rename Plugin.cs => Core/Plugin.cs (100%) rename PluginServiceRegistrar.cs => Core/PluginServiceRegistrar.cs (100%) delete mode 100644 plugin-info.json diff --git a/.gitea/workflows/publish.yml b/.gitea/workflows/publish.yml index 4781f2a..f625fd1 100644 --- a/.gitea/workflows/publish.yml +++ b/.gitea/workflows/publish.yml @@ -71,6 +71,16 @@ jobs: contents: write steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Get changelog from commit message + run: | + echo "CHANGELOG<> $GITHUB_ENV + git log -1 --format="%B" "${{ github.sha }}" >> $GITHUB_ENV + echo "EOF" >> $GITHUB_ENV + - name: Download artifacts uses: actions/download-artifact@v3 with: @@ -82,6 +92,75 @@ jobs: mv artifacts/build-net9/*.zip "artifacts/build-net9/Jellyfin-AutoBackup-${VER}-10.11.x.zip" mv artifacts/build-net10/*.zip "artifacts/build-net10/Jellyfin-AutoBackup-${VER}-12.0.x.zip" + - name: Update manifest.json + run: | + VER="${GITHUB_REF_NAME#v}" + export VER + export BASE_URL="${{ github.server_url }}/${{ github.repository }}/releases/download/${{ github.ref_name }}" + export TIMESTAMP=$(date -u +"%Y-%m-%dT%H:%M:%SZ") + export NET9_MD5=$(md5sum "artifacts/build-net9/Jellyfin-AutoBackup-${VER}-10.11.x.zip" | cut -d' ' -f1) + export NET10_MD5=$(md5sum "artifacts/build-net10/Jellyfin-AutoBackup-${VER}-12.0.x.zip" | cut -d' ' -f1) + + python3 - <<'PYEOF' + import json, os + + ver = os.environ['VER'] + base_url = os.environ['BASE_URL'] + timestamp = os.environ['TIMESTAMP'] + net9_md5 = os.environ['NET9_MD5'] + net10_md5 = os.environ['NET10_MD5'] + changelog = os.environ.get('CHANGELOG', '').strip() + guid = '1175543c-6d20-4cfa-93a6-1476836df34c' + + with open('manifest.json') as f: + manifest = json.load(f) + + plugin = next((p for p in manifest if p['guid'] == guid), None) + if not plugin: + plugin = { + 'guid': guid, + 'name': 'Auto Backup', + 'description': 'Automated scheduled ZIP backups of Jellyfin data.', + 'overview': 'Automated scheduled ZIP backups of Jellyfin data.', + 'owner': 'Filtik', + 'category': 'General', + 'imageUrl': 'https://gitea.home.filtik.de/Filtik/Jellyfin-AutoBackup/raw/branch/main/images/logo.png', + 'versions': [] + } + manifest.append(plugin) + + plugin['versions'] = [v for v in plugin['versions'] if v['version'] != ver] + plugin['versions'].insert(0, { + 'version': ver, 'changelog': changelog, 'targetAbi': '12.0.0.0', + 'sourceUrl': f'{base_url}/Jellyfin-AutoBackup-{ver}-12.0.x.zip', + 'checksum': net10_md5, 'timestamp': timestamp + }) + plugin['versions'].insert(0, { + 'version': ver, 'changelog': changelog, 'targetAbi': '10.11.0.0', + 'sourceUrl': f'{base_url}/Jellyfin-AutoBackup-{ver}-10.11.x.zip', + 'checksum': net9_md5, 'timestamp': timestamp + }) + + with open('manifest.json', 'w') as f: + json.dump(manifest, f, indent=4) + print('manifest.json updated') + PYEOF + env: + CHANGELOG: ${{ env.CHANGELOG }} + + - name: Commit manifest.json + run: | + git config user.name "gitea-actions" + git config user.email "actions@noreply.local" + cp manifest.json /tmp/manifest_updated.json + git fetch origin main + git checkout -f main + git pull --rebase origin main + cp /tmp/manifest_updated.json manifest.json + git add manifest.json + git diff --staged --quiet || git commit -m "chore: update manifest for ${{ github.ref_name }}" + git push origin main + - name: Create release and upload assets run: | API="${{ github.server_url }}/api/v1" @@ -89,12 +168,13 @@ jobs: TAG="${{ github.ref_name }}" TOKEN="${{ secrets.GITHUB_TOKEN }}" VER="${GITHUB_REF_NAME#v}" + BODY=$(python3 -c "import sys,json,os; print(json.dumps(os.environ.get('CHANGELOG','').strip()))") # Create release or get existing RELEASE=$(curl -s -X POST "${API}/repos/${REPO}/releases" \ -H "Authorization: token ${TOKEN}" \ -H "Content-Type: application/json" \ - -d "{\"tag_name\":\"${TAG}\",\"name\":\"${TAG}\"}") + -d "{\"tag_name\":\"${TAG}\",\"name\":\"${TAG}\",\"body\":${BODY}}") RELEASE_ID=$(echo "${RELEASE}" | python3 -c "import sys,json; d=json.load(sys.stdin); print(d.get('id',''))" 2>/dev/null || true) if [ -z "${RELEASE_ID}" ]; then RELEASE=$(curl -s "${API}/repos/${REPO}/releases/tags/${TAG}" \ @@ -109,7 +189,6 @@ jobs: "artifacts/build-net10/Jellyfin-AutoBackup-${VER}-12.0.x.zip"; do NAME=$(basename "${file}") - # Delete existing asset if present ASSETS=$(curl -s "${API}/repos/${REPO}/releases/${RELEASE_ID}/assets" \ -H "Authorization: token ${TOKEN}") ASSET_ID=$(echo "${ASSETS}" | python3 -c " @@ -134,3 +213,5 @@ jobs: echo "Failed to upload ${NAME}" && exit 1 fi done + env: + CHANGELOG: ${{ env.CHANGELOG }} diff --git a/Plugin.cs b/Core/Plugin.cs similarity index 100% rename from Plugin.cs rename to Core/Plugin.cs diff --git a/PluginServiceRegistrar.cs b/Core/PluginServiceRegistrar.cs similarity index 100% rename from PluginServiceRegistrar.cs rename to Core/PluginServiceRegistrar.cs diff --git a/README.md b/README.md index 0e51143..0c4a617 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,7 @@ +

+ Auto Backup +

+ # Auto Backup A Jellyfin plugin that automatically creates scheduled backups of your Jellyfin data at the times you define. @@ -21,13 +25,29 @@ A Jellyfin plugin that automatically creates scheduled backups of your Jellyfin ## Installation -1. Download the `Jellyfin.Plugin.AutoBackup.dll` for your Jellyfin version from the [Releases](../../releases) page -2. Place the DLL in your Jellyfin plugins folder (e.g. `/config/plugins/AutoBackup/`) -3. Restart Jellyfin -4. Open **Dashboard → Plugins → Auto Backup** to configure your schedules +### Via Plugin Repository (recommended) + +1. Open Jellyfin **Dashboard → Plugins → Repositories** +2. Add the following URL as a new repository: + ``` + https://gitea.home.filtik.de/Filtik/Jellyfin-AutoBackup/raw/branch/main/manifest.json + ``` +3. Go to **Dashboard → Plugins → Catalog** and search for **Auto Backup** +4. Install and restart Jellyfin + +### Manual + +1. Download the ZIP for your Jellyfin version from the [Releases](../../releases) page: + - `Jellyfin-AutoBackup-*-10.11.x.zip` for Jellyfin 10.x + - `Jellyfin-AutoBackup-*-12.0.x.zip` for Jellyfin 12.x +2. Extract the `Jellyfin.Plugin.AutoBackup.dll` from the ZIP +3. Place the DLL in your Jellyfin plugins folder (e.g. `/config/plugins/AutoBackup/`) +4. Restart Jellyfin ## Configuration +After installation, open **Auto Backup** from the Jellyfin sidebar or via **Dashboard → Plugins**. + ### Schedules tab Each schedule has: - **Label** — a name for the schedule diff --git a/manifest.json b/manifest.json index 7a56fa3..199398a 100644 --- a/manifest.json +++ b/manifest.json @@ -1,4 +1,4 @@ -{ +[{ "guid": "1175543c-6d20-4cfa-93a6-1476836df34c", "name": "Auto Backup", "description": "Automated scheduled ZIP backups of Jellyfin data.", @@ -12,16 +12,16 @@ "changelog": "", "targetAbi": "10.11.0.0", "sourceUrl": "https://gitea.home.filtik.de/Filtik/Jellyfin-AutoBackup/releases/download/v0.1.0.0/Jellyfin-AutoBackup-0.1.0.0-10.11.x.zip", - "checksum": "225f559ef08e7814026973b47d6dc3fb", - "timestamp": "2026-07-02T22:14:25Z" + "checksum": "4a3c6289275b0043ccf2b5b8255bf418", + "timestamp": "2026-07-02T22:30:35Z" }, { "version": "0.1.0.0", "changelog": "", "targetAbi": "12.0.0.0", "sourceUrl": "https://gitea.home.filtik.de/Filtik/Jellyfin-AutoBackup/releases/download/v0.1.0.0/Jellyfin-AutoBackup-0.1.0.0-12.0.x.zip", - "checksum": "486304ed89a6b948ed69f6e799c5e595", - "timestamp": "2026-07-02T22:14:25Z" + "checksum": "75198ea800d9a787d4d41cc9fba1e580", + "timestamp": "2026-07-02T22:30:35Z" } ] -} \ No newline at end of file +}] \ No newline at end of file diff --git a/plugin-info.json b/plugin-info.json deleted file mode 100644 index f1983f3..0000000 --- a/plugin-info.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "guid": "1175543c-6d20-4cfa-93a6-1476836df34c", - "name": "Auto Backup", - "overview": "Automated scheduled ZIP backups for Jellyfin data.", - "description": "Creates configurable scheduled backups of your Jellyfin database, metadata, subtitles, and trickplay files. Supports unlimited independent timer schedules with flexible recurrence options (hourly, daily, weekly, bi-weekly, monthly) and automatic retention cleanup.", - "owner": "Filtik", - "category": "General", - "imageUrl": "", - "versions": [ - { - "version": "1.0.0.0", - "changelog": "Initial release.", - "targetAbi": "10.9.0.0", - "sourceUrl": "", - "checksum": "", - "timestamp": "2026-06-29T00:00:00Z", - "dependencies": [] - } - ] -}