name: OpenAPI on: push: branches: - master pull_request_target: jobs: openapi-head: name: OpenAPI - HEAD runs-on: ubuntu-latest permissions: read-all steps: - name: Checkout repository uses: actions/checkout@v3 with: ref: ${{ github.event.pull_request.head.sha }} repository: ${{ github.event.pull_request.head.repo.full_name }} - name: Setup .NET Core uses: actions/setup-dotnet@v3 with: dotnet-version: '6.0.x' - name: Generate openapi.json run: dotnet test tests/Jellyfin.Server.Integration.Tests/Jellyfin.Server.Integration.Tests.csproj -c Release --filter "Jellyfin.Server.Integration.Tests.OpenApiSpecTests" - name: Upload openapi.json uses: actions/upload-artifact@v3 with: name: openapi-head retention-days: 14 if-no-files-found: error path: tests/Jellyfin.Server.Integration.Tests/bin/Release/net6.0/openapi.json openapi-base: name: OpenAPI - BASE if: ${{ github.base_ref != '' }} runs-on: ubuntu-latest permissions: read-all steps: - name: Checkout repository uses: actions/checkout@v3 with: ref: ${{ github.base_ref }} - name: Setup .NET Core uses: actions/setup-dotnet@v3 with: dotnet-version: '6.0.x' - name: Generate openapi.json run: dotnet test tests/Jellyfin.Server.Integration.Tests/Jellyfin.Server.Integration.Tests.csproj -c Release --filter "Jellyfin.Server.Integration.Tests.OpenApiSpecTests" - name: Upload openapi.json uses: actions/upload-artifact@v3 with: name: openapi-base retention-days: 14 if-no-files-found: error path: tests/Jellyfin.Server.Integration.Tests/bin/Release/net6.0/openapi.json openapi-diff: name: OpenAPI - Difference if: ${{ github.event_name == 'pull_request_target' }} runs-on: ubuntu-latest needs: - openapi-head - openapi-base steps: - name: Download openapi-head uses: actions/download-artifact@v3 with: name: openapi-head path: openapi-head - name: Download openapi-base uses: actions/download-artifact@v3 with: name: openapi-base path: openapi-base - name: Workaround openapi-diff issue run: | sed -i 's/"allOf"/"oneOf"/g' openapi-head/openapi.json sed -i 's/"allOf"/"oneOf"/g' openapi-base/openapi.json - name: Calculate OpenAPI difference uses: docker://openapitools/openapi-diff continue-on-error: true with: args: --fail-on-changed --markdown openapi-changes.md openapi-base/openapi.json openapi-head/openapi.json - id: read-diff name: Read openapi-diff output run: | body=$(cat openapi-changes.md) body="${body//'%'/'%25'}" body="${body//$'\n'/'%0A'}" body="${body//$'\r'/'%0D'}" echo ::set-output name=body::$body - name: Find difference comment uses: peter-evans/find-comment@v2 id: find-comment with: issue-number: ${{ github.event.pull_request.number }} direction: last body-includes: openapi-diff-workflow-comment - name: Reply or edit difference comment (changed) uses: peter-evans/create-or-update-comment@v2 if: ${{ steps.read-diff.outputs.body != '' }} with: issue-number: ${{ github.event.pull_request.number }} comment-id: ${{ steps.find-comment.outputs.comment-id }} edit-mode: replace body: |
Changes in OpenAPI specification found. Expand to see details. ${{ steps.read-diff.outputs.body }}
- name: Edit difference comment (unchanged) uses: peter-evans/create-or-update-comment@v2 if: ${{ steps.read-diff.outputs.body == '' && steps.find-comment.outputs.comment-id != '' }} with: issue-number: ${{ github.event.pull_request.number }} comment-id: ${{ steps.find-comment.outputs.comment-id }} edit-mode: replace body: | No changes to OpenAPI specification found. See history of this comment for previous changes.