Skip to content

Commit d55bdf8

Browse files
authored
Merge branch 'main' into fix/reschedule-start-date-context
2 parents 10b73da + 80e870d commit d55bdf8

456 files changed

Lines changed: 15697 additions & 4287 deletions

File tree

Some content is hidden

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

.github/CODEOWNERS

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,8 +162,15 @@ Dockerfile.ci @potiuk @ashb @gopidesupavan @amoghrajesh @jscheffl @bugraoz93 @ja
162162
# Python SDK
163163
/task-sdk/ @ashb @kaxil @amoghrajesh
164164

165+
# AIP-108 - Coordinators
166+
/task-sdk/src/airflow/sdk/coordinators/ @jason810496 @uranusjr
167+
/task-sdk/src/airflow/sdk/execution_time/coordinator.py @jason810496 @uranusjr
168+
165169
# Golang SDK
166-
/go-sdk/ @ashb @amoghrajesh
170+
/go-sdk/ @ashb @amoghrajesh @jason810496
171+
172+
# Java SDK
173+
/java-sdk/ @uranusjr @jason810496
167174

168175
# Shared Libraries
169176
/shared/ @ashb @amoghrajesh @potiuk

.github/dependabot.yml

Lines changed: 0 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -42,19 +42,6 @@ updates:
4242
patterns:
4343
- "*"
4444

45-
- package-ecosystem: "github-actions"
46-
directory: "/"
47-
cooldown:
48-
default-days: 4
49-
schedule:
50-
# Check for updates to GitHub Actions every week
51-
interval: "weekly"
52-
target-branch: v2-11-test
53-
groups:
54-
github-actions-updates:
55-
patterns:
56-
- "*"
57-
5845
- package-ecosystem: pip
5946
cooldown:
6047
default-days: 4
@@ -260,39 +247,6 @@ updates:
260247
- dependency-name: "*"
261248
update-types: ["version-update:semver-major"]
262249

263-
# Repeat dependency updates on 2.11 branch as well
264-
- package-ecosystem: pip
265-
cooldown:
266-
default-days: 4
267-
directories:
268-
- /clients/python
269-
- /dev/breeze
270-
- /docker_tests
271-
- /
272-
schedule:
273-
interval: "weekly"
274-
target-branch: v2-11-test
275-
groups:
276-
pip-dependency-updates:
277-
patterns:
278-
- "*"
279-
280-
- package-ecosystem: npm
281-
cooldown:
282-
default-days: 4
283-
directories:
284-
- /airflow/www/
285-
schedule:
286-
interval: "weekly"
287-
target-branch: v2-11-test
288-
groups:
289-
legacy-ui-package-updates:
290-
patterns:
291-
- "*"
292-
ignore:
293-
- dependency-name: "*"
294-
update-types: ["version-update:semver-major"]
295-
296250
- package-ecosystem: "uv"
297251
cooldown:
298252
default-days: 4

.github/workflows/ci-amd.yml

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,11 @@
2626
name: Tests (AMD)
2727
on: # yamllint disable-line rule:truthy
2828
schedule:
29-
# Mirror of the previous AMD canary cron from before the AMD/ARM split (PR #66348),
30-
# offset by 30 min from ARM's `:28` slot in `ci-arm.yml` so the two scheduled
31-
# canaries don't compete for runners at exactly the same minute.
32-
- cron: '58 1,7,13,19 * * *'
29+
# AMD canary runs 2x/day (01:58, 13:58), interleaved with ARM's 2x/day (07:28, 19:28)
30+
# in `ci-arm.yml` so a full-matrix canary still runs roughly every ~6h (alternating
31+
# architecture) while halving the scheduled AMD compute. The `:58` vs ARM's `:28`
32+
# offset keeps the two from competing for runners at exactly the same minute.
33+
- cron: '58 1,13 * * *'
3334
pull_request:
3435
branches:
3536
- main

.github/workflows/ci-arm.yml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,11 @@
2626
name: Tests (ARM)
2727
on: # yamllint disable-line rule:truthy
2828
schedule:
29-
- cron: '28 1,3,7,9,13,15,19,21 * * *'
29+
# ARM canary runs 2x/day (07:28, 19:28), interleaved with AMD's 2x/day (01:58, 13:58)
30+
# in `ci-amd.yml` so a full-matrix canary still runs roughly every ~6h (alternating
31+
# architecture). The `:28` vs AMD's `:58` offset keeps the two from competing for
32+
# runners at exactly the same minute.
33+
- cron: '28 7,19 * * *'
3034
push:
3135
# Post-merge pushes to release-prep / providers branches run on both
3236
# AMD and ARM (the matching block lives in the other wrapper too —

.github/workflows/publish-docs-to-s3.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ jobs:
8888
AIRFLOW_VERSION: ${{ inputs.airflow-version || '' }}
8989
APPLY_COMMITS: ${{ inputs.apply-commits || '' }}
9090
outputs:
91-
include-docs: ${{ inputs.include-docs == 'all' && '' || inputs.include-docs }}
91+
include-docs: ${{ case(inputs.include-docs == 'all', '', inputs.include-docs) }}
9292
destination-location: ${{ steps.parameters.outputs.destination-location }}
9393
destination: ${{ steps.parameters.outputs.destination }}
9494
extra-build-options: ${{ steps.parameters.outputs.extra-build-options }}

