Skip to content

Commit 96fadb9

Browse files
committed
Link Koji builds from TF detail if present
Fixes #512 Assisted-by: Cursor(Claude)
1 parent 3d61013 commit 96fadb9

File tree

3 files changed

+85
-14
lines changed

3 files changed

+85
-14
lines changed

frontend/src/apiDefinitions.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -336,6 +336,7 @@ export interface TestingFarmRun {
336336
chroot: string;
337337
commit_sha: string;
338338
copr_build_ids: number[];
339+
koji_build_ids: number[];
339340
issue_id: number | null;
340341
non_git_upstream: boolean;
341342
pipeline_id: string; // UUID
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
// Copyright Contributors to the Packit project.
2+
// SPDX-License-Identifier: MIT
3+
4+
import {
5+
DataListCell,
6+
DataListItem,
7+
DataListItemCells,
8+
DataListItemRow,
9+
} from "@patternfly/react-core";
10+
import { queryOptions, useQuery } from "@tanstack/react-query";
11+
import React from "react";
12+
import { kojiBuildQueryOptions } from "../../queries/koji/kojiBuildQuery";
13+
import { StatusLabel } from "../statusLabels/StatusLabel";
14+
15+
interface KojiDataListItemProps {
16+
id: number;
17+
}
18+
19+
export const KojiDataListItem: React.FC<KojiDataListItemProps> = ({ id }) => {
20+
const { data, isError } = useQuery(
21+
queryOptions({
22+
...kojiBuildQueryOptions({ id: id.toString() }),
23+
}),
24+
);
25+
26+
if (isError) {
27+
return <></>;
28+
}
29+
30+
return (
31+
<DataListItem key={`koji-${id}-item`}>
32+
<DataListItemRow key={`koji-${id}-row`}>
33+
<DataListItemCells
34+
dataListCells={[
35+
<DataListCell key={1}>
36+
<StatusLabel
37+
target={data?.chroot}
38+
status={data ? data.status : "unknown"}
39+
link={`/jobs/koji/${id}`}
40+
/>
41+
</DataListCell>,
42+
]}
43+
></DataListItemCells>
44+
</DataListItemRow>
45+
</DataListItem>
46+
);
47+
};

frontend/src/components/testing-farm/TestingFarmRun.tsx

Lines changed: 37 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import { Timestamp } from "../shared/Timestamp";
2626
import { StatusLabel } from "../statusLabels/StatusLabel";
2727
import { TriggerLink, TriggerSuffix } from "../trigger/TriggerLink";
2828
import { CoprDataListItem } from "./CoprDataListItem";
29+
import { KojiDataListItem } from "./KojiDataListItem";
2930

3031
export const TestingFarmRun = () => {
3132
const { id } = TestingFarmRoute.useParams();
@@ -34,11 +35,15 @@ export const TestingFarmRun = () => {
3435
testingFarmRunQueryOptions({ id }),
3536
);
3637
const [coprBuildIds, setCoprBuildIds] = useState<number[]>([]);
38+
const [kojiBuildIds, setKojiBuildIds] = useState<number[]>([]);
3739

3840
useEffect(() => {
3941
if (data && "copr_build_ids" in data) {
4042
setCoprBuildIds(data?.copr_build_ids.filter((copr) => copr !== null));
4143
}
44+
if (data && "koji_build_ids" in data) {
45+
setKojiBuildIds(data?.koji_build_ids.filter((koji) => koji !== null));
46+
}
4247
}, [data]);
4348

4449
// If backend API is down
@@ -129,20 +134,38 @@ export const TestingFarmRun = () => {
129134
</DescriptionListGroup>
130135
</DescriptionList>
131136
</CardBody>
132-
<CardBody>
133-
<DescriptionList>
134-
<DescriptionListGroup>
135-
<DescriptionListTerm>Copr Build(s)</DescriptionListTerm>
136-
<DescriptionListDescription>
137-
<DataList aria-label="Copr builds">
138-
{coprBuildIds.map((coprId) => (
139-
<CoprDataListItem id={coprId} key={coprId} />
140-
))}
141-
</DataList>
142-
</DescriptionListDescription>
143-
</DescriptionListGroup>
144-
</DescriptionList>
145-
</CardBody>
137+
{coprBuildIds.length > 0 && (
138+
<CardBody>
139+
<DescriptionList>
140+
<DescriptionListGroup>
141+
<DescriptionListTerm>Copr Build(s)</DescriptionListTerm>
142+
<DescriptionListDescription>
143+
<DataList aria-label="Copr builds">
144+
{coprBuildIds.map((coprId) => (
145+
<CoprDataListItem id={coprId} key={coprId} />
146+
))}
147+
</DataList>
148+
</DescriptionListDescription>
149+
</DescriptionListGroup>
150+
</DescriptionList>
151+
</CardBody>
152+
)}
153+
{kojiBuildIds.length > 0 && (
154+
<CardBody>
155+
<DescriptionList>
156+
<DescriptionListGroup>
157+
<DescriptionListTerm>Koji build(s)</DescriptionListTerm>
158+
<DescriptionListDescription>
159+
<DataList aria-label="Koji builds">
160+
{kojiBuildIds.map((kojiId) => (
161+
<KojiDataListItem id={kojiId} key={kojiId} />
162+
))}
163+
</DataList>
164+
</DescriptionListDescription>
165+
</DescriptionListGroup>
166+
</DescriptionList>
167+
</CardBody>
168+
)}
146169
</>
147170
)}
148171
</Card>

0 commit comments

Comments
 (0)