mirror of
https://github.com/apache/airflow.git
synced 2026-11-04 07:12:48 +00:00
* Add consolidated Language SDK compatibility matrix Users comparing Language SDKs had to read each SDK's README, and the per-SDK manifests lagged behind what the SDKs actually ship. One generated matrix, split by authoring mode, shows what each SDK supports for a Dag definition and for a Python Dag with stub TaskHandler. * Add callbacks, listeners and provider operators to the SDK matrix Users comparing Language SDKs could not see where callbacks, Airflow's listener API and Python provider operators stand, because the matrix had no dimension for any of them. Callbacks ask different things of an SDK per authoring mode, so they are declared per mode like the other shared capabilities. * Address review on the Language SDK matrix generator The umbrella capability and the authoring mode both read `dag-definition`, which gives one name two meanings in the same manifest. A row's kind also belongs in its entry key: state and capability names happen not to collide today, so the lookup worked by accident rather than by design. * Rename the dynamic-task-mapping dimension to mapped-tasks The dimension is about whether a task can be a mapped task, which the shorter name says directly and keeps the matrix row readable next to the other task-level dimensions. * Split callbacks into Dag-level and task-level dimensions The callbacks of a Python Dag run whichever SDK executes its stub tasks, so ``dag-callbacks`` is a Dag-definition concern only, while ``task-callbacks`` stays declared per authoring mode. Drop ``provider-operators`` until ADR-0009 is accepted, and reuse the shared ``capabilities_doc`` fixture in the per-SDK README tests. * Fix the hook attribution in the matrix generation diagram ``index.rst`` is written by ``update-lang-sdk-central-matrix`` from every SDK in ``LANG_SDKS``, not by the per-SDK README hook. ---------
205 lines
5.5 KiB
YAML
205 lines
5.5 KiB
YAML
# Licensed to the Apache Software Foundation (ASF) under one
|
|
# or more contributor license agreements. See the NOTICE file
|
|
# distributed with this work for additional information
|
|
# regarding copyright ownership. The ASF licenses this file
|
|
# to you under the Apache License, Version 2.0 (the
|
|
# "License"); you may not use this file except in compliance
|
|
# with the License. You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing,
|
|
# software distributed under the License is distributed on an
|
|
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
# KIND, either express or implied. See the License for the
|
|
# specific language governing permissions and limitations
|
|
# under the License.
|
|
---
|
|
sdk: java
|
|
|
|
min_airflow_version: "3.4.0"
|
|
|
|
# Keep in sync with airflowSupervisorSchemaVersion in gradle.properties, which is what stamps the
|
|
# JAR manifest. The render hook fails if the two disagree.
|
|
supervisor_schema_version: "2026-10-30"
|
|
|
|
# The runtime terminates a task with SucceedTask, RetryTask, DeferTask, or TaskState
|
|
# (failed/skipped/removed); it does not yet emit RescheduleTask or AwaitInputTask.
|
|
states:
|
|
success:
|
|
supported: true
|
|
since: "3.4.0"
|
|
sdk_version: "1.0.0"
|
|
failed:
|
|
supported: true
|
|
since: "3.4.0"
|
|
sdk_version: "1.0.0"
|
|
up_for_retry:
|
|
supported: true
|
|
since: "3.4.0"
|
|
sdk_version: "1.0.0"
|
|
note: "RetryTask"
|
|
skipped:
|
|
supported: true
|
|
since: "3.4.0"
|
|
sdk_version: "1.0.0"
|
|
note: "a TriggerDagRun task that skips an existing run"
|
|
deferred:
|
|
supported: true
|
|
since: "3.4.0"
|
|
sdk_version: "1.0.0"
|
|
note: "a TriggerDagRun task that waits with deferrable"
|
|
up_for_reschedule:
|
|
supported: false
|
|
note: "runtime does not emit RescheduleTask yet"
|
|
awaiting_input:
|
|
supported: false
|
|
note: "runtime does not emit AwaitInputTask yet"
|
|
removed:
|
|
supported: true
|
|
since: "3.4.0"
|
|
sdk_version: "1.0.0"
|
|
|
|
# Runtime capabilities apply to a task body in both authoring modes.
|
|
capabilities:
|
|
task-logging:
|
|
supported: true
|
|
since: "3.4.0"
|
|
sdk_version: "1.0.0"
|
|
note: "SLF4J + JPL bridged to the task log"
|
|
xcom-read-write:
|
|
supported: true
|
|
since: "3.4.0"
|
|
sdk_version: "1.0.0"
|
|
connection-read:
|
|
supported: true
|
|
since: "3.4.0"
|
|
sdk_version: "1.0.0"
|
|
variable-read-write:
|
|
supported: true
|
|
since: "3.4.0"
|
|
sdk_version: "1.0.0"
|
|
self-contained-bundle:
|
|
supported: true
|
|
since: "3.4.0"
|
|
sdk_version: "1.0.0"
|
|
note: "Airflow metadata embedded in the jar artifact"
|
|
retry-policy:
|
|
supported: false
|
|
note: "no task-facing retry-policy API yet"
|
|
task-state-store:
|
|
supported: true
|
|
since: "3.4.0"
|
|
sdk_version: "1.0.0"
|
|
note: "Client.getTaskStateStore() get/set/delete/clear"
|
|
asset-state-store:
|
|
supported: false
|
|
note: "no task-facing asset state-store API yet"
|
|
asset-event-emit:
|
|
supported: false
|
|
note: "runtime does not emit asset events yet"
|
|
asset-event-read:
|
|
supported: false
|
|
note: "no task-facing asset-event API yet"
|
|
object-store:
|
|
supported: false
|
|
note: "no object-storage API yet"
|
|
listeners:
|
|
supported: false
|
|
note: "no hook into the Python listener API, so a task emits no OpenLineage facets of its own"
|
|
# Dag definition: the whole Dag is declared in the SDK's language.
|
|
dag-definition-authoring:
|
|
supported: true
|
|
since: "3.4.0"
|
|
sdk_version: "1.0.0"
|
|
dag-args:
|
|
supported: true
|
|
since: "3.4.0"
|
|
sdk_version: "1.0.0"
|
|
task-args:
|
|
supported: true
|
|
since: "3.4.0"
|
|
sdk_version: "1.0.0"
|
|
dag-params:
|
|
supported: false
|
|
dag-callbacks:
|
|
supported: false
|
|
explicit-dependencies:
|
|
supported: true
|
|
since: "3.4.0"
|
|
sdk_version: "1.0.0"
|
|
note: "before / after, or @Airflow.Deps"
|
|
edge-labels:
|
|
supported: true
|
|
since: "3.4.0"
|
|
sdk_version: "1.0.0"
|
|
note: "Label.of(text).on(task)"
|
|
taskflow-dependencies:
|
|
supported: true
|
|
since: "3.4.0"
|
|
sdk_version: "1.0.0"
|
|
task-group:
|
|
supported: true
|
|
since: "3.4.0"
|
|
sdk_version: "1.0.0"
|
|
task-loops:
|
|
supported: false
|
|
if-else-branching:
|
|
supported: true
|
|
since: "3.4.0"
|
|
sdk_version: "1.0.0"
|
|
note: "DagDef.If or @Airflow.If"
|
|
switch-case-branching:
|
|
supported: true
|
|
since: "3.4.0"
|
|
sdk_version: "1.0.0"
|
|
note: "DagDef.Switch or @Airflow.Switch"
|
|
trigger-dag-run:
|
|
supported: true
|
|
since: "3.4.0"
|
|
sdk_version: "1.0.0"
|
|
note: "TriggerDagRun"
|
|
dynamic-dag-generation:
|
|
supported: true
|
|
since: "3.4.0"
|
|
sdk_version: "1.0.0"
|
|
human-in-the-loop:
|
|
supported: false
|
|
dag-test:
|
|
supported: false
|
|
asset-definition:
|
|
supported: false
|
|
asset-scheduling:
|
|
supported: false
|
|
# Python Dag with stub TaskHandler.
|
|
mixed-lang-stub-target:
|
|
supported: true
|
|
since: "3.4.0"
|
|
sdk_version: "1.0.0"
|
|
note: "@task.stub"
|
|
taskflow-binding:
|
|
supported: true
|
|
since: "3.4.0"
|
|
sdk_version: "1.0.0"
|
|
note: "mapped stubs excluded"
|
|
# Shared by both authoring modes, so declared once per mode.
|
|
mapped-tasks:
|
|
dag-definition:
|
|
supported: false
|
|
stub-task-handler:
|
|
supported: false
|
|
note: "Airflow does not bind arguments to mapped stubs yet"
|
|
asset-inlets-outlets:
|
|
dag-definition:
|
|
supported: false
|
|
stub-task-handler:
|
|
supported: false
|
|
note: "runtime does not report task outlets yet"
|
|
task-callbacks:
|
|
dag-definition:
|
|
supported: false
|
|
note: "no SDK-defined task callbacks"
|
|
stub-task-handler:
|
|
supported: false
|
|
note: "a Python-declared task callback does not run for a stub task"
|