123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- 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: |
- <!--openapi-diff-workflow-comment-->
- <details>
- <summary>Changes in OpenAPI specification found. Expand to see details.</summary>
- ${{ steps.read-diff.outputs.body }}
- </details>
- - 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: |
- <!--openapi-diff-workflow-comment-->
- No changes to OpenAPI specification found. See history of this comment for previous changes.
|