name: Auto Release Plugin on: push: branches: - main paths-ignore: - '.github/**' - 'README.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 # Escape newlines in changelog for GITHUB_ENV echo "CHANGELOG<> $GITHUB_ENV echo "$CHANGELOG" >> $GITHUB_ENV echo "EOF" >> $GITHUB_ENV - name: Build and Zip 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 Local manifest.json (Optional) shell: bash run: | REPO_OWNER="${{ github.repository_owner }}" REPO_NAME="${{ github.event.repository.name }}" VERSION="${{ env.VERSION }}" DOWNLOAD_URL="https://github.com/$REPO_OWNER/$REPO_NAME/releases/download/v$VERSION/Jellyfin.Plugin.MediaBarEnhanced.zip" echo "Updating local 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 Local manifest.json 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 uses: softprops/action-gh-release@v2 with: tag_name: "v${{ env.VERSION }}" name: "v${{ env.VERSION }}" # body: ${{ env.CHANGELOG }} files: ${{ env.ZIP_PATH }} draft: false prerelease: false generate_release_notes: true # Update Message in Remote Repository - name: Checkout Central Manifest Repo uses: actions/checkout@v4 with: repository: ${{ github.repository_owner }}/jellyfin-plugin-manifest path: central-manifest token: ${{ secrets.CENTRAL_REPO_PAT }} - name: Update Central Manifest shell: bash run: | cd central-manifest # 1. Get info from previous steps VERSION="${{ env.VERSION }}" HASH="${{ env.ZIP_HASH }}" TIME="${{ env.BUILD_TIME }}" # URL points to the RELEASE we just created in the CURRENT repo DOWNLOAD_URL="https://github.com/${{ github.repository }}/releases/download/v$VERSION/Jellyfin.Plugin.MediaBarEnhanced.zip" # 2. Extract GUID from the *built* artifact or the source manifest (in parent dir) # We use the source manifest from the checkout in '..' PLUGIN_GUID=$(jq -r '.[0].guid' ../manifest.json) echo "Updating Central Manifest for Plugin GUID: $PLUGIN_GUID" # 3. Update the specific plugin entry in the central manifest.json # This logic finds the object with matching guid, and updates its first version entry. jq --arg guid "$PLUGIN_GUID" \ --arg hash "$HASH" \ --arg time "$TIME" \ --arg url "$DOWNLOAD_URL" \ --arg ver "$VERSION" \ 'map(if .guid == $guid then .versions[0].version = $ver | .versions[0].checksum = $hash | .versions[0].timestamp = $time | .versions[0].sourceUrl = $url else . end)' \ manifest.json > manifest.json.tmp && mv manifest.json.tmp manifest.json - name: Commit and Push Central Manifest run: | cd central-manifest git config user.name "GitHub Action" git config user.email "action@github.com" # Check if there are changes if [[ -n $(git status -s) ]]; then git add manifest.json git commit -m "Update MediaBar Enhanced to v${{ env.VERSION }}" git push else echo "No changes to central manifest." fi