From 2cd5a34a53a58d2ccacd4b889bfb6b154aa19d3a Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Tue, 23 Jun 2026 06:21:45 +0000 Subject: [PATCH 1/8] fix(providers/airbyte): migrate from requests.Session to httpx.Client for airbyte-api>=1.0 airbyte-api 1.0.0rc2 switched its HTTP layer from requests to httpx. The client parameter now requires an httpx-compatible HttpClient protocol and no longer accepts requests.Session. Changes: - Replace requests.Session proxy setup with httpx.Client(mounts=...) - Update pyproject.toml: airbyte-api>=1.0.0rc2, httpx>=0.28.1, drop requests - Update test to assert isinstance(client, httpx.Client) instead of checking .proxies attribute (not available on httpx.Client) Co-Authored-By: AJ Steers --- providers/airbyte/pyproject.toml | 4 ++-- .../providers/airbyte/hooks/airbyte.py | 20 ++++++++++++++++--- .../tests/unit/airbyte/hooks/test_airbyte.py | 7 +++++-- 3 files changed, 24 insertions(+), 7 deletions(-) diff --git a/providers/airbyte/pyproject.toml b/providers/airbyte/pyproject.toml index ca9ce963abbbf..df8c28221c08a 100644 --- a/providers/airbyte/pyproject.toml +++ b/providers/airbyte/pyproject.toml @@ -61,8 +61,8 @@ requires-python = ">=3.10" dependencies = [ "apache-airflow>=2.11.0", "apache-airflow-providers-common-compat>=1.12.0", - "airbyte-api>=0.52.0", - "requests>=2.32.0", + "airbyte-api>=1.0.0rc2", + "httpx>=0.28.1", ] [dependency-groups] diff --git a/providers/airbyte/src/airflow/providers/airbyte/hooks/airbyte.py b/providers/airbyte/src/airflow/providers/airbyte/hooks/airbyte.py index a30012d8394ba..0e0b69e0bf8b7 100644 --- a/providers/airbyte/src/airflow/providers/airbyte/hooks/airbyte.py +++ b/providers/airbyte/src/airflow/providers/airbyte/hooks/airbyte.py @@ -20,10 +20,10 @@ import time from typing import Any, TypeVar +import httpx from airbyte_api import AirbyteAPI from airbyte_api.api import CancelJobRequest, GetJobRequest from airbyte_api.models import JobCreateRequest, JobStatusEnum, JobTypeEnum, SchemeClientCredentials, Security -from requests import Session from airflow.providers.common.compat.sdk import AirflowException, BaseHook @@ -110,8 +110,22 @@ def create_api_session(self) -> AirbyteAPI: client = None if self.conn["proxies"]: self.log.debug("Creating client proxy...") - client = Session() - client.proxies = self.conn["proxies"] + proxies = self.conn["proxies"] + # airbyte-api >= 1.0 requires an httpx-compatible client. + # httpx supports per-protocol proxies via transport mounts. + mounts = {} + if isinstance(proxies, dict): + for scheme, proxy_url in proxies.items(): + # Normalize scheme keys to httpx mount format (e.g. "http" -> "http://") + key = scheme if "://" in scheme else f"{scheme}://" + mounts[key] = httpx.HTTPTransport(proxy=proxy_url) + else: + # Single proxy URL string — apply to all traffic + mounts = { + "http://": httpx.HTTPTransport(proxy=proxies), + "https://": httpx.HTTPTransport(proxy=proxies), + } + client = httpx.Client(mounts=mounts) return AirbyteAPI( server_url=self.conn["host"], diff --git a/providers/airbyte/tests/unit/airbyte/hooks/test_airbyte.py b/providers/airbyte/tests/unit/airbyte/hooks/test_airbyte.py index 030c5de5bdb9c..40d23aa008967 100644 --- a/providers/airbyte/tests/unit/airbyte/hooks/test_airbyte.py +++ b/providers/airbyte/tests/unit/airbyte/hooks/test_airbyte.py @@ -239,12 +239,15 @@ def test_create_api_session_with_proxy(self): """ Test the creation of the API session with proxy settings. """ + import httpx + # Create a new AirbyteHook instance hook = AirbyteHook(airbyte_conn_id=self.airbyte_conn_id_with_proxy) - # Check if the session is created correctly + # Check if the session is created correctly with an httpx client assert hook.airbyte_api is not None - assert hook.airbyte_api.sdk_configuration.client.proxies == self._mock_proxy["proxies"] + client = hook.airbyte_api.sdk_configuration.client + assert isinstance(client, httpx.Client) def test_create_api_session_without_credentials(self): """Test that a session without OAuth credentials creates an unauthenticated client.""" From c0ed61504bea6a348a0b001efe97d28b6fbf109d Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Tue, 23 Jun 2026 06:32:18 +0000 Subject: [PATCH 2/8] fix: move httpx import to top-level in test file Co-Authored-By: AJ Steers --- providers/airbyte/tests/unit/airbyte/hooks/test_airbyte.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/providers/airbyte/tests/unit/airbyte/hooks/test_airbyte.py b/providers/airbyte/tests/unit/airbyte/hooks/test_airbyte.py index 40d23aa008967..e0636fe85aa89 100644 --- a/providers/airbyte/tests/unit/airbyte/hooks/test_airbyte.py +++ b/providers/airbyte/tests/unit/airbyte/hooks/test_airbyte.py @@ -19,6 +19,7 @@ from unittest import mock +import httpx import pytest from airbyte_api.api import CancelJobRequest, GetJobRequest from airbyte_api.models import JobResponse, JobStatusEnum, JobTypeEnum @@ -239,8 +240,6 @@ def test_create_api_session_with_proxy(self): """ Test the creation of the API session with proxy settings. """ - import httpx - # Create a new AirbyteHook instance hook = AirbyteHook(airbyte_conn_id=self.airbyte_conn_id_with_proxy) From 24d22874fd0abd09823240490fe7d9d10156e048 Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Tue, 23 Jun 2026 06:36:15 +0000 Subject: [PATCH 3/8] fix: strengthen proxy test and bump airbyte-api lower bound to >=1.0.0 - Test now verifies proxy transport mounts are configured per-scheme - Bump airbyte-api lower bound from >=1.0.0rc2 to >=1.0.0 (GA released) Co-Authored-By: AJ Steers --- providers/airbyte/pyproject.toml | 2 +- providers/airbyte/tests/unit/airbyte/hooks/test_airbyte.py | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/providers/airbyte/pyproject.toml b/providers/airbyte/pyproject.toml index df8c28221c08a..d2941b96d0d42 100644 --- a/providers/airbyte/pyproject.toml +++ b/providers/airbyte/pyproject.toml @@ -61,7 +61,7 @@ requires-python = ">=3.10" dependencies = [ "apache-airflow>=2.11.0", "apache-airflow-providers-common-compat>=1.12.0", - "airbyte-api>=1.0.0rc2", + "airbyte-api>=1.0.0", "httpx>=0.28.1", ] diff --git a/providers/airbyte/tests/unit/airbyte/hooks/test_airbyte.py b/providers/airbyte/tests/unit/airbyte/hooks/test_airbyte.py index e0636fe85aa89..2ae0fc67524b1 100644 --- a/providers/airbyte/tests/unit/airbyte/hooks/test_airbyte.py +++ b/providers/airbyte/tests/unit/airbyte/hooks/test_airbyte.py @@ -248,6 +248,13 @@ def test_create_api_session_with_proxy(self): client = hook.airbyte_api.sdk_configuration.client assert isinstance(client, httpx.Client) + # Verify proxy mounts are configured for each scheme + default_transport = client._transport + for scheme in self._mock_proxy["proxies"]: + url = httpx.URL(f"{scheme}://example.com") + transport = client._transport_for_url(url) + assert transport is not default_transport, f"Expected proxy transport for {scheme}" + def test_create_api_session_without_credentials(self): """Test that a session without OAuth credentials creates an unauthenticated client.""" # The default connection (self.airbyte_conn_id) has no login/password From b83ae29ab6b1775efe7f9a2eb16a8329e7b941fc Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Sat, 27 Jun 2026 20:52:49 +0000 Subject: [PATCH 4/8] Fix test compatibility with airbyte-api 1.0 Pydantic models Co-Authored-By: AJ Steers --- providers/airbyte/README.rst | 10 ++--- providers/airbyte/docs/connections.rst | 5 +-- .../providers/airbyte/hooks/airbyte.py | 5 +-- .../tests/unit/airbyte/hooks/test_airbyte.py | 35 +++++++++------- uv.lock | 42 +++++-------------- 5 files changed, 40 insertions(+), 57 deletions(-) diff --git a/providers/airbyte/README.rst b/providers/airbyte/README.rst index 9604613d00d49..080b514d8c0e6 100644 --- a/providers/airbyte/README.rst +++ b/providers/airbyte/README.rst @@ -50,14 +50,14 @@ The package supports the following python versions: 3.10,3.11,3.12,3.13,3.14 Requirements ------------ -========================================== =================== +========================================== ================== PIP package Version required -========================================== =================== +========================================== ================== ``apache-airflow`` ``>=2.11.0`` ``apache-airflow-providers-common-compat`` ``>=1.12.0`` -``airbyte-api`` ``>=0.52.0,<1.0.0`` -``requests`` ``>=2.32.0`` -========================================== =================== +``airbyte-api`` ``>=1.0.0,<2.0`` +``httpx`` ``>=0.28.1`` +========================================== ================== Cross provider package dependencies ----------------------------------- diff --git a/providers/airbyte/docs/connections.rst b/providers/airbyte/docs/connections.rst index 5d41d2096ea3c..63733b08bbcca 100644 --- a/providers/airbyte/docs/connections.rst +++ b/providers/airbyte/docs/connections.rst @@ -57,9 +57,8 @@ Client Secret (optional) Leave blank for Airbyte OSS deployments without auth enabled. Extra (optional) - Specify custom proxies in JSON format. - Following default requests parameters are taken into account: + Specify the ``proxies`` key in JSON format to route traffic through an HTTP proxy. * ``proxies`` - Example: ``{"http": "http://proxy.example.com:8080", "https": "http://proxy.example.com:8080"}`` + Example: ``{"proxies": {"http": "http://proxy.example.com:8080", "https": "http://proxy.example.com:8080"}}`` diff --git a/providers/airbyte/src/airflow/providers/airbyte/hooks/airbyte.py b/providers/airbyte/src/airflow/providers/airbyte/hooks/airbyte.py index 0e0b69e0bf8b7..dd7cc04562695 100644 --- a/providers/airbyte/src/airflow/providers/airbyte/hooks/airbyte.py +++ b/providers/airbyte/src/airflow/providers/airbyte/hooks/airbyte.py @@ -111,16 +111,13 @@ def create_api_session(self) -> AirbyteAPI: if self.conn["proxies"]: self.log.debug("Creating client proxy...") proxies = self.conn["proxies"] - # airbyte-api >= 1.0 requires an httpx-compatible client. - # httpx supports per-protocol proxies via transport mounts. mounts = {} if isinstance(proxies, dict): for scheme, proxy_url in proxies.items(): - # Normalize scheme keys to httpx mount format (e.g. "http" -> "http://") + # httpx mount keys require a "://" suffix key = scheme if "://" in scheme else f"{scheme}://" mounts[key] = httpx.HTTPTransport(proxy=proxy_url) else: - # Single proxy URL string — apply to all traffic mounts = { "http://": httpx.HTTPTransport(proxy=proxies), "https://": httpx.HTTPTransport(proxy=proxies), diff --git a/providers/airbyte/tests/unit/airbyte/hooks/test_airbyte.py b/providers/airbyte/tests/unit/airbyte/hooks/test_airbyte.py index 2ae0fc67524b1..f837a8bf77e71 100644 --- a/providers/airbyte/tests/unit/airbyte/hooks/test_airbyte.py +++ b/providers/airbyte/tests/unit/airbyte/hooks/test_airbyte.py @@ -87,7 +87,7 @@ def setup_connections(self, create_connection_without_db): def return_value_get_job(self, status): response = mock.Mock() - response.job_response = JobResponse( + response.job_response = JobResponse.model_construct( connection_id="connection-mock", job_id=self.job_id, start_time="today", @@ -147,7 +147,7 @@ def test_cancel_job(self, cancel_job_mock): def test_wait_for_job_succeeded(self, mock_get_job): mock_get_job.side_effect = [self.return_value_get_job(JobStatusEnum.SUCCEEDED)] self.hook.wait_for_job(job_id=self.job_id, wait_seconds=0) - mock_get_job.assert_called_once_with(request=GetJobRequest(self.job_id)) + mock_get_job.assert_called_once_with(request=GetJobRequest(job_id=self.job_id)) @mock.patch("airbyte_api.jobs.Jobs.get_job") def test_wait_for_job_error(self, mock_get_job): @@ -158,7 +158,10 @@ def test_wait_for_job_error(self, mock_get_job): with pytest.raises(AirflowException, match="Job failed"): self.hook.wait_for_job(job_id=self.job_id, wait_seconds=0) - calls = [mock.call(request=GetJobRequest(self.job_id)), mock.call(request=GetJobRequest(self.job_id))] + calls = [ + mock.call(request=GetJobRequest(job_id=self.job_id)), + mock.call(request=GetJobRequest(job_id=self.job_id)), + ] mock_get_job.assert_has_calls(calls) @mock.patch("airbyte_api.jobs.Jobs.get_job") @@ -169,7 +172,10 @@ def test_wait_for_job_incomplete_succeeded(self, mock_get_job): ] self.hook.wait_for_job(job_id=self.job_id, wait_seconds=0) - calls = [mock.call(request=GetJobRequest(self.job_id)), mock.call(request=GetJobRequest(self.job_id))] + calls = [ + mock.call(request=GetJobRequest(job_id=self.job_id)), + mock.call(request=GetJobRequest(job_id=self.job_id)), + ] mock_get_job.assert_has_calls(calls) @mock.patch("airbyte_api.jobs.Jobs.get_job") @@ -183,9 +189,9 @@ def test_wait_for_job_timeout(self, mock_cancel_job, mock_get_job): self.hook.wait_for_job(job_id=self.job_id, wait_seconds=2, timeout=1) get_calls = [ - mock.call(request=GetJobRequest(self.job_id)), + mock.call(request=GetJobRequest(job_id=self.job_id)), ] - cancel_calls = [mock.call(request=CancelJobRequest(self.job_id))] + cancel_calls = [mock.call(request=CancelJobRequest(job_id=self.job_id))] mock_get_job.assert_has_calls(get_calls) mock_cancel_job.assert_has_calls(cancel_calls) assert mock_get_job.mock_calls == get_calls @@ -200,7 +206,10 @@ def test_wait_for_job_state_unrecognized(self, mock_get_job): with pytest.raises(AirflowException, match="unexpected state"): self.hook.wait_for_job(job_id=self.job_id, wait_seconds=0) - calls = [mock.call(request=GetJobRequest(self.job_id)), mock.call(request=GetJobRequest(self.job_id))] + calls = [ + mock.call(request=GetJobRequest(job_id=self.job_id)), + mock.call(request=GetJobRequest(job_id=self.job_id)), + ] mock_get_job.assert_has_calls(calls) @mock.patch("airbyte_api.jobs.Jobs.get_job") @@ -212,7 +221,10 @@ def test_wait_for_job_cancelled(self, mock_get_job): with pytest.raises(AirflowException, match="Job was cancelled"): self.hook.wait_for_job(job_id=self.job_id, wait_seconds=0) - calls = [mock.call(request=GetJobRequest(self.job_id)), mock.call(request=GetJobRequest(self.job_id))] + calls = [ + mock.call(request=GetJobRequest(job_id=self.job_id)), + mock.call(request=GetJobRequest(job_id=self.job_id)), + ] mock_get_job.assert_has_calls(calls) @mock.patch("airbyte_api.health.Health.get_health_check") @@ -237,18 +249,13 @@ def test_connection_failure(self, mock_get_health_check): assert msg == '{"message": "internal server error"}' def test_create_api_session_with_proxy(self): - """ - Test the creation of the API session with proxy settings. - """ - # Create a new AirbyteHook instance + """Test that proxy settings produce an httpx.Client with per-scheme transport mounts.""" hook = AirbyteHook(airbyte_conn_id=self.airbyte_conn_id_with_proxy) - # Check if the session is created correctly with an httpx client assert hook.airbyte_api is not None client = hook.airbyte_api.sdk_configuration.client assert isinstance(client, httpx.Client) - # Verify proxy mounts are configured for each scheme default_transport = client._transport for scheme in self._mock_proxy["proxies"]: url = httpx.URL(f"{scheme}://example.com") diff --git a/uv.lock b/uv.lock index cd569574def11..199e99c708673 100644 --- a/uv.lock +++ b/uv.lock @@ -706,27 +706,16 @@ wheels = [ [[package]] name = "airbyte-api" -version = "0.53.0" +version = "1.0.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "certifi" }, - { name = "charset-normalizer" }, - { name = "dataclasses-json" }, - { name = "idna" }, - { name = "jsonpath-python" }, - { name = "marshmallow" }, - { name = "mypy-extensions" }, - { name = "packaging" }, - { name = "python-dateutil" }, - { name = "requests" }, - { name = "six" }, - { name = "typing-extensions" }, - { name = "typing-inspect" }, - { name = "urllib3" }, + { name = "httpcore" }, + { name = "httpx" }, + { name = "pydantic" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/ad/23/8debf9c4ca8652c9ceb60b8074e654191ba2053001616151993b39d6cdcb/airbyte-api-0.53.0.tar.gz", hash = "sha256:f054ed170f9a691c3304e93a5212670fd2a38e5debb667c72d5ef8eb89cf7e9d", size = 330090, upload-time = "2025-10-02T19:55:43.378Z" } +sdist = { url = "https://files.pythonhosted.org/packages/0a/94/9dee92bac34428e28e403f0863e1fd2db14450dc72ad9a58294c94af71e4/airbyte_api-1.0.1.tar.gz", hash = "sha256:4c40e49b94a62b21836aea126d373365e1002b424022c8e7e262fd0a3d7a4fc6", size = 500468, upload-time = "2026-06-23T07:02:39.109Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/7a/f5/ca44b6f3919f049a4441755958c042fcea09a44e876352a6005f5e5a9e46/airbyte_api-0.53.0-py3-none-any.whl", hash = "sha256:0bd86d5122789a7c97115a4b52ce492b013d0ea8eeab597b6495b0b310332f28", size = 773825, upload-time = "2025-10-02T19:55:42.043Z" }, + { url = "https://files.pythonhosted.org/packages/24/fa/472753b8a2d38264a1643c27f10bd0b4d0a38f4912918ee943b1e69c7ea7/airbyte_api-1.0.1-py3-none-any.whl", hash = "sha256:edaad71bb9ed123f15cf9f91f78704b88d449584c734b14c4ec8c13ad435516f", size = 1060335, upload-time = "2026-06-23T07:02:37.503Z" }, ] [[package]] @@ -968,7 +957,7 @@ wheels = [ [[package]] name = "apache-airflow" -version = "3.3.0" +version = "3.4.0" source = { editable = "." } dependencies = [ { name = "apache-airflow-core" }, @@ -1911,7 +1900,7 @@ requires-dist = [ [[package]] name = "apache-airflow-core" -version = "3.3.0" +version = "3.4.0" source = { editable = "airflow-core" } dependencies = [ { name = "a2wsgi" }, @@ -2890,7 +2879,7 @@ dependencies = [ { name = "airbyte-api" }, { name = "apache-airflow" }, { name = "apache-airflow-providers-common-compat" }, - { name = "requests" }, + { name = "httpx" }, ] [package.dev-dependencies] @@ -2906,10 +2895,10 @@ docs = [ [package.metadata] requires-dist = [ - { name = "airbyte-api", specifier = ">=0.52.0,<1.0.0" }, + { name = "airbyte-api", specifier = ">=1.0.0,<2.0" }, { name = "apache-airflow", editable = "." }, { name = "apache-airflow-providers-common-compat", editable = "providers/common/compat" }, - { name = "requests", specifier = ">=2.32.0" }, + { name = "httpx", specifier = ">=0.28.1" }, ] [package.metadata.requires-dev] @@ -14908,15 +14897,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/03/99/33c7d78a3fb70d545fd5411ac67a651c81602cc09c9cf0df383733f068c5/jsonpath_ng-1.8.0-py3-none-any.whl", hash = "sha256:b8dde192f8af58d646fc031fac9c99fe4d00326afc4148f1f043c601a8cfe138", size = 67844, upload-time = "2026-02-28T00:53:19.637Z" }, ] -[[package]] -name = "jsonpath-python" -version = "1.1.6" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/98/18/4ca8742534a5993ff383f7602e325ce2d5d7cc93d72ac5e1cdedbea8a458/jsonpath_python-1.1.6.tar.gz", hash = "sha256:dded9932b4ec41fb8726e09c83afa4e6be618f938c2db287cc2a81723c639671", size = 88178, upload-time = "2026-05-07T01:26:34.482Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/55/8a/1270a6803bd821cbfcdda387eaa13cb41a7b1f7b9bd145979b3bfb9d6cb7/jsonpath_python-1.1.6-py3-none-any.whl", hash = "sha256:a1c50afd8d3fbbaf47a4873bc890dcb3c15da96f5c020327977d844d8731a2d4", size = 14453, upload-time = "2026-05-07T01:26:33.306Z" }, -] - [[package]] name = "jsonpointer" version = "3.1.1" From f7964c1eb72ac27ad9bccc36fb8d78ec2fdb23d1 Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Mon, 6 Jul 2026 16:34:42 +0000 Subject: [PATCH 5/8] Regenerate provider docs index and add 1.0 migration changelog note Co-Authored-By: AJ Steers --- providers/airbyte/docs/changelog.rst | 23 +++++++++++++++++++++++ providers/airbyte/docs/index.rst | 10 +++++----- 2 files changed, 28 insertions(+), 5 deletions(-) diff --git a/providers/airbyte/docs/changelog.rst b/providers/airbyte/docs/changelog.rst index 0bd093a64a3dc..ae82833e55ffe 100644 --- a/providers/airbyte/docs/changelog.rst +++ b/providers/airbyte/docs/changelog.rst @@ -27,6 +27,29 @@ Changelog --------- +6.0.0 +..... + +Breaking changes +~~~~~~~~~~~~~~~~ + +.. note:: + This release upgrades the provider's ``airbyte-api`` dependency to the ``1.x`` series and switches + the underlying HTTP client from ``requests`` to ``httpx``. + + No changes are required for typical Dag authors: the ``AirbyteHook``, ``AirbyteTriggerSyncOperator``, + and ``AirbyteJobSensor`` public interfaces are unchanged, and the Airbyte connection configuration + (including the ``proxies`` extra) keeps the same format. + + Action is required only if your environment relies on the provider's transitive dependencies: + + * ``airbyte-api`` is now ``>=1.0.0,<2.0`` (previously ``>=0.52.0,<1.0.0``). The ``1.x`` SDK is built + on Pydantic models, so any code importing ``airbyte_api`` directly must pass request objects as + keyword arguments (e.g. ``GetJobRequest(job_id=...)``) and handle its stricter response validation. + * ``requests`` is no longer installed by this provider. If your code relied on it being pulled in + transitively, declare ``requests`` as an explicit dependency of your own project. + + 5.5.1 ..... diff --git a/providers/airbyte/docs/index.rst b/providers/airbyte/docs/index.rst index 4055f2b784f8c..429c37f8523ac 100644 --- a/providers/airbyte/docs/index.rst +++ b/providers/airbyte/docs/index.rst @@ -96,14 +96,14 @@ Requirements The minimum Apache Airflow version supported by this provider distribution is ``2.11.0``. -========================================== =================== +========================================== ================== PIP package Version required -========================================== =================== +========================================== ================== ``apache-airflow`` ``>=2.11.0`` ``apache-airflow-providers-common-compat`` ``>=1.12.0`` -``airbyte-api`` ``>=0.52.0,<1.0.0`` -``requests`` ``>=2.32.0`` -========================================== =================== +``airbyte-api`` ``>=1.0.0,<2.0`` +``httpx`` ``>=0.28.1`` +========================================== ================== Cross provider package dependencies ----------------------------------- From e9847e58f7d2dcb15d43e8e1b80d01b0828e7455 Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Mon, 6 Jul 2026 16:43:45 +0000 Subject: [PATCH 6/8] Regenerate airbyte provider docs index after merging main Co-Authored-By: AJ Steers --- providers/airbyte/docs/index.rst | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/providers/airbyte/docs/index.rst b/providers/airbyte/docs/index.rst index 33f60b4a9ec71..a583a96e4d764 100644 --- a/providers/airbyte/docs/index.rst +++ b/providers/airbyte/docs/index.rst @@ -105,6 +105,25 @@ PIP package Version required ``httpx`` ``>=0.28.1`` ========================================== ================== +Optional cross provider package dependencies +-------------------------------------------- + +Those are dependencies that might be needed in order to use all the features of the package. +You need to install the specified provider distributions in order to use them. + +You can install such cross-provider dependencies when installing from PyPI. For example: + +.. code-block:: bash + + pip install apache-airflow-providers-airbyte[common.compat] + + +================================================================================================================== ================= +Dependent package Extra +================================================================================================================== ================= +`apache-airflow-providers-common-compat `_ ``common.compat`` +================================================================================================================== ================= + Downloading official packages ----------------------------- From f71aa0bba4d9bc19932ab67d50d130b268611cf4 Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Mon, 6 Jul 2026 23:19:03 +0000 Subject: [PATCH 7/8] Bump airbyte provider to 6.0.0 for breaking airbyte-api 1.0 / httpx migration Co-Authored-By: AJ Steers --- providers/airbyte/README.rst | 6 +++--- providers/airbyte/docs/index.rst | 6 +++--- providers/airbyte/provider.yaml | 1 + providers/airbyte/pyproject.toml | 6 +++--- providers/airbyte/src/airflow/providers/airbyte/__init__.py | 2 +- 5 files changed, 11 insertions(+), 10 deletions(-) diff --git a/providers/airbyte/README.rst b/providers/airbyte/README.rst index 8698054856785..f30510b9ce162 100644 --- a/providers/airbyte/README.rst +++ b/providers/airbyte/README.rst @@ -23,7 +23,7 @@ Package ``apache-airflow-providers-airbyte`` -Release: ``5.5.2`` +Release: ``6.0.0`` `Airbyte `__ @@ -36,7 +36,7 @@ This is a provider package for ``airbyte`` provider. All classes for this provid are in ``airflow.providers.airbyte`` python package. You can find package information and changelog for the provider -in the `documentation `_. +in the `documentation `_. Installation ------------ @@ -60,4 +60,4 @@ PIP package Version required ========================================== ================== The changelog for the provider package can be found in the -`changelog `_. +`changelog `_. diff --git a/providers/airbyte/docs/index.rst b/providers/airbyte/docs/index.rst index fd9c3b41aa607..7db62a4f57b77 100644 --- a/providers/airbyte/docs/index.rst +++ b/providers/airbyte/docs/index.rst @@ -76,7 +76,7 @@ apache-airflow-providers-airbyte package `Airbyte `__ -Release: 5.5.2 +Release: 6.0.0 Provider package ---------------- @@ -111,5 +111,5 @@ Downloading official packages You can download officially released packages and verify their checksums and signatures from the `Official Apache Download site `_ -* `The apache-airflow-providers-airbyte 5.5.2 sdist package `_ (`asc `__, `sha512 `__) -* `The apache-airflow-providers-airbyte 5.5.2 wheel package `_ (`asc `__, `sha512 `__) +* `The apache-airflow-providers-airbyte 6.0.0 sdist package `_ (`asc `__, `sha512 `__) +* `The apache-airflow-providers-airbyte 6.0.0 wheel package `_ (`asc `__, `sha512 `__) diff --git a/providers/airbyte/provider.yaml b/providers/airbyte/provider.yaml index cc325e50f87f3..4d9dc10cea7ef 100644 --- a/providers/airbyte/provider.yaml +++ b/providers/airbyte/provider.yaml @@ -29,6 +29,7 @@ source-date-epoch: 1783356304 # In such case adding >= NEW_VERSION and bumping to NEW_VERSION in a provider have # to be done in the same PR versions: + - 6.0.0 - 5.5.2 - 5.5.1 - 5.5.0 diff --git a/providers/airbyte/pyproject.toml b/providers/airbyte/pyproject.toml index 880e72d2c6062..e0fd8176095d8 100644 --- a/providers/airbyte/pyproject.toml +++ b/providers/airbyte/pyproject.toml @@ -25,7 +25,7 @@ build-backend = "flit_core.buildapi" [project] name = "apache-airflow-providers-airbyte" -version = "5.5.2" +version = "6.0.0" description = "Provider package apache-airflow-providers-airbyte for Apache Airflow" readme = "README.rst" license = "Apache-2.0" @@ -100,8 +100,8 @@ apache-airflow-providers-common-sql = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls] -"Documentation" = "https://airflow.apache.org/docs/apache-airflow-providers-airbyte/5.5.2" -"Changelog" = "https://airflow.apache.org/docs/apache-airflow-providers-airbyte/5.5.2/changelog.html" +"Documentation" = "https://airflow.apache.org/docs/apache-airflow-providers-airbyte/6.0.0" +"Changelog" = "https://airflow.apache.org/docs/apache-airflow-providers-airbyte/6.0.0/changelog.html" "Bug Tracker" = "https://github.com/apache/airflow/issues" "Source Code" = "https://github.com/apache/airflow" "Slack Chat" = "https://s.apache.org/airflow-slack" diff --git a/providers/airbyte/src/airflow/providers/airbyte/__init__.py b/providers/airbyte/src/airflow/providers/airbyte/__init__.py index d97f4f593d67c..eb9c139e2f4c0 100644 --- a/providers/airbyte/src/airflow/providers/airbyte/__init__.py +++ b/providers/airbyte/src/airflow/providers/airbyte/__init__.py @@ -29,7 +29,7 @@ __all__ = ["__version__"] -__version__ = "5.5.2" +__version__ = "6.0.0" if packaging.version.parse(packaging.version.parse(airflow_version).base_version) < packaging.version.parse( "2.11.0" From 9bebc50daf7f3da975e3836c8e31b73b081cf476 Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Tue, 7 Jul 2026 15:00:25 +0000 Subject: [PATCH 8/8] Revert manual airbyte version bump and reframe changelog note as non-breaking Per reviewer feedback, this is not an Airflow-code breaking change, so the version stays release-manager-managed (5.5.2) rather than a hardcoded 6.0.0 bump. The manual 6.0.0 entry in provider.yaml also broke the prepare-provider-documentation CI step, which diffs against the previous version tag (providers-airbyte/5.5.2) that is not yet released. Retitle the changelog section from 'Breaking changes' to 'Transitive dependency changes' and drop the 6.0.0 header. Co-Authored-By: AJ Steers --- providers/airbyte/README.rst | 6 +++--- providers/airbyte/docs/changelog.rst | 7 ++----- providers/airbyte/docs/index.rst | 6 +++--- providers/airbyte/provider.yaml | 1 - providers/airbyte/pyproject.toml | 6 +++--- .../airbyte/src/airflow/providers/airbyte/__init__.py | 2 +- 6 files changed, 12 insertions(+), 16 deletions(-) diff --git a/providers/airbyte/README.rst b/providers/airbyte/README.rst index f30510b9ce162..8698054856785 100644 --- a/providers/airbyte/README.rst +++ b/providers/airbyte/README.rst @@ -23,7 +23,7 @@ Package ``apache-airflow-providers-airbyte`` -Release: ``6.0.0`` +Release: ``5.5.2`` `Airbyte `__ @@ -36,7 +36,7 @@ This is a provider package for ``airbyte`` provider. All classes for this provid are in ``airflow.providers.airbyte`` python package. You can find package information and changelog for the provider -in the `documentation `_. +in the `documentation `_. Installation ------------ @@ -60,4 +60,4 @@ PIP package Version required ========================================== ================== The changelog for the provider package can be found in the -`changelog `_. +`changelog `_. diff --git a/providers/airbyte/docs/changelog.rst b/providers/airbyte/docs/changelog.rst index 538d1e2110f66..84701e9ced340 100644 --- a/providers/airbyte/docs/changelog.rst +++ b/providers/airbyte/docs/changelog.rst @@ -27,11 +27,8 @@ Changelog --------- -6.0.0 -..... - -Breaking changes -~~~~~~~~~~~~~~~~ +Transitive dependency changes +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. note:: This release upgrades the provider's ``airbyte-api`` dependency to the ``1.x`` series and switches diff --git a/providers/airbyte/docs/index.rst b/providers/airbyte/docs/index.rst index 7db62a4f57b77..fd9c3b41aa607 100644 --- a/providers/airbyte/docs/index.rst +++ b/providers/airbyte/docs/index.rst @@ -76,7 +76,7 @@ apache-airflow-providers-airbyte package `Airbyte `__ -Release: 6.0.0 +Release: 5.5.2 Provider package ---------------- @@ -111,5 +111,5 @@ Downloading official packages You can download officially released packages and verify their checksums and signatures from the `Official Apache Download site `_ -* `The apache-airflow-providers-airbyte 6.0.0 sdist package `_ (`asc `__, `sha512 `__) -* `The apache-airflow-providers-airbyte 6.0.0 wheel package `_ (`asc `__, `sha512 `__) +* `The apache-airflow-providers-airbyte 5.5.2 sdist package `_ (`asc `__, `sha512 `__) +* `The apache-airflow-providers-airbyte 5.5.2 wheel package `_ (`asc `__, `sha512 `__) diff --git a/providers/airbyte/provider.yaml b/providers/airbyte/provider.yaml index 4d9dc10cea7ef..cc325e50f87f3 100644 --- a/providers/airbyte/provider.yaml +++ b/providers/airbyte/provider.yaml @@ -29,7 +29,6 @@ source-date-epoch: 1783356304 # In such case adding >= NEW_VERSION and bumping to NEW_VERSION in a provider have # to be done in the same PR versions: - - 6.0.0 - 5.5.2 - 5.5.1 - 5.5.0 diff --git a/providers/airbyte/pyproject.toml b/providers/airbyte/pyproject.toml index e0fd8176095d8..880e72d2c6062 100644 --- a/providers/airbyte/pyproject.toml +++ b/providers/airbyte/pyproject.toml @@ -25,7 +25,7 @@ build-backend = "flit_core.buildapi" [project] name = "apache-airflow-providers-airbyte" -version = "6.0.0" +version = "5.5.2" description = "Provider package apache-airflow-providers-airbyte for Apache Airflow" readme = "README.rst" license = "Apache-2.0" @@ -100,8 +100,8 @@ apache-airflow-providers-common-sql = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls] -"Documentation" = "https://airflow.apache.org/docs/apache-airflow-providers-airbyte/6.0.0" -"Changelog" = "https://airflow.apache.org/docs/apache-airflow-providers-airbyte/6.0.0/changelog.html" +"Documentation" = "https://airflow.apache.org/docs/apache-airflow-providers-airbyte/5.5.2" +"Changelog" = "https://airflow.apache.org/docs/apache-airflow-providers-airbyte/5.5.2/changelog.html" "Bug Tracker" = "https://github.com/apache/airflow/issues" "Source Code" = "https://github.com/apache/airflow" "Slack Chat" = "https://s.apache.org/airflow-slack" diff --git a/providers/airbyte/src/airflow/providers/airbyte/__init__.py b/providers/airbyte/src/airflow/providers/airbyte/__init__.py index eb9c139e2f4c0..d97f4f593d67c 100644 --- a/providers/airbyte/src/airflow/providers/airbyte/__init__.py +++ b/providers/airbyte/src/airflow/providers/airbyte/__init__.py @@ -29,7 +29,7 @@ __all__ = ["__version__"] -__version__ = "6.0.0" +__version__ = "5.5.2" if packaging.version.parse(packaging.version.parse(airflow_version).base_version) < packaging.version.parse( "2.11.0"