mainifest test
Publish Release / build-net9 (push) Successful in 59s Details
Publish Release / build-net10 (push) Successful in 1m1s Details
Publish Release / release (push) Successful in 12s Details

mainifest test for jellyfin
This commit is contained in:
Filtik 2026-07-03 00:52:07 +02:00
parent 89fc830170
commit d5634ef864
6 changed files with 113 additions and 32 deletions

View File

@ -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<<EOF" >> $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 }}

View File

@ -1,3 +1,7 @@
<p align="center">
<img src="images/logo.png" alt="Auto Backup" width="200"/>
</p>
# 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

View File

@ -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"
}
]
}
}]

View File

@ -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": []
}
]
}