- {chartValue && (
-
-
-
- )}
-
-
{chartValue?.value}
-
{chartValue?.label}
+ const legend = useMemo(() => {
+ return chartValues.map(chartValue => (
+
+ {chartValue && (
+
+
+ )}
+
+ {chartValue?.showValue && (
+ {chartValue?.value}
+ )}
+ {chartValue?.label}
- ))}
-
- );
+
+ ));
+ }, [chartValues]);
+ return
{legend}
;
};
const RegressionsStatus = ({
diff --git a/dashboard/src/components/Tabs/TreeDetails/TreeDetailsBuildTab.tsx b/dashboard/src/components/Tabs/TreeDetails/TreeDetailsBuildTab.tsx
index 6459b0c..f578c80 100644
--- a/dashboard/src/components/Tabs/TreeDetails/TreeDetailsBuildTab.tsx
+++ b/dashboard/src/components/Tabs/TreeDetails/TreeDetailsBuildTab.tsx
@@ -22,7 +22,7 @@ const TreeDetailsBuildTab = ({
const [filterBy, setFilterBy] = useState<'error' | 'success' | 'all'>('all');
const accordionContent = useMemo(() => {
return treeDetailsData?.builds.map(row => ({
- trigger: {
+ accordionData: {
...row,
config: row.config ?? '-',
compiler: row.compiler ?? '-',
@@ -37,19 +37,26 @@ const TreeDetailsBuildTab = ({
'-'
),
date: row.date?.split('T')[0],
+ testStatus: {
+ failTests: row.testStatus?.failTests,
+ errorTests: row.testStatus?.errorTests,
+ passTests: row.testStatus?.passTests,
+ skipTests: row.testStatus?.skipTests,
+ },
},
- content: <>>,
}));
}, [treeDetailsData?.builds]);
const filteredContent =
filterBy === 'error'
? accordionContent?.filter(
- row => row.trigger.buildErrors && row.trigger.buildErrors > 0,
+ row =>
+ row.accordionData.buildErrors && row.accordionData.buildErrors > 0,
)
: filterBy === 'success'
? accordionContent?.filter(
- row => row.trigger.status && row.trigger.status === 'valid',
+ row =>
+ row.accordionData.status && row.accordionData.status === 'valid',
)
: accordionContent;
@@ -69,17 +76,17 @@ const TreeDetailsBuildTab = ({
elements: [
{
value: treeDetailsData?.buildsSummary.valid ?? 0,
- label: 'Valid',
+ label:
,
color: Colors.Green,
},
{
value: treeDetailsData?.buildsSummary.invalid ?? 0,
- label: 'Invalid',
+ label:
,
color: Colors.Red,
},
{
value: treeDetailsData?.buildsSummary.null ?? 0,
- label: 'Null',
+ label:
,
color: Colors.Gray,
},
],
diff --git a/dashboard/src/routes/TreeDetails/TreeDetails.tsx b/dashboard/src/routes/TreeDetails/TreeDetails.tsx
index 303bfd1..23ff618 100644
--- a/dashboard/src/routes/TreeDetails/TreeDetails.tsx
+++ b/dashboard/src/routes/TreeDetails/TreeDetails.tsx
@@ -6,8 +6,8 @@ import { useTreeDetails } from '@/api/TreeDetails';
import TreeDetailsTab from '@/components/Tabs/TreeDetailsTab';
import { IListingItem } from '@/components/ListingItem/ListingItem';
import { ISummaryItem } from '@/components/Summary/Summary';
-import { AccordionItemBuildsTrigger } from '@/components/Accordion/Accordion';
import {
+ AccordionItemBuilds,
Results,
TTreeDetailsFilter,
TreeDetails as TreeDetailsType,
@@ -19,7 +19,7 @@ export interface ITreeDetails {
archs: ISummaryItem[];
configs: IListingItem[];
buildsSummary: Results;
- builds: AccordionItemBuildsTrigger[];
+ builds: AccordionItemBuilds[];
}
const TreeDetails = (): JSX.Element => {
@@ -58,16 +58,28 @@ const TreeDetails = (): JSX.Element => {
null: data.summary.builds.null,
};
- const buildsData: AccordionItemBuildsTrigger[] = Object.entries(
- data.builds,
- ).map(([, value]) => ({
- config: value.config_name,
- date: value.start_time,
- buildTime: value.duration,
- compiler: value.compiler,
- buildErrors: value.test_status?.error ?? 0,
- status: value.valid ? 'valid' : 'invalid',
- }));
+ const buildsData: AccordionItemBuilds[] = Object.entries(data.builds).map(
+ ([, value]) => ({
+ config: value.config_name,
+ date: value.start_time,
+ buildTime: value.duration,
+ compiler: value.compiler,
+ buildErrors: value.test_status?.error_tests ?? 0,
+ status: value.valid ? 'valid' : 'invalid',
+ testStatus: {
+ failTests: value.test_status?.fail_tests ?? 0,
+ passTests: value.test_status?.pass_tests ?? 0,
+ errorTests: value.test_status?.error_tests ?? 0,
+ skipTests: value.test_status?.skip_tests ?? 0,
+ },
+ buildLogs: value.log_url,
+ kernelConfig: value.config_url,
+ kernelImage: value.misc ? value.misc['kernel_type'] : undefined,
+ dtb: value.misc ? value.misc['dtb'] : undefined,
+ systemMap: value.misc ? value.misc['system_map'] : undefined,
+ modules: value.misc ? value.misc['modules'] : undefined,
+ }),
+ );
setTreeDetailsData({
archs: archData,
diff --git a/dashboard/src/types/tree/TreeDetails.tsx b/dashboard/src/types/tree/TreeDetails.tsx
index e0b9e17..e492a04 100644
--- a/dashboard/src/types/tree/TreeDetails.tsx
+++ b/dashboard/src/types/tree/TreeDetails.tsx
@@ -11,16 +11,44 @@ type TreeDetailsBuild = {
git_repository_branch: string;
git_repository_url: string;
test_status: {
- fail: number;
- error: number;
- miss: number;
- pass: number;
- done: number;
- skip: number;
- null: number;
- total: number;
+ fail_tests: number;
+ error_tests: number;
+ miss_tests: number;
+ pass_tests: number;
+ done_tests: number;
+ skip_tests: number;
+ null_tests: number;
+ total_tests: number;
};
- misc: JSON | null;
+ misc: ITreeDetailsMisc | null;
+};
+
+interface ITreeDetailsMisc {
+ kernel_type?: string;
+ dtb?: string;
+ modules?: string;
+ system_map?: string;
+}
+
+export type AccordionItemBuilds = {
+ config?: string;
+ compiler?: string;
+ date?: string;
+ buildErrors?: number;
+ buildTime?: string;
+ status?: 'valid' | 'invalid';
+ testStatus?: {
+ failTests: number;
+ errorTests: number;
+ passTests: number;
+ skipTests: number;
+ };
+ kernelImage?: string;
+ buildLogs?: string;
+ kernelConfig?: string;
+ dtb?: string;
+ systemMap?: string;
+ modules?: string;
};
export type TreeDetails = {