This is an automated email from the ASF dual-hosted git repository.
choo121600 pushed a commit to branch v3-3-test
in repository https://gitbox.apache.org/repos/asf/airflow.git
The following commit(s) were added to refs/heads/v3-3-test by this push:
new 1d6dd85bd1a [v3-3-test] Hide run-on-latest-version option for
non-versioned bundles (#70427) (#70702)
1d6dd85bd1a is described below
commit 1d6dd85bd1a15a342881b87a344f5b0681c54dcb
Author: github-actions[bot]
<41898282+github-actions[bot]@users.noreply.github.com>
AuthorDate: Thu Jul 30 14:16:07 2026 +0900
[v3-3-test] Hide run-on-latest-version option for non-versioned bundles
(#70427) (#70702)
* UI: Hide "run with latest bundle version" clear option for non-versioned
bundles
* UI: Preserve DAG-version check for run-on-latest visibility
* UI: Use run bundle_version directly, fix comment and Dag naming
(cherry picked from commit 690d43da8c472785165fcce2cc622255da03d944)
Co-authored-by: WonYong Jang <[email protected]>
---
.../ui/src/components/Clear/Run/ClearRunDialog.tsx | 21 +++++++++++++--------
.../Clear/TaskInstance/runOnLatestVersion.test.ts | 17 +++++++++++++----
.../Clear/TaskInstance/runOnLatestVersion.ts | 3 ++-
3 files changed, 28 insertions(+), 13 deletions(-)
diff --git
a/airflow-core/src/airflow/ui/src/components/Clear/Run/ClearRunDialog.tsx
b/airflow-core/src/airflow/ui/src/components/Clear/Run/ClearRunDialog.tsx
index 425ce9f8236..c864f0b047c 100644
--- a/airflow-core/src/airflow/ui/src/components/Clear/Run/ClearRunDialog.tsx
+++ b/airflow-core/src/airflow/ui/src/components/Clear/Run/ClearRunDialog.tsx
@@ -24,6 +24,7 @@ import { CgRedo } from "react-icons/cg";
import { useDagServiceGetDagDetails } from "openapi/queries";
import type { DAGRunResponse } from "openapi/requests/types.gen";
import { ActionAccordion } from "src/components/ActionAccordion";
+import { getRunOnLatestVersionState } from
"src/components/Clear/TaskInstance/runOnLatestVersion";
import { useRerunWithLatestVersion } from
"src/components/Clear/useRerunWithLatestVersion";
import { Checkbox, Dialog } from "src/components/ui";
import SegmentedControl from "src/components/ui/SegmentedControl";
@@ -91,14 +92,18 @@ const ClearRunDialog = ({ dagRun, onClose, open }: Props)
=> {
onSuccessConfirm: handleClose,
});
- // Check if DAG versions differ (works for both bundle-versioned and local
bundles)
- const latestDagVersionNumber =
dagDetails?.latest_dag_version?.version_number;
- const dagRunVersionNumber = dagRun.dag_versions.at(-1)?.version_number;
- const versionsDiffer =
- latestDagVersionNumber !== undefined &&
- dagRunVersionNumber !== undefined &&
- latestDagVersionNumber !== dagRunVersionNumber;
- const shouldShowBundleVersionOption = versionsDiffer && !onlyNew;
+ // Non-versioned bundles (e.g. LocalDagBundle) always leave bundle_version
null and
+ // resolve to the latest serialized Dag at run time, so "run on latest" is a
no-op there.
+ // Offer it only when re-running on the latest would actually change the
outcome:
+ // the run's Dag version differs from the latest while the bundle is
versioned
+ // (latest bundle_version present), or the run's bundle version differs from
the latest.
+ const { shouldShowRunOnLatestOption } = getRunOnLatestVersionState({
+ latestBundleVersion: dagDetails?.bundle_version,
+ latestDagVersionNumber: dagDetails?.latest_dag_version?.version_number,
+ selectedBundleVersion: dagRun.bundle_version,
+ selectedDagVersionNumber: dagRun.dag_versions.at(-1)?.version_number,
+ });
+ const shouldShowBundleVersionOption = shouldShowRunOnLatestOption &&
!onlyNew;
return (
<Dialog.Root
diff --git
a/airflow-core/src/airflow/ui/src/components/Clear/TaskInstance/runOnLatestVersion.test.ts
b/airflow-core/src/airflow/ui/src/components/Clear/TaskInstance/runOnLatestVersion.test.ts
index 2936e2b9191..1f3d6ba4d3c 100644
---
a/airflow-core/src/airflow/ui/src/components/Clear/TaskInstance/runOnLatestVersion.test.ts
+++
b/airflow-core/src/airflow/ui/src/components/Clear/TaskInstance/runOnLatestVersion.test.ts
@@ -22,32 +22,41 @@ import { getRunOnLatestVersionState } from
"./runOnLatestVersion";
describe("getRunOnLatestVersionState", () => {
it.each([
+ {
+ expectedDagVersionsDiffer: true,
+ expectedShouldShowRunOnLatestOption: false,
+ latestDagVersionNumber: 3,
+ name: "does not show when Dag versions differ but no bundle version is
present (non-versioned bundle)",
+ selectedDagVersionNumber: 2,
+ },
{
expectedDagVersionsDiffer: true,
expectedShouldShowRunOnLatestOption: true,
+ latestBundleVersion: "bundle-b",
latestDagVersionNumber: 3,
- name: "shows and defaults on when DAG version numbers differ",
+ name: "shows when Dag versions differ on a versioned bundle even if the
run has no recorded bundle version",
+ selectedBundleVersion: null,
selectedDagVersionNumber: 2,
},
{
expectedDagVersionsDiffer: false,
expectedShouldShowRunOnLatestOption: false,
latestDagVersionNumber: 3,
- name: "does not show when DAG version numbers match and there is no
bundle difference",
+ name: "does not show when Dag version numbers match and there is no
bundle difference",
selectedDagVersionNumber: 3,
},
{
expectedDagVersionsDiffer: false,
expectedShouldShowRunOnLatestOption: false,
latestDagVersionNumber: undefined,
- name: "does not treat a missing latest DAG version number as different",
+ name: "does not treat a missing latest Dag version number as different",
selectedDagVersionNumber: 3,
},
{
expectedDagVersionsDiffer: false,
expectedShouldShowRunOnLatestOption: false,
latestDagVersionNumber: 3,
- name: "does not treat a missing selected DAG version number as
different",
+ name: "does not treat a missing selected Dag version number as
different",
selectedDagVersionNumber: undefined,
},
{
diff --git
a/airflow-core/src/airflow/ui/src/components/Clear/TaskInstance/runOnLatestVersion.ts
b/airflow-core/src/airflow/ui/src/components/Clear/TaskInstance/runOnLatestVersion.ts
index 7bbd2daf904..fa183b37d0c 100644
---
a/airflow-core/src/airflow/ui/src/components/Clear/TaskInstance/runOnLatestVersion.ts
+++
b/airflow-core/src/airflow/ui/src/components/Clear/TaskInstance/runOnLatestVersion.ts
@@ -55,6 +55,7 @@ export const getRunOnLatestVersionState = ({
return {
dagVersionsDiffer,
- shouldShowRunOnLatestOption: dagVersionsDiffer ||
shouldShowForBundleVersion,
+ shouldShowRunOnLatestOption:
+ (dagVersionsDiffer && hasBundleVersion(latestBundleVersion)) ||
shouldShowForBundleVersion,
};
};