name: Publish Release on: push: tags: - 'v*' jobs: build-net9: runs-on: ubuntu-latest env: PIP_BREAK_SYSTEM_PACKAGES: "1" steps: - uses: actions/checkout@v4 - uses: actions/setup-dotnet@v4 with: dotnet-version: | 9.0.x 10.0.x - name: Build (net9.0 / Jellyfin 10.x) uses: oddstr13/jellyfin-plugin-repository-manager@v1.1.1 id: jprm with: dotnet-target: "net9.0" - name: Remove meta.json from artifact run: zip -d "${{ steps.jprm.outputs.artifact }}" meta.json 2>/dev/null || true - uses: actions/upload-artifact@v3 with: name: build-net9 path: ${{ steps.jprm.outputs.artifact }} build-net10: runs-on: ubuntu-latest env: PIP_BREAK_SYSTEM_PACKAGES: "1" steps: - uses: actions/checkout@v4 - uses: actions/setup-dotnet@v4 with: dotnet-version: | 9.0.x 10.0.x - name: Set targetAbi for Jellyfin 12.x run: | sed -i "s/targetAbi:.*/targetAbi: \"12.0.0.0\"/" build.yaml - name: Build (net10.0 / Jellyfin 12.x) uses: oddstr13/jellyfin-plugin-repository-manager@v1.1.1 id: jprm with: dotnet-target: "net10.0" - name: Remove meta.json from artifact run: zip -d "${{ steps.jprm.outputs.artifact }}" meta.json 2>/dev/null || true - uses: actions/upload-artifact@v3 with: name: build-net10 path: ${{ steps.jprm.outputs.artifact }} release: runs-on: ubuntu-latest needs: [build-net9, build-net10] permissions: contents: write steps: - uses: actions/checkout@v4 - name: Download artifacts uses: actions/download-artifact@v3 with: path: artifacts - name: Rename artifacts run: | VER="${GITHUB_REF_NAME#v}" 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}" BASE_URL="${{ github.server_url }}/${{ github.repository }}/releases/download/${{ github.ref_name }}" NET9_FILE="artifacts/build-net9/Jellyfin-AutoBackup-${VER}-10.11.x.zip" NET10_FILE="artifacts/build-net10/Jellyfin-AutoBackup-${VER}-12.0.x.zip" TIMESTAMP=$(date -u +"%Y-%m-%dT%H:%M:%SZ") NET9_MD5=$(md5sum "${NET9_FILE}" | cut -d' ' -f1) NET10_MD5=$(md5sum "${NET10_FILE}" | cut -d' ' -f1) python3 - </dev/null || true) if [ -z "${RELEASE_ID}" ]; then RELEASE=$(curl -s "${API}/repos/${REPO}/releases/tags/${TAG}" \ -H "Authorization: token ${TOKEN}") RELEASE_ID=$(echo "${RELEASE}" | python3 -c "import sys,json; print(json.load(sys.stdin)['id'])") fi echo "Release ID: ${RELEASE_ID}" # Upload assets (delete existing with same name first) for file in \ "artifacts/build-net9/Jellyfin-AutoBackup-${VER}-10.11.x.zip" \ "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 " import sys,json assets=json.load(sys.stdin) a=next((x for x in assets if x['name']=='${NAME}'),None) print(a['id'] if a else '') " 2>/dev/null || true) if [ -n "${ASSET_ID}" ]; then echo "Deleting existing asset ${NAME} (id=${ASSET_ID})..." curl -s -X DELETE "${API}/repos/${REPO}/releases/${RELEASE_ID}/assets/${ASSET_ID}" \ -H "Authorization: token ${TOKEN}" fi echo "Uploading ${NAME}..." HTTP_CODE=$(curl -s -o /tmp/upload_response.json -w "%{http_code}" \ -X POST "${API}/repos/${REPO}/releases/${RELEASE_ID}/assets?name=${NAME}" \ -H "Authorization: token ${TOKEN}" \ -F "attachment=@${file};type=application/zip") echo "HTTP ${HTTP_CODE}: $(cat /tmp/upload_response.json)" if [ "${HTTP_CODE}" != "201" ]; then echo "Failed to upload ${NAME}" && exit 1 fi done