.github/workflows/run-unit-tests.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -136,8 +136,8 @@ jobs:
136136
timeout-minutes: 65
137137
# yamllint disable rule:line-length
138138
name: "\
139-
${{ inputs.test-scope == 'All' && '' || inputs.test-scope == 'Quarantined' && 'Qrnt' || inputs.test-scope }}\
140-
${{ inputs.test-scope == 'All' && '' || '-' }}\
139+
${{ case(inputs.test-scope == 'Quarantined', 'Qrnt', inputs.test-scope == 'All', '', inputs.test-scope) }}\
140+
${{ case(inputs.test-scope == 'All', '', '-') }}\
141141
${{ inputs.test-group == 'providers' && 'prov' || inputs.test-group}}:\
142142
${{ inputs.test-name }}${{ inputs.test-name-separator }}${{ matrix.backend-version }}:\
143143
${{ matrix.python-version}}:${{ matrix.test-types.description }}"

.pre-commit-config.yaml

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -249,6 +249,21 @@ repos:
249249
^pyproject\.toml$
250250
pass_filenames: false
251251
require_serial: true
252+
- id: ts-sdk-lint
253+
name: Lint TypeScript SDK
254+
entry: ./ts-sdk/scripts/ci/prek/ts_sdk_lint.py
255+
language: node
256+
files: |
257+
(?x)
258+
^ts-sdk/.*\.(js|ts|json)$
259+
exclude: |
260+
(?x)
261+
^ts-sdk/node_modules/.*|
262+
^ts-sdk/.pnpm-store/.*|
263+
^ts-sdk/dist/.*
264+
additional_dependencies: ['pnpm@10.28.1']
265+
pass_filenames: false
266+
require_serial: true
252267
- id: check-ci-workflows-in-sync
253268
name: Check ci-arm.yml and ci-amd.yml stay in sync
254269
entry: ./scripts/ci/prek/check_ci_workflows_in_sync.py

AGENTS.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,11 @@ reported as such are described in "What is NOT considered a security vulnerabili
160160
- Test location mirrors source: `airflow/cli/cli_parser.py``tests/cli/test_cli_parser.py`.
161161
- Do not use `caplog` in tests, prefer checking logic and not log output.
162162

163+
## Output conventions
164+
165+
- Put any files you generate (PR reviews, reports, scratch output) under `files/`.
166+
- Create `files/` if it doesn't exist.
167+
163168

164169
## Commits and PRs
165170

airflow-core/docs/administration-and-deployment/dag-bundles.rst

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,24 @@ Configuring Dag bundles
6161

6262
Dag bundles are configured in :ref:`config:dag_processor__dag_bundle_config_list`. You can add one or more Dag bundles here.
6363

64+
.. warning:: Reference credentials through a Connection — do not inline them
65+
66+
Bundle ``kwargs`` are stored in the ``[dag_processor] dag_bundle_config_list``
67+
configuration, which Airflow exposes through the Config API when
68+
:ref:`config:api__expose_config` is enabled. Any user authorized to read the
69+
configuration can read these values verbatim, so they must not contain secrets.
70+
71+
Do **not** embed credentials directly in bundle ``kwargs`` — for example a
72+
token placed directly in a ``repo_url`` like
73+
``https://x-access-token:<token>@github.com/org/repo.git``. Instead reference
74+
an Airflow :doc:`Connection <../authoring-and-scheduling/connections>`
75+
(``git_conn_id`` for Git, ``aws_conn_id`` for S3, ``gcp_conn_id`` for GCS) and
76+
keep the credential in your
77+
:doc:`secrets backend <../security/secrets/secrets-backend/index>`. Connection
78+
fields are resolved at runtime and are not written into
79+
``dag_bundle_config_list``.
80+
81+
6482
By default, Airflow adds a ``LocalDagBundle`` pointing at the configured Dags folder, maintaining the same behaviour as Airflow 2's Dags folder. The only kwarg is ``path``, which defaults to the value of :ref:`config:core__dags_folder` when omitted:
6583

6684
.. code-block:: ini

airflow-core/docs/administration-and-deployment/logging-monitoring/metrics.rst

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,42 @@ You need to configure the SSL certificate and key within the OpenTelemetry colle
115115
cert_file: "/path/to/cert/cert.crt"
116116
key_file: "/path/to/key/key.pem"
117117
118+
Histogram Metrics and Backend Requirements
119+
------------------------------------------
120+
121+
Airflow's timing metrics (``timing()`` / ``timer()``) are emitted as OpenTelemetry
122+
histograms aggregated with
123+
`exponential bucket histograms <https://opentelemetry.io/docs/specs/otel/metrics/data-model/#exponentialhistogram>`_,
124+
so bucket boundaries adapt automatically to the observed range and you do not have to
125+
hand-tune explicit buckets for metrics that span very different scales (milliseconds to
126+
hours).
127+
128+
To ingest these correctly end-to-end, the metrics backend you connect to must support
129+
OpenTelemetry exponential histograms and (for Prometheus) their conversion to native
130+
histograms:
131+
132+
* **OpenTelemetry Collector** — use ``opentelemetry-collector-contrib`` version 0.115.0
133+
or above. Older versions do not translate OTLP exponential histograms into Prometheus
134+
native histograms.
135+
* **Prometheus** — native histograms must be enabled explicitly, and how you do that
136+
depends on the Prometheus version:
137+
138+
* **2.40 to 3.8** — start Prometheus with the ``--enable-feature=native-histograms``
139+
flag.
140+
* **3.8 and above** — set ``scrape_native_histograms: true`` in the scrape
141+
configuration (this option was added in 3.8, and from 3.9 the feature flag is a
142+
no-op so the config setting is required):
143+
144+
.. code-block:: yaml
145+
146+
global:
147+
scrape_native_histograms: true
148+
149+
If the backend does not support native histograms, exponential-histogram data points may
150+
be dropped or rendered incorrectly. A reference stack (Collector, Prometheus, and Grafana)
151+
wired up for local development is available via ``breeze start-airflow --integration otel``;
152+
see the contributor docs for details.
153+
118154
Allow/Block Lists
119155
-----------------
120156

0 commit comments

Comments
 (0)