name: Docs OpenAPI drift check on: pull_request: branches: [main] paths: - 'api/**' - 'pipecat/**' - 'scripts/dump_docs_openapi.py' - 'docs/api-reference/openapi.json' - '.github/workflows/docs-openapi-drift.yml' concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true jobs: drift-check: runs-on: ubuntu-latest timeout-minutes: 25 steps: - name: Checkout repo (with pipecat submodule) uses: actions/checkout@v4 with: submodules: recursive - name: Set up Python 3.12 uses: actions/setup-python@v5 with: python-version: '3.12' cache: pip cache-dependency-path: | api/requirements.txt pipecat/pyproject.toml - name: Install api dependencies run: | pip install -r api/requirements.txt pip install './pipecat[cartesia,deepgram,openai,elevenlabs,groq,google,azure,sarvam,soundfile,silero,webrtc,speechmatics,openrouter,camb]' - name: Dump OpenAPI spec env: DATABASE_URL: postgresql+asyncpg://dummy:dummy@localhost/dummy REDIS_URL: redis://localhost:6379/0 ENABLE_AWS_S3: "false" DEPLOYMENT_MODE: oss run: python -u -m scripts.dump_docs_openapi - name: Check for drift run: | if ! git diff --exit-code docs/api-reference/openapi.json; then echo "::error::docs/api-reference/openapi.json is out of sync with the FastAPI app." echo "Run 'python -m scripts.dump_docs_openapi' locally (with api/.env sourced) and commit the result." exit 1 fi echo "OpenAPI spec is in sync."