Skip to content
Open
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 46 additions & 0 deletions .github/workflows/python_lint.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
name: Linters
permissions:
contents: read

on:
push:
Expand Down Expand Up @@ -76,3 +78,47 @@ jobs:

- name: Run mypy
run: poetry run mypy --config-file mypy.ini airbyte_cdk

openapi-check:
name: OpenAPI Spec Check
runs-on: ubuntu-24.04
steps:
# Common steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Poetry
uses: snok/install-poetry@v1
with:
version: "2.0.1"
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.10"
cache: "poetry"
- name: Install dependencies
run: poetry install --all-extras

# Job-specific step(s):
- name: Generate OpenAPI spec
run: poetry run manifest-server generate-openapi

- name: Check for changes
id: git-diff
run: |
git diff --quiet && echo "No changes to commit" || echo "changes=true" >> $GITHUB_OUTPUT
shell: bash

- name: Fail if OpenAPI spec is outdated
if: steps.git-diff.outputs.changes == 'true'
run: |
echo "❌ OpenAPI spec is out of date!"
echo ""
echo "The manifest-server API models have been modified, but the OpenAPI spec hasn't been updated."
echo "The following files have changes:"
git diff --name-only
echo ""
echo "Please run the following command and commit the changes:"
echo ""
echo " poetry run manifest-server generate-openapi"
echo ""
exit 1
12 changes: 12 additions & 0 deletions airbyte_cdk/manifest_server/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,18 @@ The generated OpenAPI specification is consumed by other applications and tools
- Provide API documentation and validation
- Enable integration with API development tools

### Automated OpenAPI Spec Validation

The project includes a GitHub Actions check that automatically verifies the OpenAPI spec is up-to-date whenever API models are modified. This prevents developers from forgetting to regenerate the spec after making changes to request/response types.

If you modify any files in `airbyte_cdk/manifest_server/api_models/`, make sure to run:

```bash
poetry run manifest-server generate-openapi
```

The CI will fail if the committed OpenAPI spec doesn't match what would be generated from the current API models.

### Interactive API Documentation

When running, interactive API documentation is available at:
Expand Down
36 changes: 36 additions & 0 deletions airbyte_cdk/manifest_server/openapi.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -296,6 +296,10 @@ components:
$ref: '#/components/schemas/Manifest'
config:
$ref: '#/components/schemas/ConnectorConfig'
context:
anyOf:
- $ref: '#/components/schemas/RequestContext'
- type: 'null'
type: object
required:
- manifest
Expand Down Expand Up @@ -330,6 +334,10 @@ components:
$ref: '#/components/schemas/Manifest'
config:
$ref: '#/components/schemas/ConnectorConfig'
context:
anyOf:
- $ref: '#/components/schemas/RequestContext'
- type: 'null'
type: object
required:
- manifest
Expand Down Expand Up @@ -357,6 +365,10 @@ components:
minimum: 1.0
title: Stream Limit
default: 100
context:
anyOf:
- $ref: '#/components/schemas/RequestContext'
- type: 'null'
type: object
required:
- manifest
Expand Down Expand Up @@ -457,10 +469,29 @@ components:
- manifest
title: ManifestResponse
description: Response containing a manifest.
RequestContext:
properties:
workspace_id:
anyOf:
- type: string
- type: 'null'
title: Workspace Id
project_id:
anyOf:
- type: string
- type: 'null'
title: Project Id
type: object
title: RequestContext
description: Optional context information for tracing and observability.
ResolveRequest:
properties:
manifest:
$ref: '#/components/schemas/Manifest'
context:
anyOf:
- $ref: '#/components/schemas/RequestContext'
- type: 'null'
type: object
required:
- manifest
Expand Down Expand Up @@ -542,6 +573,7 @@ components:
title: Pages
slice_descriptor:
anyOf:
- type: object
- type: string
- type: 'null'
title: Slice Descriptor
Expand Down Expand Up @@ -601,6 +633,10 @@ components:
minimum: 1.0
title: Slice Limit
default: 5
context:
anyOf:
- $ref: '#/components/schemas/RequestContext'
- type: 'null'
type: object
required:
- manifest
Expand Down
Loading