使用Github Action自动发布Jellyfin插件

作者:

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

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注