Skip to content

Commit b10bffa

Browse files
potiukvatsrahul1001
authored andcommitted
[v3-2-test] Add exclude-newer-package=false for all workspace components in uv config (#64859) (#65238)
This ensures that workspace packages (local packages in the monorepo) are not subject to the exclude-newer time-based restriction, which could cause resolution issues when installing pre-release or locally-built packages. Also removes the redundant --exclude-newer flag from install_airflow_and_providers.py since the pyproject.toml now handles this globally, and mounts pyproject.toml in remove-sources docker-compose to make uv config available. (cherry picked from commit cacc2eb)
1 parent d918a19 commit b10bffa

5 files changed

Lines changed: 447 additions & 12 deletions

File tree

pyproject.toml

Lines changed: 269 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1343,11 +1343,277 @@ leveldb = [
13431343
]
13441344

13451345
[tool.uv]
1346-
required-version = ">=0.6.3"
1346+
required-version = ">=0.9.17"
1347+
no-build-isolation-package = ["sphinx-redoc"]
13471348
# Synchroonize with scripts/ci/prek/upgrade_important_versions.py
13481349
exclude-newer = "4 days"
1349-
no-build-isolation-package = ["sphinx-redoc"]
1350-
constraint-dependencies = ["lxml==6.0.2"] # Remove after https://github.com/aws/amazon-redshift-python-driver/pull/272
1350+
1351+
[tool.uv.exclude-newer-package]
1352+
# Automatically generated exclude-newer-package entries (update_airflow_pyproject_toml.py)
1353+
apache-airflow = false
1354+
apache-airflow-breeze = false
1355+
apache-airflow-core = false
1356+
apache-airflow-ctl = false
1357+
apache-airflow-ctl-tests = false
1358+
apache-airflow-dev = false
1359+
apache-airflow-devel-common = false
1360+
apache-airflow-docker-tests = false
1361+
apache-airflow-e2e-tests = false
1362+
apache-airflow-helm-tests = false
1363+
apache-airflow-kubernetes-tests = false
1364+
apache-airflow-providers = false
1365+
apache-airflow-providers-airbyte = false
1366+
apache-airflow-providers-alibaba = false
1367+
apache-airflow-providers-amazon = false
1368+
apache-airflow-providers-apache-cassandra = false
1369+
apache-airflow-providers-apache-drill = false
1370+
apache-airflow-providers-apache-druid = false
1371+
apache-airflow-providers-apache-flink = false
1372+
apache-airflow-providers-apache-hdfs = false
1373+
apache-airflow-providers-apache-hive = false
1374+
apache-airflow-providers-apache-iceberg = false
1375+
apache-airflow-providers-apache-impala = false
1376+
apache-airflow-providers-apache-kafka = false
1377+
apache-airflow-providers-apache-kylin = false
1378+
apache-airflow-providers-apache-livy = false
1379+
apache-airflow-providers-apache-pig = false
1380+
apache-airflow-providers-apache-pinot = false
1381+
apache-airflow-providers-apache-spark = false
1382+
apache-airflow-providers-apache-tinkerpop = false
1383+
apache-airflow-providers-apprise = false
1384+
apache-airflow-providers-arangodb = false
1385+
apache-airflow-providers-asana = false
1386+
apache-airflow-providers-atlassian-jira = false
1387+
apache-airflow-providers-celery = false
1388+
apache-airflow-providers-cloudant = false
1389+
apache-airflow-providers-cncf-kubernetes = false
1390+
apache-airflow-providers-cohere = false
1391+
apache-airflow-providers-common-ai = false
1392+
apache-airflow-providers-common-compat = false
1393+
apache-airflow-providers-common-io = false
1394+
apache-airflow-providers-common-messaging = false
1395+
apache-airflow-providers-common-sql = false
1396+
apache-airflow-providers-databricks = false
1397+
apache-airflow-providers-datadog = false
1398+
apache-airflow-providers-dbt-cloud = false
1399+
apache-airflow-providers-dingding = false
1400+
apache-airflow-providers-discord = false
1401+
apache-airflow-providers-docker = false
1402+
apache-airflow-providers-edge3 = false
1403+
apache-airflow-providers-elasticsearch = false
1404+
apache-airflow-providers-exasol = false
1405+
apache-airflow-providers-fab = false
1406+
apache-airflow-providers-facebook = false
1407+
apache-airflow-providers-ftp = false
1408+
apache-airflow-providers-git = false
1409+
apache-airflow-providers-github = false
1410+
apache-airflow-providers-google = false
1411+
apache-airflow-providers-grpc = false
1412+
apache-airflow-providers-hashicorp = false
1413+
apache-airflow-providers-http = false
1414+
apache-airflow-providers-imap = false
1415+
apache-airflow-providers-influxdb = false
1416+
apache-airflow-providers-informatica = false
1417+
apache-airflow-providers-jdbc = false
1418+
apache-airflow-providers-jenkins = false
1419+
apache-airflow-providers-keycloak = false
1420+
apache-airflow-providers-microsoft-azure = false
1421+
apache-airflow-providers-microsoft-mssql = false
1422+
apache-airflow-providers-microsoft-psrp = false
1423+
apache-airflow-providers-microsoft-winrm = false
1424+
apache-airflow-providers-mongo = false
1425+
apache-airflow-providers-mysql = false
1426+
apache-airflow-providers-neo4j = false
1427+
apache-airflow-providers-odbc = false
1428+
apache-airflow-providers-openai = false
1429+
apache-airflow-providers-openfaas = false
1430+
apache-airflow-providers-openlineage = false
1431+
apache-airflow-providers-opensearch = false
1432+
apache-airflow-providers-opsgenie = false
1433+
apache-airflow-providers-oracle = false
1434+
apache-airflow-providers-pagerduty = false
1435+
apache-airflow-providers-papermill = false
1436+
apache-airflow-providers-pgvector = false
1437+
apache-airflow-providers-pinecone = false
1438+
apache-airflow-providers-postgres = false
1439+
apache-airflow-providers-presto = false
1440+
apache-airflow-providers-qdrant = false
1441+
apache-airflow-providers-redis = false
1442+
apache-airflow-providers-salesforce = false
1443+
apache-airflow-providers-samba = false
1444+
apache-airflow-providers-segment = false
1445+
apache-airflow-providers-sendgrid = false
1446+
apache-airflow-providers-sftp = false
1447+
apache-airflow-providers-singularity = false
1448+
apache-airflow-providers-slack = false
1449+
apache-airflow-providers-smtp = false
1450+
apache-airflow-providers-snowflake = false
1451+
apache-airflow-providers-sqlite = false
1452+
apache-airflow-providers-ssh = false
1453+
apache-airflow-providers-standard = false
1454+
apache-airflow-providers-tableau = false
1455+
apache-airflow-providers-telegram = false
1456+
apache-airflow-providers-teradata = false
1457+
apache-airflow-providers-trino = false
1458+
apache-airflow-providers-vertica = false
1459+
apache-airflow-providers-weaviate = false
1460+
apache-airflow-providers-yandex = false
1461+
apache-airflow-providers-ydb = false
1462+
apache-airflow-providers-zendesk = false
1463+
apache-airflow-scripts = false
1464+
apache-airflow-shared-configuration = false
1465+
apache-airflow-shared-dagnode = false
1466+
apache-airflow-shared-listeners = false
1467+
apache-airflow-shared-logging = false
1468+
apache-airflow-shared-module-loading = false
1469+
apache-airflow-shared-observability = false
1470+
apache-airflow-shared-plugins-manager = false
1471+
apache-airflow-shared-providers-discovery = false
1472+
apache-airflow-shared-secrets-backend = false
1473+
apache-airflow-shared-secrets-masker = false
1474+
apache-airflow-shared-serialization = false
1475+
apache-airflow-shared-template-rendering = false
1476+
apache-airflow-shared-timezones = false
1477+
apache-airflow-task-sdk = false
1478+
apache-airflow-task-sdk-integration-tests = false
1479+
apache-aurflow-docker-stack = false
1480+
# End of automatically generated exclude-newer-package entries
1481+
1482+
[tool.uv.pip]
1483+
# Synchroonize with scripts/ci/prek/upgrade_important_versions.py
1484+
exclude-newer = "4 days"
1485+
1486+
[tool.uv.pip.exclude-newer-package]
1487+
# Automatically generated exclude-newer-package-pip entries (update_airflow_pyproject_toml.py)
1488+
apache-airflow = false
1489+
apache-airflow-breeze = false
1490+
apache-airflow-core = false
1491+
apache-airflow-ctl = false
1492+
apache-airflow-ctl-tests = false
1493+
apache-airflow-dev = false
1494+
apache-airflow-devel-common = false
1495+
apache-airflow-docker-tests = false
1496+
apache-airflow-e2e-tests = false
1497+
apache-airflow-helm-tests = false
1498+
apache-airflow-kubernetes-tests = false
1499+
apache-airflow-providers = false
1500+
apache-airflow-providers-airbyte = false
1501+
apache-airflow-providers-alibaba = false
1502+
apache-airflow-providers-amazon = false
1503+
apache-airflow-providers-apache-cassandra = false
1504+
apache-airflow-providers-apache-drill = false
1505+
apache-airflow-providers-apache-druid = false
1506+
apache-airflow-providers-apache-flink = false
1507+
apache-airflow-providers-apache-hdfs = false
1508+
apache-airflow-providers-apache-hive = false
1509+
apache-airflow-providers-apache-iceberg = false
1510+
apache-airflow-providers-apache-impala = false
1511+
apache-airflow-providers-apache-kafka = false
1512+
apache-airflow-providers-apache-kylin = false
1513+
apache-airflow-providers-apache-livy = false
1514+
apache-airflow-providers-apache-pig = false
1515+
apache-airflow-providers-apache-pinot = false
1516+
apache-airflow-providers-apache-spark = false
1517+
apache-airflow-providers-apache-tinkerpop = false
1518+
apache-airflow-providers-apprise = false
1519+
apache-airflow-providers-arangodb = false
1520+
apache-airflow-providers-asana = false
1521+
apache-airflow-providers-atlassian-jira = false
1522+
apache-airflow-providers-celery = false
1523+
apache-airflow-providers-cloudant = false
1524+
apache-airflow-providers-cncf-kubernetes = false
1525+
apache-airflow-providers-cohere = false
1526+
apache-airflow-providers-common-ai = false
1527+
apache-airflow-providers-common-compat = false
1528+
apache-airflow-providers-common-io = false
1529+
apache-airflow-providers-common-messaging = false
1530+
apache-airflow-providers-common-sql = false
1531+
apache-airflow-providers-databricks = false
1532+
apache-airflow-providers-datadog = false
1533+
apache-airflow-providers-dbt-cloud = false
1534+
apache-airflow-providers-dingding = false
1535+
apache-airflow-providers-discord = false
1536+
apache-airflow-providers-docker = false
1537+
apache-airflow-providers-edge3 = false
1538+
apache-airflow-providers-elasticsearch = false
1539+
apache-airflow-providers-exasol = false
1540+
apache-airflow-providers-fab = false
1541+
apache-airflow-providers-facebook = false
1542+
apache-airflow-providers-ftp = false
1543+
apache-airflow-providers-git = false
1544+
apache-airflow-providers-github = false
1545+
apache-airflow-providers-google = false
1546+
apache-airflow-providers-grpc = false
1547+
apache-airflow-providers-hashicorp = false
1548+
apache-airflow-providers-http = false
1549+
apache-airflow-providers-imap = false
1550+
apache-airflow-providers-influxdb = false
1551+
apache-airflow-providers-informatica = false
1552+
apache-airflow-providers-jdbc = false
1553+
apache-airflow-providers-jenkins = false
1554+
apache-airflow-providers-keycloak = false
1555+
apache-airflow-providers-microsoft-azure = false
1556+
apache-airflow-providers-microsoft-mssql = false
1557+
apache-airflow-providers-microsoft-psrp = false
1558+
apache-airflow-providers-microsoft-winrm = false
1559+
apache-airflow-providers-mongo = false
1560+
apache-airflow-providers-mysql = false
1561+
apache-airflow-providers-neo4j = false
1562+
apache-airflow-providers-odbc = false
1563+
apache-airflow-providers-openai = false
1564+
apache-airflow-providers-openfaas = false
1565+
apache-airflow-providers-openlineage = false
1566+
apache-airflow-providers-opensearch = false
1567+
apache-airflow-providers-opsgenie = false
1568+
apache-airflow-providers-oracle = false
1569+
apache-airflow-providers-pagerduty = false
1570+
apache-airflow-providers-papermill = false
1571+
apache-airflow-providers-pgvector = false
1572+
apache-airflow-providers-pinecone = false
1573+
apache-airflow-providers-postgres = false
1574+
apache-airflow-providers-presto = false
1575+
apache-airflow-providers-qdrant = false
1576+
apache-airflow-providers-redis = false
1577+
apache-airflow-providers-salesforce = false
1578+
apache-airflow-providers-samba = false
1579+
apache-airflow-providers-segment = false
1580+
apache-airflow-providers-sendgrid = false
1581+
apache-airflow-providers-sftp = false
1582+
apache-airflow-providers-singularity = false
1583+
apache-airflow-providers-slack = false
1584+
apache-airflow-providers-smtp = false
1585+
apache-airflow-providers-snowflake = false
1586+
apache-airflow-providers-sqlite = false
1587+
apache-airflow-providers-ssh = false
1588+
apache-airflow-providers-standard = false
1589+
apache-airflow-providers-tableau = false
1590+
apache-airflow-providers-telegram = false
1591+
apache-airflow-providers-teradata = false
1592+
apache-airflow-providers-trino = false
1593+
apache-airflow-providers-vertica = false
1594+
apache-airflow-providers-weaviate = false
1595+
apache-airflow-providers-yandex = false
1596+
apache-airflow-providers-ydb = false
1597+
apache-airflow-providers-zendesk = false
1598+
apache-airflow-scripts = false
1599+
apache-airflow-shared-configuration = false
1600+
apache-airflow-shared-dagnode = false
1601+
apache-airflow-shared-listeners = false
1602+
apache-airflow-shared-logging = false
1603+
apache-airflow-shared-module-loading = false
1604+
apache-airflow-shared-observability = false
1605+
apache-airflow-shared-plugins-manager = false
1606+
apache-airflow-shared-providers-discovery = false
1607+
apache-airflow-shared-secrets-backend = false
1608+
apache-airflow-shared-secrets-masker = false
1609+
apache-airflow-shared-serialization = false
1610+
apache-airflow-shared-template-rendering = false
1611+
apache-airflow-shared-timezones = false
1612+
apache-airflow-task-sdk = false
1613+
apache-airflow-task-sdk-integration-tests = false
1614+
apache-aurflow-docker-stack = false
1615+
# End of automatically generated exclude-newer-package-pip entries
1616+
13511617

13521618
[tool.uv.sources]
13531619
# These names must match the names as defined in the pyproject.toml of the workspace items,

scripts/ci/docker-compose/remove-sources.yml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -126,8 +126,10 @@ services:
126126
- ../../../empty:/opt/airflow/providers/ydb/src
127127
- ../../../empty:/opt/airflow/providers/zendesk/src
128128
# END automatically generated volumes by generate-volumes-for-sources prek hook
129-
# However we keep in_container scripts to be able to debug easily the scripts that
130-
# are run with --mount-sources removed flag - such as installing airflow and providers
129+
# However we keep in_container scripts and pyproject.toml to be able to debug easily the scripts that
130+
# are run with --mount-sources removed flag - such as installing airflow and providers or in order to
131+
# get latest uv configuration for all uv sync commands
132+
- ../../../pyproject.toml:/opt/airflow/pyproject.toml
131133
- type: bind
132134
source: ../../../scripts/in_container
133135
target: /opt/airflow/scripts/in_container

scripts/ci/prek/update_airflow_pyproject_toml.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,19 @@
6767
)
6868
END_PROVIDER_WORKSPACE_MEMBERS = " # End of automatically generated provider workspace members"
6969

