diff --git a/.github/workflows/compat.yml b/.github/workflows/compat.yml new file mode 100644 index 0000000000..15589bd3af --- /dev/null +++ b/.github/workflows/compat.yml @@ -0,0 +1,127 @@ +name: ABI Compatibility +on: + pull_request_target: + pull_request: + +permissions: {} + +jobs: + abi-head: + name: ABI - HEAD + runs-on: ubuntu-latest + permissions: read-all + steps: + - name: Checkout repository + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 + with: + ref: ${{ github.event.pull_request.head.sha }} + repository: ${{ github.event.pull_request.head.repo.full_name }} + + - name: Build + run: | + dotnet build Jellyfin.Server -o ./out + + - name: Upload Head + uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1 + with: + name: abi-head + retention-days: 14 + if-no-files-found: error + path: out/ + + abi-base: + name: ABI - BASE + if: ${{ github.base_ref != '' }} + runs-on: ubuntu-latest + permissions: read-all + steps: + - name: Checkout repository + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 + with: + ref: ${{ github.event.pull_request.head.sha }} + repository: ${{ github.event.pull_request.head.repo.full_name }} + fetch-depth: 0 + + - name: Checkout common ancestor + env: + HEAD_REF: ${{ github.head_ref }} + run: | + git remote add upstream https://github.com/${{ github.event.pull_request.base.repo.full_name }} + git -c protocol.version=2 fetch --prune --progress --no-recurse-submodules upstream +refs/heads/*:refs/remotes/upstream/* +refs/tags/*:refs/tags/* + ANCESTOR_REF=$(git merge-base upstream/${{ github.base_ref }} origin/$HEAD_REF) + git checkout --progress --force $ANCESTOR_REF + + - name: Build + run: | + dotnet build Jellyfin.Server -o ./out + + - name: Upload Head + uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1 + with: + name: abi-base + retention-days: 14 + if-no-files-found: error + path: out/ + + abi-diff: + permissions: + pull-requests: write # to create or update comment (peter-evans/create-or-update-comment) + + name: ABI - Difference + runs-on: ubuntu-latest + needs: + - abi-head + - abi-base + + steps: + - name: Download abi-head + uses: actions/download-artifact@c850b930e6ba138125429b7e5c93fc707a7f8427 # v4.1.4 + with: + name: abi-head + path: abi-head + + - name: Download abi-base + uses: actions/download-artifact@c850b930e6ba138125429b7e5c93fc707a7f8427 # v4.1.4 + with: + name: abi-base + path: abi-base + + - name: Setup ApiCompat + run: | + dotnet tool install --global Microsoft.DotNet.ApiCompat.Tool + + - name: Run ApiCompat + id: diff + run: | + { + echo 'body<> $GITHUB_OUTPUT + + - name: Find difference comment + uses: peter-evans/find-comment@d5fe37641ad8451bdd80312415672ba26c86575e # v3.0.0 + id: find-comment + with: + issue-number: ${{ github.event.pull_request.number }} + direction: last + body-includes: abi-diff-workflow-comment + + - name: Reply or edit difference comment (changed) + uses: peter-evans/create-or-update-comment@71345be0265236311c031f5c7866368bd1eff043 # v4.0.0 + with: + issue-number: ${{ github.event.pull_request.number }} + comment-id: ${{ steps.find-comment.outputs.comment-id }} + edit-mode: replace + token: ${{ secrets.JF_BOT_TOKEN }} + body: | + +
+ ABI Difference. + + ${{ steps.diff.outputs.body }} + +