You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airflow.apache.org by "rohan9446 (via GitHub)" <gi...@apache.org> on 2026/08/01 08:02:13 UTC
[PR] Separate JWT secret env var from the standard Airflow environment helper [airflow]
rohan9446 opened a new pull request, #70896:
URL: https://github.com/apache/airflow/pull/70896
`AIRFLOW__API_AUTH__JWT_SECRET` was rendered from inside the
`standard_airflow_environment` helper behind an `IncludeJwtSecret` flag, which
meant every component had to opt out of it explicitly with
`(merge (dict "IncludeJwtSecret" false) .)`.
This moves the variable into its own `jwt_secret_environment` helper, following
the shape of the existing `keda_airflow_environment` helper, and includes it
only in the two containers that actually need it — the API server and the
scheduler. Every other caller of `standard_airflow_environment` passes a plain
context again, and the `IncludeJwtSecret` context mutation is gone entirely.
What this changes:
- Removes the `IncludeJwtSecret` plumbing from `standard_airflow_environment`
and from all ten call sites.
- Makes secret exposure explicit at the API server and scheduler call sites
rather than implicit in a shared helper.
- Preserves the least-privilege behaviour introduced in #63204: migration/init
containers, workers, the triggerer and the DAG processor still do not receive
the raw signing secret.
- Adds regression coverage asserting the secret appears in the API server and
scheduler containers exactly once, and never in sidecars or init containers.
No behavioural change: the same containers receive the same variable, still
gated on `enableBuiltInSecretEnvVars.AIRFLOW__API_AUTH__JWT_SECRET`. The only
difference in rendered output is the position of the variable within the env
list, so the ordered assertion in `test_have_all_variables` is updated to match.
Tested locally with helm v3.21.3: `pytest chart/tests/helm_tests/` → 2108 passed.
closes: #70843
---
##### Was generative AI tooling used to co-author this PR?
- [X] Yes (please specify the tool below)
Generated-by: Claude (Cowork) following [the guidelines](https://github.com/apache/airflow/blob/main/contributing-docs/05_pull_requests.rst#gen-ai-assisted-contributions)
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@airflow.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] Separate JWT secret env var from the standard Airflow environment helper [airflow]
Posted by "rohan9446 (via GitHub)" <gi...@apache.org>.
rohan9446 commented on code in PR #70896:
URL: https://github.com/apache/airflow/pull/70896#discussion_r3699884135
##########
chart/tests/helm_tests/airflow_aux/test_airflow_common.py:
##########
@@ -396,6 +396,53 @@ def test_have_all_variables(self):
f"Wrong vars in {component}"
)
+ @pytest.mark.parametrize(
+ ("template", "main_container", "expected_jwt_secret"),
+ [
+ ("templates/api-server/api-server-deployment.yaml", "api-server", True),
+ ("templates/scheduler/scheduler-deployment.yaml", "scheduler", True),
+ ("templates/workers/worker-deployment.yaml", "worker", False),
+ ("templates/triggerer/triggerer-deployment.yaml", "triggerer", False),
+ ("templates/dag-processor/dag-processor-deployment.yaml", "dag-processor", False),
+ ],
+ )
+ def test_jwt_secret_only_injected_into_api_server_and_scheduler(
+ self, template, main_container, expected_jwt_secret
+ ):
+ docs = render_chart(show_only=[template])
+
+ containers = jmespath.search("spec.template.spec.containers", docs[0])
+ main = next(container for container in containers if container["name"] == main_container)
+ env_names = [env["name"] for env in main.get("env") or []]
+ assert env_names.count("AIRFLOW__API_AUTH__JWT_SECRET") == int(expected_jwt_secret)
+
+ # the secret must never leak into sidecars or init containers
+ others = [container for container in containers if container["name"] != main_container]
+ others += jmespath.search("spec.template.spec.initContainers", docs[0]) or []
+ for container in others:
+ other_env_names = [env["name"] for env in container.get("env") or []]
+ assert "AIRFLOW__API_AUTH__JWT_SECRET" not in other_env_names, (
+ f"JWT secret leaked into {container['name']}"
+ )
+
+ @pytest.mark.parametrize(
+ ("template", "main_container"),
+ [
+ ("templates/api-server/api-server-deployment.yaml", "api-server"),
+ ("templates/scheduler/scheduler-deployment.yaml", "scheduler"),
+ ],
+ )
+ def test_jwt_secret_can_be_disabled(self, template, main_container):
+ docs = render_chart(
+ values={"enableBuiltInSecretEnvVars": {"AIRFLOW__API_AUTH__JWT_SECRET": False}},
+ show_only=[template],
+ )
+
+ containers = jmespath.search("spec.template.spec.containers", docs[0])
+ main = next(container for container in containers if container["name"] == main_container)
+ env_names = [env["name"] for env in main.get("env") or []]
Review Comment:
Addressed, the main container environment names are now selected directly with jmespath.search.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@airflow.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] Separate JWT secret env var from the standard Airflow environment helper [airflow]
Posted by "Miretpl (via GitHub)" <gi...@apache.org>.
Miretpl merged PR #70896:
URL: https://github.com/apache/airflow/pull/70896
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@airflow.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] Separate JWT secret env var from the standard Airflow environment helper [airflow]
Posted by "Miretpl (via GitHub)" <gi...@apache.org>.
Miretpl commented on PR #70896:
URL: https://github.com/apache/airflow/pull/70896#issuecomment-5184298804
@rohan9446, could you create manual backport of it to `chart/v1-2x-test` branch?
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@airflow.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] Separate JWT secret env var from the standard Airflow environment helper [airflow]
Posted by "boring-cyborg[bot] (via GitHub)" <gi...@apache.org>.
boring-cyborg[bot] commented on PR #70896:
URL: https://github.com/apache/airflow/pull/70896#issuecomment-5150529980
Congratulations on your first Pull Request and welcome to the Apache Airflow community! If you have any issues or are unsure about any anything please check our [Contributors' Guide](https://github.com/apache/airflow/blob/main/contributing-docs/README.rst)
Here are some useful points:
- Pay attention to the quality of your code (ruff, mypy and type annotations). Our [prek-hooks]( https://github.com/apache/airflow/blob/main/contributing-docs/08_static_code_checks.rst#prerequisites-for-prek-hooks) will help you with that.
- In case of a new feature add useful documentation (in docstrings or in `docs/` directory). Adding a new operator? Check this short [guide](https://github.com/apache/airflow/blob/main/airflow-core/docs/howto/custom-operator.rst) Consider adding an example Dag that shows how users should use it.
- Consider using [Breeze environment](https://github.com/apache/airflow/blob/main/dev/breeze/doc/README.rst) for testing locally, it's a heavy docker but it ships with a working Airflow and a lot of integrations.
- Be patient and persistent. It might take some time to get a review or get the final approval from Committers.
- Please follow [ASF Code of Conduct](https://www.apache.org/foundation/policies/conduct) for all communication including (but not limited to) comments on Pull Requests, Mailing list and Slack.
- Be sure to read the [Airflow Coding style]( https://github.com/apache/airflow/blob/main/contributing-docs/05_pull_requests.rst#coding-style-and-best-practices).
- Always keep your Pull Requests rebased, otherwise your build might fail due to changes not related to your commits.
Apache Airflow is a community-driven project and together we are making it better 🚀.
In case of doubts contact the developers at:
Mailing List: dev@airflow.apache.org
Slack: https://s.apache.org/airflow-slack
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@airflow.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] Separate JWT secret env var from the standard Airflow environment helper [airflow]
Posted by "rohan9446 (via GitHub)" <gi...@apache.org>.
rohan9446 commented on code in PR #70896:
URL: https://github.com/apache/airflow/pull/70896#discussion_r3699887009
##########
chart/tests/helm_tests/airflow_aux/test_airflow_common.py:
##########
@@ -396,6 +396,53 @@ def test_have_all_variables(self):
f"Wrong vars in {component}"
)
+ @pytest.mark.parametrize(
+ ("template", "main_container", "expected_jwt_secret"),
+ [
+ ("templates/api-server/api-server-deployment.yaml", "api-server", True),
+ ("templates/scheduler/scheduler-deployment.yaml", "scheduler", True),
+ ("templates/workers/worker-deployment.yaml", "worker", False),
+ ("templates/triggerer/triggerer-deployment.yaml", "triggerer", False),
+ ("templates/dag-processor/dag-processor-deployment.yaml", "dag-processor", False),
+ ],
+ )
+ def test_jwt_secret_only_injected_into_api_server_and_scheduler(
+ self, template, main_container, expected_jwt_secret
+ ):
+ docs = render_chart(show_only=[template])
+
+ containers = jmespath.search("spec.template.spec.containers", docs[0])
+ main = next(container for container in containers if container["name"] == main_container)
+ env_names = [env["name"] for env in main.get("env") or []]
+ assert env_names.count("AIRFLOW__API_AUTH__JWT_SECRET") == int(expected_jwt_secret)
+
+ # the secret must never leak into sidecars or init containers
+ others = [container for container in containers if container["name"] != main_container]
+ others += jmespath.search("spec.template.spec.initContainers", docs[0]) or []
+ for container in others:
+ other_env_names = [env["name"] for env in container.get("env") or []]
+ assert "AIRFLOW__API_AUTH__JWT_SECRET" not in other_env_names, (
+ f"JWT secret leaked into {container['name']}"
+ )
+
+ @pytest.mark.parametrize(
+ ("template", "main_container"),
+ [
+ ("templates/api-server/api-server-deployment.yaml", "api-server"),
+ ("templates/scheduler/scheduler-deployment.yaml", "scheduler"),
+ ],
+ )
+ def test_jwt_secret_can_be_disabled(self, template, main_container):
Review Comment:
I removed the parametrization and now render both the API server and scheduler templates in a single test.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@airflow.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] Separate JWT secret env var from the standard Airflow environment helper [airflow]
Posted by "rohan9446 (via GitHub)" <gi...@apache.org>.
rohan9446 commented on code in PR #70896:
URL: https://github.com/apache/airflow/pull/70896#discussion_r3699885673
##########
chart/tests/helm_tests/airflow_aux/test_airflow_common.py:
##########
@@ -396,6 +396,53 @@ def test_have_all_variables(self):
f"Wrong vars in {component}"
)
+ @pytest.mark.parametrize(
+ ("template", "main_container", "expected_jwt_secret"),
+ [
+ ("templates/api-server/api-server-deployment.yaml", "api-server", True),
+ ("templates/scheduler/scheduler-deployment.yaml", "scheduler", True),
+ ("templates/workers/worker-deployment.yaml", "worker", False),
+ ("templates/triggerer/triggerer-deployment.yaml", "triggerer", False),
+ ("templates/dag-processor/dag-processor-deployment.yaml", "dag-processor", False),
+ ],
+ )
+ def test_jwt_secret_only_injected_into_api_server_and_scheduler(
Review Comment:
I split this into separate tests for components that should receive the JWT secret and components that should not.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@airflow.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] Separate JWT secret env var from the standard Airflow environment helper [airflow]
Posted by "Miretpl (via GitHub)" <gi...@apache.org>.
Miretpl commented on PR #70896:
URL: https://github.com/apache/airflow/pull/70896#issuecomment-5184270989
Congrats and welcome to the community!
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@airflow.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] Separate JWT secret env var from the standard Airflow environment helper [airflow]
Posted by "Miretpl (via GitHub)" <gi...@apache.org>.
Miretpl commented on code in PR #70896:
URL: https://github.com/apache/airflow/pull/70896#discussion_r3698776656
##########
chart/tests/helm_tests/airflow_aux/test_airflow_common.py:
##########
@@ -396,6 +396,53 @@ def test_have_all_variables(self):
f"Wrong vars in {component}"
)
+ @pytest.mark.parametrize(
+ ("template", "main_container", "expected_jwt_secret"),
+ [
+ ("templates/api-server/api-server-deployment.yaml", "api-server", True),
+ ("templates/scheduler/scheduler-deployment.yaml", "scheduler", True),
+ ("templates/workers/worker-deployment.yaml", "worker", False),
+ ("templates/triggerer/triggerer-deployment.yaml", "triggerer", False),
+ ("templates/dag-processor/dag-processor-deployment.yaml", "dag-processor", False),
+ ],
+ )
+ def test_jwt_secret_only_injected_into_api_server_and_scheduler(
+ self, template, main_container, expected_jwt_secret
+ ):
+ docs = render_chart(show_only=[template])
+
+ containers = jmespath.search("spec.template.spec.containers", docs[0])
+ main = next(container for container in containers if container["name"] == main_container)
+ env_names = [env["name"] for env in main.get("env") or []]
+ assert env_names.count("AIRFLOW__API_AUTH__JWT_SECRET") == int(expected_jwt_secret)
+
+ # the secret must never leak into sidecars or init containers
+ others = [container for container in containers if container["name"] != main_container]
+ others += jmespath.search("spec.template.spec.initContainers", docs[0]) or []
+ for container in others:
+ other_env_names = [env["name"] for env in container.get("env") or []]
+ assert "AIRFLOW__API_AUTH__JWT_SECRET" not in other_env_names, (
+ f"JWT secret leaked into {container['name']}"
+ )
+
+ @pytest.mark.parametrize(
+ ("template", "main_container"),
+ [
+ ("templates/api-server/api-server-deployment.yaml", "api-server"),
+ ("templates/scheduler/scheduler-deployment.yaml", "scheduler"),
+ ],
+ )
+ def test_jwt_secret_can_be_disabled(self, template, main_container):
+ docs = render_chart(
+ values={"enableBuiltInSecretEnvVars": {"AIRFLOW__API_AUTH__JWT_SECRET": False}},
+ show_only=[template],
+ )
+
+ containers = jmespath.search("spec.template.spec.containers", docs[0])
+ main = next(container for container in containers if container["name"] == main_container)
+ env_names = [env["name"] for env in main.get("env") or []]
Review Comment:
Could you move this logic to `jmespath.search`?
##########
chart/tests/helm_tests/airflow_aux/test_airflow_common.py:
##########
@@ -396,6 +396,53 @@ def test_have_all_variables(self):
f"Wrong vars in {component}"
)
+ @pytest.mark.parametrize(
+ ("template", "main_container", "expected_jwt_secret"),
+ [
+ ("templates/api-server/api-server-deployment.yaml", "api-server", True),
+ ("templates/scheduler/scheduler-deployment.yaml", "scheduler", True),
+ ("templates/workers/worker-deployment.yaml", "worker", False),
+ ("templates/triggerer/triggerer-deployment.yaml", "triggerer", False),
+ ("templates/dag-processor/dag-processor-deployment.yaml", "dag-processor", False),
+ ],
+ )
+ def test_jwt_secret_only_injected_into_api_server_and_scheduler(
+ self, template, main_container, expected_jwt_secret
+ ):
+ docs = render_chart(show_only=[template])
+
+ containers = jmespath.search("spec.template.spec.containers", docs[0])
+ main = next(container for container in containers if container["name"] == main_container)
+ env_names = [env["name"] for env in main.get("env") or []]
+ assert env_names.count("AIRFLOW__API_AUTH__JWT_SECRET") == int(expected_jwt_secret)
+
+ # the secret must never leak into sidecars or init containers
+ others = [container for container in containers if container["name"] != main_container]
+ others += jmespath.search("spec.template.spec.initContainers", docs[0]) or []
+ for container in others:
+ other_env_names = [env["name"] for env in container.get("env") or []]
+ assert "AIRFLOW__API_AUTH__JWT_SECRET" not in other_env_names, (
+ f"JWT secret leaked into {container['name']}"
+ )
+
+ @pytest.mark.parametrize(
+ ("template", "main_container"),
+ [
+ ("templates/api-server/api-server-deployment.yaml", "api-server"),
+ ("templates/scheduler/scheduler-deployment.yaml", "scheduler"),
+ ],
+ )
+ def test_jwt_secret_can_be_disabled(self, template, main_container):
Review Comment:
You don't really need the `template` parameter here.
##########
chart/tests/helm_tests/airflow_aux/test_airflow_common.py:
##########
@@ -396,6 +396,53 @@ def test_have_all_variables(self):
f"Wrong vars in {component}"
)
+ @pytest.mark.parametrize(
+ ("template", "main_container", "expected_jwt_secret"),
+ [
+ ("templates/api-server/api-server-deployment.yaml", "api-server", True),
+ ("templates/scheduler/scheduler-deployment.yaml", "scheduler", True),
+ ("templates/workers/worker-deployment.yaml", "worker", False),
+ ("templates/triggerer/triggerer-deployment.yaml", "triggerer", False),
+ ("templates/dag-processor/dag-processor-deployment.yaml", "dag-processor", False),
+ ],
+ )
+ def test_jwt_secret_only_injected_into_api_server_and_scheduler(
Review Comment:
I would split this test case into two: when you expect a secret and when you don't.
##########
chart/tests/helm_tests/airflow_aux/test_airflow_common.py:
##########
@@ -396,6 +396,53 @@ def test_have_all_variables(self):
f"Wrong vars in {component}"
)
+ @pytest.mark.parametrize(
+ ("template", "main_container", "expected_jwt_secret"),
+ [
+ ("templates/api-server/api-server-deployment.yaml", "api-server", True),
+ ("templates/scheduler/scheduler-deployment.yaml", "scheduler", True),
+ ("templates/workers/worker-deployment.yaml", "worker", False),
+ ("templates/triggerer/triggerer-deployment.yaml", "triggerer", False),
+ ("templates/dag-processor/dag-processor-deployment.yaml", "dag-processor", False),
+ ],
+ )
+ def test_jwt_secret_only_injected_into_api_server_and_scheduler(
+ self, template, main_container, expected_jwt_secret
+ ):
+ docs = render_chart(show_only=[template])
+
+ containers = jmespath.search("spec.template.spec.containers", docs[0])
+ main = next(container for container in containers if container["name"] == main_container)
+ env_names = [env["name"] for env in main.get("env") or []]
Review Comment:
Could you move this logic to `jmespath.search`?
##########
chart/tests/helm_tests/airflow_aux/test_airflow_common.py:
##########
@@ -396,6 +396,53 @@ def test_have_all_variables(self):
f"Wrong vars in {component}"
)
+ @pytest.mark.parametrize(
+ ("template", "main_container", "expected_jwt_secret"),
+ [
+ ("templates/api-server/api-server-deployment.yaml", "api-server", True),
+ ("templates/scheduler/scheduler-deployment.yaml", "scheduler", True),
+ ("templates/workers/worker-deployment.yaml", "worker", False),
+ ("templates/triggerer/triggerer-deployment.yaml", "triggerer", False),
+ ("templates/dag-processor/dag-processor-deployment.yaml", "dag-processor", False),
+ ],
+ )
+ def test_jwt_secret_only_injected_into_api_server_and_scheduler(
+ self, template, main_container, expected_jwt_secret
+ ):
+ docs = render_chart(show_only=[template])
+
+ containers = jmespath.search("spec.template.spec.containers", docs[0])
+ main = next(container for container in containers if container["name"] == main_container)
+ env_names = [env["name"] for env in main.get("env") or []]
+ assert env_names.count("AIRFLOW__API_AUTH__JWT_SECRET") == int(expected_jwt_secret)
+
+ # the secret must never leak into sidecars or init containers
+ others = [container for container in containers if container["name"] != main_container]
+ others += jmespath.search("spec.template.spec.initContainers", docs[0]) or []
+ for container in others:
+ other_env_names = [env["name"] for env in container.get("env") or []]
+ assert "AIRFLOW__API_AUTH__JWT_SECRET" not in other_env_names, (
+ f"JWT secret leaked into {container['name']}"
+ )
Review Comment:
Could you move this logic to `jmespath.search`?
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@airflow.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] Separate JWT secret env var from the standard Airflow environment helper [airflow]
Posted by "rohan9446 (via GitHub)" <gi...@apache.org>.
rohan9446 commented on PR #70896:
URL: https://github.com/apache/airflow/pull/70896#issuecomment-5185559504
Thanks @Miretpl! Backport is up: #71129
The automated one failed because `chart/v1-2x-test` still supports Airflow 2 alongside 3, the JWT block there carries an extra `semverCompare ">=3.0.0" .Values.airflowVersion` gate, there's no `keda_airflow_environment` helper to anchor the new define against, and the helm tests live under `helm-tests/tests/`. The version gate now sits inside `jwt_secret_environment`, so Airflow 2 rendering is unchanged. Full chart suite passes locally (3454 tests).
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@airflow.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] Separate JWT secret env var from the standard Airflow environment helper [airflow]
Posted by "boring-cyborg[bot] (via GitHub)" <gi...@apache.org>.
boring-cyborg[bot] commented on PR #70896:
URL: https://github.com/apache/airflow/pull/70896#issuecomment-5184267318
Awesome work, congrats on your first merged pull request! You are invited to check our [Issue Tracker](https://github.com/apache/airflow/issues) for additional contributions.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@airflow.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] Separate JWT secret env var from the standard Airflow environment helper [airflow]
Posted by "github-actions[bot] (via GitHub)" <gi...@apache.org>.
github-actions[bot] commented on PR #70896:
URL: https://github.com/apache/airflow/pull/70896#issuecomment-5184287496
### Backport failed to create: chart/v1-2x-test. View the failure log <a href='https://github.com/apache/airflow/actions/runs/30948152887'> Run details </a>
Note: As of [Merging PRs targeted for Airflow 3.X](https://github.com/apache/airflow/blob/main/dev/README_AIRFLOW3_DEV.md#merging-prs-targeted-for-airflow-3x)
the committer who merges the PR is responsible for backporting the PRs that are bug fixes (generally speaking) to the maintenance branches.
In matter of doubt please ask in [#release-management](https://apache-airflow.slack.com/archives/C03G9H97MM2) Slack channel.
<table>
<tr>
<th>Status</th>
<th>Branch</th>
<th>Result</th>
</tr>
<tr>
<td>❌</td>
<td>chart/v1-2x-test</td>
<td><a href="https://github.com/apache/airflow/commit/562cc3e243c756d25c1c1996c38ec7a480ce7b59"><img src='https://img.shields.io/badge/Commit-562cc3e-red' alt='Commit Link'></a></td>
</tr>
</table>
You can attempt to backport this manually by running:
```bash
cherry_picker 562cc3e chart/v1-2x-test
```
This should apply the commit to the chart/v1-2x-test branch and leave the commit in conflict state marking
the files that need manual conflict resolution.
After you have resolved the conflicts, you can continue the backport process by running:
```bash
cherry_picker --continue
```
If you don't have cherry-picker installed, see the [installation guide](https://github.com/apache/airflow/blob/main/dev/README.md#how-to-backport-pr-with-cherry-picker-cli).
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@airflow.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org