70+
START_EXCLUDE_NEWER_PACKAGE = (
71+
"# Automatically generated exclude-newer-package entries (update_airflow_pyproject_toml.py)"
72+
)
73+
END_EXCLUDE_NEWER_PACKAGE = "# End of automatically generated exclude-newer-package entries"
74+
75+
START_EXCLUDE_NEWER_PACKAGE_PIP = (
76+
"# Automatically generated exclude-newer-package-pip entries (update_airflow_pyproject_toml.py)"
77+
)
78+
END_EXCLUDE_NEWER_PACKAGE_PIP = "# End of automatically generated exclude-newer-package-pip entries"
79+
7080
CUT_OFF_TIMEDELTA = timedelta(days=6 * 30)
7181

82+
7283
# Temporary override for providers that are not yet included in constraints or when they need
7384
# minimum versions for compatibility with Airflow 3
7485
MIN_VERSION_OVERRIDE: dict[str, Version] = {
@@ -117,6 +128,15 @@ def _read_toml(path: Path) -> dict[str, Any]:
117128
return tomllib.loads(path.read_text())
118129

119130

131+
def get_all_workspace_component_names() -> list[str]:
132+
"""Get all workspace component names from [tool.uv.sources] in pyproject.toml."""
133+
toml_dict = _read_toml(AIRFLOW_PYPROJECT_TOML_FILE)
134+
sources = toml_dict.get("tool", {}).get("uv", {}).get("sources", {})
135+
return sorted(
136+
name for name, value in sources.items() if isinstance(value, dict) and value.get("workspace")
137+
)
138+
139+
120140
def get_local_provider_version(provider_id: str) -> Version | None:
121141
provider_pyproject = PROVIDERS_DIR / provider_path(provider_id) / "pyproject.toml"
122142
if not provider_pyproject.exists():
@@ -301,3 +321,23 @@ def get_python_exclusion(provider_dependencies: dict[str, Any]) -> str:
301321
False,
302322
"provider workspace members",
303323
)
324+
all_workspace_components = get_all_workspace_component_names()
325+
exclude_newer_entries = []
326+
for component in all_workspace_components:
327+
exclude_newer_entries.append(f"{component} = false\n")
328+
insert_documentation(
329+
AIRFLOW_PYPROJECT_TOML_FILE,
330+
exclude_newer_entries,
331+
START_EXCLUDE_NEWER_PACKAGE,
332+
END_EXCLUDE_NEWER_PACKAGE,
333+
False,
334+
"exclude-newer-package entries",
335+
)
336+
insert_documentation(
337+
AIRFLOW_PYPROJECT_TOML_FILE,
338+
exclude_newer_entries,
339+
START_EXCLUDE_NEWER_PACKAGE_PIP,
340+
END_EXCLUDE_NEWER_PACKAGE_PIP,
341+
False,
342+
"exclude-newer-package-pip entries",
343+
)

