Skip to content

Commit 451ce82

Browse files
authored
Merge branch 'main' into aj/feat/unprivileged-discover-for-declarative-static-schemas
2 parents dd94e86 + 312f2e1 commit 451ce82

File tree

111 files changed

+7026
-1862
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

111 files changed

+7026
-1862
lines changed

.github/pr-welcome-community.md

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
## 👋 Welcome to the Airbyte Python CDK!
2+
3+
Thank you for your contribution from **{{ .repo_name }}**! We're excited to have you in the Airbyte community.
4+
5+
### Testing This CDK Version
6+
7+
You can test this version of the CDK using the following:
8+
9+
```bash
10+
# Run the CLI from this branch:
11+
uvx 'git+https://github.com/airbytehq/airbyte-python-cdk.git@{{ .branch_name }}#egg=airbyte-python-cdk[dev]' --help
12+
13+
# Update a connector to use the CDK from this branch ref:
14+
cd airbyte-integrations/connectors/source-example
15+
poe use-cdk-branch {{ .branch_name }}
16+
```
17+
18+
### Helpful Resources
19+
20+
- [Contributing Guidelines](https://docs.airbyte.com/contributing-to-airbyte/)
21+
- [CDK API Reference](https://airbytehq.github.io/airbyte-python-cdk/)
22+
23+
### PR Slash Commands
24+
25+
As needed or by request, Airbyte Maintainers can execute the following slash commands on your PR:
26+
27+
- `/autofix` - Fixes most formatting and linting issues
28+
- `/poetry-lock` - Updates poetry.lock file
29+
- `/test` - Runs connector tests with the updated CDK
30+
31+
If you have any questions, feel free to ask in the PR comments or join our [Slack community](https://airbytehq.slack.com/).
32+

.github/pr-welcome-internal.md

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
## 👋 Greetings, Airbyte Team Member!
2+
3+
Here are some helpful tips and reminders for your convenience.
4+
5+
### Testing This CDK Version
6+
7+
You can test this version of the CDK using the following:
8+
9+
```bash
10+
# Run the CLI from this branch:
11+
uvx 'git+https://github.com/airbytehq/airbyte-python-cdk.git@{{ .branch_name }}#egg=airbyte-python-cdk[dev]' --help
12+
13+
# Update a connector to use the CDK from this branch ref:
14+
cd airbyte-integrations/connectors/source-example
15+
poe use-cdk-branch {{ .branch_name }}
16+
```
17+
18+
### Helpful Resources
19+
20+
- [CDK API Reference](https://airbytehq.github.io/airbyte-python-cdk/)
21+
22+
### PR Slash Commands
23+
24+
Airbyte Maintainers can execute the following slash commands on your PR:
25+
26+
- `/autofix` - Fixes most formatting and linting issues
27+
- `/poetry-lock` - Updates poetry.lock file
28+
- `/test` - Runs connector tests with the updated CDK
29+
- `/poe <command>` - Runs any poe command in the CDK environment
30+
31+
[📝 _Edit this welcome message._](https://github.com/airbytehq/airbyte-python-cdk/blob/main/.github/pr-welcome-internal.md)

.github/workflows/connector-tests.yml

Lines changed: 80 additions & 103 deletions
Original file line numberDiff line numberDiff line change
@@ -72,28 +72,26 @@ jobs:
7272
cdk_extra: n/a
7373
- connector: source-shopify
7474
cdk_extra: n/a
75-
# Chargebee is being flaky:
76-
# - connector: source-chargebee
77-
# cdk_extra: n/a
78-
# This one is behind in CDK updates and can't be used as tests until it is updated:
79-
# - connector: destination-pinecone
80-
# cdk_extra: vector-db-based
8175
- connector: source-google-drive
8276
cdk_extra: file-based
8377
- connector: destination-motherduck
84-
cdk_extra: sql
85-
# ZenDesk currently failing (as of 2024-12-02)
86-
# TODO: Re-enable once fixed
87-
# - connector: source-zendesk-support
78+
# For now, we mark as 'n/a' to always test this connector
79+
cdk_extra: n/a # change to 'sql' to test less often
80+
# source-amplitude failing for unrelated issue "date too far back"
81+
# e.g. https://github.com/airbytehq/airbyte-python-cdk/actions/runs/16053716569/job/45302638848?pr=639
82+
# - connector: source-amplitude
8883
# cdk_extra: n/a
89-
# TODO: These are manifest connectors and won't work as expected until we
90-
# add `--use-local-cdk` support for manifest connectors.
91-
- connector: source-amplitude
84+
- connector: source-intercom
9285
cdk_extra: n/a
9386
- connector: source-pokeapi
9487
cdk_extra: n/a
9588

96-
name: "Check: '${{matrix.connector}}' (skip=${{needs.cdk_changes.outputs['src'] == 'false' || needs.cdk_changes.outputs[matrix.cdk_extra] == 'false'}})"
89+
# CDK Tests cannot build the Connector object (constructor args not optional).
90+
# - connector: source-zendesk-support
91+
# cdk_extra: n/a
92+
93+
name: "${{ needs.cdk_changes.outputs[matrix.cdk_extra] == 'false' && 'Skipped Check' || 'Check' }}: ${{matrix.connector}}"
94+
if: needs.cdk_changes.outputs['src'] == 'true'
9795
permissions:
9896
checks: write
9997
contents: write # Required for creating commit statuses
@@ -125,110 +123,89 @@ jobs:
125123
repository: airbytehq/airbyte
126124
ref: master
127125
path: airbyte
126+
128127
- name: Set up Python
128+
if: steps.no_changes.outputs.status != 'cancelled'
129129
uses: actions/setup-python@v5
130130
with:
131131
python-version: "3.11"
132-
# Create initial pending status for test report
133-
- name: Create Pending Test Report Status
132+
133+
- name: Set up `uv`
134+
if: steps.no_changes.outputs.status != 'cancelled'
135+
uses: astral-sh/[email protected]
136+
137+
- name: Set up `poe`
138+
if: steps.no_changes.outputs.status != 'cancelled'
139+
run: |
140+
uv tool install poethepoet
141+
142+
- name: Set up Poetry
143+
if: steps.no_changes.outputs.status != 'cancelled'
144+
uses: Gr1N/setup-poetry@v9
145+
with:
146+
poetry-version: "2.0.1"
147+
148+
- name: Get Connector Language
149+
if: steps.no_changes.outputs.status != 'cancelled'
150+
working-directory: airbyte/airbyte-integrations/connectors/${{ matrix.connector }}
151+
run: |
152+
# Get the language of the connector from the metadata file
153+
CONNECTOR_LANGUAGE=$(poe -qq get-language)
154+
echo "CONNECTOR_LANGUAGE=$CONNECTOR_LANGUAGE" | tee -a $GITHUB_ENV
155+
156+
- name: Install CDK with Poetry
134157
if: steps.no_changes.outputs.status != 'cancelled'
135-
env:
136-
GH_TOKEN: ${{ secrets.GH_PAT_MAINTENANCE_OCTAVIA }}
137158
run: |
138-
HEAD_SHA="${{ github.event.pull_request.head.sha || github.sha }}"
139-
gh api \
140-
--method POST \
141-
-H "Accept: application/vnd.github+json" \
142-
-H "X-GitHub-Api-Version: 2022-11-28" \
143-
repos/${{ github.repository }}/statuses/$HEAD_SHA \
144-
-f state="pending" \
145-
-f description="Running connector tests..." \
146-
-f context="${{ matrix.connector }} Test Report"
147-
148-
- name: Test Connector
159+
cd airbyte-python-cdk
160+
poetry install --all-extras
161+
162+
- name: Fetch Connector Secrets
149163
if: steps.no_changes.outputs.status != 'cancelled'
150164
timeout-minutes: 90
165+
working-directory: airbyte-python-cdk
151166
env:
152167
GCP_GSM_CREDENTIALS: ${{ secrets.GCP_GSM_CREDENTIALS }}
153168
POETRY_DYNAMIC_VERSIONING_BYPASS: "0.0.0"
154169
run: |
155-
cd airbyte
156-
make tools.airbyte-ci.install
157-
airbyte-ci \
158-
--ci-report-bucket-name=airbyte-ci-reports-multi \
159-
connectors \
160-
--name ${{matrix.connector}} \
161-
--use-local-cdk \
162-
test \
163-
--fail-fast \
164-
--skip-step qa_checks \
165-
--skip-step connector_live_tests
166-
167-
- name: Evaluate Test
168-
id: evaluate_output
169-
if: always() && steps.no_changes.outputs.status != 'cancelled'
170+
poetry run airbyte-cdk secrets fetch ${{ matrix.connector }}
171+
172+
- name: Bump to Dev Branch CDK [Python Connectors]
173+
if: env.CONNECTOR_LANGUAGE == 'python'
174+
working-directory: airbyte/airbyte-integrations/connectors/${{ matrix.connector }}
170175
run: |
171-
# save job output json file as ci step output
172-
json_output_file=$(find airbyte/airbyte-ci/connectors/pipelines/pipeline_reports -name 'output.json' -print -quit)
173-
job_output=$(cat ${json_output_file})
174-
success=$(echo ${job_output} | jq -r '.success')
175-
failed_step=$(echo ${job_output} | jq -r '.failed_steps | select(length > 0) | .[0] // "None"')
176-
run_duration=$(echo ${job_output} | jq -r '.run_duration')
177-
html_report_url=$(echo ${job_output} | jq -r '.html_report_url')
178-
echo "## Job Output for ${{matrix.connector}}" >> $GITHUB_STEP_SUMMARY
179-
echo "- [HTML Report](${html_report_url})" >> $GITHUB_STEP_SUMMARY
180-
echo "- Success: ${success}" >> $GITHUB_STEP_SUMMARY
181-
echo "- Test Duration: $(printf "%.0f" ${run_duration})s" >> $GITHUB_STEP_SUMMARY
182-
if [ "${success}" != "true" ]; then
183-
echo "- Failed Step: ${failed_step}" >> $GITHUB_STEP_SUMMARY
184-
fi
185-
echo -e "\n[Download Job Output](${{steps.upload_job_output.outputs.artifact-url}})" >> $GITHUB_STEP_SUMMARY
186-
if [ "${success}" != "true" ]; then
187-
echo "::error::Test failed for connector '${{ matrix.connector }}' on step '${failed_step}'. "
188-
exit 1
189-
fi
190-
echo "See the execution report for details: ${html_report_url}"
191-
echo "success=${success}" >> $GITHUB_OUTPUT
192-
echo "html_report_url=${html_report_url}" >> $GITHUB_OUTPUT
176+
echo "Using CDK ref ${{ github.event.pull_request.head.sha || github.sha }}"
177+
poe use-cdk-branch ${{ github.event.pull_request.head.sha || github.sha }}
178+
poetry install --all-extras
193179
194-
# Update the test report status with results
195-
- name: Update Test Report Status
196-
if: always() && steps.no_changes.outputs.status != 'cancelled' && steps.evaluate_output.outcome == 'success'
180+
- name: Run Unit Tests [Python Connectors]
181+
if: env.CONNECTOR_LANGUAGE == 'python'
182+
working-directory: airbyte/airbyte-integrations/connectors/${{ matrix.connector }}
183+
run: |
184+
poe test-unit-tests
185+
186+
- name: Run FAST Standard Tests [Python Connectors]
187+
if: env.CONNECTOR_LANGUAGE == 'python'
188+
working-directory: airbyte/airbyte-integrations/connectors/${{ matrix.connector }}
197189
env:
198-
GH_TOKEN: ${{ secrets.GH_PAT_MAINTENANCE_OCTAVIA }}
190+
GCP_GSM_CREDENTIALS: ${{ secrets.GCP_GSM_CREDENTIALS }}
191+
POETRY_DYNAMIC_VERSIONING_BYPASS: "0.0.0"
199192
run: |
200-
HEAD_SHA="${{ github.event.pull_request.head.sha || github.sha }}"
201-
gh api \
202-
--method POST \
203-
-H "Accept: application/vnd.github+json" \
204-
-H "X-GitHub-Api-Version: 2022-11-28" \
205-
repos/${{ github.repository }}/statuses/$HEAD_SHA \
206-
-f state="${{ steps.evaluate_output.outputs.success == 'true' && 'success' || 'failure' }}" \
207-
-f target_url="${{ steps.evaluate_output.outputs.html_report_url }}" \
208-
-f description="Click Details to view the test report" \
209-
-f context="${{ matrix.connector }} Test Report"
210-
211-
# Create failure status if report generation failed
212-
- name: Create Report Generation Failed Status
213-
if: always() && steps.no_changes.outputs.status != 'cancelled' && steps.evaluate_output.outcome != 'success'
193+
poetry run airbyte-cdk connector test
194+
195+
- name: Run FAST Standard Tests [Manifest-Only Connectors]
196+
if: env.CONNECTOR_LANGUAGE == 'manifest-only'
197+
working-directory: airbyte-python-cdk
214198
env:
215-
GH_TOKEN: ${{ secrets.GH_PAT_MAINTENANCE_OCTAVIA }}
199+
GCP_GSM_CREDENTIALS: ${{ secrets.GCP_GSM_CREDENTIALS }}
200+
POETRY_DYNAMIC_VERSIONING_BYPASS: "0.0.0"
216201
run: |
217-
HEAD_SHA="${{ github.event.pull_request.head.sha || github.sha }}"
218-
gh api \
219-
--method POST \
220-
-H "Accept: application/vnd.github+json" \
221-
-H "X-GitHub-Api-Version: 2022-11-28" \
222-
repos/${{ github.repository }}/statuses/$HEAD_SHA \
223-
-f state="failure" \
224-
-f description="Failed to run connector tests." \
225-
-f context="${{ matrix.connector }} Test Report"
226-
227-
# Upload the job output to the artifacts
228-
- name: Upload Job Output
229-
id: upload_job_output
230-
if: always() && steps.no_changes.outputs.status != 'cancelled'
231-
uses: actions/upload-artifact@v4
232-
with:
233-
name: ${{matrix.connector}}-job-output
234-
path: airbyte/airbyte-ci/connectors/pipelines/pipeline_reports
202+
poetry run airbyte-cdk connector test ${{ matrix.connector }}
203+
204+
- name: Container Build and Test [All Connectors]
205+
if: steps.no_changes.outputs.status != 'cancelled'
206+
working-directory: airbyte-python-cdk
207+
env:
208+
GCP_GSM_CREDENTIALS: ${{ secrets.GCP_GSM_CREDENTIALS }}
209+
POETRY_DYNAMIC_VERSIONING_BYPASS: "0.0.0"
210+
run: |
211+
poetry run airbyte-cdk image test ${{ matrix.connector }}

.github/workflows/pypi_publish.yml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -292,7 +292,6 @@ jobs:
292292
set -euo pipefail
293293
PREVIOUS_VERSION=$(cat oss/airbyte-connector-builder-resources/CDK_VERSION)
294294
sed -i "s/${PREVIOUS_VERSION}/${VERSION}/g" "oss/airbyte-connector-builder-server/Dockerfile"
295-
sed -i "s/${PREVIOUS_VERSION}/${VERSION}/g" "cloud/airbyte-connector-builder-server-wrapped/Dockerfile"
296295
sed -i "s/airbyte-cdk==${PREVIOUS_VERSION}/airbyte-cdk==${VERSION}/g" oss/airbyte-connector-builder-server/requirements.in
297296
echo ${VERSION} > oss/airbyte-connector-builder-resources/CDK_VERSION
298297
cd oss/airbyte-connector-builder-server

.github/workflows/pytest_fast.yml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,15 @@ jobs:
7070
poetry run coverage html -d htmlcov
7171
poetry run coverage xml -o htmlcov/coverage.xml
7272
73+
- name: Publish Test Results
74+
uses: EnricoMi/publish-unit-test-result-action@v2
75+
if: always() && !cancelled()
76+
continue-on-error: true
77+
with:
78+
check_name: "PyTest Results (Fast)"
79+
large_files: true
80+
files: |
81+
build/test-results/**/*.xml
7382
- name: Upload coverage to GitHub Artifacts
7483
if: always()
7584
uses: actions/upload-artifact@v4

.github/workflows/pytest_matrix.yml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,15 @@ jobs:
9393
poetry run coverage html -d htmlcov
9494
poetry run coverage xml -o htmlcov/coverage.xml
9595
96+
- name: Publish Test Results
97+
uses: EnricoMi/publish-unit-test-result-action@v2
98+
if: always() && !cancelled() && steps.changes.outputs.src == 'true' && matrix.python-version == '3.11'
99+
continue-on-error: true
100+
with:
101+
check_name: "PyTest Results (Full)"
102+
large_files: true
103+
files: |
104+
build/test-results/**/*.xml
96105
- name: Upload coverage to GitHub Artifacts
97106
if: always() && steps.changes.outputs.src == 'true'
98107
uses: actions/upload-artifact@v4

.github/workflows/python_lint.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ jobs:
2626
- name: Install dependencies
2727
run: poetry install --all-extras
2828

29-
# Job-specifc step(s):
29+
# Job-specific step(s):
3030
- name: Run lint check
3131
run: poetry run ruff check .
3232

@@ -49,9 +49,9 @@ jobs:
4949
- name: Install dependencies
5050
run: poetry install --all-extras
5151

52-
# Job-specifc step(s):
52+
# Job-specific step(s):
5353
- name: Check code format
54-
run: poetry run ruff format --check .
54+
run: poetry run ruff format --diff .
5555

5656
mypy-check:
5757
name: MyPy Check

.github/workflows/test-command.yml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,15 @@ jobs:
113113
--verbose
114114
-m "flaky and not super_slow"
115115
116+
- name: Publish Test Results
117+
uses: EnricoMi/publish-unit-test-result-action@v2
118+
if: always() && !cancelled() && matrix.python-version == '3.11'
119+
continue-on-error: true
120+
with:
121+
check_name: "PyTest Results (On-Demand)"
122+
large_files: true
123+
files: |
124+
build/test-results/**/*.xml
116125
- name: Post CI Success to GitHub
117126
run: |
118127
curl --request POST \

0 commit comments

Comments
 (0)