Chore: update manifest script (#568)

This commit is contained in:
Jason Lyu
2025-10-23 17:49:56 -04:00
committed by GitHub
parent 48229056b8
commit 5d114d7044
2 changed files with 25 additions and 6 deletions

View File

@@ -33,6 +33,7 @@ jobs:
- name: Generate Manifest
run: |
python3 -m pip install packaging
python3 scripts/manifest.py Jellyfin.Plugin.MetaTube/bin/Jellyfin.MetaTube@v${{ steps.shell.outputs.version }}.zip
- name: Publish Manifest

View File

@@ -1,21 +1,35 @@
#!/usr/bin/env python3
import hashlib
import json
import os
import sys
import xml.etree.ElementTree as ET
from datetime import datetime
from urllib.request import urlopen
from packaging.version import Version
def md5sum(filename):
def md5sum(filename) -> str:
with open(filename, 'rb') as f:
return hashlib.md5(f.read()).hexdigest()
def generate(filename, version):
def get_jellyfin_version(csproj: str) -> str:
tree = ET.parse(csproj)
root = tree.getroot()
for pkg in root.iter("PackageReference"):
if pkg.attrib.get("Include") in ("Jellyfin.Controller", "Jellyfin.Model"):
return Version(pkg.attrib.get("Version")).base_version
raise Exception("Jellyfin version not found")
def generate(filename, version, csproj) -> dict:
return {
'checksum': md5sum(filename),
'changelog': 'Auto Released by Actions',
'targetAbi': '10.9.0.0',
'targetAbi': f'{get_jellyfin_version(csproj)}.0',
'sourceUrl': 'https://github.com/metatube-community/jellyfin-plugin-metatube/releases/download/'
f'v{version}/Jellyfin.MetaTube@v{version}.zip',
'timestamp': datetime.now().strftime('%Y-%m-%dT%H:%M:%SZ'),
@@ -23,16 +37,20 @@ def generate(filename, version):
}
def main():
def main() -> None:
filename = sys.argv[1]
version = filename.split('@', maxsplit=1)[1] \
.removeprefix('v') \
.removesuffix('.zip')
with urlopen('https://raw.githubusercontent.com/metatube-community/jellyfin-plugin-metatube/dist/manifest.json') as f:
csproj = os.path.join(os.path.dirname(__file__),
"../Jellyfin.Plugin.MetaTube/Jellyfin.Plugin.MetaTube.csproj")
with urlopen(
'https://raw.githubusercontent.com/metatube-community/jellyfin-plugin-metatube/dist/manifest.json') as f:
manifest = json.load(f)
manifest[0]['versions'].insert(0, generate(filename, version))
manifest[0]['versions'].insert(0, generate(filename, version, csproj))
with open('manifest.json', 'w') as f:
json.dump(manifest, f, indent=2)