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" MINIO_PUBLIC_ENDPOINT: http://localhost:9000 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." - name: Send Slack notification - Failure if: failure() uses: slackapi/slack-github-action@v1.26.0 env: SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} with: payload: | { "text": "❌ Dograh Docs OpenAPI drift check failed on ${{ github.ref_name }} by ${{ github.actor }} - <${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}|View Logs>" }