name: Auto Release Plugin on: push: branches: - main paths-ignore: - '.gitea/**' - '.github/**' - '*.md' - 'jellyfin.ruleset' - '.gitignore' - '.editorconfig' - 'LICENSE' - 'logo.png' jobs: build-and-release: runs-on: ubuntu-latest permissions: contents: write steps: - name: Checkout code uses: actions/checkout@v6 with: token: ${{ secrets.GITHUB_TOKEN }} - name: Setup .NET uses: actions/setup-dotnet@v5 with: dotnet-version: '9.x' - name: Read Version from Manifest id: read_version run: | VERSION=$(jq -r '.[0].versions[0].version' manifest.json) CHANGELOG=$(jq -r '.[0].versions[0].changelog' manifest.json) TARGET_ABI=$(jq -r '.[0].versions[0].targetAbi' manifest.json) echo "Detected Version: $VERSION" echo "VERSION=$VERSION" >> $GITHUB_ENV echo "TARGET_ABI=$TARGET_ABI" >> $GITHUB_ENV # Also export GUID for later use PLUGIN_GUID=$(jq -r '.[0].guid' manifest.json) echo "PLUGIN_GUID=$PLUGIN_GUID" >> $GITHUB_ENV # Escape newlines in changelog for GITHUB_ENV echo "CHANGELOG<> $GITHUB_ENV echo "$CHANGELOG" >> $GITHUB_ENV echo "EOF" >> $GITHUB_ENV - name: Check if Release Already Exists id: check_release shell: bash run: | REPO_OWNER="${{ github.repository_owner }}" REPO_NAME="${{ github.event.repository.name }}" VERSION="${{ env.VERSION }}" TAG="v$VERSION" SERVER_URL="https://git.mahom03-spacecloud.de" HTTP_STATUS=$(curl -s -o /dev/null -w "%{http_code}" -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" "$SERVER_URL/api/v1/repos/$REPO_OWNER/$REPO_NAME/releases/tags/$TAG") if [ "$HTTP_STATUS" -eq 200 ]; then echo "Release $TAG already exists. Skipping release-related steps." echo "release_exists=true" >> $GITHUB_OUTPUT elif [ "$HTTP_STATUS" -eq 404 ]; then echo "No existing release for $TAG. Continuing." echo "release_exists=false" >> $GITHUB_OUTPUT else echo "Unexpected response when checking release: $HTTP_STATUS" exit 1 fi - name: Build and Zip if: steps.check_release.outputs.release_exists == 'false' shell: bash run: | # Inject version from manifest into the build dotnet build Jellyfin.Plugin.MediaBarEnhanced/Jellyfin.Plugin.MediaBarEnhanced.csproj --configuration Release --output bin/Publish /p:Version=${{ env.VERSION }} /p:AssemblyVersion=${{ env.VERSION }} cd bin/Publish zip -r Jellyfin.Plugin.MediaBarEnhanced.zip * cd ../.. # Calculate hash HASH=$(md5sum bin/Publish/Jellyfin.Plugin.MediaBarEnhanced.zip | awk '{ print $1 }') TIME=$(date -u +"%Y-%m-%dT%H:%M:%SZ") # Export variables for next steps echo "ZIP_HASH=$HASH" >> $GITHUB_ENV echo "BUILD_TIME=$TIME" >> $GITHUB_ENV echo "ZIP_PATH=bin/Publish/Jellyfin.Plugin.MediaBarEnhanced.zip" >> $GITHUB_ENV - name: Update manifest.json if: steps.check_release.outputs.release_exists == 'false' shell: bash run: | REPO_OWNER="${{ github.repository_owner }}" REPO_NAME="${{ github.event.repository.name }}" VERSION="${{ env.VERSION }}" DOWNLOAD_URL="https://git.mahom03-spacecloud.de/$REPO_OWNER/$REPO_NAME/releases/download/v$VERSION/Jellyfin.Plugin.MediaBarEnhanced.zip" echo "Updating manifest.json with:" echo "Hash: ${{ env.ZIP_HASH }}" echo "Time: ${{ env.BUILD_TIME }}" echo "Url: $DOWNLOAD_URL" jq --arg hash "${{ env.ZIP_HASH }}" \ --arg time "${{ env.BUILD_TIME }}" \ --arg url "$DOWNLOAD_URL" \ '.[0].versions[0].checksum = $hash | .[0].versions[0].timestamp = $time | .[0].versions[0].sourceUrl = $url' \ manifest.json > manifest.json.tmp && mv manifest.json.tmp manifest.json - name: Commit manifest.json if: steps.check_release.outputs.release_exists == 'false' uses: stefanzweifel/git-auto-commit-action@v7 with: commit_message: "Update manifest.json for release v${{ env.VERSION }} [skip ci]" file_pattern: manifest.json - name: Create Release if: steps.check_release.outputs.release_exists == 'false' uses: akkuman/gitea-release-action@v1 with: server_url: "https://git.mahom03-spacecloud.de" body: ${{ env.CHANGELOG }} token: ${{ secrets.GITHUB_TOKEN }} files: ${{ env.ZIP_PATH }} name: "v${{ env.VERSION }}" tag_name: "v${{ env.VERSION }}" draft: false prerelease: false # Update Message in Remote Repository - name: Checkout Central Manifest Repo if: steps.check_release.outputs.release_exists == 'false' uses: actions/checkout@v6 with: repository: ${{ github.repository_owner }}/jellyfin-plugin-manifest path: central-manifest token: ${{ secrets.JELLYFIN_PLUGIN_MANIFEST_UPDATER_PAT }} - name: Update Central Manifest if: steps.check_release.outputs.release_exists == 'false' shell: bash run: | cd central-manifest REPO_OWNER="${{ github.repository_owner }}" REPO_NAME="${{ github.event.repository.name }}" # 1. Get info from previous steps VERSION="${{ env.VERSION }}" HASH="${{ env.ZIP_HASH }}" TIME="${{ env.BUILD_TIME }}" DOWNLOAD_URL="https://git.mahom03-spacecloud.de/$REPO_OWNER/$REPO_NAME/releases/download/v$VERSION/Jellyfin.Plugin.MediaBarEnhanced.zip" # 2. Get info from env PLUGIN_GUID="${{ env.PLUGIN_GUID }}" CHANGELOG="${{ env.CHANGELOG }}" TARGET_ABI="${{ env.TARGET_ABI }}" echo "Updating Central Manifest for Plugin GUID: $PLUGIN_GUID" # 3. Update/Prepend entry in central manifest.json # Logic: # - If array is empty or new version != old version: PREPEND new entry # - If new version == old version: OVERWRITE (update) existing entry (re-release) jq --arg guid "$PLUGIN_GUID" \ --arg hash "$HASH" \ --arg time "$TIME" \ --arg url "$DOWNLOAD_URL" \ --arg ver "$VERSION" \ --arg changelog "$CHANGELOG" \ --arg abi "$TARGET_ABI" \ 'map(if .guid == $guid then if .versions[0].version != $ver then # New Version -> Prepend .versions = [{ "version": $ver, "changelog": $changelog, "targetAbi": $abi, "sourceUrl": $url, "checksum": $hash, "timestamp": $time }] + .versions else # Same Version -> Update existing (overwrite top) .versions[0].changelog = $changelog | .versions[0].targetAbi = $abi | .versions[0].sourceUrl = $url | .versions[0].checksum = $hash | .versions[0].timestamp = $time end else . end)' \ manifest.json > manifest.json.tmp && mv manifest.json.tmp manifest.json - name: Commit and Push Central Manifest if: steps.check_release.outputs.release_exists == 'false' run: | cd central-manifest git config user.name "CodeDevMLH" git config user.email "145071728+CodeDevMLH@users.noreply.github.com" # Check if there are changes if [[ -n $(git status -s) ]]; then git add manifest.json git commit -m "Auto-Update MediaBar Enhanced to v${{ env.VERSION }}" git push else echo "No changes to central manifest." fi # Update Message in Seasonals Repository # - name: Checkout Seasonal Manifest Repo # uses: actions/checkout@v6 # with: # repository: ${{ github.repository_owner }}/Jellyfin-Seasonals-Plugin # path: seasonal-manifest # token: ${{ secrets.JELLYFIN_PLUGIN_MANIFEST_UPDATER_PAT }} # - name: Update Seasonal Manifest # shell: bash # run: | # cd seasonal-manifest # REPO_OWNER="${{ github.repository_owner }}" # REPO_NAME="${{ github.event.repository.name }}" # # 1. Get info from previous steps # VERSION="${{ env.VERSION }}" # HASH="${{ env.ZIP_HASH }}" # TIME="${{ env.BUILD_TIME }}" # DOWNLOAD_URL="https://git.mahom03-spacecloud.de/$REPO_OWNER/$REPO_NAME/releases/download/v$VERSION/Jellyfin.Plugin.MediaBarEnhanced.zip" # # 2. Get info from env # PLUGIN_GUID="${{ env.PLUGIN_GUID }}" # CHANGELOG="${{ env.CHANGELOG }}" # TARGET_ABI="${{ env.TARGET_ABI }}" # echo "Updating Seasonal Manifest for Plugin GUID: $PLUGIN_GUID" # # 3. Update/Prepend entry in seasonal manifest.json # # Logic: # # - If array is empty or new version != old version: PREPEND new entry # # - If new version == old version: OVERWRITE (update) existing entry (re-release) # jq --arg guid "$PLUGIN_GUID" \ # --arg hash "$HASH" \ # --arg time "$TIME" \ # --arg url "$DOWNLOAD_URL" \ # --arg ver "$VERSION" \ # --arg changelog "$CHANGELOG" \ # --arg abi "$TARGET_ABI" \ # 'map(if .guid == $guid then # if .versions[0].version != $ver then # # New Version -> Prepend # .versions = [{ # "version": $ver, # "changelog": $changelog, # "targetAbi": $abi, # "sourceUrl": $url, # "checksum": $hash, # "timestamp": $time # }] + .versions # else # # Same Version -> Update existing (overwrite top) # .versions[0].changelog = $changelog | # .versions[0].targetAbi = $abi | # .versions[0].sourceUrl = $url | # .versions[0].checksum = $hash | # .versions[0].timestamp = $time # end # else . end)' \ # manifest.json > manifest.json.tmp && mv manifest.json.tmp manifest.json # - name: Commit and Push Seasonal Manifest # run: | # cd seasonal-manifest # git config user.name "CodeDevMLH" # git config user.email "145071728+CodeDevMLH@users.noreply.github.com" # # Check if there are changes # if [[ -n $(git status -s) ]]; then # git add manifest.json # git commit -m "Auto-Update MediaBar Enhanced to v${{ env.VERSION }}" # git push # else # echo "No changes to seasonal manifest." # fi