This is an automated email from the ASF dual-hosted git repository.

bbovenzi pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/airflow.git


The following commit(s) were added to refs/heads/main by this push:
     new 421a6da25bc UI: Add a Dag Run ID column to the Task Instances list 
(#74316)
421a6da25bc is described below

commit 421a6da25bc9b9af67e659fedccfda9a8f458a1a
Author: Yuseok Jo <[email protected]>
AuthorDate: Wed Oct 7 03:44:17 2026 +0900

    UI: Add a Dag Run ID column to the Task Instances list (#74316)
---
 .../src/pages/TaskInstances/TaskInstances.test.tsx | 23 ++++++++++++++++++++--
 .../ui/src/pages/TaskInstances/TaskInstances.tsx   | 11 +++++++++++
 2 files changed, 32 insertions(+), 2 deletions(-)

diff --git 
a/airflow-core/src/airflow/ui/src/pages/TaskInstances/TaskInstances.test.tsx 
b/airflow-core/src/airflow/ui/src/pages/TaskInstances/TaskInstances.test.tsx
index 3c2f36beef0..6882d95e61f 100644
--- a/airflow-core/src/airflow/ui/src/pages/TaskInstances/TaskInstances.test.tsx
+++ b/airflow-core/src/airflow/ui/src/pages/TaskInstances/TaskInstances.test.tsx
@@ -18,6 +18,7 @@
  */
 import type { ReactNode } from "react";
 
+import "@testing-library/jest-dom/vitest";
 import { render, screen } from "@testing-library/react";
 import type * as ReactI18Next from "react-i18next";
 import type * as ReactRouterDom from "react-router-dom";
@@ -84,14 +85,18 @@ vi.mock("src/components/DataTable", () => ({
     }>;
     readonly data: ReadonlyArray<TaskInstanceResponse>;
   }) => {
-    const renderedMapIndexColumn = columns.find((column) => column.accessorKey 
=== "rendered_map_index");
+    const renderedColumns = columns.filter(
+      (column) => column.accessorKey === "rendered_map_index" || 
column.accessorKey === "dag_run_id",
+    );
 
     return (
       <table>
         <tbody>
           {data.map((taskInstance) => (
             <tr key={`${taskInstance.task_id}-${taskInstance.map_index}`}>
-              <td>{renderedMapIndexColumn?.cell?.({ row: { original: 
taskInstance } })}</td>
+              {renderedColumns.map((column) => (
+                <td key={column.accessorKey}>{column.cell?.({ row: { original: 
taskInstance } })}</td>
+              ))}
             </tr>
           ))}
         </tbody>
@@ -168,4 +173,18 @@ describe("TaskInstances", () => {
 
     expect(screen.queryByRole("link")).not.toBeInTheDocument();
   });
+
+  it("links task instances to their Dag run from the Dag run ID column", () => 
{
+    mockParams = {};
+    vi.mocked(useTaskInstanceServiceGetTaskInstances).mockReturnValue(
+      getTaskInstancesResponse([mappedTaskInstance]),
+    );
+
+    render(<TaskInstances />, { wrapper: Wrapper });
+
+    expect(screen.getByRole("link", { name: 
"manual__2026-06-07T00:00:00+00:00" })).toHaveAttribute(
+      "href",
+      "/dags/example_dag/runs/manual__2026-06-07T00:00:00+00:00",
+    );
+  });
 });
diff --git 
a/airflow-core/src/airflow/ui/src/pages/TaskInstances/TaskInstances.tsx 
b/airflow-core/src/airflow/ui/src/pages/TaskInstances/TaskInstances.tsx
index 2e978b13fbb..a6b0d5bbd78 100644
--- a/airflow-core/src/airflow/ui/src/pages/TaskInstances/TaskInstances.tsx
+++ b/airflow-core/src/airflow/ui/src/pages/TaskInstances/TaskInstances.tsx
@@ -140,6 +140,16 @@ const taskInstanceColumns = ({
             ),
           header: translate("dagRun_one"),
         },
+        {
+          accessorKey: "dag_run_id",
+          cell: ({ row: { original } }: TaskInstanceRow) => (
+            <RouterLink 
to={`/dags/${original.dag_id}/runs/${original.dag_run_id}`}>
+              <TruncatedText text={original.dag_run_id} />
+            </RouterLink>
+          ),
+          enableSorting: false,
+          header: translate("dagRunId"),
+        },
       ]),
   ...(Boolean(taskId)
     ? []
@@ -279,6 +289,7 @@ export const TaskInstances = () => {
 
   const { setTableURLState, tableURLState } = useTableURLState({
     columnVisibility: {
+      dag_run_id: false,
       dag_version: false,
       end_date: false,
       executor: false,

Reply via email to