scripts/in_container/install_airflow_and_providers.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
import re
2424
import shutil
2525
import sys
26-
from datetime import datetime
2726
from functools import cache
2827
from pathlib import Path
2928
from typing import NamedTuple
@@ -1129,7 +1128,7 @@ def _install_airflow_and_optionally_providers_together(
11291128
]
11301129
if installation_spec.pre_release:
11311130
console.print("[bright_blue]Allowing pre-release versions of airflow and providers")
1132-
base_install_cmd.extend(["--pre", "--exclude-newer", datetime.now().isoformat()])
1131+
base_install_cmd.extend(["--pre"])
11331132
if installation_spec.airflow_distribution:
11341133
console.print(
11351134
f"\n[bright_blue]Adding airflow distribution to installation: {installation_spec.airflow_distribution} "
@@ -1226,7 +1225,7 @@ def _install_only_airflow_airflow_core_task_sdk_with_constraints(
12261225
]
12271226
if installation_spec.pre_release:
12281227
console.print("[bright_blue]Allowing pre-release versions of airflow and providers")
1229-
base_install_airflow_cmd.extend(["--pre", "--exclude-newer", datetime.now().isoformat()])
1228+
base_install_airflow_cmd.extend(["--pre"])
12301229
if installation_spec.airflow_distribution:
12311230
console.print(
12321231
f"\n[bright_blue]Installing airflow distribution: {installation_spec.airflow_distribution} with constraints"

0 commit comments

Comments
 (0)