Skip to content

Commit

Permalink
feat(build-details-page): add status support
Browse files Browse the repository at this point in the history
Part of #1022
  • Loading branch information
murilx committed Mar 5, 2025
1 parent 98e646a commit e04ee2a
Show file tree
Hide file tree
Showing 10 changed files with 36 additions and 11 deletions.
7 changes: 7 additions & 0 deletions backend/kernelCI_app/helpers/build.py
Original file line number Diff line number Diff line change
@@ -1 +1,8 @@
import os

build_status_map = {True: "valid", False: "invalid", None: "null"}


def map_valid_status_field(field: str) -> str:
is_new_schema = os.getenv("SCHEMA_VERSION", "4") == "5"
return "status" if is_new_schema else "valid"
1 change: 1 addition & 0 deletions backend/kernelCI_app/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@ class Builds(models.Model):
log_url = models.TextField(blank=True, null=True)
log_excerpt = models.CharField(max_length=16384, blank=True, null=True)
valid = models.BooleanField(blank=True, null=True)
status = models.TextField(blank=True, null=True)
misc = models.JSONField(blank=True, null=True)

class Meta:
Expand Down
4 changes: 3 additions & 1 deletion backend/kernelCI_app/typeModels/commonDetails.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
Build__ConfigUrl,
Build__Compiler,
Build__Valid,
Build__Status,
Build__LogUrl,
Build__StartTime,
Build__Duration,
Expand Down Expand Up @@ -69,7 +70,8 @@ class BuildHistoryItem(BaseModel):
misc: Build__Misc
config_url: Build__ConfigUrl
compiler: Build__Compiler
valid: Build__Valid
valid: Build__Valid = None
status: Build__Status = None
duration: Build__Duration
log_url: Build__LogUrl
start_time: Build__StartTime
Expand Down
1 change: 1 addition & 0 deletions backend/kernelCI_app/typeModels/databases.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ class EnvironmentMisc(BaseModel):
type Build__ConfigName = Optional[str]
type Build__ConfigUrl = Optional[str]
type Build__Valid = Optional[bool]
type Build__Status = Optional[DatabaseStatusValues]
type Build__StartTime = Optional[datetime]
type Build__Duration = Optional[float]
type Build__Compiler = Optional[str]
Expand Down
3 changes: 2 additions & 1 deletion backend/kernelCI_app/views/buildDetailsView.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
from rest_framework.views import APIView
from rest_framework.response import Response
from pydantic import ValidationError
from kernelCI_app.helpers.build import map_valid_status_field


class BuildDetails(APIView):
Expand All @@ -26,7 +27,7 @@ def get(self, request, build_id: str) -> Response:
"config_name",
"config_url",
"log_url",
"valid",
map_valid_status_field("valid"),
"misc",
"input_files",
"output_files",
Expand Down
11 changes: 8 additions & 3 deletions dashboard/src/components/BuildDetails/BuildDetails.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@ const BuildDetails = ({
{
title: buildDetailsTitle,
subtitle: <ButtonOpenLogSheet setSheetToLog={setSheetToLog} />,
leftIcon: <StatusIcon status={data?.valid} />,
leftIcon: <StatusIcon status={data?.valid ?? data?.status} />,
eyebrow: formatMessage({ id: 'buildDetails.buildDetails' }),
subsections: [
{
Expand Down Expand Up @@ -173,8 +173,13 @@ const BuildDetails = ({
},
{
title: 'global.status',
linkText: getBuildStatus(data.valid).toUpperCase(),
icon: <StatusIcon status={data?.valid} className="text-xl" />,
linkText: getBuildStatus(data.valid, data.status).toUpperCase(),
icon: (
<StatusIcon
status={data?.valid ?? data.status}
className="text-xl"
/>
),
},
{
title: 'global.architecture',
Expand Down
3 changes: 3 additions & 0 deletions dashboard/src/types/tree/BuildDetails.tsx
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import type { Status } from '@/types/database';

export type TBuildDetails = {
timestamp: string;
id: string;
Expand All @@ -7,6 +9,7 @@ export type TBuildDetails = {
comment?: string;
config_name?: string;
valid?: boolean;
status?: Status;
start_time?: string;
duration?: string;
compiler?: string;
Expand Down
2 changes: 1 addition & 1 deletion dashboard/src/types/tree/TreeDetails.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ export type AccordionItemBuilds = {
date?: string;
buildErrors?: number;
buildTime?: string | ReactNode;
status: 'pass' | 'fail' | 'null';
status: Status;
kernelImage?: string;
buildLogs?: string;
kernelConfig?: string;
Expand Down
4 changes: 2 additions & 2 deletions dashboard/src/utils/status.ts
Original file line number Diff line number Diff line change
Expand Up @@ -41,9 +41,9 @@ export const getBuildStatusGroup = (
buildStatus: AccordionItemBuilds['status'],
): StatusGroups => {
switch (buildStatus) {
case 'pass':
case 'PASS':
return 'success';
case 'fail':
case 'FAIL':
return 'failed';
default:
return 'inconclusive';
Expand Down
11 changes: 8 additions & 3 deletions dashboard/src/utils/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import type {
StatusCount,
} from '@/types/general';
import type { ISummaryItem } from '@/components/Tabs/Summary';
import type { Status } from '@/types/database';

import { valueOrEmpty } from '@/lib/string';

Expand Down Expand Up @@ -132,14 +133,18 @@ const isBuildError = (build_valid: boolean | null): number => {

export const getBuildStatus = (
build_valid?: boolean | null,
build_status?: Status,
): AccordionItemBuilds['status'] => {
if (build_status !== undefined && build_status !== null) {
return build_status;
}
if (build_valid === true) {
return 'pass';
return 'PASS';
}
if (build_valid === false) {
return 'fail';
return 'FAIL';
}
return 'null';
return 'NULL';
};

export const sanitizeBuilds = (
Expand Down

0 comments on commit e04ee2a

Please sign in to comment.