使用Github Action自动发布Jellyfin插件

本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

转载自夜明的孤行灯

本文链接地址: https://www.huangyunkun.com/2024/10/11/auto-deploy-jellyfin-plugin/



Jellyfin自定义插件需要一个meta.json,内容大致如下

{
    "category": "Metadata",
    "guid": "a3a07da4-ae5a-4d4a-a843-5aa7e3ba0a62",
    "name": "HappyMovie",
    "description": "Get metadata from tmdb.",
    "owner": "htynkn",
    "overview": "Get metadata from tmdb.",
    "targetAbi": "10.9.0.0",
    "timestamp": "2024-10-10T13:46:00Z",
    "version": "1.0.1.4"
}

其中targetAbi、timestamp、version字段是每个版本都不同的,其他部分可以写死。由于这些信息都可以从C#项目中获取,这里用py脚本来获取。

tree = ET.parse("Jellyfin.Plugin.HappyMovie/Jellyfin.Plugin.HappyMovie.csproj")
version = tree.find("./PropertyGroup/AssemblyVersion").text
targetAbi = tree.find("./ItemGroup/*[@Include='Jellyfin.Model']").attrib["Version"]
timestamp = datetime.now().strftime("%Y-%m-%dT%H:%M:%SZ")

meta = {
    "category": "Metadata",
    "guid": "a3a07da4-ae5a-4d4a-a843-5aa7e3ba0a62",
    "name": "HappyMovie",
    "description": "Get metadata from tmdb.",
    "owner": "htynkn",
    "overview": "Get metadata from tmdb.",
    "targetAbi": f"{targetAbi}.0",
    "timestamp": timestamp,
    "version": version
}

另外由于插件有外部依赖,需要拷贝dll到最终产出物中,脚本添加相关拷贝最后打包

subprocess.run([
    "dotnet",
    "build",
    "Jellyfin.Plugin.HappyMovie/Jellyfin.Plugin.HappyMovie.csproj",
    "--configuration",
    "Release"
])

shutil.copy("Jellyfin.Plugin.HappyMovie/bin/Release/net8.0/Jellyfin.Plugin.HappyMovie.dll", f"release/{version}/")
shutil.copy(f"{Path.home()}/.nuget/packages/yove.proxy/1.1.1/lib/netstandard2.0/Yove.Proxy.dll", f"release/{version}/")
shutil.copy(f"{Path.home()}/.nuget/packages/tmdblib/2.2.0/lib/netstandard2.0/TMDbLib.dll", f"release/{version}/")

shutil.make_archive(f"release/happymovie_{version}", "zip", f"release/{version}/")

一般发布新版本的时候我们会打一个tag,可以基于这个特性驱动Github Action

name: release

on:
  push:
    tags:
      - '*'

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout repository
        uses: actions/checkout@v2
      - name: Setup .NET
        uses: actions/setup-dotnet@v1
        with:
          dotnet-version: 8.0.x
      - name: Set up Python 3
        uses: actions/setup-python@v2
        with:
          python-version: '3.x'

      - name: Execute build script
        run: |
          chmod +x ./package.py
          ./package.py

      - name: Create Release
        id: create_release
        uses: actions/create-release@v1
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          tag_name: ${{ github.ref }}
          release_name: Release ${{ github.ref_name }}
          draft: true
          prerelease: false

      - name: Upload Release Asset
        uses: actions/upload-release-asset@v1
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          upload_url: ${{ steps.create_release.outputs.upload_url }}
          asset_path: ./release/happymovie_${{ github.ref_name }}.zip
          asset_name: happymovie_${{ github.ref_name }}.zip
          asset_content_type: application/zip


本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

转载自夜明的孤行灯

本文链接地址: https://www.huangyunkun.com/2024/10/11/auto-deploy-jellyfin-plugin/

发表评论