mainifest test
mainifest test for jellyfin
This commit is contained in:
parent
89fc830170
commit
d5634ef864
|
|
@ -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 }}
|
||||
|
|
|
|||
28
README.md
28
README.md
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
}
|
||||
]
|
||||
}
|
||||
}]
|
||||
|
|
@ -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": []
|
||||
}
|
||||
]
|
||||
}
|
||||
Loading…
Reference in New Issue